diff --git a/web/.github/pull_request_template.md b/web/.github/pull_request_template.md new file mode 100644 index 000000000..dba8023c4 --- /dev/null +++ b/web/.github/pull_request_template.md @@ -0,0 +1,3 @@ +## Description + +## Test Plan diff --git a/web/.github/workflows/l18n-crowdin.yml b/web/.github/workflows/l18n-crowdin.yml new file mode 100644 index 000000000..56dd07775 --- /dev/null +++ b/web/.github/workflows/l18n-crowdin.yml @@ -0,0 +1,37 @@ +name: Sync crowdin translation + +on: + push: + paths: # run action automatically when en-US/translation.json file is changed + - "apps/photos/public/locales/en-US/translation.json" + branches: [main] + schedule: + - cron: "0 */24 * * *" # Every 24 hours - https://crontab.guru/#0_*/12_*_*_* + workflow_dispatch: # for manually running the action + +jobs: + synchronize-with-crowdin: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: main + + - name: crowdin action + uses: crowdin/github-action@v1 + with: + upload_sources: true + upload_translations: true + download_translations: true + localization_branch_name: l10n_translations + create_pull_request: true + skip_untranslated_strings: true + pull_request_title: "New Translations" + pull_request_body: "New translations via [Crowdin GH Action](https://github.com/crowdin/github-action)" + pull_request_base_branch_name: "main" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} diff --git a/web/.github/workflows/pr.yml b/web/.github/workflows/pr.yml new file mode 100644 index 000000000..5af6d933b --- /dev/null +++ b/web/.github/workflows/pr.yml @@ -0,0 +1,13 @@ +name: Lint + +on: + # Run on every push (this also covers pull requests) + push: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: yarn install + - run: yarn lint diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 000000000..adcd3d880 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,14 @@ +# Node +node_modules/ + +# Next.js +.next/ +out/ +next-env.d.ts + +# macOS +.DS_Store + +# Local env files +.env +.env.*.local diff --git a/web/.gitmodules b/web/.gitmodules new file mode 100644 index 000000000..c83980baf --- /dev/null +++ b/web/.gitmodules @@ -0,0 +1,8 @@ +[submodule "apps/photos/thirdparty/ffmpeg-wasm"] + path = apps/photos/thirdparty/ffmpeg-wasm + url = https://github.com/abhinavkgrd/ffmpeg.wasm.git + branch = master +[submodule "apps/photos/thirdparty/photoswipe"] + path = apps/photos/thirdparty/photoswipe + url = https://github.com/ente-io/PhotoSwipe.git + branch = single-thread \ No newline at end of file diff --git a/web/.prettierignore b/web/.prettierignore new file mode 100644 index 000000000..602eea657 --- /dev/null +++ b/web/.prettierignore @@ -0,0 +1,3 @@ +thirdparty/ +public/ +*.md diff --git a/web/.prettierrc.json b/web/.prettierrc.json new file mode 100644 index 000000000..8b0652597 --- /dev/null +++ b/web/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "tabWidth": 4, + "plugins": [ + "prettier-plugin-organize-imports", + "prettier-plugin-packagejson" + ] +} diff --git a/web/LICENSE b/web/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/web/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/web/README.md b/web/README.md new file mode 100644 index 000000000..7cf20b013 --- /dev/null +++ b/web/README.md @@ -0,0 +1,103 @@ +# Ente – Simple, safe photo storage + +**Ente** is a cloud storage that provides end-to-end encryption for your data. + +We have open-source apps across +[Android](https://github.com/ente-io/photos-app), +[iOS](https://github.com/ente-io/photos-app), +[web](https://github.com/ente-io/photos-web) 👋 and +[desktop](https://github.com/ente-io/photos-desktop) that automatically backup +your photos and videos. + +This repository contains the code for our web app, built with a lot of ❤️, and a +little bit of TypeScript. + +


+ +![App Screenshots](https://user-images.githubusercontent.com/24503581/189914045-9d4e9c44-37c6-4ac6-9e17-d8c37aee1e08.png) + +## ✨ Features + +- Client side encryption (only you can view your photos and videos) +- Bulk uploader (from hard disk, Google Photos, Apple Photos, ...) +- Shareable links for albums +- Ability to filter photos by places, days, album and file names +- 2FA +- EXIF viewer +- Many, _many_ more features..., and, +- Zero third-party tracking / analytics + +
+ +## 💻 Production Application + +The app is deployed to [web.ente.io](https://web.ente.io) + +
+ +## 🧑‍💻 Building from source + +1. Clone this repository with `git clone https://github.com/ente-io/photos-web.git` +2. Pull in all submodules with `git submodule update --init --recursive` +3. Install dependencies with `yarn install` +4. Finally, run the development server with `yarn dev` + +Open [http://localhost:3000](http://localhost:3000) to see the live app (with +hot reload). + +`yarn dev` runs the photos app. To run the auth app, do `yarn dev:auth`. + +
+ +## 🙋 Help + +We provide human support to our customers. Please write to +[support@ente.io](mailto:support@ente.io) sharing as many details as possible +about whatever it is that you need help with, and we will get back to you as +soon as possible. + +
+ +## 🧭 Roadmap + +We maintain a [public roadmap](https://github.com/orgs/ente-io/projects/3) +driven by our community. + +
+ +## 🤗 Support + +If you like this project, please consider upgrading to a paid subscription. + +And [star this repo](https://github.com/ente-io/photos-web/stargazers)! + +
+ +## 🌍 Translate +[![Crowdin](https://badges.crowdin.net/ente-photos-web/localized.svg)](https://crowdin.com/project/ente-photos-web) + +If you're interested in helping out with translation, please visit our [Crowdin +project](https://crowdin.com/project/ente-photos-web) to get started. Thank you +for your support. + +
+ +## 🏙️ Attributions + +City coordinates from [Simple Maps](https://simplemaps.com/data/world-cities) + +
+ +## ❤️ Join the Community + +Join us on [Twitter](https://twitter.com/enteio) / +[Mastodon](https://mstdn.social/@ente) / +[Discord](https://discord.gg/z2YVKkycX3) / [Reddit](https://reddit.com/r/enteio) +to get regular updates, connect with other customers, and discuss your ideas. + +An important part of our journey is to build better software by consistently +listening to our customers. Please feel free to [share your +thoughts](mailto:feedback@ente.io) with us at any time. + +
+ diff --git a/web/SECURITY.md b/web/SECURITY.md new file mode 100644 index 000000000..1642c8307 --- /dev/null +++ b/web/SECURITY.md @@ -0,0 +1,44 @@ +ente believes that working with security researchers across the globe is crucial to keeping our +users safe. If you believe you've found a security issue in our product or service, we encourage you to +notify us (security@ente.io). We welcome working with you to resolve the issue promptly. Thanks in advance! + +# Disclosure Policy + +- Let us know as soon as possible upon discovery of a potential security issue, and we'll make every + effort to quickly resolve the issue. +- Provide us a reasonable amount of time to resolve the issue before any disclosure to the public or a + third-party. We may publicly disclose the issue before resolving it, if appropriate. +- Make a good faith effort to avoid privacy violations, destruction of data, and interruption or + degradation of our service. Only interact with accounts you own or with explicit permission of the + account holder. +- If you would like to encrypt your report, please use the PGP key with long ID + `E273695C0403F34F74171932DF6DDDE98EBD2394` (available in the public keyserver pool). + +# In-scope + +- Security issues in any current release of ente. This includes the web app, desktop app, + and mobile apps (iOS and Android). Product downloads are available at https://ente.io. Source + code is available at https://github.com/ente-io. + +# Exclusions + +The following bug classes are out-of scope: + +- Bugs that are already reported on any of ente's issue trackers (https://github.com/ente-io), + or that we already know of. Note that some of our issue tracking is private. +- Issues in an upstream software dependency (ex: Flutter, Next.js etc) which are already reported to the upstream maintainer. +- Attacks requiring physical access to a user's device. +- Self-XSS +- Issues related to software or protocols not under ente's control +- Vulnerabilities in outdated versions of ente +- Missing security best practices that do not directly lead to a vulnerability +- Issues that do not have any impact on the general public + +While researching, we'd like to ask you to refrain from: + +- Denial of service +- Spamming +- Social engineering (including phishing) of ente staff or contractors +- Any physical attempts against ente property or data centers + +Thank you for helping keep ente and our users safe! diff --git a/web/apps/accounts/.eslintrc.js b/web/apps/accounts/.eslintrc.js new file mode 100644 index 000000000..b1c4c2e16 --- /dev/null +++ b/web/apps/accounts/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + // When root is set to true, ESLint will stop looking for configuration files in parent directories. + // This is required here to ensure desktop picks the right eslint config, where this app is + // packaged as a submodule. + root: true, + extends: ["@ente/eslint-config"], + parser: "@typescript-eslint/parser", + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.json", + }, + ignorePatterns: [".eslintrc.js", "out"], +}; diff --git a/web/apps/accounts/next.config.js b/web/apps/accounts/next.config.js new file mode 100644 index 000000000..cffaafdd3 --- /dev/null +++ b/web/apps/accounts/next.config.js @@ -0,0 +1,11 @@ +const nextConfigBase = require("@/next/next.config.base.js"); + +module.exports = { + ...nextConfigBase, + images: { + unoptimized: true, + }, + experimental: { + externalDir: true, + }, +}; diff --git a/web/apps/accounts/package.json b/web/apps/accounts/package.json new file mode 100644 index 000000000..3136b0e80 --- /dev/null +++ b/web/apps/accounts/package.json @@ -0,0 +1,11 @@ +{ + "name": "accounts", + "version": "0.0.0", + "private": true, + "dependencies": { + "@/next": "*", + "@ente/accounts": "*", + "@ente/eslint-config": "*", + "@ente/shared": "*" + } +} diff --git a/web/apps/accounts/public/favicon.ico b/web/apps/accounts/public/favicon.ico new file mode 100644 index 000000000..4570eb8d9 Binary files /dev/null and b/web/apps/accounts/public/favicon.ico differ diff --git a/web/apps/accounts/public/fonts/OFL.txt b/web/apps/accounts/public/fonts/OFL.txt new file mode 100644 index 000000000..ad214842c --- /dev/null +++ b/web/apps/accounts/public/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/web/apps/accounts/public/fonts/inter-v11-latin-500.woff b/web/apps/accounts/public/fonts/inter-v11-latin-500.woff new file mode 100644 index 000000000..a5b7c7a2a Binary files /dev/null and b/web/apps/accounts/public/fonts/inter-v11-latin-500.woff differ diff --git a/web/apps/accounts/public/fonts/inter-v11-latin-500.woff2 b/web/apps/accounts/public/fonts/inter-v11-latin-500.woff2 new file mode 100644 index 000000000..0e3db59fe Binary files /dev/null and b/web/apps/accounts/public/fonts/inter-v11-latin-500.woff2 differ diff --git a/web/apps/accounts/public/fonts/inter-v11-latin-600.woff b/web/apps/accounts/public/fonts/inter-v11-latin-600.woff new file mode 100644 index 000000000..03c1df0b8 Binary files /dev/null and b/web/apps/accounts/public/fonts/inter-v11-latin-600.woff differ diff --git a/web/apps/accounts/public/fonts/inter-v11-latin-600.woff2 b/web/apps/accounts/public/fonts/inter-v11-latin-600.woff2 new file mode 100644 index 000000000..3eef889ee Binary files /dev/null and b/web/apps/accounts/public/fonts/inter-v11-latin-600.woff2 differ diff --git a/web/apps/accounts/public/fonts/inter-v11-latin-800.woff b/web/apps/accounts/public/fonts/inter-v11-latin-800.woff new file mode 100644 index 000000000..feb91cc1d Binary files /dev/null and b/web/apps/accounts/public/fonts/inter-v11-latin-800.woff differ diff --git a/web/apps/accounts/public/fonts/inter-v11-latin-800.woff2 b/web/apps/accounts/public/fonts/inter-v11-latin-800.woff2 new file mode 100644 index 000000000..595bcec65 Binary files /dev/null and b/web/apps/accounts/public/fonts/inter-v11-latin-800.woff2 differ diff --git a/web/apps/accounts/public/images/ente-circular.png b/web/apps/accounts/public/images/ente-circular.png new file mode 100644 index 000000000..49043f934 Binary files /dev/null and b/web/apps/accounts/public/images/ente-circular.png differ diff --git a/web/apps/accounts/public/images/ente.svg b/web/apps/accounts/public/images/ente.svg new file mode 100644 index 000000000..33bd74256 --- /dev/null +++ b/web/apps/accounts/public/images/ente.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/apps/accounts/public/images/favicon.png b/web/apps/accounts/public/images/favicon.png new file mode 100644 index 000000000..2d769dadf Binary files /dev/null and b/web/apps/accounts/public/images/favicon.png differ diff --git a/web/apps/accounts/public/locales/en/translation.json b/web/apps/accounts/public/locales/en/translation.json new file mode 100644 index 000000000..6870df319 --- /dev/null +++ b/web/apps/accounts/public/locales/en/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private backups
for your memories
", + "HERO_SLIDE_1": "End-to-end encrypted by default", + "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", + "HERO_SLIDE_2": "Designed to outlive", + "HERO_SLIDE_3_TITLE": "
Available
everywhere
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Login", + "SIGN_UP": "Signup", + "NEW_USER": "New to ente", + "EXISTING_USER": "Existing user", + "ENTER_NAME": "Enter name", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Add a name so that your friends know who to thank for these great photos!", + "ENTER_EMAIL": "Enter email address", + "EMAIL_ERROR": "Enter a valid email", + "REQUIRED": "Required", + "EMAIL_SENT": "Verification code sent to {{email}}", + "CHECK_INBOX": "Please check your inbox (and spam) to complete verification", + "ENTER_OTT": "Verification code", + "RESEND_MAIL": "Resend code", + "VERIFY": "Verify", + "UNKNOWN_ERROR": "Something went wrong, please try again", + "INVALID_CODE": "Invalid verification code", + "EXPIRED_CODE": "Your verification code has expired", + "SENDING": "Sending...", + "SENT": "Sent!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Enter password to unlock the album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Set password", + "VERIFY_PASSPHRASE": "Sign in", + "INCORRECT_PASSPHRASE": "Incorrect password", + "ENTER_ENC_PASSPHRASE": "Please enter a password that we can use to encrypt your data", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "Welcome to ", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Where your best photos live", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generating encryption keys...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Confirm password", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Passwords don't match", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "New album", + "ENTER_ALBUM_NAME": "Album name", + "CLOSE_OPTION": "Close (Esc)", + "ENTER_FILE_NAME": "File name", + "CLOSE": "Close", + "NO": "No", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Upload", + "IMPORT": "Import", + "ADD_PHOTOS": "Add photos", + "ADD_MORE_PHOTOS": "Add more photos", + "add_photos_one": "Add 1 item", + "add_photos_other": "Add {{count, number}} items", + "SELECT_PHOTOS": "Select photos", + "FILE_UPLOAD": "File Upload", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparing to upload", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Backup complete" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Subscription expired", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Storage limit exceeded", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Don't have an account", + "ACCOUNT_EXISTS": "Already have an account", + "CREATE": "Create", + "DOWNLOAD": "Download", + "DOWNLOAD_OPTION": "Download (D)", + "DOWNLOAD_FAVORITES": "Download favorites", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copy as PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Upload your first photo", + "IMPORT_YOUR_FOLDERS": "Import your folders", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Delete files?", + "TRASH_FILE_TITLE": "Delete file?", + "DELETE_FILES_TITLE": "Delete immediately?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Delete", + "DELETE_OPTION": "Delete (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "A single album", + "OR": "or", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Your session has expired, please login again to continue", + "SESSION_EXPIRED": "Session expired", + "PASSWORD_GENERATION_FAILED": "Your browser was unable to generate a strong key that meets ente's encryption standards, please try using the mobile app or another browser", + "CHANGE_PASSWORD": "Change password", + "GO_BACK": "Go back", + "RECOVERY_KEY": "Recovery key", + "SAVE_LATER": "Do this later", + "SAVE": "Save Key", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Forgot password", + "RECOVER_ACCOUNT": "Recover account", + "RECOVERY_KEY_HINT": "Recovery key", + "RECOVER": "Recover", + "NO_RECOVERY_KEY": "No recovery key?", + "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", + "CONTACT_SUPPORT": "Contact support", + "REQUEST_FEATURE": "Request Feature", + "SUPPORT": "Support", + "CONFIRM": "Confirm", + "CANCEL": "Cancel", + "LOGOUT": "Logout", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Are you sure you want to logout?", + "CHANGE_EMAIL": "Change email", + "OK": "OK", + "SUCCESS": "Success", + "ERROR": "Error", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Download desktop app", + "EXPORT": "Export Data", + "SUBSCRIPTION": "Subscription", + "SUBSCRIBE": "Subscribe", + "MANAGEMENT_PORTAL": "Manage payment method", + "MANAGE_FAMILY_PORTAL": "Manage family", + "LEAVE_FAMILY_PLAN": "Leave family plan", + "LEAVE": "Leave", + "LEAVE_FAMILY_CONFIRM": "Are you sure that you want to leave family plan?", + "CHOOSE_PLAN": "Choose your plan", + "MANAGE_PLAN": "Manage your subscription", + "ACTIVE": "Active", + "OFFLINE_MSG": "You are offline, cached memories are being shown", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "You are on a family plan managed by", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renews on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Ends on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Your subscription will be cancelled on {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "You have exceeded your storage quota, please upgrade", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Subscription purchase failed , please try again", + "SUBSCRIPTION_UPDATE_FAILED": "Subscription updated failed , please try again", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Update payment method", + "MONTHLY": "Monthly", + "YEARLY": "Yearly", + "UPDATE_SUBSCRIPTION_MESSAGE": "Are you sure you want to change your plan?", + "UPDATE_SUBSCRIPTION": "Change plan", + "CANCEL_SUBSCRIPTION": "Cancel subscription", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Reactivate subscription", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Rename", + "RENAME_FILE": "Rename file", + "RENAME_COLLECTION": "Rename album", + "DELETE_COLLECTION_TITLE": "Delete album?", + "DELETE_COLLECTION": "Delete album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Delete photos", + "KEEP_PHOTOS": "Keep photos", + "SHARE": "Share", + "SHARE_COLLECTION": "Share album", + "SHAREES": "Shared with", + "SHARE_WITH_SELF": "Oops, you cannot share with yourself", + "ALREADY_SHARED": "Oops, you're already sharing this with {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Search", + "SEARCH_RESULTS": "Search results", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Location", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "File name", + "THING": "Content", + "FILE_CAPTION": "Description", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No memories", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Add to album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "People", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "File name", + "CAPTION_PLACEHOLDER": "Add a description", + "LOCATION": "Location", + "SHOW_ON_MAP": "View on OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Two-factor", + "TWO_FACTOR_AUTHENTICATION": "Two-factor authentication", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Enter the code manually", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "Scan QR code instead", + "ENABLE_TWO_FACTOR": "Enable two-factor", + "ENABLE": "Enable", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Incorrect code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Export data", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Send OTP", + "EMAIl_ALREADY_OWNED": "Email already taken", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Failed uploads ", + "SKIPPED_FILES": "Ignored uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Skipped videos", + "INPROGRESS_METADATA_EXTRACTION": "In progress", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Large files", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Insufficient storage", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "These files were not uploaded as they exceed the maximum size limit for your storage plan", + "TOO_LARGE_INFO": "These files were not uploaded as they exceed our maximum file size limit", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archive", + "FAVORITES": "Favorites", + "ARCHIVE_COLLECTION": "Archive album", + "ARCHIVE_SECTION_NAME": "Archive", + "ALL_SECTION_NAME": "All", + "MOVE_TO_COLLECTION": "Move to album", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Move", + "ADD": "Add", + "REMOVE": "Remove", + "YES_REMOVE": "Yes, remove", + "REMOVE_FROM_COLLECTION": "Remove from album", + "TRASH": "Trash", + "MOVE_TO_TRASH": "Move to trash", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Delete permanently", + "RESTORE": "Restore", + "RESTORE_TO_COLLECTION": "Restore to album", + "EMPTY_TRASH": "Empty trash", + "EMPTY_TRASH_TITLE": "Empty trash?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Yes, leave", + "LEAVE_ALBUM": "Leave album", + "LEAVE_SHARED_ALBUM_TITLE": "Leave shared album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oldest", + "SORT_BY_UPDATION_TIME_DESCENDING": "Last updated", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Compress", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Install", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - not found", + "LINK_EXPIRED": "Link expired", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Folder", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "All Albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Create account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "You", + "FAMILY": "Family", + "FREE": "free", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB for 1 year", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authenticate", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Advanced", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "PREFERENCES": "Preferences", + "LANGUAGE": "Language", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "after an hour", + "DAY": "after a day", + "WEEK": "after a week", + "MONTH": "after a month", + "YEAR": "after a year" + }, + "COPY_LINK": "Copy link", + "DONE": "Done", + "LINK_SHARE_TITLE": "Or share a link", + "REMOVE_LINK": "Remove link", + "CREATE_PUBLIC_SHARING": "Create public link", + "PUBLIC_LINK_CREATED": "Public link created", + "PUBLIC_LINK_ENABLED": "Public link enabled", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/accounts/public/next.svg b/web/apps/accounts/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/web/apps/accounts/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/apps/accounts/public/vercel.svg b/web/apps/accounts/public/vercel.svg new file mode 100644 index 000000000..d2f842227 --- /dev/null +++ b/web/apps/accounts/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/apps/accounts/sentry.client.config.ts b/web/apps/accounts/sentry.client.config.ts new file mode 100644 index 000000000..c43273663 --- /dev/null +++ b/web/apps/accounts/sentry.client.config.ts @@ -0,0 +1,3 @@ +import { initSentry } from "@ente/shared/sentry/config/sentry.config.base"; + +initSentry("https://0f7214c7feb9b1dd2fed5db09b42fa1b@sentry.ente.io/5"); diff --git a/web/apps/accounts/sentry.edge.config.ts b/web/apps/accounts/sentry.edge.config.ts new file mode 100644 index 000000000..e69de29bb diff --git a/web/apps/accounts/sentry.properties b/web/apps/accounts/sentry.properties new file mode 100644 index 000000000..27c3a286f --- /dev/null +++ b/web/apps/accounts/sentry.properties @@ -0,0 +1,6 @@ +# This file is used by the SentryWebpackPlugin to upload sourcemaps when the +# SENTRY_AUTH_TOKEN environment variable is defined. + +defaults.url = https://sentry.ente.io/ +defaults.org = ente +defaults.project = web-photos diff --git a/web/apps/accounts/sentry.server.config.ts b/web/apps/accounts/sentry.server.config.ts new file mode 100644 index 000000000..e69de29bb diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx new file mode 100644 index 000000000..03d675a2f --- /dev/null +++ b/web/apps/accounts/src/pages/_app.tsx @@ -0,0 +1,136 @@ +import { setupI18n } from "@/ui/i18n"; +import { CacheProvider } from "@emotion/react"; +import { APPS, APP_TITLES } from "@ente/shared/apps/constants"; +import { EnteAppProps } from "@ente/shared/apps/types"; +import { Overlay } from "@ente/shared/components/Container"; +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import { + DialogBoxAttributesV2, + SetDialogBoxAttributesV2, +} from "@ente/shared/components/DialogBoxV2/types"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import AppNavbar from "@ente/shared/components/Navbar/app"; +import { useLocalState } from "@ente/shared/hooks/useLocalState"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { getTheme } from "@ente/shared/themes"; +import { THEME_COLOR } from "@ente/shared/themes/constants"; +import createEmotionCache from "@ente/shared/themes/createEmotionCache"; +import { CssBaseline, useMediaQuery } from "@mui/material"; +import { ThemeProvider } from "@mui/material/styles"; +import Head from "next/head"; +import { useRouter } from "next/router"; +import { createContext, useEffect, useState } from "react"; +import "styles/global.css"; + +interface AppContextProps { + isMobile: boolean; + showNavBar: (show: boolean) => void; + setDialogBoxAttributesV2: SetDialogBoxAttributesV2; +} + +export const AppContext = createContext({} as AppContextProps); + +// Client-side cache, shared for the whole session of the user in the browser. +const clientSideEmotionCache = createEmotionCache(); + +export default function App(props: EnteAppProps) { + const [isI18nReady, setIsI18nReady] = useState(false); + + const [showNavbar, setShowNavBar] = useState(false); + + const [dialogBoxAttributeV2, setDialogBoxAttributesV2] = + useState(); + + const [dialogBoxV2View, setDialogBoxV2View] = useState(false); + + useEffect(() => { + setDialogBoxV2View(true); + }, [dialogBoxAttributeV2]); + + const showNavBar = (show: boolean) => setShowNavBar(show); + + const isMobile = useMediaQuery("(max-width:428px)"); + + const router = useRouter(); + + const { + Component, + emotionCache = clientSideEmotionCache, + pageProps, + } = props; + + const [themeColor] = useLocalState(LS_KEYS.THEME, THEME_COLOR.DARK); + + useEffect(() => { + setupI18n().finally(() => setIsI18nReady(true)); + }, []); + + const setupPackageName = () => { + const pkg = getData(LS_KEYS.CLIENT_PACKAGE); + if (!pkg) return; + HTTPService.setHeaders({ + "X-Client-Package": pkg.name, + }); + }; + + useEffect(() => { + router.events.on("routeChangeComplete", setupPackageName); + return () => { + router.events.off("routeChangeComplete", setupPackageName); + }; + }, [router.events]); + + const closeDialogBoxV2 = () => setDialogBoxV2View(false); + + const theme = getTheme(themeColor, APPS.PHOTOS); + + // TODO: Localise APP_TITLES + return ( + + + {APP_TITLES.get(APPS.ACCOUNTS)} + + + + + + + + + {!isI18nReady && ( + ({ + display: "flex", + justifyContent: "center", + alignItems: "center", + zIndex: 2000, + backgroundColor: (theme as any).colors + .background.base, + })} + > + + + )} + {showNavbar && } + + + + + ); +} diff --git a/web/apps/accounts/src/pages/_document.tsx b/web/apps/accounts/src/pages/_document.tsx new file mode 100644 index 000000000..09d4d5782 --- /dev/null +++ b/web/apps/accounts/src/pages/_document.tsx @@ -0,0 +1,7 @@ +import DocumentPage, { + EnteDocumentProps, +} from "@ente/shared/next/pages/_document"; + +export default function Document(props: EnteDocumentProps) { + return ; +} diff --git a/web/apps/accounts/src/pages/account-handoff.tsx b/web/apps/accounts/src/pages/account-handoff.tsx new file mode 100644 index 000000000..fcb363960 --- /dev/null +++ b/web/apps/accounts/src/pages/account-handoff.tsx @@ -0,0 +1,59 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { ACCOUNTS_PAGES } from "@ente/shared/constants/pages"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { useRouter } from "next/router"; +import { useEffect } from "react"; + +const AccountHandoff = () => { + const router = useRouter(); + + const retrieveAccountData = () => { + try { + extractAccountsToken(); + + router.push(ACCOUNTS_PAGES.PASSKEYS); + } catch (e) { + logError(e, "Failed to deserialize and set passed user data"); + router.push(ACCOUNTS_PAGES.LOGIN); + } + }; + + const getClientPackageName = () => { + const urlParams = new URLSearchParams(window.location.search); + const pkg = urlParams.get("package"); + if (!pkg) return; + setData(LS_KEYS.CLIENT_PACKAGE, { name: pkg }); + HTTPService.setHeaders({ + "X-Client-Package": pkg, + }); + }; + + const extractAccountsToken = () => { + const urlParams = new URLSearchParams(window.location.search); + const token = urlParams.get("token"); + if (!token) { + throw new Error("token not found"); + } + + const user = getData(LS_KEYS.USER) || {}; + user.token = token; + + setData(LS_KEYS.USER, user); + }; + + useEffect(() => { + getClientPackageName(); + retrieveAccountData(); + }, []); + + return ( + + + + ); +}; + +export default AccountHandoff; diff --git a/web/apps/accounts/src/pages/credentials/index.tsx b/web/apps/accounts/src/pages/credentials/index.tsx new file mode 100644 index 000000000..453a61315 --- /dev/null +++ b/web/apps/accounts/src/pages/credentials/index.tsx @@ -0,0 +1,17 @@ +import CredentialPage from "@ente/accounts/pages/credentials"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { useContext } from "react"; +import { AppContext } from "../_app"; + +export default function Credential() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/pages/generate/index.tsx b/web/apps/accounts/src/pages/generate/index.tsx new file mode 100644 index 000000000..84d8f5227 --- /dev/null +++ b/web/apps/accounts/src/pages/generate/index.tsx @@ -0,0 +1,17 @@ +import GeneratePage from "@ente/accounts/pages/generate"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Generate() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/pages/index.tsx b/web/apps/accounts/src/pages/index.tsx new file mode 100644 index 000000000..f9538e05d --- /dev/null +++ b/web/apps/accounts/src/pages/index.tsx @@ -0,0 +1,13 @@ +import { useRouter } from "next/router"; +import { useEffect } from "react"; + +const Index = () => { + const router = useRouter(); + + useEffect(() => { + router.push("/login"); + }, []); + return <>; +}; + +export default Index; diff --git a/web/apps/accounts/src/pages/login/index.tsx b/web/apps/accounts/src/pages/login/index.tsx new file mode 100644 index 000000000..a6ca13492 --- /dev/null +++ b/web/apps/accounts/src/pages/login/index.tsx @@ -0,0 +1,17 @@ +import LoginPage from "@ente/accounts/pages/login"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { useContext } from "react"; +import { AppContext } from "../_app"; + +export default function Login() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/pages/passkeys/DeletePasskeyModal.tsx b/web/apps/accounts/src/pages/passkeys/DeletePasskeyModal.tsx new file mode 100644 index 000000000..f0feb0dbd --- /dev/null +++ b/web/apps/accounts/src/pages/passkeys/DeletePasskeyModal.tsx @@ -0,0 +1,74 @@ +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import EnteButton from "@ente/shared/components/EnteButton"; +import { Button, Stack, Typography } from "@mui/material"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext, useState } from "react"; +import { deletePasskey } from "services/passkeysService"; +import { PasskeysContext } from "."; + +interface IProps { + open: boolean; + onClose: () => void; +} + +const DeletePasskeyModal = (props: IProps) => { + const { isMobile } = useContext(AppContext); + const { selectedPasskey, setShowPasskeyDrawer } = + useContext(PasskeysContext); + + const [loading, setLoading] = useState(false); + + const doDelete = async () => { + if (!selectedPasskey) return; + setLoading(true); + try { + await deletePasskey(selectedPasskey.id); + } catch (error) { + console.error(error); + return; + } finally { + setLoading(false); + } + props.onClose(); + setShowPasskeyDrawer(false); + }; + + return ( + + + {t("DELETE_PASSKEY_CONFIRMATION")} + + {t("DELETE")} + + + + + ); +}; + +export default DeletePasskeyModal; diff --git a/web/apps/accounts/src/pages/passkeys/ManagePasskeyDrawer.tsx b/web/apps/accounts/src/pages/passkeys/ManagePasskeyDrawer.tsx new file mode 100644 index 000000000..4e9874875 --- /dev/null +++ b/web/apps/accounts/src/pages/passkeys/ManagePasskeyDrawer.tsx @@ -0,0 +1,101 @@ +import { EnteDrawer } from "@ente/shared/components/EnteDrawer"; +import InfoItem from "@ente/shared/components/Info/InfoItem"; +import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; +import MenuItemDivider from "@ente/shared/components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "@ente/shared/components/Menu/MenuItemGroup"; +import Titlebar from "@ente/shared/components/Titlebar"; +import { formatDateTimeFull } from "@ente/shared/time/format"; +import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; +import DeleteIcon from "@mui/icons-material/Delete"; +import EditIcon from "@mui/icons-material/Edit"; +import { Stack } from "@mui/material"; +import { t } from "i18next"; +import { useContext, useState } from "react"; +import { PasskeysContext } from "."; +import DeletePasskeyModal from "./DeletePasskeyModal"; +import RenamePasskeyModal from "./RenamePasskeyModal"; + +interface IProps { + open: boolean; +} + +const ManagePasskeyDrawer = (props: IProps) => { + const { setShowPasskeyDrawer, refreshPasskeys, selectedPasskey } = + useContext(PasskeysContext); + + const [showDeletePasskeyModal, setShowDeletePasskeyModal] = useState(false); + const [showRenamePasskeyModal, setShowRenamePasskeyModal] = useState(false); + + return ( + <> + { + setShowPasskeyDrawer(false); + }} + > + {selectedPasskey && ( + <> + + { + setShowPasskeyDrawer(false); + }} + title="Manage Passkey" + onRootClose={() => { + setShowPasskeyDrawer(false); + }} + /> + } + title={t("CREATED_AT")} + caption={ + `${formatDateTimeFull( + selectedPasskey.createdAt / 1000, + )}` || "" + } + loading={!selectedPasskey} + hideEditOption + /> + + { + setShowRenamePasskeyModal(true); + }} + startIcon={} + label={"Rename Passkey"} + /> + + { + setShowDeletePasskeyModal(true); + }} + startIcon={} + label={"Delete Passkey"} + color="critical" + /> + + + + )} + + { + setShowDeletePasskeyModal(false); + refreshPasskeys(); + }} + /> + { + setShowRenamePasskeyModal(false); + refreshPasskeys(); + }} + /> + + ); +}; + +export default ManagePasskeyDrawer; diff --git a/web/apps/accounts/src/pages/passkeys/PasskeyListItem.tsx b/web/apps/accounts/src/pages/passkeys/PasskeyListItem.tsx new file mode 100644 index 000000000..d38a22044 --- /dev/null +++ b/web/apps/accounts/src/pages/passkeys/PasskeyListItem.tsx @@ -0,0 +1,29 @@ +import { EnteMenuItem } from "@ente/shared/components/Menu/EnteMenuItem"; +import ChevronRightIcon from "@mui/icons-material/ChevronRight"; +import KeyIcon from "@mui/icons-material/Key"; +import { useContext } from "react"; +import { Passkey } from "types/passkey"; +import { PasskeysContext } from "."; + +interface IProps { + passkey: Passkey; +} + +const PasskeyListItem = (props: IProps) => { + const { setSelectedPasskey, setShowPasskeyDrawer } = + useContext(PasskeysContext); + + return ( + { + setSelectedPasskey(props.passkey); + setShowPasskeyDrawer(true); + }} + startIcon={} + endIcon={} + label={props.passkey?.friendlyName} + /> + ); +}; + +export default PasskeyListItem; diff --git a/web/apps/accounts/src/pages/passkeys/PasskeysList.tsx b/web/apps/accounts/src/pages/passkeys/PasskeysList.tsx new file mode 100644 index 000000000..fd2c1538b --- /dev/null +++ b/web/apps/accounts/src/pages/passkeys/PasskeysList.tsx @@ -0,0 +1,26 @@ +import MenuItemDivider from "@ente/shared/components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "@ente/shared/components/Menu/MenuItemGroup"; +import { Fragment } from "react"; +import { Passkey } from "types/passkey"; +import PasskeyListItem from "./PasskeyListItem"; + +interface IProps { + passkeys: Passkey[]; +} + +const PasskeyComponent = (props: IProps) => { + return ( + <> + + {props.passkeys?.map((passkey, i) => ( + + + {i < props.passkeys.length - 1 && } + + ))} + + + ); +}; + +export default PasskeyComponent; diff --git a/web/apps/accounts/src/pages/passkeys/RenamePasskeyModal.tsx b/web/apps/accounts/src/pages/passkeys/RenamePasskeyModal.tsx new file mode 100644 index 000000000..ad4f4a2f5 --- /dev/null +++ b/web/apps/accounts/src/pages/passkeys/RenamePasskeyModal.tsx @@ -0,0 +1,57 @@ +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import SingleInputForm from "@ente/shared/components/SingleInputForm"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import { renamePasskey } from "services/passkeysService"; +import { PasskeysContext } from "."; + +interface IProps { + open: boolean; + onClose: () => void; +} + +const RenamePasskeyModal = (props: IProps) => { + const { isMobile } = useContext(AppContext); + const { selectedPasskey } = useContext(PasskeysContext); + + const onSubmit = async (inputValue: string) => { + if (!selectedPasskey) return; + try { + await renamePasskey(selectedPasskey.id, inputValue); + } catch (error) { + console.error(error); + return; + } + + props.onClose(); + }; + + return ( + + + + ); +}; + +export default RenamePasskeyModal; diff --git a/web/apps/accounts/src/pages/passkeys/finish.tsx b/web/apps/accounts/src/pages/passkeys/finish.tsx new file mode 100644 index 000000000..11f03ee5c --- /dev/null +++ b/web/apps/accounts/src/pages/passkeys/finish.tsx @@ -0,0 +1,6 @@ +import PasskeysFinishPage from "@ente/accounts/pages/passkeys/finish"; +const PasskeysFinish = () => { + return ; +}; + +export default PasskeysFinish; diff --git a/web/apps/accounts/src/pages/passkeys/flow/index.tsx b/web/apps/accounts/src/pages/passkeys/flow/index.tsx new file mode 100644 index 000000000..61c56a97c --- /dev/null +++ b/web/apps/accounts/src/pages/passkeys/flow/index.tsx @@ -0,0 +1,301 @@ +import { APPS, CLIENT_PACKAGE_NAMES } from "@ente/shared/apps/constants"; +import { + CenteredFlex, + VerticallyCentered, +} from "@ente/shared/components/Container"; +import EnteButton from "@ente/shared/components/EnteButton"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, setData } from "@ente/shared/storage/localStorage"; +import InfoIcon from "@mui/icons-material/Info"; +import { Box, Typography } from "@mui/material"; +import { t } from "i18next"; +import _sodium from "libsodium-wrappers"; +import Image from "next/image"; +import { useEffect, useState } from "react"; +import { + BeginPasskeyAuthenticationResponse, + beginPasskeyAuthentication, + finishPasskeyAuthentication, +} from "services/passkeysService"; + +const PasskeysFlow = () => { + const [errored, setErrored] = useState(false); + + const [invalidInfo, setInvalidInfo] = useState(false); + + const [loading, setLoading] = useState(true); + + const init = async () => { + const searchParams = new URLSearchParams(window.location.search); + + // get redirect from the query params + const redirect = searchParams.get("redirect") as string; + + const redirectURL = new URL(redirect); + if (process.env.NEXT_PUBLIC_DISABLE_REDIRECT_CHECK !== "true") { + if ( + redirect !== "" && + !( + redirectURL.host.endsWith(".ente.io") || + redirectURL.host.endsWith("bada-frame.pages.dev") + ) && + redirectURL.protocol !== "ente:" && + redirectURL.protocol !== "enteauth:" + ) { + setInvalidInfo(true); + setLoading(false); + return; + } + } + + let pkg = CLIENT_PACKAGE_NAMES.get(APPS.PHOTOS); + if (redirectURL.protocol === "enteauth:") { + pkg = CLIENT_PACKAGE_NAMES.get(APPS.AUTH); + } else if (redirectURL.hostname.startsWith("accounts")) { + pkg = CLIENT_PACKAGE_NAMES.get(APPS.ACCOUNTS); + } + + setData(LS_KEYS.CLIENT_PACKAGE, { name: pkg }); + HTTPService.setHeaders({ + "X-Client-Package": pkg, + }); + + // get passkeySessionID from the query params + const passkeySessionID = searchParams.get("passkeySessionID") as string; + + setLoading(true); + + let beginData: BeginPasskeyAuthenticationResponse; + + try { + beginData = await beginAuthentication(passkeySessionID); + } catch (e) { + logError(e, "Couldn't begin passkey authentication"); + setErrored(true); + return; + } finally { + setLoading(false); + } + + let credential: Credential | null = null; + + let tries = 0; + const maxTries = 3; + + while (tries < maxTries) { + try { + credential = await getCredential(beginData.options.publicKey); + } catch (e) { + logError(e, "Couldn't get credential"); + continue; + } finally { + tries++; + } + + break; + } + + if (!credential) { + if (!isWebAuthnSupported()) { + alert("WebAuthn is not supported in this browser"); + } + setErrored(true); + return; + } + + setLoading(true); + + let finishData; + + try { + finishData = await finishAuthentication( + credential, + passkeySessionID, + beginData.ceremonySessionID, + ); + } catch (e) { + logError(e, "Couldn't finish passkey authentication"); + setErrored(true); + setLoading(false); + return; + } + + const encodedResponse = _sodium.to_base64(JSON.stringify(finishData)); + + window.location.href = `${redirect}?response=${encodedResponse}`; + }; + + const beginAuthentication = async (sessionId: string) => { + const data = await beginPasskeyAuthentication(sessionId); + return data; + }; + + function isWebAuthnSupported(): boolean { + if (!navigator.credentials) { + return false; + } + return true; + } + + const getCredential = async ( + publicKey: any, + timeoutMillis: number = 60000, // Default timeout of 60 seconds + ): Promise => { + publicKey.challenge = _sodium.from_base64( + publicKey.challenge, + _sodium.base64_variants.URLSAFE_NO_PADDING, + ); + publicKey.allowCredentials?.forEach(function (listItem: any) { + listItem.id = _sodium.from_base64( + listItem.id, + _sodium.base64_variants.URLSAFE_NO_PADDING, + ); + // note: we are orverwriting the transports array with all possible values. + // This is because the browser will only prompt the user for the transport that is available. + // Warning: In case of invalid transport value, the webauthn will fail on Safari & iOS browsers + listItem.transports = ["usb", "nfc", "ble", "internal"]; + }); + publicKey.timeout = timeoutMillis; + const publicKeyCredentialCreationOptions: CredentialRequestOptions = { + publicKey: publicKey, + }; + const credential = await navigator.credentials.get( + publicKeyCredentialCreationOptions, + ); + return credential; + }; + + const finishAuthentication = async ( + credential: Credential, + sessionId: string, + ceremonySessionId: string, + ) => { + const data = await finishPasskeyAuthentication( + credential, + sessionId, + ceremonySessionId, + ); + return data; + }; + + useEffect(() => { + init(); + }, []); + + if (loading) { + return ( + + + + ); + } + + if (invalidInfo) { + return ( + + + + + + {t("PASSKEY_LOGIN_FAILED")} + + + {t("PASSKEY_LOGIN_URL_INVALID")} + + + + + ); + } + + if (errored) { + return ( + + + + + + {t("PASSKEY_LOGIN_FAILED")} + + + {t("PASSKEY_LOGIN_ERRORED")} + + { + setErrored(false); + init(); + }} + fullWidth + style={{ + marginTop: "1rem", + }} + color="primary" + type="button" + variant="contained" + > + {t("TRY_AGAIN")} + + + + + ); + } + + return ( + <> + + + + + + {t("LOGIN_WITH_PASSKEY")} + + + {t("PASSKEY_FOLLOW_THE_STEPS_FROM_YOUR_BROWSER")} + + + ente Logo Circular + + + + + + ); +}; + +export default PasskeysFlow; diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx new file mode 100644 index 000000000..f41d8e3f2 --- /dev/null +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -0,0 +1,171 @@ +import { CenteredFlex } from "@ente/shared/components/Container"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import SingleInputForm from "@ente/shared/components/SingleInputForm"; +import { ACCOUNTS_PAGES } from "@ente/shared/constants/pages"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { Box, Typography } from "@mui/material"; +import { t } from "i18next"; +import _sodium from "libsodium-wrappers"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { + Dispatch, + SetStateAction, + createContext, + useContext, + useEffect, + useState, +} from "react"; +import { Passkey } from "types/passkey"; +import { + finishPasskeyRegistration, + getPasskeyRegistrationOptions, + getPasskeys, +} from "../../services/passkeysService"; +import ManagePasskeyDrawer from "./ManagePasskeyDrawer"; +import PasskeysList from "./PasskeysList"; + +export const PasskeysContext = createContext( + {} as { + selectedPasskey: Passkey | null; + setSelectedPasskey: Dispatch>; + setShowPasskeyDrawer: Dispatch>; + refreshPasskeys: () => void; + }, +); + +const Passkeys = () => { + const { showNavBar } = useContext(AppContext); + + const [selectedPasskey, setSelectedPasskey] = useState( + null, + ); + + const [showPasskeyDrawer, setShowPasskeyDrawer] = useState(false); + + const [passkeys, setPasskeys] = useState([]); + + const router = useRouter(); + + const checkLoggedIn = () => { + const token = getToken(); + if (!token) { + router.push(ACCOUNTS_PAGES.LOGIN); + } + }; + + const init = async () => { + checkLoggedIn(); + const data = await getPasskeys(); + setPasskeys(data.passkeys || []); + }; + + useEffect(() => { + showNavBar(true); + init(); + }, []); + + const handleSubmit = async ( + inputValue: string, + setFieldError: (errorMessage: string) => void, + resetForm: (nextState?: unknown) => void, + ) => { + let response: { + options: { + publicKey: PublicKeyCredentialCreationOptions; + }; + sessionID: string; + }; + + try { + response = await getPasskeyRegistrationOptions(); + } catch { + setFieldError("Failed to begin registration"); + return; + } + + const options = response.options; + + options.publicKey.challenge = _sodium.from_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + options.publicKey.challenge, + ); + options.publicKey.user.id = _sodium.from_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + options.publicKey.user.id, + ); + + // create new credential + let newCredential: Credential | null = null; + + try { + newCredential = await navigator.credentials.create(options); + } catch (e) { + logError(e, "Error creating credential"); + setFieldError("Failed to create credential"); + return; + } + + try { + await finishPasskeyRegistration( + inputValue, + newCredential, + response.sessionID, + ); + } catch { + setFieldError("Failed to finish registration"); + return; + } + + await init(); + resetForm(); + }; + + return ( + <> + + + + + {t("PASSKEYS_DESCRIPTION")} + + + + + + + + + + + + + ); +}; + +export default Passkeys; diff --git a/web/apps/accounts/src/pages/recover/index.tsx b/web/apps/accounts/src/pages/recover/index.tsx new file mode 100644 index 000000000..6f718a207 --- /dev/null +++ b/web/apps/accounts/src/pages/recover/index.tsx @@ -0,0 +1,17 @@ +import RecoverPage from "@ente/accounts/pages/recover"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Recover() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/pages/signup/index.tsx b/web/apps/accounts/src/pages/signup/index.tsx new file mode 100644 index 000000000..1e0f576a6 --- /dev/null +++ b/web/apps/accounts/src/pages/signup/index.tsx @@ -0,0 +1,17 @@ +import SignupPage from "@ente/accounts/pages/signup"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Sigup() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/pages/two-factor/recover/index.tsx b/web/apps/accounts/src/pages/two-factor/recover/index.tsx new file mode 100644 index 000000000..e6b2036fa --- /dev/null +++ b/web/apps/accounts/src/pages/two-factor/recover/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorRecoverPage from "@ente/accounts/pages/two-factor/recover"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorRecover() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/pages/two-factor/setup/index.tsx b/web/apps/accounts/src/pages/two-factor/setup/index.tsx new file mode 100644 index 000000000..f1b0e8f76 --- /dev/null +++ b/web/apps/accounts/src/pages/two-factor/setup/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorSetupPage from "@ente/accounts/pages/two-factor/setup"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorSetup() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/pages/two-factor/verify/index.tsx b/web/apps/accounts/src/pages/two-factor/verify/index.tsx new file mode 100644 index 000000000..b17882d3b --- /dev/null +++ b/web/apps/accounts/src/pages/two-factor/verify/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorVerifyPage from "@ente/accounts/pages/two-factor/verify"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorVerify() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/pages/verify/index.tsx b/web/apps/accounts/src/pages/verify/index.tsx new file mode 100644 index 000000000..467419d0a --- /dev/null +++ b/web/apps/accounts/src/pages/verify/index.tsx @@ -0,0 +1,17 @@ +import VerifyPage from "@ente/accounts/pages/verify"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Verify() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/accounts/src/services/passkeysService.ts b/web/apps/accounts/src/services/passkeysService.ts new file mode 100644 index 000000000..ecc6ad406 --- /dev/null +++ b/web/apps/accounts/src/services/passkeysService.ts @@ -0,0 +1,200 @@ +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import _sodium from "libsodium-wrappers"; +const ENDPOINT = getEndpoint(); + +export const getPasskeys = async () => { + try { + const token = getToken(); + if (!token) return; + const response = await HTTPService.get( + `${ENDPOINT}/passkeys`, + {}, + { "X-Auth-Token": token }, + ); + return await response.data; + } catch (e) { + logError(e, "get passkeys failed"); + throw e; + } +}; + +export const renamePasskey = async (id: string, name: string) => { + try { + const token = getToken(); + if (!token) return; + const response = await HTTPService.patch( + `${ENDPOINT}/passkeys/${id}`, + {}, + { friendlyName: name }, + { "X-Auth-Token": token }, + ); + return await response.data; + } catch (e) { + logError(e, "rename passkey failed"); + throw e; + } +}; + +export const deletePasskey = async (id: string) => { + try { + const token = getToken(); + if (!token) return; + const response = await HTTPService.delete( + `${ENDPOINT}/passkeys/${id}`, + {}, + {}, + { "X-Auth-Token": token }, + ); + return await response.data; + } catch (e) { + logError(e, "delete passkey failed"); + throw e; + } +}; + +export const getPasskeyRegistrationOptions = async () => { + try { + const token = getToken(); + if (!token) return; + const response = await HTTPService.get( + `${ENDPOINT}/passkeys/registration/begin`, + {}, + { + "X-Auth-Token": token, + }, + ); + return await response.data; + } catch (e) { + logError(e, "get passkey registration options failed"); + throw e; + } +}; + +export const finishPasskeyRegistration = async ( + friendlyName: string, + credential: Credential, + sessionId: string, +) => { + try { + const attestationObjectB64 = _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.attestationObject), + _sodium.base64_variants.URLSAFE_NO_PADDING, + ); + const clientDataJSONB64 = _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.clientDataJSON), + _sodium.base64_variants.URLSAFE_NO_PADDING, + ); + + const token = getToken(); + if (!token) return; + + const response = await HTTPService.post( + `${ENDPOINT}/passkeys/registration/finish`, + JSON.stringify({ + id: credential.id, + rawId: credential.id, + type: credential.type, + response: { + attestationObject: attestationObjectB64, + clientDataJSON: clientDataJSONB64, + }, + }), + { + friendlyName, + sessionID: sessionId, + }, + { + "X-Auth-Token": token, + }, + ); + return await response.data; + } catch (e) { + logError(e, "finish passkey registration failed"); + throw e; + } +}; + +export interface BeginPasskeyAuthenticationResponse { + ceremonySessionID: string; + options: Options; +} +interface Options { + publicKey: PublicKeyCredentialRequestOptions; +} + +export const beginPasskeyAuthentication = async ( + sessionId: string, +): Promise => { + try { + const data = await HTTPService.post( + `${ENDPOINT}/users/two-factor/passkeys/begin`, + { + sessionID: sessionId, + }, + ); + + return data.data; + } catch (e) { + logError(e, "begin passkey authentication failed"); + throw e; + } +}; + +export const finishPasskeyAuthentication = async ( + credential: Credential, + sessionId: string, + ceremonySessionId: string, +) => { + try { + const data = await HTTPService.post( + `${ENDPOINT}/users/two-factor/passkeys/finish`, + { + id: credential.id, + rawId: credential.id, + type: credential.type, + response: { + authenticatorData: _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.authenticatorData), + _sodium.base64_variants.URLSAFE_NO_PADDING, + ), + clientDataJSON: _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.clientDataJSON), + _sodium.base64_variants.URLSAFE_NO_PADDING, + ), + signature: _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.signature), + _sodium.base64_variants.URLSAFE_NO_PADDING, + ), + userHandle: _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.userHandle), + _sodium.base64_variants.URLSAFE_NO_PADDING, + ), + }, + }, + { + sessionID: sessionId, + ceremonySessionID: ceremonySessionId, + }, + ); + + return data.data; + } catch (e) { + logError(e, "finish passkey authentication failed"); + throw e; + } +}; diff --git a/web/apps/accounts/src/styles/global.css b/web/apps/accounts/src/styles/global.css new file mode 100644 index 000000000..0ea6c125d --- /dev/null +++ b/web/apps/accounts/src/styles/global.css @@ -0,0 +1,200 @@ +/* inter-regular - latin */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + src: + local(""), + url("/fonts/inter-v11-latin-500.woff2") format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("/fonts/inter-v11-latin-500.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; /*https://web.dev/font-display/?utm_source=lighthouse&utm_medium=devtools#how-to-avoid-showing-invisible-text*/ +} + +/* inter-600 - latin */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 700; + src: + local(""), + url("/fonts/inter-v11-latin-600.woff2") format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("/fonts/inter-v11-latin-600.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; +} + +/* inter-800 - latin */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: + local(""), + url("/fonts/inter-v11-latin-800.woff2") format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("/fonts/inter-v11-latin-800.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; +} + +html, +body { + min-height: 100vh; + height: 100vh; + flex: 1; + display: flex; + flex-direction: column; +} + +#__next { + flex: 1; + display: flex; + flex-direction: column; + min-height: 100vh; + height: 100vh; +} + +.pswp__button--custom { + width: 48px; + height: 48px; + background: none !important; + background-image: none !important; + color: #fff; +} + +.pswp__item video { + width: 100%; + height: 100%; +} + +.pswp-item-container { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + object-fit: contain; +} + +.pswp-item-container > * { + position: absolute; + transition: opacity 1s ease; + max-width: 100%; + max-height: 100%; +} + +.pswp-item-container > img { + opacity: 1; +} + +.pswp-item-container > video { + opacity: 0; +} + +.pswp-item-container > div.download-banner { + width: 100%; + height: 16vh; + padding: 2vh 0; + background-color: #151414; + color: #ddd; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; + opacity: 0.8; + font-size: 20px; +} + +.download-banner > a { + width: 130px; +} + +.pswp__img { + object-fit: contain; +} + +.pswp__button--arrow--left, +.pswp__button--arrow--right { + color: #fff; + background-color: #333333 !important; + border-radius: 50%; + width: 56px; + height: 56px; +} +.pswp__button--arrow--left::before, +.pswp__button--arrow--right::before { + background: none !important; +} + +.pswp__button--arrow--left { + margin-left: 20px; +} + +.pswp__button--arrow--right { + margin-right: 20px; +} + +.pswp-custom-caption-container { + width: 100%; + display: flex; + justify-content: flex-end; + bottom: 56px; + background-color: transparent !important; +} + +.pswp__caption--empty { + display: none; +} + +.bg-upload-progress-bar { + background-color: #51cd7c; +} + +.carousel-inner { + padding-bottom: 50px !important; +} + +.carousel-indicators li { + width: 10px; + height: 10px; + border-radius: 50%; + margin-right: 12px; +} + +.carousel-indicators .active { + background-color: #51cd7c; +} + +div.otp-input input { + width: 36px !important; + height: 36px; + margin: 0 10px; +} + +div.otp-input input::placeholder { + opacity: 0; +} + +div.otp-input input:not(:placeholder-shown), +div.otp-input input:focus { + border: 2px solid #51cd7c; + border-radius: 1px; + -webkit-transition: 0.5s; + transition: 0.5s; + outline: none; +} + +.flash-message { + padding: 16px; + display: flex; + align-items: center; +} + +@-webkit-keyframes rotation { + from { + -webkit-transform: rotate(0deg); + } + to { + -webkit-transform: rotate(359deg); + } +} diff --git a/web/apps/accounts/src/types/passkey.ts b/web/apps/accounts/src/types/passkey.ts new file mode 100644 index 000000000..3d05b5b91 --- /dev/null +++ b/web/apps/accounts/src/types/passkey.ts @@ -0,0 +1,6 @@ +export interface Passkey { + id: string; + userID: number; + friendlyName: string; + createdAt: number; +} diff --git a/web/apps/accounts/tsconfig.json b/web/apps/accounts/tsconfig.json new file mode 100644 index 000000000..cbdd32f74 --- /dev/null +++ b/web/apps/accounts/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./src", + "downlevelIteration": true, + "jsx": "preserve", + "jsxImportSource": "@emotion/react", + "lib": ["dom", "dom.iterable", "esnext", "webworker"], + "noImplicitAny": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "strictNullChecks": false, + "target": "es5", + "useUnknownInCatchVariables": false + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.js", + "../../packages/shared/themes/mui-theme.d.ts", + "../../packages/accounts/**/*.tsx" + ], + "exclude": ["node_modules", "out", ".next", "thirdparty"] +} diff --git a/web/apps/auth/.eslintrc.js b/web/apps/auth/.eslintrc.js new file mode 100644 index 000000000..b1c4c2e16 --- /dev/null +++ b/web/apps/auth/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + // When root is set to true, ESLint will stop looking for configuration files in parent directories. + // This is required here to ensure desktop picks the right eslint config, where this app is + // packaged as a submodule. + root: true, + extends: ["@ente/eslint-config"], + parser: "@typescript-eslint/parser", + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.json", + }, + ignorePatterns: [".eslintrc.js", "out"], +}; diff --git a/web/apps/auth/next.config.js b/web/apps/auth/next.config.js new file mode 100644 index 000000000..eea88bf93 --- /dev/null +++ b/web/apps/auth/next.config.js @@ -0,0 +1,3 @@ +const nextConfigBase = require("@/next/next.config.base.js"); + +module.exports = nextConfigBase; diff --git a/web/apps/auth/package.json b/web/apps/auth/package.json new file mode 100644 index 000000000..d21e1dc05 --- /dev/null +++ b/web/apps/auth/package.json @@ -0,0 +1,11 @@ +{ + "name": "auth", + "version": "0.0.0", + "private": true, + "dependencies": { + "@/next": "*", + "@ente/accounts": "*", + "@ente/eslint-config": "*", + "@ente/shared": "*" + } +} diff --git a/web/apps/auth/public/.well-known/apple-app-site-association b/web/apps/auth/public/.well-known/apple-app-site-association new file mode 100644 index 000000000..e05abb216 --- /dev/null +++ b/web/apps/auth/public/.well-known/apple-app-site-association @@ -0,0 +1,9 @@ +{ + "webcredentials": { + "apps": [ + "6Z68YJY9Q2.io.ente.frame", + "2BUSYC7FN9.io.ente.frame", + "2BUSYC7FN9.io.ente.auth" + ] + } +} diff --git a/web/apps/auth/public/.well-known/assetlinks.json b/web/apps/auth/public/.well-known/assetlinks.json new file mode 100644 index 000000000..cee8007fc --- /dev/null +++ b/web/apps/auth/public/.well-known/assetlinks.json @@ -0,0 +1,56 @@ +[ + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "photos-web", + "site": "https://web.ente.io" + } + }, + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "auth-web", + "site": "https://auth.ente.io" + } + }, + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "android_app", + "package_name": "io.ente.photos.independent", + "sha256_cert_fingerprints": [ + "35:ED:56:81:B7:0B:B3:BD:35:D9:0D:85:6A:F5:69:4C:50:4D:EF:46:AA:D8:3F:77:7B:1C:67:5C:F4:51:35:0B" + ] + } + }, + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "android_app", + "package_name": "io.ente.photos", + "sha256_cert_fingerprints": [ + "35:ED:56:81:B7:0B:B3:BD:35:D9:0D:85:6A:F5:69:4C:50:4D:EF:46:AA:D8:3F:77:7B:1C:67:5C:F4:51:35:0B" + ] + } + }, + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "android_app", + "package_name": "io.ente.auth", + "sha256_cert_fingerprints": [ + "DD:CE:AA:D6:88:F0:05:D3:40:68:94:BA:00:FC:E3:FF:82:54:13:0A:10:2B:B2:52:E6:3C:D8:EA:A9:72:B2:EF" + ] + } + } +] diff --git a/web/apps/auth/public/_headers b/web/apps/auth/public/_headers new file mode 100644 index 000000000..72dc5bb5c --- /dev/null +++ b/web/apps/auth/public/_headers @@ -0,0 +1,10 @@ +/* + Cache-Control: no-store, must-revalidate + Strict-Transport-Security: max-age=63072000 + X-Content-Type-Options: nosniff + X-Download-Options: noopen + X-Frame-Options: deny + X-XSS-Protection: 1; mode=block + Referrer-Policy: same-origin + Content-Security-Policy-Report-Only: default-src 'self'; img-src 'self' blob: data:; media-src 'self' blob:; style-src 'self' 'unsafe-inline'; font-src 'self'; script-src 'self' 'unsafe-eval' blob:; manifest-src 'self'; child-src 'self' blob:; object-src 'none'; connect-src 'self' https://*.ente.io data: blob: https://ente-prod-eu.s3.eu-central-003.backblazeb2.com https://ente-prod-v3.s3.eu-central-2.wasabisys.com/ ; base-uri 'self'; frame-ancestors 'none'; form-action 'none'; report-uri https://csp-reporter.ente.io; report-to https://csp-reporter.ente.io; + diff --git a/web/apps/auth/public/css/global.css b/web/apps/auth/public/css/global.css new file mode 100644 index 000000000..126b9f83d --- /dev/null +++ b/web/apps/auth/public/css/global.css @@ -0,0 +1,66 @@ +/* inter-regular - latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + src: local(''), url('/fonts/inter-v11-latin-500.woff2') format('woff2'), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('/fonts/inter-v11-latin-500.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; /*https://web.dev/font-display/?utm_source=lighthouse&utm_medium=devtools#how-to-avoid-showing-invisible-text*/ +} + +/* inter-600 - latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + src: local(''), url('/fonts/inter-v11-latin-600.woff2') format('woff2'), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('/fonts/inter-v11-latin-600.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; +} + +/* inter-800 - latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 900; + src: local(''), url('/fonts/inter-v11-latin-800.woff2') format('woff2'), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('/fonts/inter-v11-latin-800.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; +} + +html, +body { + height: 100%; + flex: 1; + display: flex; + flex-direction: column; +} + +#__next { + flex: 1; + display: flex; + flex-direction: column; +} + + +div.otp-input input { + width: 36px !important; + height: 36px; + margin: 0 10px; +} + +div.otp-input input::placeholder { + opacity: 0; +} + +div.otp-input input:not(:placeholder-shown), +div.otp-input input:focus { + border: 2px solid #51cd7c; + border-radius: 1px; + -webkit-transition: 0.5s; + transition: 0.5s; + outline: none; +} \ No newline at end of file diff --git a/web/apps/auth/public/fonts/OFL.txt b/web/apps/auth/public/fonts/OFL.txt new file mode 100644 index 000000000..ad214842c --- /dev/null +++ b/web/apps/auth/public/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/web/apps/auth/public/fonts/inter-v11-latin-500.woff b/web/apps/auth/public/fonts/inter-v11-latin-500.woff new file mode 100644 index 000000000..a5b7c7a2a Binary files /dev/null and b/web/apps/auth/public/fonts/inter-v11-latin-500.woff differ diff --git a/web/apps/auth/public/fonts/inter-v11-latin-500.woff2 b/web/apps/auth/public/fonts/inter-v11-latin-500.woff2 new file mode 100644 index 000000000..0e3db59fe Binary files /dev/null and b/web/apps/auth/public/fonts/inter-v11-latin-500.woff2 differ diff --git a/web/apps/auth/public/fonts/inter-v11-latin-600.woff b/web/apps/auth/public/fonts/inter-v11-latin-600.woff new file mode 100644 index 000000000..03c1df0b8 Binary files /dev/null and b/web/apps/auth/public/fonts/inter-v11-latin-600.woff differ diff --git a/web/apps/auth/public/fonts/inter-v11-latin-600.woff2 b/web/apps/auth/public/fonts/inter-v11-latin-600.woff2 new file mode 100644 index 000000000..3eef889ee Binary files /dev/null and b/web/apps/auth/public/fonts/inter-v11-latin-600.woff2 differ diff --git a/web/apps/auth/public/fonts/inter-v11-latin-800.woff b/web/apps/auth/public/fonts/inter-v11-latin-800.woff new file mode 100644 index 000000000..feb91cc1d Binary files /dev/null and b/web/apps/auth/public/fonts/inter-v11-latin-800.woff differ diff --git a/web/apps/auth/public/fonts/inter-v11-latin-800.woff2 b/web/apps/auth/public/fonts/inter-v11-latin-800.woff2 new file mode 100644 index 000000000..595bcec65 Binary files /dev/null and b/web/apps/auth/public/fonts/inter-v11-latin-800.woff2 differ diff --git a/web/apps/auth/public/images/auth/192.png b/web/apps/auth/public/images/auth/192.png new file mode 100644 index 000000000..7931c4e4e Binary files /dev/null and b/web/apps/auth/public/images/auth/192.png differ diff --git a/web/apps/auth/public/images/auth/256.png b/web/apps/auth/public/images/auth/256.png new file mode 100644 index 000000000..a58c577f9 Binary files /dev/null and b/web/apps/auth/public/images/auth/256.png differ diff --git a/web/apps/auth/public/images/auth/512.png b/web/apps/auth/public/images/auth/512.png new file mode 100644 index 000000000..446b46327 Binary files /dev/null and b/web/apps/auth/public/images/auth/512.png differ diff --git a/web/apps/auth/public/images/ente.svg b/web/apps/auth/public/images/ente.svg new file mode 100644 index 000000000..33bd74256 --- /dev/null +++ b/web/apps/auth/public/images/ente.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/apps/auth/public/images/favicon.png b/web/apps/auth/public/images/favicon.png new file mode 100644 index 000000000..5094464df Binary files /dev/null and b/web/apps/auth/public/images/favicon.png differ diff --git a/web/apps/auth/public/locales/de-DE/translation.json b/web/apps/auth/public/locales/de-DE/translation.json new file mode 100644 index 000000000..b09446dc8 --- /dev/null +++ b/web/apps/auth/public/locales/de-DE/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private Sicherungen
für deine Erinnerungen
", + "HERO_SLIDE_1": "Standardmäßig Ende-zu-Ende verschlüsselt", + "HERO_SLIDE_2_TITLE": "
Sicher gespeichert
in einem Luftschutzbunker
", + "HERO_SLIDE_2": "Entwickelt um zu bewahren", + "HERO_SLIDE_3_TITLE": "
Verfügbar
überall
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Anmelden", + "SIGN_UP": "Registrieren", + "NEW_USER": "Neu bei ente", + "EXISTING_USER": "Existierender Benutzer", + "ENTER_NAME": "Name eingeben", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Füge einen Namen hinzu, damit deine Freunde wissen, wem sie für diese tollen Fotos zu danken haben!", + "ENTER_EMAIL": "E-Mail-Adresse eingeben", + "EMAIL_ERROR": "Geben Sie eine gültige E-Mail-Adresse ein", + "REQUIRED": "Erforderlich", + "EMAIL_SENT": "Bestätigungscode an {{email}} gesendet", + "CHECK_INBOX": "Bitte überprüfe deinen E-Mail-Posteingang (und Spam), um die Verifizierung abzuschließen", + "ENTER_OTT": "Bestätigungscode", + "RESEND_MAIL": "Code erneut senden", + "VERIFY": "Überprüfen", + "UNKNOWN_ERROR": "Ein Fehler ist aufgetreten, bitte versuche es erneut", + "INVALID_CODE": "Falscher Bestätigungscode", + "EXPIRED_CODE": "Ihr Bestätigungscode ist abgelaufen", + "SENDING": "Wird gesendet...", + "SENT": "Gesendet!", + "PASSWORD": "Passwort", + "LINK_PASSWORD": "Passwort zum Entsperren des Albums eingeben", + "RETURN_PASSPHRASE_HINT": "Passwort", + "SET_PASSPHRASE": "Passwort setzen", + "VERIFY_PASSPHRASE": "Einloggen", + "INCORRECT_PASSPHRASE": "Falsches Passwort", + "ENTER_ENC_PASSPHRASE": "Bitte gib ein Passwort ein, mit dem wir deine Daten verschlüsseln können", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "Willkommen bei ", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Wo deine besten Fotos leben", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generierung von Verschlüsselungsschlüsseln...", + "PASSPHRASE_HINT": "Passwort", + "CONFIRM_PASSPHRASE": "Passwort bestätigen", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Die Passwörter stimmen nicht überein", + "CONSOLE_WARNING_STOP": "STOPP!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "Neues Album", + "ENTER_ALBUM_NAME": "Albumname", + "CLOSE_OPTION": "Schließen (Esc)", + "ENTER_FILE_NAME": "Dateiname", + "CLOSE": "Schließen", + "NO": "Nein", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Hochladen", + "IMPORT": "Importieren", + "ADD_PHOTOS": "Fotos hinzufügen", + "ADD_MORE_PHOTOS": "Mehr Fotos hinzufügen", + "add_photos_one": "Add 1 item", + "add_photos_other": "Add {{count, number}} items", + "SELECT_PHOTOS": "Foto auswählen", + "FILE_UPLOAD": "Datei hochladen", + "UPLOAD_STAGE_MESSAGE": { + "0": "Hochladen wird vorbereitet", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Sicherung abgeschlossen" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Abonnement abgelaufen", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Speichergrenze überschritten", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Don't have an account", + "ACCOUNT_EXISTS": "Already have an account", + "CREATE": "Erstellen", + "DOWNLOAD": "Herunterladen", + "DOWNLOAD_OPTION": "Herunterladen (D)", + "DOWNLOAD_FAVORITES": "Favoriten herunterladen", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Als PNG kopieren (Strg / Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Herein-/Herauszoomen", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Lade dein erstes Foto hoch", + "IMPORT_YOUR_FOLDERS": "Importiere deiner Ordner", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Dateien löschen?", + "TRASH_FILE_TITLE": "Datei löschen?", + "DELETE_FILES_TITLE": "Sofort löschen?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Löschen", + "DELETE_OPTION": "Löschen (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Ein einzelnes Album", + "OR": "oder", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Ihre Sitzung ist abgelaufen. Bitte loggen Sie sich erneut ein, um fortzufahren", + "SESSION_EXPIRED": "Sitzung abgelaufen", + "PASSWORD_GENERATION_FAILED": "Dein Browser konnte keinen starken Schlüssel generieren, der den Verschlüsselungsstandards des Entes entspricht, bitte versuche die mobile App oder einen anderen Browser zu verwenden", + "CHANGE_PASSWORD": "Passwort ändern", + "GO_BACK": "Zurück", + "RECOVERY_KEY": "Wiederherstellungsschlüssel", + "SAVE_LATER": "Auf später verschieben", + "SAVE": "Schlüssel speichern", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Passwort vergessen", + "RECOVER_ACCOUNT": "Konto wiederherstellen", + "RECOVERY_KEY_HINT": "Wiederherstellungsschlüssel", + "RECOVER": "Wiederherstellen", + "NO_RECOVERY_KEY": "Kein Wiederherstellungsschlüssel?", + "INCORRECT_RECOVERY_KEY": "Falscher Wiederherstellungs-Schlüssel", + "SORRY": "Entschuldigung", + "NO_RECOVERY_KEY_MESSAGE": "Aufgrund unseres Ende-zu-Ende-Verschlüsselungsprotokolls können Ihre Daten nicht ohne Ihr Passwort oder Ihren Wiederherstellungsschlüssel entschlüsselt werden", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Bitte sende eine E-Mail an {{emailID}} von deiner registrierten E-Mail-Adresse", + "CONTACT_SUPPORT": "Support kontaktieren", + "REQUEST_FEATURE": "Feature anfragen", + "SUPPORT": "Support", + "CONFIRM": "Bestätigen", + "CANCEL": "Abbrechen", + "LOGOUT": "Ausloggen", + "DELETE_ACCOUNT": "Konto löschen", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Sind sie sicher, dass sie sich ausloggen möchten?", + "CHANGE_EMAIL": "E-Mail-Adresse ändern", + "OK": "OK", + "SUCCESS": "Erfolgreich", + "ERROR": "Fehler", + "MESSAGE": "Nachricht", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Desktopanwendung herunterladen", + "EXPORT": "Daten exportieren", + "SUBSCRIPTION": "Abonnement", + "SUBSCRIBE": "Abonnieren", + "MANAGEMENT_PORTAL": "Zahlungsmethode verwalten", + "MANAGE_FAMILY_PORTAL": "Familiengruppe verwalten", + "LEAVE_FAMILY_PLAN": "Familienabo verlassen", + "LEAVE": "Verlassen", + "LEAVE_FAMILY_CONFIRM": "Bist du sicher, dass du den Familien-Tarif verlassen möchtest?", + "CHOOSE_PLAN": "Wähle dein Abonnement", + "MANAGE_PLAN": "Verwalte dein Abonnement", + "ACTIVE": "Aktiv", + "OFFLINE_MSG": "Du bist offline, gecachte Erinnerungen werden angezeigt", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Sie haben einen Familienplan verwaltet von", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Erneuert am {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Endet am {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Ihr Abo endet am {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Sie haben Ihr Speichervolumen überschritten, bitte upgraden Sie", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Kauf des Abonnements fehlgeschlagen Bitte versuchen Sie es erneut", + "SUBSCRIPTION_UPDATE_FAILED": "Aktualisierung des Abonnements fehlgeschlagen Bitte versuchen Sie es erneut", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Zahlungsmethode aktualisieren", + "MONTHLY": "Monatlich", + "YEARLY": "Jährlich", + "UPDATE_SUBSCRIPTION_MESSAGE": "Sind Sie sicher, dass Sie Ihren Tarif ändern möchten?", + "UPDATE_SUBSCRIPTION": "Plan ändern", + "CANCEL_SUBSCRIPTION": "Abonnement kündigen", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Abonnement reaktivieren", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Umbenennen", + "RENAME_FILE": "Datei umbenennen", + "RENAME_COLLECTION": "Album umbenennen", + "DELETE_COLLECTION_TITLE": "Album löschen?", + "DELETE_COLLECTION": "Album löschen", + "DELETE_COLLECTION_MESSAGE": "Auch die Fotos (und Videos) in diesem Album aus allen anderen Alben löschen, die sie enthalten?", + "DELETE_PHOTOS": "Fotos löschen", + "KEEP_PHOTOS": "Fotos behalten", + "SHARE": "Teilen", + "SHARE_COLLECTION": "Album teilen", + "SHAREES": "Geteilt mit", + "SHARE_WITH_SELF": "Du kannst nicht mit dir selbst teilen", + "ALREADY_SHARED": "Hoppla, Sie teilen dies bereits mit {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Album herunterladen", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Suchen", + "SEARCH_RESULTS": "Ergebnisse durchsuchen", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Standort", + "CITY": "Location", + "DATE": "Datum", + "FILE_NAME": "Dateiname", + "THING": "Inhalt", + "FILE_CAPTION": "Beschreibung", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "Keine Erinnerungen", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Zum Album hinzufügen", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "Personen", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "Dateiname", + "CAPTION_PLACEHOLDER": "Eine Beschreibung hinzufügen", + "LOCATION": "Standort", + "SHOW_ON_MAP": "In OpenStreetMap öffnen", + "MAP": "Karte", + "MAP_SETTINGS": "Karten\nEinstellungen", + "ENABLE_MAPS": "Karten aktivieren?", + "ENABLE_MAP": "Karte aktivieren", + "DISABLE_MAPS": "Karten deaktivieren?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Karte deaktivieren", + "DETAILS": "Details", + "VIEW_EXIF": "Alle EXIF-Daten anzeigen", + "NO_EXIF": "Keine EXIF-Daten", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Zwei-Faktor", + "TWO_FACTOR_AUTHENTICATION": "Zwei-Faktor-Authentifizierung", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Geben Sie den Code manuell ein", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "QR‐Code stattdessen scannen", + "ENABLE_TWO_FACTOR": "Zwei-Faktor-Authentifizierung aktivieren", + "ENABLE": "Aktivieren", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Falscher Code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Deaktiviere die Zwei-Faktor-Authentifizierung", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Deaktivieren", + "RECONFIGURE": "Neu einrichten", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Daten exportieren", + "SELECT_FOLDER": "Ordner auswählen", + "DESTINATION": "Zielort", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "OTP senden", + "EMAIl_ALREADY_OWNED": "Diese E-Mail wird bereits verwendet", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Fehlgeschlagene Uploads ", + "SKIPPED_FILES": "Ignorierte Uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Das Vorschaubild konnte nicht erzeugt werden", + "UNSUPPORTED_FILES": "Nicht unterstützte Dateien", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente unterstützt diese Dateiformate noch nicht", + "BLOCKED_UPLOADS": "Blockierte Uploads", + "SKIPPED_VIDEOS": "Übersprungene Videos", + "INPROGRESS_METADATA_EXTRACTION": "In Bearbeitung", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Große Dateien", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Zu wenig Speicher", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Diese Dateien wurden nicht hochgeladen, da sie die maximale Größe für Ihren Speicherplan überschreiten", + "TOO_LARGE_INFO": "Diese Dateien wurden nicht hochgeladen, da sie unsere maximale Dateigröße überschreiten", + "THUMBNAIL_GENERATION_FAILED_INFO": "Diese Dateien wurden hochgeladen, aber leider konnten wir nicht die Thumbnails für sie generieren.", + "UPLOAD_TO_COLLECTION": "In Album hochladen", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archiv", + "FAVORITES": "Favoriten", + "ARCHIVE_COLLECTION": "Album archivieren", + "ARCHIVE_SECTION_NAME": "Archiv", + "ALL_SECTION_NAME": "Alle", + "MOVE_TO_COLLECTION": "Zum Album verschieben", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Verschieben", + "ADD": "Hinzufügen", + "REMOVE": "Entfernen", + "YES_REMOVE": "Ja, entfernen", + "REMOVE_FROM_COLLECTION": "Aus Album entfernen", + "TRASH": "Papierkorb", + "MOVE_TO_TRASH": "In Papierkorb verschieben", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Dauerhaft löschen", + "RESTORE": "Wiederherstellen", + "RESTORE_TO_COLLECTION": "In Album wiederherstellen", + "EMPTY_TRASH": "Papierkorb leeren", + "EMPTY_TRASH_TITLE": "Papierkorb leeren?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Ja, verlassen", + "LEAVE_ALBUM": "Album verlassen", + "LEAVE_SHARED_ALBUM_TITLE": "Geteiltes Album verlassen?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "Dateien in einem freigegebenen Album können nicht gelöscht werden", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Ältestem", + "SORT_BY_UPDATION_TIME_DESCENDING": "Zuletzt aktualisiert", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Komprimiere", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Installieren", + "SHARING_DETAILS": "Details teilen", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Entfernen?", + "CONFIRM_REMOVE": "Ja, entfernen", + "MANAGE": "Verwalten", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Teilnehmer entfernen", + "OWNER": "Besitzer", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - Nicht gefunden", + "LINK_EXPIRED": "Link ist abgelaufen", + "LINK_EXPIRED_MESSAGE": "Dieser Link ist abgelaufen oder wurde deaktiviert!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, dieses Album wurde auf zu vielen Geräten angezeigt!", + "FILE_DOWNLOAD": "Downloads erlauben", + "LINK_PASSWORD_LOCK": "Passwort Sperre", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Geräte Limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Ablaufdatum des Links", + "NEVER": "Niemals", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Passwort Sperre", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "Datei", + "UPLOAD_DIRS": "Ordner", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "Du hast keine Duplikate, die gelöscht werden können", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Dateien", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Hochladen stoppen?", + "YES_STOP_UPLOADS": "Ja, Hochladen stoppen", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "Alle Alben", + "ALBUMS": "Alben", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Gib den 6-stelligen Code aus\ndeiner Authentifizierungs-App ein.", + "CREATE_ACCOUNT": "Account erstellen", + "COPIED": "Kopiert", + "CANVAS_BLOCKED_TITLE": "Vorschaubild konnte nicht erstellt werden", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Jetzt upgraden", + "RENEW_NOW": "Renew now", + "STORAGE": "Speicher", + "USED": "verwendet", + "YOU": "Sie", + "FAMILY": "Familie", + "FREE": "frei", + "OF": "von", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Ordner hinzufügen", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Ja, Stopp", + "MONTH_SHORT": "mo", + "YEAR": "Jahr", + "FAMILY_PLAN": "Familientarif", + "DOWNLOAD_LOGS": "Logs herunterladen", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Beliebt", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB für 1 Jahr", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authentifizieren", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Egal", + "UPDATE_AVAILABLE": "Neue Version verfügbar", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Jetzt installieren", + "INSTALL_ON_NEXT_LAUNCH": "Beim nächsten Start installieren", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Diese Version ignorieren", + "TODAY": "Heute", + "YESTERDAY": "Gestern", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Beta deaktivieren", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Erweitert", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Passwortstärke: Schwach", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Passwortstärke: Stark", + "PREFERENCES": "Einstellungen", + "LANGUAGE": "Sprache", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "nach einer Stunde", + "DAY": "nach einem Tag", + "WEEK": "nach 1 Woche", + "MONTH": "nach einem Monat", + "YEAR": "nach einem Jahr" + }, + "COPY_LINK": "Link kopieren", + "DONE": "Fertig", + "LINK_SHARE_TITLE": "Oder einen Link teilen", + "REMOVE_LINK": "Link entfernen", + "CREATE_PUBLIC_SHARING": "Öffentlichen Link erstellen", + "PUBLIC_LINK_CREATED": "Öffentlicher Link erstellt", + "PUBLIC_LINK_ENABLED": "Öffentlicher Link aktiviert", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export gestartet", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export abgeschlossen", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Kontolöschung bestätigen", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "Weiter", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Versteckt", + "HIDE": "Ausblenden", + "UNHIDE": "Einblenden", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sortieren nach", + "NEWEST_FIRST": "Neueste zuerst", + "OLDEST_FIRST": "Älteste zuerst", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Diese Datei konnte nicht in der Vorschau angezeigt werden. Klicken Sie hier, um das Original herunterzuladen.", + "SELECT_COLLECTION": "Album auswählen", + "PIN_ALBUM": "Album anheften", + "UNPIN_ALBUM": "Album lösen", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/en-US/translation.json b/web/apps/auth/public/locales/en-US/translation.json new file mode 100644 index 000000000..6870df319 --- /dev/null +++ b/web/apps/auth/public/locales/en-US/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private backups
for your memories
", + "HERO_SLIDE_1": "End-to-end encrypted by default", + "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", + "HERO_SLIDE_2": "Designed to outlive", + "HERO_SLIDE_3_TITLE": "
Available
everywhere
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Login", + "SIGN_UP": "Signup", + "NEW_USER": "New to ente", + "EXISTING_USER": "Existing user", + "ENTER_NAME": "Enter name", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Add a name so that your friends know who to thank for these great photos!", + "ENTER_EMAIL": "Enter email address", + "EMAIL_ERROR": "Enter a valid email", + "REQUIRED": "Required", + "EMAIL_SENT": "Verification code sent to {{email}}", + "CHECK_INBOX": "Please check your inbox (and spam) to complete verification", + "ENTER_OTT": "Verification code", + "RESEND_MAIL": "Resend code", + "VERIFY": "Verify", + "UNKNOWN_ERROR": "Something went wrong, please try again", + "INVALID_CODE": "Invalid verification code", + "EXPIRED_CODE": "Your verification code has expired", + "SENDING": "Sending...", + "SENT": "Sent!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Enter password to unlock the album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Set password", + "VERIFY_PASSPHRASE": "Sign in", + "INCORRECT_PASSPHRASE": "Incorrect password", + "ENTER_ENC_PASSPHRASE": "Please enter a password that we can use to encrypt your data", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "Welcome to ", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Where your best photos live", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generating encryption keys...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Confirm password", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Passwords don't match", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "New album", + "ENTER_ALBUM_NAME": "Album name", + "CLOSE_OPTION": "Close (Esc)", + "ENTER_FILE_NAME": "File name", + "CLOSE": "Close", + "NO": "No", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Upload", + "IMPORT": "Import", + "ADD_PHOTOS": "Add photos", + "ADD_MORE_PHOTOS": "Add more photos", + "add_photos_one": "Add 1 item", + "add_photos_other": "Add {{count, number}} items", + "SELECT_PHOTOS": "Select photos", + "FILE_UPLOAD": "File Upload", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparing to upload", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Backup complete" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Subscription expired", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Storage limit exceeded", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Don't have an account", + "ACCOUNT_EXISTS": "Already have an account", + "CREATE": "Create", + "DOWNLOAD": "Download", + "DOWNLOAD_OPTION": "Download (D)", + "DOWNLOAD_FAVORITES": "Download favorites", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copy as PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Upload your first photo", + "IMPORT_YOUR_FOLDERS": "Import your folders", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Delete files?", + "TRASH_FILE_TITLE": "Delete file?", + "DELETE_FILES_TITLE": "Delete immediately?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Delete", + "DELETE_OPTION": "Delete (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "A single album", + "OR": "or", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Your session has expired, please login again to continue", + "SESSION_EXPIRED": "Session expired", + "PASSWORD_GENERATION_FAILED": "Your browser was unable to generate a strong key that meets ente's encryption standards, please try using the mobile app or another browser", + "CHANGE_PASSWORD": "Change password", + "GO_BACK": "Go back", + "RECOVERY_KEY": "Recovery key", + "SAVE_LATER": "Do this later", + "SAVE": "Save Key", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Forgot password", + "RECOVER_ACCOUNT": "Recover account", + "RECOVERY_KEY_HINT": "Recovery key", + "RECOVER": "Recover", + "NO_RECOVERY_KEY": "No recovery key?", + "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", + "CONTACT_SUPPORT": "Contact support", + "REQUEST_FEATURE": "Request Feature", + "SUPPORT": "Support", + "CONFIRM": "Confirm", + "CANCEL": "Cancel", + "LOGOUT": "Logout", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Are you sure you want to logout?", + "CHANGE_EMAIL": "Change email", + "OK": "OK", + "SUCCESS": "Success", + "ERROR": "Error", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Download desktop app", + "EXPORT": "Export Data", + "SUBSCRIPTION": "Subscription", + "SUBSCRIBE": "Subscribe", + "MANAGEMENT_PORTAL": "Manage payment method", + "MANAGE_FAMILY_PORTAL": "Manage family", + "LEAVE_FAMILY_PLAN": "Leave family plan", + "LEAVE": "Leave", + "LEAVE_FAMILY_CONFIRM": "Are you sure that you want to leave family plan?", + "CHOOSE_PLAN": "Choose your plan", + "MANAGE_PLAN": "Manage your subscription", + "ACTIVE": "Active", + "OFFLINE_MSG": "You are offline, cached memories are being shown", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "You are on a family plan managed by", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renews on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Ends on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Your subscription will be cancelled on {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "You have exceeded your storage quota, please upgrade", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Subscription purchase failed , please try again", + "SUBSCRIPTION_UPDATE_FAILED": "Subscription updated failed , please try again", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Update payment method", + "MONTHLY": "Monthly", + "YEARLY": "Yearly", + "UPDATE_SUBSCRIPTION_MESSAGE": "Are you sure you want to change your plan?", + "UPDATE_SUBSCRIPTION": "Change plan", + "CANCEL_SUBSCRIPTION": "Cancel subscription", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Reactivate subscription", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Rename", + "RENAME_FILE": "Rename file", + "RENAME_COLLECTION": "Rename album", + "DELETE_COLLECTION_TITLE": "Delete album?", + "DELETE_COLLECTION": "Delete album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Delete photos", + "KEEP_PHOTOS": "Keep photos", + "SHARE": "Share", + "SHARE_COLLECTION": "Share album", + "SHAREES": "Shared with", + "SHARE_WITH_SELF": "Oops, you cannot share with yourself", + "ALREADY_SHARED": "Oops, you're already sharing this with {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Search", + "SEARCH_RESULTS": "Search results", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Location", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "File name", + "THING": "Content", + "FILE_CAPTION": "Description", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No memories", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Add to album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "People", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "File name", + "CAPTION_PLACEHOLDER": "Add a description", + "LOCATION": "Location", + "SHOW_ON_MAP": "View on OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Two-factor", + "TWO_FACTOR_AUTHENTICATION": "Two-factor authentication", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Enter the code manually", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "Scan QR code instead", + "ENABLE_TWO_FACTOR": "Enable two-factor", + "ENABLE": "Enable", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Incorrect code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Export data", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Send OTP", + "EMAIl_ALREADY_OWNED": "Email already taken", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Failed uploads ", + "SKIPPED_FILES": "Ignored uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Skipped videos", + "INPROGRESS_METADATA_EXTRACTION": "In progress", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Large files", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Insufficient storage", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "These files were not uploaded as they exceed the maximum size limit for your storage plan", + "TOO_LARGE_INFO": "These files were not uploaded as they exceed our maximum file size limit", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archive", + "FAVORITES": "Favorites", + "ARCHIVE_COLLECTION": "Archive album", + "ARCHIVE_SECTION_NAME": "Archive", + "ALL_SECTION_NAME": "All", + "MOVE_TO_COLLECTION": "Move to album", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Move", + "ADD": "Add", + "REMOVE": "Remove", + "YES_REMOVE": "Yes, remove", + "REMOVE_FROM_COLLECTION": "Remove from album", + "TRASH": "Trash", + "MOVE_TO_TRASH": "Move to trash", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Delete permanently", + "RESTORE": "Restore", + "RESTORE_TO_COLLECTION": "Restore to album", + "EMPTY_TRASH": "Empty trash", + "EMPTY_TRASH_TITLE": "Empty trash?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Yes, leave", + "LEAVE_ALBUM": "Leave album", + "LEAVE_SHARED_ALBUM_TITLE": "Leave shared album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oldest", + "SORT_BY_UPDATION_TIME_DESCENDING": "Last updated", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Compress", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Install", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - not found", + "LINK_EXPIRED": "Link expired", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Folder", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "All Albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Create account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "You", + "FAMILY": "Family", + "FREE": "free", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB for 1 year", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authenticate", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Advanced", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "PREFERENCES": "Preferences", + "LANGUAGE": "Language", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "after an hour", + "DAY": "after a day", + "WEEK": "after a week", + "MONTH": "after a month", + "YEAR": "after a year" + }, + "COPY_LINK": "Copy link", + "DONE": "Done", + "LINK_SHARE_TITLE": "Or share a link", + "REMOVE_LINK": "Remove link", + "CREATE_PUBLIC_SHARING": "Create public link", + "PUBLIC_LINK_CREATED": "Public link created", + "PUBLIC_LINK_ENABLED": "Public link enabled", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/es-ES/translation.json b/web/apps/auth/public/locales/es-ES/translation.json new file mode 100644 index 000000000..05f3d0325 --- /dev/null +++ b/web/apps/auth/public/locales/es-ES/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Copias de seguridad privadas
para su recuerdos
", + "HERO_SLIDE_1": "Encriptado de extremo a extremo por defecto", + "HERO_SLIDE_2_TITLE": "
Almacenado de forma segura
en un refugio de llenos
", + "HERO_SLIDE_2": "Diseñado para superar", + "HERO_SLIDE_3_TITLE": "
Disponible
en todas partes
", + "HERO_SLIDE_3": "Android, iOS, web, computadora", + "LOGIN": "Conectar", + "SIGN_UP": "Registro", + "NEW_USER": "Nuevo en ente", + "EXISTING_USER": "Usuario existente", + "ENTER_NAME": "Introducir nombre", + "PUBLIC_UPLOADER_NAME_MESSAGE": "¡Añade un nombre para que tus amigos sepan a quién dar las gracias por estas fotos geniales!", + "ENTER_EMAIL": "Introducir email", + "EMAIL_ERROR": "Introduce un email válido", + "REQUIRED": "Requerido", + "EMAIL_SENT": "Código de verificación enviado al {{email}}", + "CHECK_INBOX": "Revisa tu bandeja de entrada (y spam) para completar la verificación", + "ENTER_OTT": "Código de verificación", + "RESEND_MAIL": "Reenviar el código", + "VERIFY": "Verificar", + "UNKNOWN_ERROR": "Se produjo un error. Por favor, inténtalo de nuevo", + "INVALID_CODE": "Código de verificación inválido", + "EXPIRED_CODE": "Código de verificación expirado", + "SENDING": "Enviando...", + "SENT": "Enviado!", + "PASSWORD": "Contraseña", + "LINK_PASSWORD": "Introducir contraseña para desbloquear el álbum", + "RETURN_PASSPHRASE_HINT": "Contraseña", + "SET_PASSPHRASE": "Definir contraseña", + "VERIFY_PASSPHRASE": "Ingresar", + "INCORRECT_PASSPHRASE": "Contraseña incorrecta", + "ENTER_ENC_PASSPHRASE": "Introducir una contraseña que podamos usar para cifrar sus datos", + "PASSPHRASE_DISCLAIMER": "No guardamos su contraseña, así que si la olvida, no podremos ayudarte a recuperar tus datos sin una clave de recuperación.", + "WELCOME_TO_ENTE_HEADING": "Bienvenido a ", + "WELCOME_TO_ENTE_SUBHEADING": "Almacenamiento y compartición de fotos cifradas de extremo a extremo", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Donde vivan su mejores fotos", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generando claves de encriptación...", + "PASSPHRASE_HINT": "Contraseña", + "CONFIRM_PASSPHRASE": "Confirmar contraseña", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Las contraseñas no coinciden", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "Esta es una característica del navegador destinada a los desarrolladores. Por favor, no copie y pegue código sin verificar aquí.", + "CREATE_COLLECTION": "Nuevo álbum", + "ENTER_ALBUM_NAME": "Nombre del álbum", + "CLOSE_OPTION": "Cerrar (Esc)", + "ENTER_FILE_NAME": "Nombre del archivo", + "CLOSE": "Cerrar", + "NO": "No", + "NOTHING_HERE": "Nada para ver aquí aún 👀", + "UPLOAD": "Cargar", + "IMPORT": "Importar", + "ADD_PHOTOS": "Añadir fotos", + "ADD_MORE_PHOTOS": "Añadir más fotos", + "add_photos_one": "Añadir 1 foto", + "add_photos_other": "Añadir {{count}} fotos", + "SELECT_PHOTOS": "Seleccionar fotos", + "FILE_UPLOAD": "Subir archivo", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparando la subida", + "1": "Leyendo archivos de metadatos de google", + "2": "{{uploadCounter.finished}} / {{uploadCounter.total}} archivos metadatos extraídos", + "3": "{{uploadCounter.finished}} / {{uploadCounter.total}} archivos metadatos extraídos", + "4": "Cancelar subidas restantes", + "5": "Copia de seguridad completa" + }, + "FILE_NOT_UPLOADED_LIST": "Los siguientes archivos no se han subido", + "SUBSCRIPTION_EXPIRED": "Suscripción caducada", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Tu suscripción ha caducado, por favor renuévala", + "STORAGE_QUOTA_EXCEEDED": "Límite de datos excedido", + "INITIAL_LOAD_DELAY_WARNING": "La primera carga puede tomar algún tiempo", + "USER_DOES_NOT_EXIST": "Lo sentimos, no se pudo encontrar un usuario con ese email", + "NO_ACCOUNT": "No tienes una cuenta", + "ACCOUNT_EXISTS": "Ya tienes una cuenta", + "CREATE": "Crear", + "DOWNLOAD": "Descargar", + "DOWNLOAD_OPTION": "Descargar (D)", + "DOWNLOAD_FAVORITES": "Descargar favoritos", + "DOWNLOAD_UNCATEGORIZED": "Descargar no categorizados", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copiar como PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Alternar pantalla completa (F)", + "ZOOM_IN_OUT": "Acercar/alejar", + "PREVIOUS": "Anterior (←)", + "NEXT": "Siguiente (→)", + "TITLE_PHOTOS": "ente Fotos", + "TITLE_ALBUMS": "ente Fotos", + "TITLE_AUTH": "ente Auth", + "UPLOAD_FIRST_PHOTO": "Carga tu primer archivo", + "IMPORT_YOUR_FOLDERS": "Importar tus carpetas", + "UPLOAD_DROPZONE_MESSAGE": "Soltar para respaldar tus archivos", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Soltar para añadir carpeta vigilada", + "TRASH_FILES_TITLE": "Eliminar archivos?", + "TRASH_FILE_TITLE": "Eliminar archivo?", + "DELETE_FILES_TITLE": "Eliminar inmediatamente?", + "DELETE_FILES_MESSAGE": "Los archivos seleccionados serán eliminados permanentemente de tu cuenta ente.", + "DELETE": "Eliminar", + "DELETE_OPTION": "Eliminar (DEL)", + "FAVORITE_OPTION": "Favorito (L)", + "UNFAVORITE_OPTION": "No favorito (L)", + "MULTI_FOLDER_UPLOAD": "Múltiples carpetas detectadas", + "UPLOAD_STRATEGY_CHOICE": "Quieres subirlos a", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Un solo álbum", + "OR": "o", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separar álbumes", + "SESSION_EXPIRED_MESSAGE": "Tu sesión ha caducado. Inicia sesión de nuevo para continuar", + "SESSION_EXPIRED": "Sesión caducado", + "PASSWORD_GENERATION_FAILED": "Su navegador no ha podido generar una clave fuerte que cumpla con los estándares de cifrado de la entidad, por favor intente usar la aplicación móvil u otro navegador", + "CHANGE_PASSWORD": "Cambiar contraseña", + "GO_BACK": "Retroceder", + "RECOVERY_KEY": "Clave de recuperación", + "SAVE_LATER": "Hacer más tarde", + "SAVE": "Guardar Clave", + "RECOVERY_KEY_DESCRIPTION": "Si olvida su contraseña, la única forma de recuperar sus datos es con esta clave.", + "RECOVER_KEY_GENERATION_FAILED": "El código de recuperación no pudo ser generado, por favor inténtalo de nuevo", + "KEY_NOT_STORED_DISCLAIMER": "No almacenamos esta clave, así que por favor guarde esto en un lugar seguro", + "FORGOT_PASSWORD": "Contraseña olvidada", + "RECOVER_ACCOUNT": "Recuperar cuenta", + "RECOVERY_KEY_HINT": "Clave de recuperación", + "RECOVER": "Recuperar", + "NO_RECOVERY_KEY": "No hay clave de recuperación?", + "INCORRECT_RECOVERY_KEY": "Clave de recuperación incorrecta", + "SORRY": "Lo sentimos", + "NO_RECOVERY_KEY_MESSAGE": "Debido a la naturaleza de nuestro protocolo de cifrado de extremo a extremo, sus datos no pueden ser descifrados sin su contraseña o clave de recuperación", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Por favor, envíe un email a {{emailID}} desde su dirección de correo electrónico registrada", + "CONTACT_SUPPORT": "Contacta con soporte", + "REQUEST_FEATURE": "Solicitar una función", + "SUPPORT": "Soporte", + "CONFIRM": "Confirmar", + "CANCEL": "Cancelar", + "LOGOUT": "Cerrar sesión", + "DELETE_ACCOUNT": "Eliminar cuenta", + "DELETE_ACCOUNT_MESSAGE": "

Por favor, envíe un email a {{emailID}} desde su dirección de correo electrónico registrada

Su solicitud será procesada en 72 horas.

", + "LOGOUT_MESSAGE": "Seguro que quiere cerrar la sesión?", + "CHANGE_EMAIL": "Cambiar email", + "OK": "OK", + "SUCCESS": "Completado", + "ERROR": "Error", + "MESSAGE": "Mensaje", + "INSTALL_MOBILE_APP": "Instala nuestra aplicación Android o iOS para hacer una copia de seguridad automática de todas usted fotos", + "DOWNLOAD_APP_MESSAGE": "Lo sentimos, esta operación sólo es compatible con nuestra aplicación de computadora", + "DOWNLOAD_APP": "Descargar aplicación de computadora", + "EXPORT": "Exportar datos", + "SUBSCRIPTION": "Suscripción", + "SUBSCRIBE": "Suscribir", + "MANAGEMENT_PORTAL": "Gestionar métodos de pago", + "MANAGE_FAMILY_PORTAL": "Administrar familia", + "LEAVE_FAMILY_PLAN": "Dejar plan familiar", + "LEAVE": "Dejar", + "LEAVE_FAMILY_CONFIRM": "Está seguro de que desea abandonar el plan familiar?", + "CHOOSE_PLAN": "Elije tu plan", + "MANAGE_PLAN": "Administra tu suscripción", + "ACTIVE": "Activo", + "OFFLINE_MSG": "Estás desconectado, se están mostrando recuerdos en caché", + "FREE_SUBSCRIPTION_INFO": "Estás en el plan gratis que expira el {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Estás en un plan familiar administrado por", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Se renueva en {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Termina el {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Tu suscripción será cancelada el {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Ha excedido su cuota de almacenamiento, por favor actualice", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Hemos recibido tu pago

¡Tu suscripción es válida hasta {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Tu compra ha sido cancelada, por favor inténtalo de nuevo si quieres suscribirte", + "SUBSCRIPTION_PURCHASE_FAILED": "Compra de suscripción fallida, por favor inténtalo de nuevo", + "SUBSCRIPTION_UPDATE_FAILED": "Suscripción actualizada falló, inténtelo de nuevo", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Lo sentimos, el pago falló cuando intentamos cargar a su tarjeta, por favor actualice su método de pago y vuelva a intentarlo", + "STRIPE_AUTHENTICATION_FAILED": "No podemos autenticar tu método de pago. Por favor, elige un método de pago diferente e inténtalo de nuevo", + "UPDATE_PAYMENT_METHOD": "Actualizar medio de pago", + "MONTHLY": "Mensual", + "YEARLY": "Anual", + "UPDATE_SUBSCRIPTION_MESSAGE": "Seguro de que desea cambiar su plan?", + "UPDATE_SUBSCRIPTION": "Cambiar de plan", + "CANCEL_SUBSCRIPTION": "Cancelar suscripción", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Todos tus datos serán eliminados de nuestros servidores al final de este periodo de facturación.

¿Está seguro de que desea cancelar su suscripción?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "No se pudo cancelar la suscripción", + "SUBSCRIPTION_CANCEL_SUCCESS": "Suscripción cancelada correctamente", + "REACTIVATE_SUBSCRIPTION": "Reactivar la suscripción", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Una vez reactivado, serás facturado el {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Suscripción activada correctamente ", + "SUBSCRIPTION_ACTIVATE_FAILED": "No se pudo reactivar las renovaciones de suscripción", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Gracias", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancelar suscripción a móviles", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Por favor, cancele su suscripción de la aplicación móvil para activar una suscripción aquí", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Por favor, contáctenos en {{emailID}} para gestionar su suscripción", + "RENAME": "Renombrar", + "RENAME_FILE": "Renombrar archivo", + "RENAME_COLLECTION": "Renombrar álbum", + "DELETE_COLLECTION_TITLE": "Eliminar álbum?", + "DELETE_COLLECTION": "Eliminar álbum", + "DELETE_COLLECTION_MESSAGE": "También eliminar las fotos (y los vídeos) presentes en este álbum de todos álbumes de los que forman parte?", + "DELETE_PHOTOS": "Eliminar fotos", + "KEEP_PHOTOS": "Conservar fotos", + "SHARE": "Compartir", + "SHARE_COLLECTION": "Compartir álbum", + "SHAREES": "Compartido con", + "SHARE_WITH_SELF": "Uy, no puedes compartir contigo mismo", + "ALREADY_SHARED": "Uy, ya estás compartiendo esto con {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Compartir álbum no permitido", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Compartir está desactivado para cuentas gratis", + "DOWNLOAD_COLLECTION": "Descargar álbum", + "DOWNLOAD_COLLECTION_MESSAGE": "

¿Está seguro de que desea descargar el álbum completo?

Todos los archivos se pondrán en cola para su descarga secuencialmente

", + "CREATE_ALBUM_FAILED": "Error al crear el álbum, inténtalo de nuevo", + "SEARCH": "Buscar", + "SEARCH_RESULTS": "Buscar resultados", + "NO_RESULTS": "No se han encontrado resultados", + "SEARCH_HINT": "Buscar álbumes, fechas...", + "SEARCH_TYPE": { + "COLLECTION": "Álbum", + "LOCATION": "Localización", + "CITY": "Location", + "DATE": "Fecha", + "FILE_NAME": "Nombre del archivo", + "THING": "Contenido", + "FILE_CAPTION": "Descripción", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No hay recuerdos", + "photos_count_one": "1 recuerdo", + "photos_count_other": "{{count}} recuerdos", + "TERMS_AND_CONDITIONS": "Acepto los términos y política de privacidad", + "ADD_TO_COLLECTION": "Añadir al álbum", + "SELECTED": "seleccionado", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Este vídeo no se puede reproducir en tu navegador", + "PEOPLE": "Personajes", + "INDEXING_SCHEDULED": "el indexado está programado...", + "ANALYZING_PHOTOS": "analizando nuevas fotos {{indexStatus.nSyncedFiles}} de {{indexStatus.nTotalFiles}} hecho)...", + "INDEXING_PEOPLE": "indexando personas en {{indexStatus.nSyncedFiles}} fotos... ", + "INDEXING_DONE": "fotos {{indexStatus.nSyncedFiles}} indexadas", + "UNIDENTIFIED_FACES": "caras no identificadas", + "OBJECTS": "objetos", + "TEXT": "texto", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "Nombre del archivo", + "CAPTION_PLACEHOLDER": "Añadir una descripción", + "LOCATION": "Localización", + "SHOW_ON_MAP": "Ver en OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Detalles", + "VIEW_EXIF": "Ver todos los datos de EXIF", + "NO_EXIF": "No hay datos EXIF", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Dos factores", + "TWO_FACTOR_AUTHENTICATION": "Autenticación de dos factores", + "TWO_FACTOR_QR_INSTRUCTION": "Escanea el código QR de abajo con tu aplicación de autenticación favorita", + "ENTER_CODE_MANUALLY": "Ingrese el código manualmente", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Por favor, introduce este código en tu aplicación de autenticación favorita", + "SCAN_QR_CODE": "Escanear código QR en su lugar", + "ENABLE_TWO_FACTOR": "Activar dos factores", + "ENABLE": "Activar", + "LOST_DEVICE": "Perdido el dispositivo de doble factor", + "INCORRECT_CODE": "Código incorrecto", + "TWO_FACTOR_INFO": "Añade una capa adicional de seguridad al requerir más de tu email y contraseña para iniciar sesión en tu cuenta", + "DISABLE_TWO_FACTOR_LABEL": "Deshabilitar la autenticación de dos factores", + "UPDATE_TWO_FACTOR_LABEL": "Actualice su dispositivo de autenticación", + "DISABLE": "Desactivar", + "RECONFIGURE": "Reconfigurar", + "UPDATE_TWO_FACTOR": "Actualizar doble factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuar adelante anulará los autenticadores previamente configurados", + "UPDATE": "Actualizar", + "DISABLE_TWO_FACTOR": "Desactivar doble factor", + "DISABLE_TWO_FACTOR_MESSAGE": "¿Estás seguro de que desea deshabilitar la autenticación de doble factor?", + "TWO_FACTOR_DISABLE_FAILED": "Error al desactivar dos factores, inténtalo de nuevo", + "EXPORT_DATA": "Exportar datos", + "SELECT_FOLDER": "Seleccionar carpeta", + "DESTINATION": "Destinación", + "START": "Inicio", + "LAST_EXPORT_TIME": "Fecha de la última exportación", + "EXPORT_AGAIN": "Resinc", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Almacenamiento local inaccesible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Su navegador o un addon está bloqueando a ente de guardar datos en almacenamiento local. Por favor, intente cargar esta página después de cambiar su modo de navegación.", + "SEND_OTT": "Enviar OTP", + "EMAIl_ALREADY_OWNED": "Email ya tomado", + "ETAGS_BLOCKED": "

No hemos podido subir los siguientes archivos debido a la configuración de tu navegador.

Por favor, deshabilite cualquier complemento que pueda estar impidiendo que ente utilice eTags para subir archivos grandes, o utilice nuestra aplicación de escritorio para una experiencia de importación más fiable.

", + "SKIPPED_VIDEOS_INFO": "

Actualmente no podemos añadir vídeos a través de enlaces públicos.

Para compartir vídeos, por favor regístrate en ente y comparte con los destinatarios a través de su correo electrónico.

", + "LIVE_PHOTOS_DETECTED": "Los archivos de foto y vídeo de tus fotos en vivo se han fusionado en un solo archivo", + "RETRY_FAILED": "Reintentar subidas fallidas", + "FAILED_UPLOADS": "Subidas fallidas ", + "SKIPPED_FILES": "Subidas ignoradas", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Generación de miniaturas fallida", + "UNSUPPORTED_FILES": "Archivos no soportados", + "SUCCESSFUL_UPLOADS": "Subidas exitosas", + "SKIPPED_INFO": "Se han omitido ya que hay archivos con nombres coincidentes en el mismo álbum", + "UNSUPPORTED_INFO": "ente no soporta estos formatos de archivo aún", + "BLOCKED_UPLOADS": "Subidas bloqueadas", + "SKIPPED_VIDEOS": "Vídeos saltados", + "INPROGRESS_METADATA_EXTRACTION": "En proceso", + "INPROGRESS_UPLOADS": "Subidas en progreso", + "TOO_LARGE_UPLOADS": "Archivos grandes", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Espacio insuficiente", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Estos archivos no se han subido porque exceden el límite de tamaño máximo para tu plan de almacenamiento", + "TOO_LARGE_INFO": "Estos archivos no se han subido porque exceden nuestro límite máximo de tamaño de archivo", + "THUMBNAIL_GENERATION_FAILED_INFO": "Estos archivos fueron cargados, pero por desgracia no pudimos generar las miniaturas para ellos.", + "UPLOAD_TO_COLLECTION": "Subir al álbum", + "UNCATEGORIZED": "No clasificado", + "ARCHIVE": "Archivo", + "FAVORITES": "Favoritos", + "ARCHIVE_COLLECTION": "Archivo álbum", + "ARCHIVE_SECTION_NAME": "Archivo", + "ALL_SECTION_NAME": "Todo", + "MOVE_TO_COLLECTION": "Mover al álbum", + "UNARCHIVE": "Desarchivar", + "UNARCHIVE_COLLECTION": "Desarchivar álbum", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Mover", + "ADD": "Añadir", + "REMOVE": "Eliminar", + "YES_REMOVE": "Sí, eliminar", + "REMOVE_FROM_COLLECTION": "Eliminar del álbum", + "TRASH": "Papelera", + "MOVE_TO_TRASH": "Mover a la papelera", + "TRASH_FILES_MESSAGE": "Los archivos seleccionados serán eliminados de todos los álbumes y movidos a la papelera.", + "TRASH_FILE_MESSAGE": "El archivo será eliminado de todos los álbumes y movido a la papelera.", + "DELETE_PERMANENTLY": "Eliminar para siempre", + "RESTORE": "Restaurar", + "RESTORE_TO_COLLECTION": "Restaurar al álbum", + "EMPTY_TRASH": "Vaciar papelera", + "EMPTY_TRASH_TITLE": "Vaciar papelera?", + "EMPTY_TRASH_MESSAGE": "Estos archivos serán eliminados permanentemente de su cuenta ente.", + "LEAVE_SHARED_ALBUM": "Sí, dejar", + "LEAVE_ALBUM": "Dejar álbum", + "LEAVE_SHARED_ALBUM_TITLE": "¿Dejar álbum compartido?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Dejará el álbum, y dejará de ser visible para usted.", + "NOT_FILE_OWNER": "No puedes eliminar archivos de un álbum compartido", + "CONFIRM_SELF_REMOVE_MESSAGE": "Los elementos seleccionados serán eliminados de este álbum. Los elementos que estén sólo en este álbum serán movidos a Sin categorizar.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Algunos de los elementos que estás eliminando fueron añadidos por otras personas, y perderás el acceso a ellos.", + "SORT_BY_CREATION_TIME_ASCENDING": "Antiguo", + "SORT_BY_UPDATION_TIME_DESCENDING": "Última actualización", + "SORT_BY_NAME": "Nombre", + "COMPRESS_THUMBNAILS": "Comprimir las miniaturas", + "THUMBNAIL_REPLACED": "Miniaturas comprimidas", + "FIX_THUMBNAIL": "Comprimir", + "FIX_THUMBNAIL_LATER": "Comprimir más tarde", + "REPLACE_THUMBNAIL_NOT_STARTED": "Algunas de tus miniaturas de vídeos pueden ser comprimidas para ahorrar espacio. ¿Te gustaría que ente las comprima?", + "REPLACE_THUMBNAIL_COMPLETED": "Todas las miniaturas se comprimieron con éxito", + "REPLACE_THUMBNAIL_NOOP": "No tienes miniaturas que se puedan comprimir más", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "No se pudieron comprimir algunas de tus miniaturas, por favor inténtalo de nuevo", + "FIX_CREATION_TIME": "Fijar hora", + "FIX_CREATION_TIME_IN_PROGRESS": "Fijar hora", + "CREATION_TIME_UPDATED": "Hora del archivo actualizada", + "UPDATE_CREATION_TIME_NOT_STARTED": "Seleccione la cartera que desea utilizar", + "UPDATE_CREATION_TIME_COMPLETED": "Todos los archivos se han actualizado correctamente", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "Fallo en la hora del archivo para algunos archivos, por favor inténtelo de nuevo", + "CAPTION_CHARACTER_LIMIT": "Máximo 5000 caracteres", + "DATE_TIME_ORIGINAL": "EXIF: Fecha original", + "DATE_TIME_DIGITIZED": "EXIF: Fecha Digitalizado", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Hora personalizada", + "REOPEN_PLAN_SELECTOR_MODAL": "Reabrir planes", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Error al abrir los planes", + "INSTALL": "Instalar", + "SHARING_DETAILS": "Compartir detalles", + "MODIFY_SHARING": "Modificar compartir", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Propietario", + "COLLABORATORS": "Colaboradores", + "ADD_MORE": "Añadir más", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "O elige uno existente", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - No Encontrado", + "LINK_EXPIRED": "Enlace expirado", + "LINK_EXPIRED_MESSAGE": "Este enlace ha caducado o ha sido desactivado!", + "MANAGE_LINK": "Administrar enlace", + "LINK_TOO_MANY_REQUESTS": "Este álbum es demasiado popular para que podamos manejarlo!", + "FILE_DOWNLOAD": "Permitir descargas", + "LINK_PASSWORD_LOCK": "Contraseña bloqueada", + "PUBLIC_COLLECT": "Permitir añadir fotos", + "LINK_DEVICE_LIMIT": "Límites del dispositivo", + "NO_DEVICE_LIMIT": "Ninguno", + "LINK_EXPIRY": "Enlace vencio", + "NEVER": "Nunca", + "DISABLE_FILE_DOWNLOAD": "Deshabilitar descarga", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

¿Está seguro que desea desactivar el botón de descarga de archivos?

Los visualizadores todavía pueden tomar capturas de pantalla o guardar una copia de sus fotos usando herramientas externas.

", + "MALICIOUS_CONTENT": "Contiene contenido malicioso", + "COPYRIGHT": "Infracciones sobre los derechos de autor de alguien que estoy autorizado a representar", + "SHARED_USING": "Compartido usando ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Usa el código {{referralCode}} para obtener 10 GB gratis", + "LIVE": "VIVO", + "DISABLE_PASSWORD": "Desactivar contraseña", + "DISABLE_PASSWORD_MESSAGE": "Seguro que quieres cambiar la contrasena?", + "PASSWORD_LOCK": "Contraseña bloqueada", + "LOCK": "Bloquear", + "DOWNLOAD_UPLOAD_LOGS": "Logs de depuración", + "UPLOAD_FILES": "Archivo", + "UPLOAD_DIRS": "Carpeta", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "Deduplicar archivos", + "AUTHENTICATOR_SECTION": "Autenticación", + "NO_DUPLICATES_FOUND": "No tienes archivos duplicados que puedan ser borrados", + "CLUB_BY_CAPTURE_TIME": "Club por tiempo de captura", + "FILES": "Archivos", + "EACH": "Cada", + "DEDUPLICATE_BASED_ON_SIZE": "Los siguientes archivos fueron organizados en base a sus tamaños, por favor revise y elimine elementos que cree que son duplicados", + "STOP_ALL_UPLOADS_MESSAGE": "¿Está seguro que desea detener todas las subidas en curso?", + "STOP_UPLOADS_HEADER": "Detener las subidas?", + "YES_STOP_UPLOADS": "Sí, detener las subidas", + "STOP_DOWNLOADS_HEADER": "¿Detener las descargas?", + "YES_STOP_DOWNLOADS": "Sí, detener las descargas", + "STOP_ALL_DOWNLOADS_MESSAGE": "¿Estás seguro de que quieres detener todas las descargas en curso?", + "albums_one": "1 álbum", + "albums_other": "{{count}} álbumes", + "ALL_ALBUMS": "Todos los álbumes", + "ALBUMS": "Álbumes", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Ingrese el código de seis dígitos de su aplicación de autenticación a continuación.", + "CREATE_ACCOUNT": "Crear cuenta", + "COPIED": "Copiado", + "CANVAS_BLOCKED_TITLE": "No se puede generar la miniatura", + "CANVAS_BLOCKED_MESSAGE": "

Parece que su navegador ha deshabilitado el acceso al lienzo, que es necesario para generar miniaturas para tus fotos

Por favor, activa el acceso al lienzo de tu navegador, o revisa nuestra aplicación de escritorio

", + "WATCH_FOLDERS": "Ver carpetas", + "UPGRADE_NOW": "Mejorar ahora", + "RENEW_NOW": "Renovar ahora", + "STORAGE": "Almacén", + "USED": "usado", + "YOU": "Usted", + "FAMILY": "Familia", + "FREE": "gratis", + "OF": "de", + "WATCHED_FOLDERS": "Ver carpetas", + "NO_FOLDERS_ADDED": "No hay carpetas añadidas!", + "FOLDERS_AUTOMATICALLY_MONITORED": "Las carpetas que añadas aquí serán supervisadas automáticamente", + "UPLOAD_NEW_FILES_TO_ENTE": "Subir nuevos archivos a ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Eliminar archivos borrados de ente", + "ADD_FOLDER": "Añadir carpeta", + "STOP_WATCHING": "Dejar de ver", + "STOP_WATCHING_FOLDER": "Dejar de ver carpeta?", + "STOP_WATCHING_DIALOG_MESSAGE": "Tus archivos existentes no serán eliminados, pero ente dejará de actualizar automáticamente el álbum enlazado en caso de cambios en esta carpeta.", + "YES_STOP": "Sí, detener", + "MONTH_SHORT": "mes", + "YEAR": "año", + "FAMILY_PLAN": "Plan familiar", + "DOWNLOAD_LOGS": "Descargar logs", + "DOWNLOAD_LOGS_MESSAGE": "

Esto descargará los registros de depuración, que puede enviarnos por correo electrónico para ayudarnos a depurar su problema.

Tenga en cuenta que los nombres de los archivos se incluirán para ayudar al seguimiento de problemas con archivos específicos.

", + "CHANGE_FOLDER": "Cambiar carpeta", + "TWO_MONTHS_FREE": "Obtén 2 meses gratis en planes anuales", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continuar con el plan gratuito", + "FREE_PLAN_DESCRIPTION": "1 GB por 1 año", + "CURRENT_USAGE": "El uso actual es {{usage}}", + "WEAK_DEVICE": "El navegador web que está utilizando no es lo suficientemente poderoso para cifrar sus fotos. Por favor, intente iniciar sesión en ente en su computadora, o descargue la aplicación ente para móvil/escritorio.", + "DRAG_AND_DROP_HINT": "O arrastre y suelte en la ventana ente", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Los datos subidos se eliminarán y su cuenta se eliminará de forma permanente.

Esta acción no es reversible.", + "AUTHENTICATE": "Autenticado", + "UPLOADED_TO_SINGLE_COLLECTION": "Subir a una sola colección", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Subir a colecciones separadas", + "NEVERMIND": "No importa", + "UPDATE_AVAILABLE": "Actualizacion disponible", + "UPDATE_INSTALLABLE_MESSAGE": "Una nueva versión de ente está lista para ser instalada.", + "INSTALL_NOW": "Instalar ahora", + "INSTALL_ON_NEXT_LAUNCH": "Instalar en el próximo lanzamiento", + "UPDATE_AVAILABLE_MESSAGE": "Una nueva versión de ente ha sido lanzada, pero no se puede descargar e instalar automáticamente.", + "DOWNLOAD_AND_INSTALL": "Descargar e instalar", + "IGNORE_THIS_VERSION": "Ignorar esta versión", + "TODAY": "Hoy", + "YESTERDAY": "Ayer", + "NAME_PLACEHOLDER": "Nombre...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "No se puede crear álbumes de mezcla de archivos/carpetas", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Has arrastrado y soltado una mezcla de archivos y carpetas.

Por favor proporcione sólo archivos o carpetas cuando seleccione la opción de crear álbumes separados

", + "CHOSE_THEME": "Elegir tema", + "ML_SEARCH": "Buscar ML (beta)", + "ENABLE_ML_SEARCH_DESCRIPTION": "

Esto permitirá el aprendizaje automático en el dispositivo y la búsqueda facial que comenzará a analizar las fotos subidas localmente.

Para la primera ejecución después de iniciar sesión o habilitar esta función, se descargarán todas las imágenes en el dispositivo local para analizarlas. Así que por favor actívalo sólo si dispones ancho de banda y el almacenamiento suficiente para el procesamiento local de todas las imágenes en tu biblioteca de fotos.

Si esta es la primera vez que está habilitando, también le pediremos su permiso para procesar los datos faciales.

", + "ML_MORE_DETAILS": "Más detalles", + "ENABLE_FACE_SEARCH": "Activar búsqueda facial", + "ENABLE_FACE_SEARCH_TITLE": "Activar búsqueda facial?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Si activas la búsqueda facial, ente extraerá la geometría facial de tus fotos. Esto sucederá en su dispositivo y cualquier dato biométrico generado será cifrado de extremo a extremo.

Haga clic aquí para obtener más detalles sobre esta característica en nuestra política de privacidad

", + "DISABLE_BETA": "Desactivar beta", + "DISABLE_FACE_SEARCH": "Desactivar búsqueda facial", + "DISABLE_FACE_SEARCH_TITLE": "Desactivar búsqueda facial?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente dejará de procesar la geometría facial, y también desactivará la búsqueda ML (beta)

Puede volver a activar la búsqueda facial si lo desea, ya que esta operación es segura.

", + "ADVANCED": "Avanzado", + "FACE_SEARCH_CONFIRMATION": "Comprendo y deseo permitir que ente procese la geometría de la cara", + "LABS": "Labs", + "YOURS": "tuyo", + "PASSPHRASE_STRENGTH_WEAK": "Fortaleza de la contraseña: débil", + "PASSPHRASE_STRENGTH_MODERATE": "Fortaleza de contraseña: Moderar", + "PASSPHRASE_STRENGTH_STRONG": "Fortaleza de contraseña: fuerte", + "PREFERENCES": "Preferencias", + "LANGUAGE": "Idioma", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Archivo de exportación inválido", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

El directorio de exportación seleccionado no existe.

Por favor, seleccione un directorio válido.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Falló la verificación de la suscripción", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "después de una hora", + "DAY": "después de un día", + "WEEK": "después de una semana", + "MONTH": "después de un mes", + "YEAR": "después de un año" + }, + "COPY_LINK": "Copiar enlace", + "DONE": "Hecho", + "LINK_SHARE_TITLE": "O comparte un enlace", + "REMOVE_LINK": "Eliminar enlace", + "CREATE_PUBLIC_SHARING": "Crear un enlace público", + "PUBLIC_LINK_CREATED": "Enlace público creado", + "PUBLIC_LINK_ENABLED": "Enlace público activado", + "COLLECT_PHOTOS": "Obtener fotos", + "PUBLIC_COLLECT_SUBTEXT": "Permitir a las personas con el enlace añadir fotos al álbum compartido.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success}} / {{progress.total}} archivos exportados", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Exportar iniciando", + "IN_PROGRESS": "Exportación ya en curso", + "FINISH": "Exportación finalizada", + "UP_TO_DATE": "No hay nuevos archivos para exportar" + }, + "CONTINUOUS_EXPORT": "Sincronizar continuamente", + "TOTAL_ITEMS": "Total de elementos", + "PENDING_ITEMS": "Elementos pendientes", + "EXPORT_STARTING": "Exportar iniciando...", + "DELETE_ACCOUNT_REASON_LABEL": "¿Cuál es la razón principal por la que eliminas tu cuenta?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Selecciona una razón", + "DELETE_REASON": { + "MISSING_FEATURE": "Falta una característica clave que necesito", + "BROKEN_BEHAVIOR": "La aplicación o una característica determinada no se comporta como creo que debería", + "FOUND_ANOTHER_SERVICE": "He encontrado otro servicio que me gusta más", + "NOT_LISTED": "Mi motivo no se encuentra en la lista" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "Lamentamos que te vayas. Explica por qué te vas para ayudarnos a mejorar.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Sugerencias", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Sí, quiero eliminar permanentemente esta cuenta y todos sus datos", + "CONFIRM_DELETE_ACCOUNT": "Corfirmar borrado de cuenta", + "FEEDBACK_REQUIRED": "Ayúdanos con esta información", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "Qué hace mejor el otro servicio?", + "RECOVER_TWO_FACTOR": "Recuperar dos factores", + "at": "a las", + "AUTH_NEXT": "siguiente", + "AUTH_DOWNLOAD_MOBILE_APP": "Descarga nuestra aplicación móvil para administrar tus secretos", + "HIDDEN": "Hidden", + "HIDE": "Ocultar", + "UNHIDE": "Mostrar", + "UNHIDE_TO_COLLECTION": "Hacer visible al álbum", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transformar", + "COLORS": "Colores", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/fa-IR/translation.json b/web/apps/auth/public/locales/fa-IR/translation.json new file mode 100644 index 000000000..2c36eda0c --- /dev/null +++ b/web/apps/auth/public/locales/fa-IR/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private backups
for your memories
", + "HERO_SLIDE_1": "End-to-end encrypted by default", + "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", + "HERO_SLIDE_2": "Designed to outlive", + "HERO_SLIDE_3_TITLE": "
Available
everywhere
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Login", + "SIGN_UP": "Signup", + "NEW_USER": "New to ente", + "EXISTING_USER": "Existing user", + "ENTER_NAME": "Enter name", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Add a name so that your friends know who to thank for these great photos!", + "ENTER_EMAIL": "Enter email address", + "EMAIL_ERROR": "Enter a valid email", + "REQUIRED": "Required", + "EMAIL_SENT": "Verification code sent to {{email}}", + "CHECK_INBOX": "Please check your inbox (and spam) to complete verification", + "ENTER_OTT": "Verification code", + "RESEND_MAIL": "Resend code", + "VERIFY": "Verify", + "UNKNOWN_ERROR": "Something went wrong, please try again", + "INVALID_CODE": "Invalid verification code", + "EXPIRED_CODE": "Your verification code has expired", + "SENDING": "Sending...", + "SENT": "Sent!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Enter password to unlock the album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Set password", + "VERIFY_PASSPHRASE": "Sign in", + "INCORRECT_PASSPHRASE": "Incorrect password", + "ENTER_ENC_PASSPHRASE": "Please enter a password that we can use to encrypt your data", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "به خوش آمدید", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Where your best photos live", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generating encryption keys...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Confirm password", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Passwords don't match", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "New album", + "ENTER_ALBUM_NAME": "Album name", + "CLOSE_OPTION": "Close (Esc)", + "ENTER_FILE_NAME": "File name", + "CLOSE": "Close", + "NO": "No", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Upload", + "IMPORT": "Import", + "ADD_PHOTOS": "Add photos", + "ADD_MORE_PHOTOS": "Add more photos", + "add_photos_one": "Add 1 item", + "add_photos_other": "Add {{count, number}} items", + "SELECT_PHOTOS": "Select photos", + "FILE_UPLOAD": "File Upload", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparing to upload", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Backup complete" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Subscription expired", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Storage limit exceeded", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Don't have an account", + "ACCOUNT_EXISTS": "Already have an account", + "CREATE": "Create", + "DOWNLOAD": "Download", + "DOWNLOAD_OPTION": "Download (D)", + "DOWNLOAD_FAVORITES": "Download favorites", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copy as PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Upload your first photo", + "IMPORT_YOUR_FOLDERS": "Import your folders", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Delete files?", + "TRASH_FILE_TITLE": "Delete file?", + "DELETE_FILES_TITLE": "Delete immediately?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Delete", + "DELETE_OPTION": "Delete (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "A single album", + "OR": "or", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Your session has expired, please login again to continue", + "SESSION_EXPIRED": "Session expired", + "PASSWORD_GENERATION_FAILED": "Your browser was unable to generate a strong key that meets ente's encryption standards, please try using the mobile app or another browser", + "CHANGE_PASSWORD": "Change password", + "GO_BACK": "Go back", + "RECOVERY_KEY": "Recovery key", + "SAVE_LATER": "Do this later", + "SAVE": "Save Key", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Forgot password", + "RECOVER_ACCOUNT": "Recover account", + "RECOVERY_KEY_HINT": "Recovery key", + "RECOVER": "Recover", + "NO_RECOVERY_KEY": "No recovery key?", + "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", + "CONTACT_SUPPORT": "Contact support", + "REQUEST_FEATURE": "Request Feature", + "SUPPORT": "Support", + "CONFIRM": "Confirm", + "CANCEL": "Cancel", + "LOGOUT": "Logout", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Are you sure you want to logout?", + "CHANGE_EMAIL": "Change email", + "OK": "OK", + "SUCCESS": "Success", + "ERROR": "Error", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Download desktop app", + "EXPORT": "Export Data", + "SUBSCRIPTION": "Subscription", + "SUBSCRIBE": "Subscribe", + "MANAGEMENT_PORTAL": "Manage payment method", + "MANAGE_FAMILY_PORTAL": "Manage family", + "LEAVE_FAMILY_PLAN": "Leave family plan", + "LEAVE": "Leave", + "LEAVE_FAMILY_CONFIRM": "Are you sure that you want to leave family plan?", + "CHOOSE_PLAN": "Choose your plan", + "MANAGE_PLAN": "Manage your subscription", + "ACTIVE": "Active", + "OFFLINE_MSG": "You are offline, cached memories are being shown", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "You are on a family plan managed by", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renews on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Ends on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Your subscription will be cancelled on {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "You have exceeded your storage quota, please upgrade", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Subscription purchase failed , please try again", + "SUBSCRIPTION_UPDATE_FAILED": "Subscription updated failed , please try again", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Update payment method", + "MONTHLY": "Monthly", + "YEARLY": "Yearly", + "UPDATE_SUBSCRIPTION_MESSAGE": "Are you sure you want to change your plan?", + "UPDATE_SUBSCRIPTION": "Change plan", + "CANCEL_SUBSCRIPTION": "Cancel subscription", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Reactivate subscription", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Rename", + "RENAME_FILE": "Rename file", + "RENAME_COLLECTION": "Rename album", + "DELETE_COLLECTION_TITLE": "Delete album?", + "DELETE_COLLECTION": "Delete album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Delete photos", + "KEEP_PHOTOS": "Keep photos", + "SHARE": "Share", + "SHARE_COLLECTION": "Share album", + "SHAREES": "Shared with", + "SHARE_WITH_SELF": "Oops, you cannot share with yourself", + "ALREADY_SHARED": "Oops, you're already sharing this with {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Search", + "SEARCH_RESULTS": "Search results", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Location", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "File name", + "THING": "Content", + "FILE_CAPTION": "Description", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No memories", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Add to album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "People", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "File name", + "CAPTION_PLACEHOLDER": "Add a description", + "LOCATION": "Location", + "SHOW_ON_MAP": "View on OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Two-factor", + "TWO_FACTOR_AUTHENTICATION": "Two-factor authentication", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Enter the code manually", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "Scan QR code instead", + "ENABLE_TWO_FACTOR": "Enable two-factor", + "ENABLE": "Enable", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Incorrect code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Export data", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Send OTP", + "EMAIl_ALREADY_OWNED": "Email already taken", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Failed uploads ", + "SKIPPED_FILES": "Ignored uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Skipped videos", + "INPROGRESS_METADATA_EXTRACTION": "In progress", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Large files", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Insufficient storage", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "These files were not uploaded as they exceed the maximum size limit for your storage plan", + "TOO_LARGE_INFO": "These files were not uploaded as they exceed our maximum file size limit", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archive", + "FAVORITES": "Favorites", + "ARCHIVE_COLLECTION": "Archive album", + "ARCHIVE_SECTION_NAME": "Archive", + "ALL_SECTION_NAME": "All", + "MOVE_TO_COLLECTION": "Move to album", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Move", + "ADD": "Add", + "REMOVE": "Remove", + "YES_REMOVE": "Yes, remove", + "REMOVE_FROM_COLLECTION": "Remove from album", + "TRASH": "Trash", + "MOVE_TO_TRASH": "Move to trash", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Delete permanently", + "RESTORE": "Restore", + "RESTORE_TO_COLLECTION": "Restore to album", + "EMPTY_TRASH": "Empty trash", + "EMPTY_TRASH_TITLE": "Empty trash?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Yes, leave", + "LEAVE_ALBUM": "Leave album", + "LEAVE_SHARED_ALBUM_TITLE": "Leave shared album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oldest", + "SORT_BY_UPDATION_TIME_DESCENDING": "Last updated", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Compress", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Install", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - not found", + "LINK_EXPIRED": "Link expired", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Folder", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "All Albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Create account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "You", + "FAMILY": "Family", + "FREE": "free", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB for 1 year", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authenticate", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Advanced", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "PREFERENCES": "Preferences", + "LANGUAGE": "Language", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "after an hour", + "DAY": "after a day", + "WEEK": "after a week", + "MONTH": "after a month", + "YEAR": "after a year" + }, + "COPY_LINK": "Copy link", + "DONE": "Done", + "LINK_SHARE_TITLE": "Or share a link", + "REMOVE_LINK": "Remove link", + "CREATE_PUBLIC_SHARING": "Create public link", + "PUBLIC_LINK_CREATED": "Public link created", + "PUBLIC_LINK_ENABLED": "Public link enabled", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/fi-FI/translation.json b/web/apps/auth/public/locales/fi-FI/translation.json new file mode 100644 index 000000000..6870df319 --- /dev/null +++ b/web/apps/auth/public/locales/fi-FI/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private backups
for your memories
", + "HERO_SLIDE_1": "End-to-end encrypted by default", + "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", + "HERO_SLIDE_2": "Designed to outlive", + "HERO_SLIDE_3_TITLE": "
Available
everywhere
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Login", + "SIGN_UP": "Signup", + "NEW_USER": "New to ente", + "EXISTING_USER": "Existing user", + "ENTER_NAME": "Enter name", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Add a name so that your friends know who to thank for these great photos!", + "ENTER_EMAIL": "Enter email address", + "EMAIL_ERROR": "Enter a valid email", + "REQUIRED": "Required", + "EMAIL_SENT": "Verification code sent to {{email}}", + "CHECK_INBOX": "Please check your inbox (and spam) to complete verification", + "ENTER_OTT": "Verification code", + "RESEND_MAIL": "Resend code", + "VERIFY": "Verify", + "UNKNOWN_ERROR": "Something went wrong, please try again", + "INVALID_CODE": "Invalid verification code", + "EXPIRED_CODE": "Your verification code has expired", + "SENDING": "Sending...", + "SENT": "Sent!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Enter password to unlock the album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Set password", + "VERIFY_PASSPHRASE": "Sign in", + "INCORRECT_PASSPHRASE": "Incorrect password", + "ENTER_ENC_PASSPHRASE": "Please enter a password that we can use to encrypt your data", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "Welcome to ", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Where your best photos live", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generating encryption keys...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Confirm password", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Passwords don't match", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "New album", + "ENTER_ALBUM_NAME": "Album name", + "CLOSE_OPTION": "Close (Esc)", + "ENTER_FILE_NAME": "File name", + "CLOSE": "Close", + "NO": "No", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Upload", + "IMPORT": "Import", + "ADD_PHOTOS": "Add photos", + "ADD_MORE_PHOTOS": "Add more photos", + "add_photos_one": "Add 1 item", + "add_photos_other": "Add {{count, number}} items", + "SELECT_PHOTOS": "Select photos", + "FILE_UPLOAD": "File Upload", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparing to upload", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Backup complete" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Subscription expired", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Storage limit exceeded", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Don't have an account", + "ACCOUNT_EXISTS": "Already have an account", + "CREATE": "Create", + "DOWNLOAD": "Download", + "DOWNLOAD_OPTION": "Download (D)", + "DOWNLOAD_FAVORITES": "Download favorites", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copy as PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Upload your first photo", + "IMPORT_YOUR_FOLDERS": "Import your folders", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Delete files?", + "TRASH_FILE_TITLE": "Delete file?", + "DELETE_FILES_TITLE": "Delete immediately?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Delete", + "DELETE_OPTION": "Delete (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "A single album", + "OR": "or", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Your session has expired, please login again to continue", + "SESSION_EXPIRED": "Session expired", + "PASSWORD_GENERATION_FAILED": "Your browser was unable to generate a strong key that meets ente's encryption standards, please try using the mobile app or another browser", + "CHANGE_PASSWORD": "Change password", + "GO_BACK": "Go back", + "RECOVERY_KEY": "Recovery key", + "SAVE_LATER": "Do this later", + "SAVE": "Save Key", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Forgot password", + "RECOVER_ACCOUNT": "Recover account", + "RECOVERY_KEY_HINT": "Recovery key", + "RECOVER": "Recover", + "NO_RECOVERY_KEY": "No recovery key?", + "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", + "CONTACT_SUPPORT": "Contact support", + "REQUEST_FEATURE": "Request Feature", + "SUPPORT": "Support", + "CONFIRM": "Confirm", + "CANCEL": "Cancel", + "LOGOUT": "Logout", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Are you sure you want to logout?", + "CHANGE_EMAIL": "Change email", + "OK": "OK", + "SUCCESS": "Success", + "ERROR": "Error", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Download desktop app", + "EXPORT": "Export Data", + "SUBSCRIPTION": "Subscription", + "SUBSCRIBE": "Subscribe", + "MANAGEMENT_PORTAL": "Manage payment method", + "MANAGE_FAMILY_PORTAL": "Manage family", + "LEAVE_FAMILY_PLAN": "Leave family plan", + "LEAVE": "Leave", + "LEAVE_FAMILY_CONFIRM": "Are you sure that you want to leave family plan?", + "CHOOSE_PLAN": "Choose your plan", + "MANAGE_PLAN": "Manage your subscription", + "ACTIVE": "Active", + "OFFLINE_MSG": "You are offline, cached memories are being shown", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "You are on a family plan managed by", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renews on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Ends on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Your subscription will be cancelled on {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "You have exceeded your storage quota, please upgrade", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Subscription purchase failed , please try again", + "SUBSCRIPTION_UPDATE_FAILED": "Subscription updated failed , please try again", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Update payment method", + "MONTHLY": "Monthly", + "YEARLY": "Yearly", + "UPDATE_SUBSCRIPTION_MESSAGE": "Are you sure you want to change your plan?", + "UPDATE_SUBSCRIPTION": "Change plan", + "CANCEL_SUBSCRIPTION": "Cancel subscription", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Reactivate subscription", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Rename", + "RENAME_FILE": "Rename file", + "RENAME_COLLECTION": "Rename album", + "DELETE_COLLECTION_TITLE": "Delete album?", + "DELETE_COLLECTION": "Delete album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Delete photos", + "KEEP_PHOTOS": "Keep photos", + "SHARE": "Share", + "SHARE_COLLECTION": "Share album", + "SHAREES": "Shared with", + "SHARE_WITH_SELF": "Oops, you cannot share with yourself", + "ALREADY_SHARED": "Oops, you're already sharing this with {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Search", + "SEARCH_RESULTS": "Search results", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Location", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "File name", + "THING": "Content", + "FILE_CAPTION": "Description", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No memories", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Add to album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "People", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "File name", + "CAPTION_PLACEHOLDER": "Add a description", + "LOCATION": "Location", + "SHOW_ON_MAP": "View on OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Two-factor", + "TWO_FACTOR_AUTHENTICATION": "Two-factor authentication", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Enter the code manually", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "Scan QR code instead", + "ENABLE_TWO_FACTOR": "Enable two-factor", + "ENABLE": "Enable", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Incorrect code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Export data", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Send OTP", + "EMAIl_ALREADY_OWNED": "Email already taken", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Failed uploads ", + "SKIPPED_FILES": "Ignored uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Skipped videos", + "INPROGRESS_METADATA_EXTRACTION": "In progress", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Large files", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Insufficient storage", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "These files were not uploaded as they exceed the maximum size limit for your storage plan", + "TOO_LARGE_INFO": "These files were not uploaded as they exceed our maximum file size limit", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archive", + "FAVORITES": "Favorites", + "ARCHIVE_COLLECTION": "Archive album", + "ARCHIVE_SECTION_NAME": "Archive", + "ALL_SECTION_NAME": "All", + "MOVE_TO_COLLECTION": "Move to album", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Move", + "ADD": "Add", + "REMOVE": "Remove", + "YES_REMOVE": "Yes, remove", + "REMOVE_FROM_COLLECTION": "Remove from album", + "TRASH": "Trash", + "MOVE_TO_TRASH": "Move to trash", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Delete permanently", + "RESTORE": "Restore", + "RESTORE_TO_COLLECTION": "Restore to album", + "EMPTY_TRASH": "Empty trash", + "EMPTY_TRASH_TITLE": "Empty trash?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Yes, leave", + "LEAVE_ALBUM": "Leave album", + "LEAVE_SHARED_ALBUM_TITLE": "Leave shared album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oldest", + "SORT_BY_UPDATION_TIME_DESCENDING": "Last updated", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Compress", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Install", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - not found", + "LINK_EXPIRED": "Link expired", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Folder", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "All Albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Create account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "You", + "FAMILY": "Family", + "FREE": "free", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB for 1 year", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authenticate", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Advanced", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "PREFERENCES": "Preferences", + "LANGUAGE": "Language", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "after an hour", + "DAY": "after a day", + "WEEK": "after a week", + "MONTH": "after a month", + "YEAR": "after a year" + }, + "COPY_LINK": "Copy link", + "DONE": "Done", + "LINK_SHARE_TITLE": "Or share a link", + "REMOVE_LINK": "Remove link", + "CREATE_PUBLIC_SHARING": "Create public link", + "PUBLIC_LINK_CREATED": "Public link created", + "PUBLIC_LINK_ENABLED": "Public link enabled", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/fr-FR/translation.json b/web/apps/auth/public/locales/fr-FR/translation.json new file mode 100644 index 000000000..b94bc3973 --- /dev/null +++ b/web/apps/auth/public/locales/fr-FR/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Sauvegardes privées
pour vos souvenirs
", + "HERO_SLIDE_1": "Chiffrement de bout en bout par défaut", + "HERO_SLIDE_2_TITLE": "
Sécurisé
dans un abri antiatomique
", + "HERO_SLIDE_2": "Conçu pour survivre", + "HERO_SLIDE_3_TITLE": "
Disponible
en tout lieu
", + "HERO_SLIDE_3": "Android, iOS, Web, Ordinateur", + "LOGIN": "Connexion", + "SIGN_UP": "Inscription", + "NEW_USER": "Nouveau sur ente", + "EXISTING_USER": "Utilisateur existant", + "ENTER_NAME": "Saisir un nom", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Ajouter un nom afin que vos amis sachent qui remercier pour ces magnifiques photos!", + "ENTER_EMAIL": "Saisir l'adresse e-mail", + "EMAIL_ERROR": "Saisir un e-mail valide", + "REQUIRED": "Nécessaire", + "EMAIL_SENT": "Code de vérification envoyé à {{email}}", + "CHECK_INBOX": "Veuillez consulter votre boite de réception (et indésirables) pour poursuivre la vérification", + "ENTER_OTT": "Code de vérification", + "RESEND_MAIL": "Renvoyer le code", + "VERIFY": "Vérifier", + "UNKNOWN_ERROR": "Quelque chose s'est mal passé, veuillez recommencer", + "INVALID_CODE": "Code de vérification non valide", + "EXPIRED_CODE": "Votre code de vérification a expiré", + "SENDING": "Envoi...", + "SENT": "Envoyé!", + "PASSWORD": "Mot de passe", + "LINK_PASSWORD": "Saisir le mot de passe pour déverrouiller l'album", + "RETURN_PASSPHRASE_HINT": "Mot de passe", + "SET_PASSPHRASE": "Définir le mot de passe", + "VERIFY_PASSPHRASE": "Connexion", + "INCORRECT_PASSPHRASE": "Mot de passe non valide", + "ENTER_ENC_PASSPHRASE": "Veuillez saisir un mot de passe que nous pourrons utiliser pour chiffrer vos données", + "PASSPHRASE_DISCLAIMER": "Nous ne stockons pas votre mot de passe, donc si vous le perdez, nous ne pourrons pas vous aider à récupérer vos données sans une clé de récupération.", + "WELCOME_TO_ENTE_HEADING": "Bienvenue sur ", + "WELCOME_TO_ENTE_SUBHEADING": "Stockage et partage photo avec cryptage de bout en bout", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Là où vivent vos meilleures photos", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Génération des clés de chiffrement...", + "PASSPHRASE_HINT": "Mot de passe", + "CONFIRM_PASSPHRASE": "Confirmer le mot de passe", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Les mots de passe ne correspondent pas", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "Ceci est une fonction de navigateur dédiée aux développeurs. Veuillez ne pas copier-coller un code non vérifié à cet endroit.", + "CREATE_COLLECTION": "Nouvel album", + "ENTER_ALBUM_NAME": "Nom de l'album", + "CLOSE_OPTION": "Fermer (Échap)", + "ENTER_FILE_NAME": "Nom du fichier", + "CLOSE": "Fermer", + "NO": "Non", + "NOTHING_HERE": "Il n'y a encore rien à voir ici 👀", + "UPLOAD": "Charger", + "IMPORT": "Importer", + "ADD_PHOTOS": "Ajouter des photos", + "ADD_MORE_PHOTOS": "Ajouter plus de photos", + "add_photos_one": "Ajouter une photo", + "add_photos_other": "Ajouter {{count}} photos", + "SELECT_PHOTOS": "Sélectionner des photos", + "FILE_UPLOAD": "Fichier chargé", + "UPLOAD_STAGE_MESSAGE": { + "0": "Préparation du chargement", + "1": "Lecture des fichiers de métadonnées de Google", + "2": "Métadonnées des fichiers {{uploadCounter.finished}} / {{uploadCounter.total}} extraites", + "3": "{{uploadCounter.finished}} / {{uploadCounter.total}} fichiers sauvegardés", + "4": "Annulation des chargements restants", + "5": "Sauvegarde terminée" + }, + "FILE_NOT_UPLOADED_LIST": "Les fichiers suivants n'ont pas été chargés", + "SUBSCRIPTION_EXPIRED": "Abonnement expiré", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Votre abonnement a expiré, veuillez le renouveler ", + "STORAGE_QUOTA_EXCEEDED": "Limite de stockage atteinte", + "INITIAL_LOAD_DELAY_WARNING": "La première consultation peut prendre du temps", + "USER_DOES_NOT_EXIST": "Désolé, impossible de trouver un utilisateur avec cet e-mail", + "NO_ACCOUNT": "Je n'ai pas de compte", + "ACCOUNT_EXISTS": "J'ai déjà un compte", + "CREATE": "Créer", + "DOWNLOAD": "Télécharger", + "DOWNLOAD_OPTION": "Télécharger (D)", + "DOWNLOAD_FAVORITES": "Télécharger les favoris", + "DOWNLOAD_UNCATEGORIZED": "Télécharger les hors catégories", + "DOWNLOAD_HIDDEN_ITEMS": "Télécharger les fichiers masqués", + "COPY_OPTION": "Copier en PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Plein écran (F)", + "ZOOM_IN_OUT": "Zoom +/-", + "PREVIOUS": "Précédent (←)", + "NEXT": "Suivant (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Chargez votre 1ere photo", + "IMPORT_YOUR_FOLDERS": "Importez vos dossiers", + "UPLOAD_DROPZONE_MESSAGE": "Déposez pour sauvegarder vos fichiers", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Déposez pour ajouter un dossier surveillé", + "TRASH_FILES_TITLE": "Supprimer les fichiers ?", + "TRASH_FILE_TITLE": "Supprimer le fichier ?", + "DELETE_FILES_TITLE": "Supprimer immédiatement?", + "DELETE_FILES_MESSAGE": "Les fichiers sélectionnés seront définitivement supprimés de votre compte ente.", + "DELETE": "Supprimer", + "DELETE_OPTION": "Supprimer (DEL)", + "FAVORITE_OPTION": "Favori (L)", + "UNFAVORITE_OPTION": "Non favori (L)", + "MULTI_FOLDER_UPLOAD": "Plusieurs dossiers détectés", + "UPLOAD_STRATEGY_CHOICE": "Voulez-vous les charger dans", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Un seul album", + "OR": "ou", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Albums séparés", + "SESSION_EXPIRED_MESSAGE": "Votre session a expiré, veuillez vous reconnecter pour poursuivre", + "SESSION_EXPIRED": "Session expiré", + "PASSWORD_GENERATION_FAILED": "Votre navigateur ne permet pas de générer une clé forte correspondant aux standards de chiffrement de ente, veuillez réessayer en utilisant l'appli mobile ou un autre navigateur", + "CHANGE_PASSWORD": "Modifier le mot de passe", + "GO_BACK": "Retour", + "RECOVERY_KEY": "Clé de récupération", + "SAVE_LATER": "Plus tard", + "SAVE": "Sauvegarder la clé", + "RECOVERY_KEY_DESCRIPTION": "Si vous oubliez votre mot de passe, la seule façon de récupérer vos données sera grâce à cette clé.", + "RECOVER_KEY_GENERATION_FAILED": "Le code de récupération ne peut être généré, veuillez réessayer", + "KEY_NOT_STORED_DISCLAIMER": "Nous ne stockons pas cette clé, veuillez donc la sauvegarder dans un endroit sûr", + "FORGOT_PASSWORD": "Mot de passe oublié", + "RECOVER_ACCOUNT": "Récupérer le compte", + "RECOVERY_KEY_HINT": "Clé de récupération", + "RECOVER": "Récupérer", + "NO_RECOVERY_KEY": "Pas de clé de récupération?", + "INCORRECT_RECOVERY_KEY": "Clé de récupération non valide", + "SORRY": "Désolé", + "NO_RECOVERY_KEY_MESSAGE": "En raison de notre protocole de chiffrement de bout en bout, vos données ne peuvent être décryptées sans votre mot de passe ou clé de récupération", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Veuillez envoyer un e-mail à {{emailID}} depuis votre adresse enregistrée", + "CONTACT_SUPPORT": "Contacter le support", + "REQUEST_FEATURE": "Soumettre une idée", + "SUPPORT": "Support", + "CONFIRM": "Confirmer", + "CANCEL": "Annuler", + "LOGOUT": "Déconnexion", + "DELETE_ACCOUNT": "Supprimer le compte", + "DELETE_ACCOUNT_MESSAGE": "

Veuillez envoyer un e-mail à {{emailID}}depuis Votre adresse enregistrée.

Votre demande sera traitée dans les 72 heures.

", + "LOGOUT_MESSAGE": "Voulez-vous vraiment vous déconnecter?", + "CHANGE_EMAIL": "Modifier l'e-mail", + "OK": "Ok", + "SUCCESS": "Parfait", + "ERROR": "Erreur", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Installez notre application Android or iOS pour sauvegarder automatiquement toutes vos photos", + "DOWNLOAD_APP_MESSAGE": "Désolé, cette opération est actuellement supportée uniquement sur notre appli pour ordinateur", + "DOWNLOAD_APP": "Télécharger l'appli pour ordinateur", + "EXPORT": "Exporter des données", + "SUBSCRIPTION": "Abonnement", + "SUBSCRIBE": "S'abonner", + "MANAGEMENT_PORTAL": "Gérer le mode de paiement", + "MANAGE_FAMILY_PORTAL": "Gérer la famille", + "LEAVE_FAMILY_PLAN": "Quitter le plan famille", + "LEAVE": "Quitter", + "LEAVE_FAMILY_CONFIRM": "Êtes-vous certains de vouloir quitter le plan famille?", + "CHOOSE_PLAN": "Choisir votre plan", + "MANAGE_PLAN": "Gérer votre abonnement", + "ACTIVE": "Actif", + "OFFLINE_MSG": "Vous êtes hors-ligne, les mémoires cache sont affichées", + "FREE_SUBSCRIPTION_INFO": "Vous êtes sur le plan gratuit qui expire le {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Vous êtes sur le plan famille géré par", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renouveler le {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Pris fin le {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Votre abonnement sera annulé le {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Vous avez dépassé votre quota de stockage, veuillez mettre à niveau ", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Nous avons reçu votre paiement

Votre abonnement est valide jusqu'au {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Votre achat est annulé, veuillez réessayer si vous souhaitez vous abonner", + "SUBSCRIPTION_PURCHASE_FAILED": "Échec lors de l'achat de l'abonnement, veuillez réessayer", + "SUBSCRIPTION_UPDATE_FAILED": "Échec lors de la mise à niveau de l'abonnement, veuillez réessayer", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Désolé, échec de paiement lors de la saisie de votre carte, veuillez mettr eà jour votre moyen de paiement et réessayer", + "STRIPE_AUTHENTICATION_FAILED": "Nous n'avons pas pu authentifier votre moyen de paiement. Veuillez choisir un moyen différent et réessayer", + "UPDATE_PAYMENT_METHOD": "Mise à jour du moyen de paiement", + "MONTHLY": "Mensuel", + "YEARLY": "Annuel", + "UPDATE_SUBSCRIPTION_MESSAGE": "Êtes-vous certains de vouloir changer de plan?", + "UPDATE_SUBSCRIPTION": "Changer de plan", + "CANCEL_SUBSCRIPTION": "Annuler l'abonnement", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Toutes vos données seront supprimées de nos serveurs à la fin de cette période d'abonnement.

Voulez-vous vraiment annuler votre abonnement?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Échec lors de l'annulation de l'abonnement", + "SUBSCRIPTION_CANCEL_SUCCESS": "Votre abonnement a bien été annulé", + "REACTIVATE_SUBSCRIPTION": "Réactiver l'abonnement", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Une fois réactivée, vous serrez facturé de {{val, datetime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Votre abonnement est bien activé ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Échec lors de la réactivation de l'abonnement", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Merci", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Annuler l'abonnement mobile", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Veuillez annuler votre abonnement depuis l'appli mobile pour activer un abonnement ici", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Veuillez nous contacter à {{emailID}} pour gérer votre abonnement", + "RENAME": "Renommer", + "RENAME_FILE": "Renommer le fichier", + "RENAME_COLLECTION": "Renommer l'album", + "DELETE_COLLECTION_TITLE": "Supprimer l'album?", + "DELETE_COLLECTION": "Supprimer l'album", + "DELETE_COLLECTION_MESSAGE": "Supprimer aussi les photos (et vidéos) présentes dans cet album depuis tous les autres albums dont ils font partie?", + "DELETE_PHOTOS": "Supprimer des photos", + "KEEP_PHOTOS": "Conserver des photos", + "SHARE": "Partager", + "SHARE_COLLECTION": "Partager l'album", + "SHAREES": "Partager avec", + "SHARE_WITH_SELF": "Oups, vous ne pouvez pas partager avec vous-même", + "ALREADY_SHARED": "Oups, vous partager déjà cela avec {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Partage d'album non autorisé", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Le partage est désactivé pour les comptes gratuits", + "DOWNLOAD_COLLECTION": "Télécharger l'album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Êtes-vous certains de vouloir télécharger l'album complet?

Tous les fichiers seront mis en file d'attente pour un téléchargement fractionné

", + "CREATE_ALBUM_FAILED": "Échec de création de l'album , veuillez réessayer", + "SEARCH": "Recherche", + "SEARCH_RESULTS": "Résultats de la recherche", + "NO_RESULTS": "Aucun résultat trouvé", + "SEARCH_HINT": "Recherche d'albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "l'album", + "LOCATION": "Emplacement", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "Nom de fichier", + "THING": "Chose", + "FILE_CAPTION": "Description", + "FILE_TYPE": "Type de fichier", + "CLIP": "Magique" + }, + "photos_count_zero": "Pas de souvenirs", + "photos_count_one": "1 souvenir", + "photos_count_other": "{{count}} souvenirs", + "TERMS_AND_CONDITIONS": "J'accepte les conditions et la politique de confidentialité", + "ADD_TO_COLLECTION": "Ajouter à l'album", + "SELECTED": "Sélectionné", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Cette vidéo ne peut pas être lue sur votre navigateur", + "PEOPLE": "Visages", + "INDEXING_SCHEDULED": "L'indexation est planifiée...", + "ANALYZING_PHOTOS": "analyse des nouvelles photos {{indexStatus.nSyncedFiles}} sur {{indexStatus.nTotalFiles}} effectué)...", + "INDEXING_PEOPLE": "indexation des visages dans {{indexStatus.nSyncedFiles}} photos...", + "INDEXING_DONE": "{{indexStatus.nSyncedFiles}} photos indexées", + "UNIDENTIFIED_FACES": "visages non-identifiés", + "OBJECTS": "objets", + "TEXT": "texte", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "Nom de fichier", + "CAPTION_PLACEHOLDER": "Ajouter une description", + "LOCATION": "Emplacement", + "SHOW_ON_MAP": "Visualiser sur OpenStreetMap", + "MAP": "Carte", + "MAP_SETTINGS": "Paramètres de la carte", + "ENABLE_MAPS": "Activer la carte?", + "ENABLE_MAP": "Activer la carte", + "DISABLE_MAPS": "Désactiver la carte?", + "ENABLE_MAP_DESCRIPTION": "

Cette fonction affiche vos photos sur une carte du monde.

La carte est hébergée par OpenStreetMap, et les emplacements exacts de vos photos ne sont jamais partagés.

Vous pouvez désactiver cette fonction à tout moment dans des paramètres.

", + "DISABLE_MAP_DESCRIPTION": "

Cette fonction désactive l'affichage de vos photos sur une carte du monde.

Vous pouvez activer cette fonction à tout moment dans les Paramètres.

", + "DISABLE_MAP": "Désactiver la carte", + "DETAILS": "Détails", + "VIEW_EXIF": "Visualiser toutes les données EXIF", + "NO_EXIF": "Aucune donnée EXIF", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Double authentification", + "TWO_FACTOR_AUTHENTICATION": "Authentification double-facteur", + "TWO_FACTOR_QR_INSTRUCTION": "Scannez le QRCode ci-dessous avec une appli d'authentification", + "ENTER_CODE_MANUALLY": "Saisir le code manuellement", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Veuillez saisir ce code dans votre appli d'authentification", + "SCAN_QR_CODE": "Scannez le QRCode de préférence", + "ENABLE_TWO_FACTOR": "Activer la double-authentification", + "ENABLE": "Activer", + "LOST_DEVICE": "Perte de l'appareil identificateur", + "INCORRECT_CODE": "Code non valide", + "TWO_FACTOR_INFO": "Rajoutez une couche de sécurité supplémentaire afin de pas utiliser simplement votre e-mail et mot de passe pour vous connecter à votre compte", + "DISABLE_TWO_FACTOR_LABEL": "Désactiver la double-authentification", + "UPDATE_TWO_FACTOR_LABEL": "Mise à jour de votre appareil identificateur", + "DISABLE": "Désactiver", + "RECONFIGURE": "Reconfigurer", + "UPDATE_TWO_FACTOR": "Mise à jour de la double-authentification", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuer annulera tous les identificateurs précédemment configurés", + "UPDATE": "Mise à jour", + "DISABLE_TWO_FACTOR": "Désactiver la double-authentification", + "DISABLE_TWO_FACTOR_MESSAGE": "Êtes-vous certains de vouloir désactiver la double-authentification", + "TWO_FACTOR_DISABLE_FAILED": "Échec de désactivation de la double-authentification, veuillez réessayer", + "EXPORT_DATA": "Exporter les données", + "SELECT_FOLDER": "Sélectionner un dossier", + "DESTINATION": "Destination", + "START": "Démarrer", + "LAST_EXPORT_TIME": "Horaire du dernier export", + "EXPORT_AGAIN": "Resynchro", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Stockage local non accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Votre navigateur ou un complément bloque ente qui ne peut sauvegarder les données sur votre stockage local. Veuillez relancer cette page après avoir changé de mode de navigation.", + "SEND_OTT": "Envoyer l'OTP", + "EMAIl_ALREADY_OWNED": "Cet e-mail est déjà pris", + "ETAGS_BLOCKED": "

Nosu n'avons pas pu charger les fichiers suivants à cause de la configuration de votre navigateur.

Veuillez désactiver tous les compléments qui pourraient empêcher ente d'utiliser les eTags pour charger de larges fichiers, ou bien utilisez notre appli pour ordinateurpour une meilleure expérience lors des chargements.

", + "SKIPPED_VIDEOS_INFO": "

Actuellement, nous ne supportons pas l'ajout de videos via des liens publics.

Pour partager des vidéos, veuillez vous connecter àente et partager en utilisant l'e-mail concerné.

", + "LIVE_PHOTOS_DETECTED": "Les fichiers photos et vidéos depuis votre espace Live Photos ont été fusionnés en un seul fichier", + "RETRY_FAILED": "Réessayer les chargements ayant échoués", + "FAILED_UPLOADS": "Chargements échoués ", + "SKIPPED_FILES": "Chargements ignorés", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Échec de création d'une miniature", + "UNSUPPORTED_FILES": "Fichiers non supportés", + "SUCCESSFUL_UPLOADS": "Chargements réussis", + "SKIPPED_INFO": "Ignorés car il y a des fichiers avec des noms identiques dans le même album", + "UNSUPPORTED_INFO": "ente ne supporte pas encore ces formats de fichiers", + "BLOCKED_UPLOADS": "Chargements bloqués", + "SKIPPED_VIDEOS": "Vidéos ignorées", + "INPROGRESS_METADATA_EXTRACTION": "En cours", + "INPROGRESS_UPLOADS": "Chargements en cours", + "TOO_LARGE_UPLOADS": "Gros fichiers", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Stockage insuffisant", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Ces fichiers n'ont pas été chargés car ils dépassent la taille maximale de votre plan de stockage", + "TOO_LARGE_INFO": "Ces fichiers n'ont pas été chargés car ils dépassent notre taille limite par fichier", + "THUMBNAIL_GENERATION_FAILED_INFO": "Ces fichiers sont bien chargés, mais nous ne pouvons pas créer de miniatures pour eux.", + "UPLOAD_TO_COLLECTION": "Charger dans l'album", + "UNCATEGORIZED": "Aucune catégorie", + "ARCHIVE": "Archiver", + "FAVORITES": "Favoris", + "ARCHIVE_COLLECTION": "Archiver l'album", + "ARCHIVE_SECTION_NAME": "Archivé", + "ALL_SECTION_NAME": "Tous", + "MOVE_TO_COLLECTION": "Déplacer vers l'album", + "UNARCHIVE": "Désarchiver", + "UNARCHIVE_COLLECTION": "Désarchiver l'album", + "HIDE_COLLECTION": "Masquer l'album", + "UNHIDE_COLLECTION": "Dévoiler l'album", + "MOVE": "Déplacer", + "ADD": "Ajouter", + "REMOVE": "Retirer", + "YES_REMOVE": "Oui, retirer", + "REMOVE_FROM_COLLECTION": "Retirer de l'album", + "TRASH": "Corbeille", + "MOVE_TO_TRASH": "Déplacer vers la corbeille", + "TRASH_FILES_MESSAGE": "Les fichiers sélectionnés seront retirés de tous les albums puis déplacés dans la corbeille.", + "TRASH_FILE_MESSAGE": "Le fichier sera retiré de tous les albums puis déplacé dans la corbeille.", + "DELETE_PERMANENTLY": "Supprimer définitivement", + "RESTORE": "Restaurer", + "RESTORE_TO_COLLECTION": "Restaurer vers l'album", + "EMPTY_TRASH": "Corbeille vide", + "EMPTY_TRASH_TITLE": "Vider la corbeille ?", + "EMPTY_TRASH_MESSAGE": "Ces fichiers seront définitivement supprimés de votre compte ente.", + "LEAVE_SHARED_ALBUM": "Oui, quitter", + "LEAVE_ALBUM": "Quitter l'album", + "LEAVE_SHARED_ALBUM_TITLE": "Quitter l'album partagé?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Vous allez quitter cet album, il ne sera plus visible pour vous.", + "NOT_FILE_OWNER": "Vous ne pouvez pas supprimer les fichiers d'un album partagé", + "CONFIRM_SELF_REMOVE_MESSAGE": "Choisir les objets qui seront retirés de cet album. Ceux qui sont présents uniquement dans cet album seront déplacés comme hors catégorie.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Certains des objets que vous êtes en train de retirer ont été ajoutés par d'autres personnes, vous perdrez l'accès vers ces objets.", + "SORT_BY_CREATION_TIME_ASCENDING": "Plus anciens", + "SORT_BY_UPDATION_TIME_DESCENDING": "Dernière mise à jour", + "SORT_BY_NAME": "Nom", + "COMPRESS_THUMBNAILS": "Compresser les miniatures", + "THUMBNAIL_REPLACED": "Les miniatures sont compressées", + "FIX_THUMBNAIL": "Compresser", + "FIX_THUMBNAIL_LATER": "Compresser plus tard", + "REPLACE_THUMBNAIL_NOT_STARTED": "Certaines miniatures de vidéos peuvent être compressées pour gagner de la place. Voulez-vous que ente les compresse?", + "REPLACE_THUMBNAIL_COMPLETED": "Toutes les miniatures ont été compressées", + "REPLACE_THUMBNAIL_NOOP": "Vous n'avez aucune miniature qui peut être encore plus compressée", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Impossible de compresser certaines miniatures, veuillez réessayer", + "FIX_CREATION_TIME": "Réajuster l'heure", + "FIX_CREATION_TIME_IN_PROGRESS": "Réajustement de l'heure", + "CREATION_TIME_UPDATED": "L'heure du fichier a été réajustée", + "UPDATE_CREATION_TIME_NOT_STARTED": "Sélectionnez l'option que vous souhaitez utiliser", + "UPDATE_CREATION_TIME_COMPLETED": "Mise à jour effectuée pour tous les fichiers", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "L'heure du fichier n'a pas été mise à jour pour certains fichiers, veuillez réessayer", + "CAPTION_CHARACTER_LIMIT": "5000 caractères max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Heure personnalisée", + "REOPEN_PLAN_SELECTOR_MODAL": "Rouvrir les plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Échec pour rouvrir les plans", + "INSTALL": "Installer", + "SHARING_DETAILS": "Détails du partage", + "MODIFY_SHARING": "Modifier le partage", + "ADD_COLLABORATORS": "Ajouter des collaborateurs", + "ADD_NEW_EMAIL": "Ajouter un nouvel email", + "shared_with_people_zero": "Partager avec des personnes spécifiques", + "shared_with_people_one": "Partagé avec 1 personne", + "shared_with_people_other": "Partagé avec {{count, number}} personnes", + "participants_zero": "Aucun participant", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Ajouter un observateur", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} ne pourra plus ajouter de photos à l'album

Il pourra toujours supprimer les photos qu'il a ajoutées

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} pourra ajouter des photos à l'album", + "CONVERT_TO_VIEWER": "Oui, convertir en observateur", + "CONVERT_TO_COLLABORATOR": "Oui, convertir en collaborateur", + "CHANGE_PERMISSION": "Modifier la permission?", + "REMOVE_PARTICIPANT": "Retirer?", + "CONFIRM_REMOVE": "Oui, supprimer", + "MANAGE": "Gérer", + "ADDED_AS": "Ajouté comme", + "COLLABORATOR_RIGHTS": "Les collaborateurs peuvent ajouter des photos et des vidéos à l'album partagé", + "REMOVE_PARTICIPANT_HEAD": "Supprimer le participant", + "OWNER": "Propriétaire", + "COLLABORATORS": "Collaborateurs", + "ADD_MORE": "Ajouter plus", + "VIEWERS": "Visionneurs", + "OR_ADD_EXISTING": "ou sélectionner un fichier existant", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} sera supprimé de l'album

Toutes les photos ajoutées par cette personne seront également supprimées de l'album

", + "NOT_FOUND": "404 - non trouvé", + "LINK_EXPIRED": "Lien expiré", + "LINK_EXPIRED_MESSAGE": "Ce lien à soit expiré soit est supprimé!", + "MANAGE_LINK": "Gérer le lien", + "LINK_TOO_MANY_REQUESTS": "Désolé, cet album a été consulté sur trop d'appareils !", + "FILE_DOWNLOAD": "Autoriser les téléchargements", + "LINK_PASSWORD_LOCK": "Verrou par mot de passe", + "PUBLIC_COLLECT": "Autoriser l'ajout de photos", + "LINK_DEVICE_LIMIT": "Limite d'appareil", + "NO_DEVICE_LIMIT": "Aucune", + "LINK_EXPIRY": "Expiration du lien", + "NEVER": "Jamais", + "DISABLE_FILE_DOWNLOAD": "Désactiver le téléchargement", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Êtes-vous certains de vouloir désactiver le bouton de téléchargement pour les fichiers?

Ceux qui les visualisent pourront tout de même faire des captures d'écrans ou sauvegarder une copie de vos photos en utilisant des outils externes.

", + "MALICIOUS_CONTENT": "Contient du contenu malveillant", + "COPYRIGHT": "Enfreint les droits d'une personne que je réprésente", + "SHARED_USING": "Partagé en utilisant ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Utilisez le code {{referralCode}} pour obtenir 10 Go gratuits", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Désactiver le verrouillage par mot de passe", + "DISABLE_PASSWORD_MESSAGE": "Êtes-vous certains de vouloir désactiver le verrouillage par mot de passe ?", + "PASSWORD_LOCK": "Mot de passe verrou", + "LOCK": "Verrouiller", + "DOWNLOAD_UPLOAD_LOGS": "Journaux de débugs", + "UPLOAD_FILES": "Fichier", + "UPLOAD_DIRS": "Dossier", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "Déduplication de fichiers", + "AUTHENTICATOR_SECTION": "Authentificateur", + "NO_DUPLICATES_FOUND": "Vous n'avez aucun fichier dédupliqué pouvant être nettoyé", + "CLUB_BY_CAPTURE_TIME": "Durée de la capture par club", + "FILES": "Fichiers", + "EACH": "Chacun", + "DEDUPLICATE_BASED_ON_SIZE": "Les fichiers suivants ont été clubbed, basé sur leurs tailles, veuillez corriger et supprimer les objets que vous pensez être dupliqués", + "STOP_ALL_UPLOADS_MESSAGE": "Êtes-vous certains de vouloir arrêter tous les chargements en cours?", + "STOP_UPLOADS_HEADER": "Arrêter les chargements ?", + "YES_STOP_UPLOADS": "Oui, arrêter tout", + "STOP_DOWNLOADS_HEADER": "Arrêter le téléchargement ?", + "YES_STOP_DOWNLOADS": "Oui, arrêter les téléchargements", + "STOP_ALL_DOWNLOADS_MESSAGE": "Êtes-vous certains de vouloir arrêter tous les chargements en cours?", + "albums_one": "1 album", + "albums_other": "{{count}} albums", + "ALL_ALBUMS": "Tous les albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "Tous les albums masqués", + "HIDDEN_ALBUMS": "Albums masqués", + "HIDDEN_ITEMS": "Éléments masqués", + "HIDDEN_ITEMS_SECTION_NAME": "Éléments masqués", + "ENTER_TWO_FACTOR_OTP": "Saisir le code à 6 caractères de votre appli d'authentification.", + "CREATE_ACCOUNT": "Créer un compte", + "COPIED": "Copié", + "CANVAS_BLOCKED_TITLE": "Impossible de créer une miniature", + "CANVAS_BLOCKED_MESSAGE": "

Il semblerait que votre navigateur ait désactivé l'accès au canevas, qui est nécessaire pour créer les miniatures de vos photos

Veuillez activer l'accès au canevas du navigateur, ou consulter notre appli pour ordinateur

", + "WATCH_FOLDERS": "Voir les dossiers", + "UPGRADE_NOW": "Mettre à niveau maintenant", + "RENEW_NOW": "Renouveler maintenant", + "STORAGE": "Stockage", + "USED": "utilisé", + "YOU": "Vous", + "FAMILY": "Famille", + "FREE": "gratuit", + "OF": "de", + "WATCHED_FOLDERS": "Voir les dossiers", + "NO_FOLDERS_ADDED": "Aucun dossiers d'ajouté!", + "FOLDERS_AUTOMATICALLY_MONITORED": "Les dossiers que vous ajoutez ici seront supervisés automatiquement", + "UPLOAD_NEW_FILES_TO_ENTE": "Charger de nouveaux fichiers sur ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Retirer de ente les fichiers supprimés", + "ADD_FOLDER": "Ajouter un dossier", + "STOP_WATCHING": "Arrêter de voir", + "STOP_WATCHING_FOLDER": "Arrêter de voir le dossier?", + "STOP_WATCHING_DIALOG_MESSAGE": "Vos fichiers existants ne seront pas supprimés, mais ente arrêtera automatiquement de mettre à jour le lien de l'album à chaque changements sur ce dossier.", + "YES_STOP": "Oui, arrêter", + "MONTH_SHORT": "mo", + "YEAR": "année", + "FAMILY_PLAN": "Plan famille", + "DOWNLOAD_LOGS": "Télécharger les logs", + "DOWNLOAD_LOGS_MESSAGE": "

Cela va télécharger les journaux de débug, que vous pourrez nosu envoyer par e-mail pour nous aider à résoudre votre problàme .

Veuillez noter que les noms de fichiers seront inclus .

", + "CHANGE_FOLDER": "Modifier le dossier", + "TWO_MONTHS_FREE": "Obtenir 2 mois gratuits sur les plans annuels", + "GB": "Go", + "POPULAR": "Populaire", + "FREE_PLAN_OPTION_LABEL": "Poursuivre avec la version d'essai gratuite", + "FREE_PLAN_DESCRIPTION": "1 Go pour 1 an", + "CURRENT_USAGE": "L'utilisation actuelle est de {{usage}}", + "WEAK_DEVICE": "Le navigateur que vous utilisez n'est pas assez puissant pour chiffrer vos photos. Veuillez essayer de vous connecter à ente sur votre ordinateur, ou télécharger l'appli ente mobile/ordinateur.", + "DRAG_AND_DROP_HINT": "Sinon glissez déposez dans la fenêtre ente", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "

Vos données chargées seront programmées pour suppression, et votre comptre sera supprimé définitivement .

Cette action n'est pas reversible.

", + "AUTHENTICATE": "Authentification", + "UPLOADED_TO_SINGLE_COLLECTION": "Chargé dans une seule collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Chargé dans des collections séparées", + "NEVERMIND": "Peu-importe", + "UPDATE_AVAILABLE": "Une mise à jour est disponible", + "UPDATE_INSTALLABLE_MESSAGE": "Une nouvelle version de ente est prête à être installée.", + "INSTALL_NOW": "Installer maintenant", + "INSTALL_ON_NEXT_LAUNCH": "Installer au prochain démarrage", + "UPDATE_AVAILABLE_MESSAGE": "Une nouvelle version de ente est sortie, mais elle ne peut pas être automatiquement téléchargée puis installée.", + "DOWNLOAD_AND_INSTALL": "Télécharger et installer", + "IGNORE_THIS_VERSION": "Ignorer cette version", + "TODAY": "Aujourd'hui", + "YESTERDAY": "Hier", + "NAME_PLACEHOLDER": "Nom...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Impossible de créer des albums depuis un mix fichier/dossier", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Vous avez glissé déposé un mélange de fichiers et dossiers.

Veuillez sélectionner soit uniquement des fichiers, ou des dossiers lors du choix d'options pour créer des albums séparés

", + "CHOSE_THEME": "Choisir un thème", + "ML_SEARCH": "ML search (beta)", + "ENABLE_ML_SEARCH_DESCRIPTION": "

Ceci activera l'apprentissage automatique sur l'appareil et la recherche faciale qui commencera à analyser vos photos chargées.

Pour la première exécution après la connexion ou l'activation de cette fonctionnalité, cela téléchargera toutes les images sur l'appareil local pour les analyser. Veuillez donc activer ceci uniquement si vous avez de la bande passante et le traitement local de toutes les images dans votre photothèque.

Si c'est la première fois que vous activez ceci, nous vous demanderons également la permission de traiter les données faciales.

", + "ML_MORE_DETAILS": "Plus de détails", + "ENABLE_FACE_SEARCH": "Activer la recherche faciale", + "ENABLE_FACE_SEARCH_TITLE": "Activer la recherche faciale ?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face search, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Désactiver la bêta", + "DISABLE_FACE_SEARCH": "Désactiver la recherche faciale", + "DISABLE_FACE_SEARCH_TITLE": "Désactiver la recherche faciale ?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente will stop processing face geometry, and will also disable ML search (beta)

You can reenable face search again if you wish, so this operation is safe

", + "ADVANCED": "Avancé", + "FACE_SEARCH_CONFIRMATION": "Je comprends, et je souhaite permettre à ente de traiter la géométrie faciale", + "LABS": "Labs", + "YOURS": "Le vôtre", + "PASSPHRASE_STRENGTH_WEAK": "Sécurité du mot de passe : faible", + "PASSPHRASE_STRENGTH_MODERATE": "Sécurité du mot de passe : moyenne", + "PASSPHRASE_STRENGTH_STRONG": "Sécurité du mot de passe : forte", + "PREFERENCES": "Préférences", + "LANGUAGE": "Langue", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Dossier d'export invalide", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

Le dossier d'export que vous avez sélectionné n'existe pas

Veuillez sélectionner un dossier valide

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Échec de la vérification de l'abonnement", + "STORAGE_UNITS": { + "B": "o", + "KB": "Ko", + "MB": "Mo", + "GB": "Go", + "TB": "To" + }, + "AFTER_TIME": { + "HOUR": "dans une heure", + "DAY": "dans un jour", + "WEEK": "dans une semaine", + "MONTH": "dans un mois", + "YEAR": "dans un an" + }, + "COPY_LINK": "Copier le lien", + "DONE": "Terminé", + "LINK_SHARE_TITLE": "Ou partager un lien", + "REMOVE_LINK": "Supprimer le lien", + "CREATE_PUBLIC_SHARING": "Créer un lien public", + "PUBLIC_LINK_CREATED": "Lien public créé", + "PUBLIC_LINK_ENABLED": "Lien public activé", + "COLLECT_PHOTOS": "Récupérer les photos", + "PUBLIC_COLLECT_SUBTEXT": "Autoriser les personnes ayant le lien d'ajouter des photos à l'album partagé.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success}} / {{progress.total}} fichiers exportés", + "MIGRATING_EXPORT": "Préparations...", + "RENAMING_COLLECTION_FOLDERS": "Renommage des dossiers de l'album en cours...", + "TRASHING_DELETED_FILES": "Mise à la corbeille des fichiers supprimés...", + "TRASHING_DELETED_COLLECTIONS": "Mise à la corbeille des albums supprimés...", + "EXPORT_NOTIFICATION": { + "START": "L'export a démarré", + "IN_PROGRESS": "Un export est déjà en cours", + "FINISH": "Export terminé", + "UP_TO_DATE": "Aucun nouveau fichier à exporter" + }, + "CONTINUOUS_EXPORT": "Synchronisation en continu", + "TOTAL_ITEMS": "Total d'objets", + "PENDING_ITEMS": "Objets en attente", + "EXPORT_STARTING": "Démarrage de l'export...", + "DELETE_ACCOUNT_REASON_LABEL": "Quelle est la raison principale de la suppression de votre compte ?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Choisir une raison", + "DELETE_REASON": { + "MISSING_FEATURE": "Il manque une fonctionnalité essentielle dont j'ai besoin", + "BROKEN_BEHAVIOR": "L'application ou une certaine fonctionnalité ne se comporte pas comme je pense qu'elle devrait", + "FOUND_ANOTHER_SERVICE": "J'ai trouvé un autre service que je préfère", + "NOT_LISTED": "Ma raison n'est pas listée" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "Nous sommes désolés de vous voir partir. Expliquez-nous les raisons de votre départ pour que nous puissions nous améliorer.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Vos commentaires", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Oui, je veux supprimer définitivement ce compte et toutes ses données", + "CONFIRM_DELETE_ACCOUNT": "Confirmer la suppression du compte", + "FEEDBACK_REQUIRED": "Merci de nous aider avec cette information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "Qu'est-ce que l'autre service fait de mieux ?", + "RECOVER_TWO_FACTOR": "Récupérer la double-authentification", + "at": "à", + "AUTH_NEXT": "suivant", + "AUTH_DOWNLOAD_MOBILE_APP": "Téléchargez notre application mobile pour gérer vos secrets", + "HIDDEN": "Masqué", + "HIDE": "Masquer", + "UNHIDE": "Dévoiler", + "UNHIDE_TO_COLLECTION": "Afficher dans l'album", + "SORT_BY": "Trier par", + "NEWEST_FIRST": "Plus récent en premier", + "OLDEST_FIRST": "Plus ancien en premier", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Ce fichier n'a pas pu être aperçu. Cliquez ici pour télécharger l'original.", + "SELECT_COLLECTION": "Sélectionner album", + "PIN_ALBUM": "Épingler l'album", + "UNPIN_ALBUM": "Désépingler l'album", + "DOWNLOAD_COMPLETE": "Téléchargement terminé", + "DOWNLOADING_COLLECTION": "Téléchargement de {{name}}", + "DOWNLOAD_FAILED": "Échec du téléchargement", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} fichiers", + "CRASH_REPORTING": "Rapport de plantage", + "CHRISTMAS": "Noël", + "CHRISTMAS_EVE": "Réveillon de Noël", + "NEW_YEAR": "Nouvel an", + "NEW_YEAR_EVE": "Réveillon de Nouvel An", + "IMAGE": "Image", + "VIDEO": "Vidéo", + "LIVE_PHOTO": "Photos en direct", + "CONVERT": "Convertir", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Êtes-vous sûr de vouloir fermer l'éditeur ?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Téléchargez votre image modifiée ou enregistrez une copie sur ente pour maintenir vos modifications.", + "BRIGHTNESS": "Luminosité", + "CONTRAST": "Contraste", + "SATURATION": "Saturation", + "BLUR": "Flou", + "INVERT_COLORS": "Inverser les couleurs", + "ASPECT_RATIO": "Ratio de l'image", + "SQUARE": "Carré", + "ROTATE_LEFT": "Pivoter vers la gauche", + "ROTATE_RIGHT": "Pivoter vers la droite", + "FLIP_VERTICALLY": "Basculer verticalement", + "FLIP_HORIZONTALLY": "Retourner horizontalement", + "DOWNLOAD_EDITED": "Téléchargement modifié", + "SAVE_A_COPY_TO_ENTE": "Enregistrer une copie dans ente", + "RESTORE_ORIGINAL": "Restaurer l'original", + "TRANSFORM": "Transformer", + "COLORS": "Couleurs", + "FLIP": "Retourner", + "ROTATION": "Rotation", + "RESET": "Réinitialiser", + "PHOTO_EDITOR": "Éditeur de photos", + "FASTER_UPLOAD": "Chargements plus rapides", + "FASTER_UPLOAD_DESCRIPTION": "Router les chargements vers les serveurs à proximité", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Éléments indexés", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/it-IT/translation.json b/web/apps/auth/public/locales/it-IT/translation.json new file mode 100644 index 000000000..679478f70 --- /dev/null +++ b/web/apps/auth/public/locales/it-IT/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Backup privati
dei tuoi ricordi
", + "HERO_SLIDE_1": "Crittografia end-to-end", + "HERO_SLIDE_2_TITLE": "
Salvati in modo sicuro
in un rifugio antiatomico
", + "HERO_SLIDE_2": "Progettato per sopravvivere", + "HERO_SLIDE_3_TITLE": "
Disponibile
ovunque
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Accedi", + "SIGN_UP": "Registrati", + "NEW_USER": "Nuovo utente", + "EXISTING_USER": "Accedi", + "ENTER_NAME": "Inserisci il nome", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Aggiungi un nome in modo che i tuoi amici sappiano chi ringraziare per queste fantastiche foto!", + "ENTER_EMAIL": "Inserisci l'indirizzo email", + "EMAIL_ERROR": "Inserisci un indirizzo email valido", + "REQUIRED": "Campo obbligatorio", + "EMAIL_SENT": "Codice di verifica inviato a {{email}}", + "CHECK_INBOX": "Controlla la tua casella di posta (e lo spam) per completare la verifica", + "ENTER_OTT": "Codice di verifica", + "RESEND_MAIL": "Reinvia codice", + "VERIFY": "Verifica", + "UNKNOWN_ERROR": "Qualcosa è andato storto, per favore riprova", + "INVALID_CODE": "Codice di verifica non valido", + "EXPIRED_CODE": "Il tuo codice di verifica è scaduto", + "SENDING": "Invio in corso...", + "SENT": "Inviato!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Inserisci la password per sbloccare l'album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Imposta una password", + "VERIFY_PASSPHRASE": "Accedi", + "INCORRECT_PASSPHRASE": "Password sbagliata", + "ENTER_ENC_PASSPHRASE": "Inserisci una password per crittografare i tuoi dati", + "PASSPHRASE_DISCLAIMER": "Non memorizziamo la tua password, quindi se la dimentichi, non saremo in grado di aiutarti a recuperare i tuoi dati senza una chiave di recupero.", + "WELCOME_TO_ENTE_HEADING": "Benvenuto su ", + "WELCOME_TO_ENTE_SUBHEADING": "Archiviazione e condivisione di foto crittografate end-to-end", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Dove vivono le tue migliori foto", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generazione delle chiavi di crittografia...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Conferma la password", + "REFERRAL_CODE_HINT": "Come hai conosciuto Ente? (opzionale)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Le password non corrispondono", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "Questa è una funzionalità del browser destinata agli sviluppatori. Non copiare né incollare codice non verificato qui.", + "CREATE_COLLECTION": "Nuovo album", + "ENTER_ALBUM_NAME": "Nome album", + "CLOSE_OPTION": "Chiudi (Esc)", + "ENTER_FILE_NAME": "Nome del file", + "CLOSE": "Chiudi", + "NO": "No", + "NOTHING_HERE": "Nulla da vedere qui! 👀", + "UPLOAD": "Carica", + "IMPORT": "Importa", + "ADD_PHOTOS": "Aggiungi foto", + "ADD_MORE_PHOTOS": "Aggiungi altre foto", + "add_photos_one": "Aggiungi elemento", + "add_photos_other": "Aggiungi {{count, number}} elementi", + "SELECT_PHOTOS": "Seleziona foto", + "FILE_UPLOAD": "Carica file", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparazione all'upload", + "1": "Lettura dei file metadati di google", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} file metadati estratti", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} file salvati", + "4": "Annullamento dei caricamenti rimanenti", + "5": "Backup completato" + }, + "FILE_NOT_UPLOADED_LIST": "I seguenti file non sono stati caricati", + "SUBSCRIPTION_EXPIRED": "Abbonamento scaduto", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Il tuo abbonamento è scaduto, per favore rinnova", + "STORAGE_QUOTA_EXCEEDED": "Limite d'archiviazione superato", + "INITIAL_LOAD_DELAY_WARNING": "Il primo caricamento potrebbe richiedere del tempo", + "USER_DOES_NOT_EXIST": "Purtroppo non abbiamo trovato nessun account con quell'indirizzo e-mail", + "NO_ACCOUNT": "Non ho un account", + "ACCOUNT_EXISTS": "Ho già un account", + "CREATE": "Crea", + "DOWNLOAD": "Scarica", + "DOWNLOAD_OPTION": "Scarica (D)", + "DOWNLOAD_FAVORITES": "Scarica i preferiti", + "DOWNLOAD_UNCATEGORIZED": "Scarica i file senza categoria", + "DOWNLOAD_HIDDEN_ITEMS": "Scarica gli elementi nascosti", + "COPY_OPTION": "Copia come PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Attiva/disattiva schermo intero (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Precedente (←)", + "NEXT": "Successivo (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Carica la tua prima foto", + "IMPORT_YOUR_FOLDERS": "Importa una cartella", + "UPLOAD_DROPZONE_MESSAGE": "Rilascia per eseguire il backup dei file", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Rilascia per aggiungere la cartella osservata", + "TRASH_FILES_TITLE": "Elimina file?", + "TRASH_FILE_TITLE": "Eliminare il file?", + "DELETE_FILES_TITLE": "Eliminare immediatamente?", + "DELETE_FILES_MESSAGE": "I file selezionati verranno eliminati definitivamente dal tuo account ente.", + "DELETE": "Cancella", + "DELETE_OPTION": "Cancella (DEL)", + "FAVORITE_OPTION": "Preferito (L)", + "UNFAVORITE_OPTION": "Rimuovi dai preferiti (L)", + "MULTI_FOLDER_UPLOAD": "Selezionate più cartelle", + "UPLOAD_STRATEGY_CHOICE": "Vuoi caricarli in", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Un album singolo", + "OR": "o", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Album separati", + "SESSION_EXPIRED_MESSAGE": "La sessione è scaduta. Per continuare, esegui nuovamente l'accesso", + "SESSION_EXPIRED": "Sessione scaduta", + "PASSWORD_GENERATION_FAILED": "Il tuo browser non è stato in grado di generare una chiave forte che soddisfa gli standard di crittografia ente, prova ad usare l'app per dispositivi mobili o un altro browser", + "CHANGE_PASSWORD": "Cambia password", + "GO_BACK": "Torna indietro", + "RECOVERY_KEY": "Chiave di recupero", + "SAVE_LATER": "Fallo più tardi", + "SAVE": "Salva Chiave", + "RECOVERY_KEY_DESCRIPTION": "Se dimentichi la tua password, l'unico modo per recuperare i tuoi dati è con questa chiave.", + "RECOVER_KEY_GENERATION_FAILED": "Impossibile generare il codice di recupero, riprova", + "KEY_NOT_STORED_DISCLAIMER": "Non memorizziamo questa chiave, quindi salvala in un luogo sicuro", + "FORGOT_PASSWORD": "Password dimenticata", + "RECOVER_ACCOUNT": "Recupera account", + "RECOVERY_KEY_HINT": "Chiave di recupero", + "RECOVER": "Recupera", + "NO_RECOVERY_KEY": "Nessuna chiave di recupero?", + "INCORRECT_RECOVERY_KEY": "Chiave di recupero errata", + "SORRY": "Siamo spiacenti", + "NO_RECOVERY_KEY_MESSAGE": "A causa della natura del nostro protocollo di crittografia end-to-end, i tuoi dati non possono essere decifrati senza la tua password o chiave di ripristino", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Per favore invia un'email a {{emailID}} dal tuo indirizzo email registrato", + "CONTACT_SUPPORT": "Contatta il supporto", + "REQUEST_FEATURE": "Richiedi una funzionalità", + "SUPPORT": "Supporto", + "CONFIRM": "Conferma", + "CANCEL": "Annulla", + "LOGOUT": "Disconnettiti", + "DELETE_ACCOUNT": "Elimina account", + "DELETE_ACCOUNT_MESSAGE": "

Per favore invia una email a {{emailID}} dal tuo indirizzo email registrato.

La tua richiesta verrà elaborata entro 72 ore.

", + "LOGOUT_MESSAGE": "Sei sicuro di volerti disconnettere?", + "CHANGE_EMAIL": "Cambia email", + "OK": "OK", + "SUCCESS": "Operazione riuscita", + "ERROR": "Errore", + "MESSAGE": "Messaggio", + "INSTALL_MOBILE_APP": "Installa la nostra app Android o iOS per eseguire il backup automatico di tutte le tue foto", + "DOWNLOAD_APP_MESSAGE": "Siamo spiacenti, questa operazione è attualmente supportata solo sulla nostra app desktop", + "DOWNLOAD_APP": "Scarica l'app per desktop", + "EXPORT": "Esporta Dati", + "SUBSCRIPTION": "Abbonamento", + "SUBSCRIBE": "Iscriviti", + "MANAGEMENT_PORTAL": "Gestisci i metodi di pagamento", + "MANAGE_FAMILY_PORTAL": "Gestisci piano famiglia", + "LEAVE_FAMILY_PLAN": "Abbandona il piano famiglia", + "LEAVE": "Lascia", + "LEAVE_FAMILY_CONFIRM": "Sei sicuro di voler uscire dal piano famiglia?", + "CHOOSE_PLAN": "Scegli il tuo piano", + "MANAGE_PLAN": "Gestisci il tuo abbonamento", + "ACTIVE": "Attivo", + "OFFLINE_MSG": "Sei offline, i ricordi memorizzati nella cache vengono mostrati", + "FREE_SUBSCRIPTION_INFO": "Sei sul piano gratuito che scade il {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Fai parte di un piano famiglia gestito da", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Si rinnova il {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Termina il {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Il tuo abbonamento verrà annullato il {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Hai superato la quota di archiviazione assegnata, si prega di aggiornare ", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Abbiamo ricevuto il tuo pagamento

Il tuo abbonamento è valido fino a {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Il tuo acquisto è stato annullato, riprova se vuoi iscriverti", + "SUBSCRIPTION_PURCHASE_FAILED": "Acquisto abbonamento non riuscito, riprova", + "SUBSCRIPTION_UPDATE_FAILED": "L'aggiornamento dell'abbonamento non è riuscito, riprova", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Siamo spiacenti, il pagamento non è andato a buon fine quando abbiamo provato ad addebitare alla sua carta, la preghiamo di aggiornare il suo metodo di pagamento e riprovare", + "STRIPE_AUTHENTICATION_FAILED": "Non siamo in grado di autenticare il tuo metodo di pagamento. Per favore scegli un metodo di pagamento diverso e riprova", + "UPDATE_PAYMENT_METHOD": "Aggiorna metodo di pagamento", + "MONTHLY": "Mensile", + "YEARLY": "Annuale", + "UPDATE_SUBSCRIPTION_MESSAGE": "Sei sicuro di voler cambiare il piano?", + "UPDATE_SUBSCRIPTION": "Cambia piano", + "CANCEL_SUBSCRIPTION": "Annulla abbonamento", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Tutti i tuoi dati saranno cancellati dai nostri server alla fine di questo periodo di fatturazione.

Sei sicuro di voler annullare il tuo abbonamento?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Impossibile annullare l'abbonamento", + "SUBSCRIPTION_CANCEL_SUCCESS": "Abbonamento annullato con successo", + "REACTIVATE_SUBSCRIPTION": "Riattiva abbonamento", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Una volta riattivato, ti verrà addebitato il valore di {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Iscrizione attivata con successo ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Grazie", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Annulla abbonamento mobile", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Per favore contattaci su {{emailID}} per gestire il tuo abbonamento", + "RENAME": "Rinomina", + "RENAME_FILE": "Rinomina file", + "RENAME_COLLECTION": "Rinomina album", + "DELETE_COLLECTION_TITLE": "Eliminare l'album?", + "DELETE_COLLECTION": "Elimina album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Elimina foto", + "KEEP_PHOTOS": "Mantieni foto", + "SHARE": "Condividi", + "SHARE_COLLECTION": "Condividi album", + "SHAREES": "Condividi con", + "SHARE_WITH_SELF": "Ops, non puoi condividere a te stesso", + "ALREADY_SHARED": "Ops, lo stai già condividendo con {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Condividere gli album non è consentito", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "La condivisione è disabilitata per gli account free", + "DOWNLOAD_COLLECTION": "Scarica album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Sei sicuro di volere scaricare l'album interamente?

Tutti i file saranno messi in coda per il download

", + "CREATE_ALBUM_FAILED": "Operazione di creazione dell'album fallita, per favore riprova", + "SEARCH": "Ricerca", + "SEARCH_RESULTS": "Risultati della ricerca", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Posizione", + "CITY": "Posizione", + "DATE": "Data", + "FILE_NAME": "Nome file", + "THING": "Contenuto", + "FILE_CAPTION": "Descrizione", + "FILE_TYPE": "Tipo del file", + "CLIP": "Magic" + }, + "photos_count_zero": "Nessuna memoria", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Aggiungi all'album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Questo video non può essere riprodotto nel tuo browser", + "PEOPLE": "Persone", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "volti non identificati", + "OBJECTS": "objects", + "TEXT": "testo", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "Nome file", + "CAPTION_PLACEHOLDER": "Aggiungi una descrizione", + "LOCATION": "Posizione", + "SHOW_ON_MAP": "Guarda su OpenStreetMap", + "MAP": "Mappa", + "MAP_SETTINGS": "Impostazioni Mappa", + "ENABLE_MAPS": "Attivare Mappa?", + "ENABLE_MAP": "Attivare mappa", + "DISABLE_MAPS": "Disattivare Mappa?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Due fattori", + "TWO_FACTOR_AUTHENTICATION": "Autenticazione a due fattori", + "TWO_FACTOR_QR_INSTRUCTION": "Scansiona il codice QR qui sotto con la tua app di autenticazione preferita", + "ENTER_CODE_MANUALLY": "Inserisci il codice manualmente", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Inserisci questo codice nella tua app di autenticazione preferita", + "SCAN_QR_CODE": "Oppure scansiona il codice QR", + "ENABLE_TWO_FACTOR": "Attiva due fattori", + "ENABLE": "Attiva", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Codice errato", + "TWO_FACTOR_INFO": "Aggiungi un ulteriore livello di sicurezza richiedendo più informazioni rispetto a email e password per eseguire l'accesso al tuo account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Esporta dati", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Invia OTP", + "EMAIl_ALREADY_OWNED": "Email già in uso", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Caricamento fallito ", + "SKIPPED_FILES": "Ignora caricamenti", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Caricamenti eseguiti con successo", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Video saltati", + "INPROGRESS_METADATA_EXTRACTION": "In corso", + "INPROGRESS_UPLOADS": "Caricamenti in corso", + "TOO_LARGE_UPLOADS": "File pesanti", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Spazio insufficiente", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Questi file non sono stati caricati perché supererebbero la capacità massima del tuo piano di spazio d'archiviazione", + "TOO_LARGE_INFO": "Questi file non sono stati caricati perché superano il nostro limite di pesantezza di un file", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archivio", + "FAVORITES": "Preferiti", + "ARCHIVE_COLLECTION": "Album archiviato", + "ARCHIVE_SECTION_NAME": "Archivio", + "ALL_SECTION_NAME": "Tutto", + "MOVE_TO_COLLECTION": "Sposta nell'album", + "UNARCHIVE": "Rimuovi dall'archivio", + "UNARCHIVE_COLLECTION": "Rimuovi album dall'archivio", + "HIDE_COLLECTION": "Nascondi album", + "UNHIDE_COLLECTION": "Rimuovi album dai nascosti", + "MOVE": "Sposta", + "ADD": "Aggiungi", + "REMOVE": "Rimuovi", + "YES_REMOVE": "Sì, rimuovi", + "REMOVE_FROM_COLLECTION": "Rimuovi dall'album", + "TRASH": "Cestino", + "MOVE_TO_TRASH": "Sposta nel cestino", + "TRASH_FILES_MESSAGE": "Gli elementi selezionati verranno eliminati da tutti gli album e spostati nel cestino.", + "TRASH_FILE_MESSAGE": "Il file verrà eliminato da tutti gli album e spostato nel cestino.", + "DELETE_PERMANENTLY": "Elimina definitivamente", + "RESTORE": "Ripristina", + "RESTORE_TO_COLLECTION": "Ripristina nell'album", + "EMPTY_TRASH": "Svuota il cestino", + "EMPTY_TRASH_TITLE": "Vuoi svuotare il cestino?", + "EMPTY_TRASH_MESSAGE": "I file selezionati verranno eliminati definitivamente dal tuo account ente.", + "LEAVE_SHARED_ALBUM": "Sì, esci", + "LEAVE_ALBUM": "Abbandona l'album", + "LEAVE_SHARED_ALBUM_TITLE": "Abbandonare l'album condiviso?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Meno recente", + "SORT_BY_UPDATION_TIME_DESCENDING": "Ultimo aggiornamento", + "SORT_BY_NAME": "Nome", + "COMPRESS_THUMBNAILS": "Comprimi miniature", + "THUMBNAIL_REPLACED": "Miniature compresse", + "FIX_THUMBNAIL": "Comprimi", + "FIX_THUMBNAIL_LATER": "Comprimi più tardi", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Installa", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "Nessun partecipante", + "participants_one": "1 partecipante", + "participants_other": "{{count, number}} partecipanti", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Partecipanti", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Rimuovere?", + "CONFIRM_REMOVE": "Sì, rimuovi", + "MANAGE": "Gestisci", + "ADDED_AS": "Aggiunto come", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Rimuovi partecipante", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - non trovato", + "LINK_EXPIRED": "Link scaduto", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Cartella", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Album", + "ALL_ALBUMS": "Tutti gli Album", + "ALBUMS": "Album", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Crea account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "Tu", + "FAMILY": "Famiglia", + "FREE": "gratis", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "Ancora nessuna cartella aggiunta!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Cambia Cartella", + "TWO_MONTHS_FREE": "Ottieni 2 mesi gratis sui piani annuali", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB per 1 anno", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Autenticati", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Oggi", + "YESTERDAY": "Ieri", + "NAME_PLACEHOLDER": "Nome...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Seleziona tema", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "Più dettagli", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Avanzate", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Sicurezza password: Debole", + "PASSPHRASE_STRENGTH_MODERATE": "Sicurezza password: Moderata", + "PASSPHRASE_STRENGTH_STRONG": "Sicurezza password: Forte", + "PREFERENCES": "Preferences", + "LANGUAGE": "Lingua", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "dopo un'ora", + "DAY": "dopo un giorno", + "WEEK": "dopo una settimana", + "MONTH": "dopo un mese", + "YEAR": "dopo un anno" + }, + "COPY_LINK": "Copia link", + "DONE": "Fatto", + "LINK_SHARE_TITLE": "O condividi un link", + "REMOVE_LINK": "Rimuovi link", + "CREATE_PUBLIC_SHARING": "Crea link pubblico", + "PUBLIC_LINK_CREATED": "Link pubblick creato", + "PUBLIC_LINK_ENABLED": "Link pubblico attivato", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Seleziona un motivo", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/nl-NL/translation.json b/web/apps/auth/public/locales/nl-NL/translation.json new file mode 100644 index 000000000..1bfeb6d25 --- /dev/null +++ b/web/apps/auth/public/locales/nl-NL/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Privé back-ups
voor uw herinneringen
", + "HERO_SLIDE_1": "Standaard end-to-end versleuteld", + "HERO_SLIDE_2_TITLE": "
Veilig opgeslagen
in een kernbunker
", + "HERO_SLIDE_2": "Ontworpen om levenslang mee te gaan", + "HERO_SLIDE_3_TITLE": "
Overal
beschikbaar
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Inloggen", + "SIGN_UP": "Registreren", + "NEW_USER": "Nieuw bij ente", + "EXISTING_USER": "Bestaande gebruiker", + "ENTER_NAME": "Naam invoeren", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Voeg een naam toe zodat je vrienden weten wie ze moeten bedanken voor deze geweldige foto's!", + "ENTER_EMAIL": "Vul e-mailadres in", + "EMAIL_ERROR": "Vul een geldig e-mailadres in", + "REQUIRED": "Vereist", + "EMAIL_SENT": "Verificatiecode verzonden naar {{email}}", + "CHECK_INBOX": "Controleer je inbox (en spam) om verificatie te voltooien", + "ENTER_OTT": "Verificatiecode", + "RESEND_MAIL": "Code opnieuw versturen", + "VERIFY": "Verifiëren", + "UNKNOWN_ERROR": "Er is iets fout gegaan, probeer het opnieuw", + "INVALID_CODE": "Ongeldige verificatiecode", + "EXPIRED_CODE": "Uw verificatiecode is verlopen", + "SENDING": "Verzenden...", + "SENT": "Verzonden!", + "PASSWORD": "Wachtwoord", + "LINK_PASSWORD": "Voer wachtwoord in om het album te ontgrendelen", + "RETURN_PASSPHRASE_HINT": "Wachtwoord", + "SET_PASSPHRASE": "Wachtwoord instellen", + "VERIFY_PASSPHRASE": "Aanmelden", + "INCORRECT_PASSPHRASE": "Onjuist wachtwoord", + "ENTER_ENC_PASSPHRASE": "Voer een wachtwoord in dat we kunnen gebruiken om je gegevens te versleutelen", + "PASSPHRASE_DISCLAIMER": "We slaan je wachtwoord niet op, dus als je het vergeet, zullen we u niet kunnen helpen uw data te herstellen zonder een herstelcode.", + "WELCOME_TO_ENTE_HEADING": "Welkom bij ", + "WELCOME_TO_ENTE_SUBHEADING": "Foto opslag en delen met end to end encryptie", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Waar je beste foto's leven", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Encryptiecodes worden gegenereerd...", + "PASSPHRASE_HINT": "Wachtwoord", + "CONFIRM_PASSPHRASE": "Wachtwoord bevestigen", + "REFERRAL_CODE_HINT": "Hoe hoorde je over Ente? (optioneel)", + "REFERRAL_INFO": "Wij gebruiken geen tracking. Het zou helpen als je ons vertelt waar je ons gevonden hebt!", + "PASSPHRASE_MATCH_ERROR": "Wachtwoorden komen niet overeen", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "Dit is een browserfunctie bedoeld voor ontwikkelaars. Gelieve hier geen niet-geverifieerde code te kopiëren/plakken.", + "CREATE_COLLECTION": "Nieuw album", + "ENTER_ALBUM_NAME": "Album naam", + "CLOSE_OPTION": "Sluiten (Esc)", + "ENTER_FILE_NAME": "Bestandsnaam", + "CLOSE": "Sluiten", + "NO": "Nee", + "NOTHING_HERE": "Nog niets te zien hier 👀", + "UPLOAD": "Uploaden", + "IMPORT": "Importeren", + "ADD_PHOTOS": "Foto's toevoegen", + "ADD_MORE_PHOTOS": "Meer foto's toevoegen", + "add_photos_one": "1 foto toevoegen", + "add_photos_other": "{{count, number}} foto's toevoegen", + "SELECT_PHOTOS": "Selecteer foto's", + "FILE_UPLOAD": "Bestand uploaden", + "UPLOAD_STAGE_MESSAGE": { + "0": "Upload wordt voorbereid", + "1": "Lezen van Google metadata bestanden", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} bestanden metadata uitgepakt", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} bestanden geback-upt", + "4": "Resterende uploads worden geannuleerd", + "5": "Back-up voltooid" + }, + "FILE_NOT_UPLOADED_LIST": "De volgende bestanden zijn niet geüpload", + "SUBSCRIPTION_EXPIRED": "Abonnement verlopen", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Uw abonnement is verlopen, gelieve vernieuwen", + "STORAGE_QUOTA_EXCEEDED": "Opslaglimiet overschreden", + "INITIAL_LOAD_DELAY_WARNING": "Eerste keer laden kan enige tijd duren", + "USER_DOES_NOT_EXIST": "Sorry, we konden geen account met dat e-mailadres vinden", + "NO_ACCOUNT": "Heb nog geen account", + "ACCOUNT_EXISTS": "Heb al een account", + "CREATE": "Creëren", + "DOWNLOAD": "Downloaden", + "DOWNLOAD_OPTION": "Downloaden (D)", + "DOWNLOAD_FAVORITES": "Favorieten downloaden", + "DOWNLOAD_UNCATEGORIZED": "Ongecategoriseerd downloaden", + "DOWNLOAD_HIDDEN_ITEMS": "Verborgen bestanden downloaden", + "COPY_OPTION": "Kopiëren als PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Schakelen volledig scherm modus (F)", + "ZOOM_IN_OUT": "In/uitzoomen", + "PREVIOUS": "Vorige (←)", + "NEXT": "Volgende (→)", + "TITLE_PHOTOS": "Ente Foto's", + "TITLE_ALBUMS": "Ente Foto's", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Je eerste foto uploaden", + "IMPORT_YOUR_FOLDERS": "Importeer uw mappen", + "UPLOAD_DROPZONE_MESSAGE": "Sleep om een back-up van je bestanden te maken", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Sleep om map aan watched folders toe te voegen", + "TRASH_FILES_TITLE": "Bestanden verwijderen?", + "TRASH_FILE_TITLE": "Verwijder bestand?", + "DELETE_FILES_TITLE": "Onmiddellijk verwijderen?", + "DELETE_FILES_MESSAGE": "Geselecteerde bestanden zullen permanent worden verwijderd van je ente account.", + "DELETE": "Verwijderen", + "DELETE_OPTION": "Verwijderen (DEL)", + "FAVORITE_OPTION": "Favoriet (L)", + "UNFAVORITE_OPTION": "Verwijderen uit Favorieten (L)", + "MULTI_FOLDER_UPLOAD": "Meerdere mappen gedetecteerd", + "UPLOAD_STRATEGY_CHOICE": "Wilt u deze uploaden naar", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Één enkel album", + "OR": "of", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Aparte albums maken", + "SESSION_EXPIRED_MESSAGE": "Uw sessie is verlopen. Meld u opnieuw aan om verder te gaan", + "SESSION_EXPIRED": "Sessie verlopen", + "PASSWORD_GENERATION_FAILED": "Uw browser kon geen sterke sleutel genereren die voldoet aan onze versleutelingsstandaarden. Probeer de mobiele app of een andere browser te gebruiken", + "CHANGE_PASSWORD": "Wachtwoord wijzigen", + "GO_BACK": "Ga terug", + "RECOVERY_KEY": "Herstelsleutel", + "SAVE_LATER": "Doe dit later", + "SAVE": "Sleutel opslaan", + "RECOVERY_KEY_DESCRIPTION": "Als je je wachtwoord vergeet, kun je alleen met deze sleutel je gegevens herstellen.", + "RECOVER_KEY_GENERATION_FAILED": "Herstelcode kon niet worden gegenereerd, probeer het opnieuw", + "KEY_NOT_STORED_DISCLAIMER": "We slaan deze sleutel niet op, bewaar dit op een veilige plaats", + "FORGOT_PASSWORD": "Wachtwoord vergeten", + "RECOVER_ACCOUNT": "Account herstellen", + "RECOVERY_KEY_HINT": "Herstelsleutel", + "RECOVER": "Herstellen", + "NO_RECOVERY_KEY": "Geen herstelsleutel?", + "INCORRECT_RECOVERY_KEY": "Onjuiste herstelsleutel", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Door de aard van ons end-to-end encryptieprotocol kunnen je gegevens niet worden ontsleuteld zonder je wachtwoord of herstelsleutel", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Stuur een e-mail naar {{emailID}} vanaf het door jou geregistreerde e-mailadres", + "CONTACT_SUPPORT": "Klantenservice", + "REQUEST_FEATURE": "Vraag nieuwe functie aan", + "SUPPORT": "Ondersteuning", + "CONFIRM": "Bevestigen", + "CANCEL": "Annuleren", + "LOGOUT": "Uitloggen", + "DELETE_ACCOUNT": "Account verwijderen", + "DELETE_ACCOUNT_MESSAGE": "

Stuur een e-mail naar {{emailID}} vanaf uw geregistreerde e-mailadres.

Uw aanvraag wordt binnen 72 uur verwerkt.

", + "LOGOUT_MESSAGE": "Weet u zeker dat u wilt uitloggen?", + "CHANGE_EMAIL": "E-mail wijzigen", + "OK": "Oké", + "SUCCESS": "Succes", + "ERROR": "Foutmelding", + "MESSAGE": "Melding", + "INSTALL_MOBILE_APP": "Installeer onze Android of iOS app om automatisch een back-up te maken van al uw foto's", + "DOWNLOAD_APP_MESSAGE": "Sorry, deze bewerking wordt momenteel alleen ondersteund op onze desktop app", + "DOWNLOAD_APP": "Download de desktop app", + "EXPORT": "Data exporteren", + "SUBSCRIPTION": "Abonnement", + "SUBSCRIBE": "Abonneren", + "MANAGEMENT_PORTAL": "Betaalmethode beheren", + "MANAGE_FAMILY_PORTAL": "Familie abonnement beheren", + "LEAVE_FAMILY_PLAN": "Familie abonnement verlaten", + "LEAVE": "Verlaten", + "LEAVE_FAMILY_CONFIRM": "Weet je zeker dat je het familie-plan wilt verlaten?", + "CHOOSE_PLAN": "Kies uw abonnement", + "MANAGE_PLAN": "Beheer uw abonnement", + "ACTIVE": "Actief", + "OFFLINE_MSG": "Je bent offline, lokaal opgeslagen herinneringen worden getoond", + "FREE_SUBSCRIPTION_INFO": "Je hebt het gratis abonnement dat verloopt op {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "U hebt een familieplan dat beheerd wordt door", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Vernieuwt op {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Eindigt op {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Uw abonnement loopt af op {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Jouw {{storage, string}} add-on is geldig tot {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "U heeft uw opslaglimiet overschreden, gelieve upgraden", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We hebben uw betaling ontvangen

Uw abonnement is geldig tot {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Uw aankoop is geannuleerd, probeer het opnieuw als u zich wilt abonneren", + "SUBSCRIPTION_PURCHASE_FAILED": "Betaling van abonnement mislukt Probeer het opnieuw", + "SUBSCRIPTION_UPDATE_FAILED": "Niet gelukt om abonnement bij te werken, probeer het opnieuw", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Het spijt ons, maar de betaling is mislukt bij het in rekening brengen van uw kaart, gelieve uw betaalmethode bij te werken en het opnieuw te proberen", + "STRIPE_AUTHENTICATION_FAILED": "We zijn niet in staat om uw betaalmethode te verifiëren. Kies een andere betaalmethode en probeer het opnieuw", + "UPDATE_PAYMENT_METHOD": "Betalingsmethode bijwerken", + "MONTHLY": "Maandelijks", + "YEARLY": "Jaarlijks", + "UPDATE_SUBSCRIPTION_MESSAGE": "Weet u zeker dat u uw abonnement wilt wijzigen?", + "UPDATE_SUBSCRIPTION": "Abonnement wijzigen", + "CANCEL_SUBSCRIPTION": "Abonnement opzeggen", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Al je gegevens zullen worden verwijderd van onze servers aan het einde van deze factureringsperiode.

Weet u zeker dat u uw abonnement wilt opzeggen?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Weet je zeker dat je je abonnement wilt opzeggen?

", + "SUBSCRIPTION_CANCEL_FAILED": "Abonnement opzeggen mislukt", + "SUBSCRIPTION_CANCEL_SUCCESS": "Abonnement succesvol geannuleerd", + "REACTIVATE_SUBSCRIPTION": "Abonnement opnieuw activeren", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Zodra je weer bent geactiveerd, zal je worden gefactureerd op {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Abonnement succesvol geactiveerd ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Heractiveren van abonnementsverlenging is mislukt", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Bedankt", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Mobiel abonnement opzeggen", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Annuleer je abonnement via de mobiele app om je abonnement hier te activeren", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Neem contact met ons op via {{emailID}} om uw abonnement te beheren", + "RENAME": "Naam wijzigen", + "RENAME_FILE": "Bestandsnaam wijzigen", + "RENAME_COLLECTION": "Albumnaam wijzigen", + "DELETE_COLLECTION_TITLE": "Verwijder album?", + "DELETE_COLLECTION": "Verwijder album", + "DELETE_COLLECTION_MESSAGE": "Verwijder de foto's (en video's) van dit album ook uit alle andere albums waar deze deel van uitmaken?", + "DELETE_PHOTOS": "Foto's verwijderen", + "KEEP_PHOTOS": "Foto's behouden", + "SHARE": "Delen", + "SHARE_COLLECTION": "Album delen", + "SHAREES": "Gedeeld met", + "SHARE_WITH_SELF": "Oeps, je kunt niet met jezelf delen", + "ALREADY_SHARED": "Oeps, je deelt dit al met {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Album delen niet toegestaan", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Delen is uitgeschakeld voor gratis accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Weet je zeker dat je het volledige album wilt downloaden?

Alle bestanden worden in de wachtrij geplaatst voor downloaden

", + "CREATE_ALBUM_FAILED": "Aanmaken van album mislukt, probeer het opnieuw", + "SEARCH": "Zoeken", + "SEARCH_RESULTS": "Zoekresultaten", + "NO_RESULTS": "Geen resultaten gevonden", + "SEARCH_HINT": "Zoeken naar albums, datums ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Locatie", + "CITY": "Locatie", + "DATE": "Datum", + "FILE_NAME": "Bestandsnaam", + "THING": "Inhoud", + "FILE_CAPTION": "Omschrijving", + "FILE_TYPE": "Bestandstype", + "CLIP": "Magische" + }, + "photos_count_zero": "Geen herinneringen", + "photos_count_one": "1 herinnering", + "photos_count_other": "{{count, number}} herinneringen", + "TERMS_AND_CONDITIONS": "Ik ga akkoord met de gebruiksvoorwaarden en privacybeleid", + "ADD_TO_COLLECTION": "Toevoegen aan album", + "SELECTED": "geselecteerd", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Deze video kan niet afgespeeld worden op uw browser", + "PEOPLE": "Personen", + "INDEXING_SCHEDULED": "indexering is gepland...", + "ANALYZING_PHOTOS": "analyseren van nieuwe foto's {{indexStatus.nSyncedFiles}} van {{indexStatus.nTotalFiles}} gedaan)...", + "INDEXING_PEOPLE": "mensen indexeren in {{indexStatus.nSyncedFiles}} foto's...", + "INDEXING_DONE": "{{indexStatus.nSyncedFiles}} geïndexeerde foto's", + "UNIDENTIFIED_FACES": "ongeïdentificeerde gezichten", + "OBJECTS": "objecten", + "TEXT": "tekst", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "Bestandsnaam", + "CAPTION_PLACEHOLDER": "Voeg een beschrijving toe", + "LOCATION": "Locatie", + "SHOW_ON_MAP": "Bekijk op OpenStreetMap", + "MAP": "Kaart", + "MAP_SETTINGS": "Kaart instellingen", + "ENABLE_MAPS": "Kaarten inschakelen?", + "ENABLE_MAP": "Kaarten inschakelen", + "DISABLE_MAPS": "Kaarten uitzetten?", + "ENABLE_MAP_DESCRIPTION": "

Dit toont jouw foto's op een wereldkaart.

Deze kaart wordt gehost door Open Street Map, en de exacte locaties van jouw foto's worden nooit gedeeld.

Je kunt deze functie op elk gewenst moment uitschakelen via de instellingen.

", + "DISABLE_MAP_DESCRIPTION": "

Dit schakelt de weergave van je foto's op een wereldkaart uit.

Je kunt deze functie op elk gewenst moment inschakelen via Instellingen.

", + "DISABLE_MAP": "Kaarten uitzetten", + "DETAILS": "Details", + "VIEW_EXIF": "Bekijk alle EXIF gegevens", + "NO_EXIF": "Geen EXIF gegevens", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Tweestaps", + "TWO_FACTOR_AUTHENTICATION": "Tweestapsverificatie", + "TWO_FACTOR_QR_INSTRUCTION": "Scan de onderstaande QR-code met uw favoriete verificatie app", + "ENTER_CODE_MANUALLY": "Voer de code handmatig in", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Voer deze code in in uw favoriete verificatie app", + "SCAN_QR_CODE": "Scan QR-code in plaats daarvan", + "ENABLE_TWO_FACTOR": "Tweestapsverificatie inschakelen", + "ENABLE": "Inschakelen", + "LOST_DEVICE": "Tweestapsverificatie apparaat verloren", + "INCORRECT_CODE": "Onjuiste code", + "TWO_FACTOR_INFO": "Voeg een extra beveiligingslaag toe door meer dan uw e-mailadres en wachtwoord te vereisen om in te loggen op uw account", + "DISABLE_TWO_FACTOR_LABEL": "Schakel tweestapsverificatie uit", + "UPDATE_TWO_FACTOR_LABEL": "Update uw verificatie apparaat", + "DISABLE": "Uitschakelen", + "RECONFIGURE": "Herconfigureren", + "UPDATE_TWO_FACTOR": "Tweestapsverificatie bijwerken", + "UPDATE_TWO_FACTOR_MESSAGE": "Verder gaan zal elk eerder geconfigureerde verificatie apparaat ontzeggen", + "UPDATE": "Bijwerken", + "DISABLE_TWO_FACTOR": "Tweestapsverificatie uitschakelen", + "DISABLE_TWO_FACTOR_MESSAGE": "Weet u zeker dat u tweestapsverificatie wilt uitschakelen", + "TWO_FACTOR_DISABLE_FAILED": "Uitschakelen van tweestapsverificatie is mislukt, probeer het opnieuw", + "EXPORT_DATA": "Gegevens exporteren", + "SELECT_FOLDER": "Map selecteren", + "DESTINATION": "Bestemming", + "START": "Start", + "LAST_EXPORT_TIME": "Tijd laatste export", + "EXPORT_AGAIN": "Opnieuw synchroniseren", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Lokale opslag niet toegankelijk", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Je browser of een extensie blokkeert ente om gegevens op te slaan in de lokale opslag. Probeer deze pagina te laden na het aanpassen van de browser surfmodus.", + "SEND_OTT": "Stuur OTP", + "EMAIl_ALREADY_OWNED": "E-mail al in gebruik", + "ETAGS_BLOCKED": "

We kunnen de volgende bestanden niet uploaden vanwege uw browserconfiguratie.

Schakel alle extensies uit die mogelijk voorkomen dat ente eTags kan gebruiken om grote bestanden te uploaden, of gebruik onze desktop app voor een betrouwbaardere import ervaring.

", + "SKIPPED_VIDEOS_INFO": "

We ondersteunen het toevoegen van video's via openbare links momenteel niet.

Om video's te delen, meld je aan bij ente en deel met de beoogde ontvangers via hun e-mail

", + "LIVE_PHOTOS_DETECTED": "De foto en video bestanden van je Live Photos zijn samengevoegd tot één enkel bestand", + "RETRY_FAILED": "Probeer mislukte uploads nogmaals", + "FAILED_UPLOADS": "Mislukte uploads ", + "SKIPPED_FILES": "Genegeerde uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generatie mislukt", + "UNSUPPORTED_FILES": "Niet-ondersteunde bestanden", + "SUCCESSFUL_UPLOADS": "Succesvolle uploads", + "SKIPPED_INFO": "Deze zijn overgeslagen omdat er bestanden zijn met overeenkomende namen in hetzelfde album", + "UNSUPPORTED_INFO": "ente ondersteunt deze bestandsformaten nog niet", + "BLOCKED_UPLOADS": "Geblokkeerde uploads", + "SKIPPED_VIDEOS": "Overgeslagen video's", + "INPROGRESS_METADATA_EXTRACTION": "In behandeling", + "INPROGRESS_UPLOADS": "Bezig met uploaden", + "TOO_LARGE_UPLOADS": "Grote bestanden", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Onvoldoende opslagruimte", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Deze bestanden zijn niet geüpload omdat ze de maximale grootte van uw opslagplan overschrijden", + "TOO_LARGE_INFO": "Deze bestanden zijn niet geüpload omdat ze onze limiet voor bestandsgrootte overschrijden", + "THUMBNAIL_GENERATION_FAILED_INFO": "Deze bestanden zijn geüpload, maar helaas konden we geen thumbnails voor ze genereren.", + "UPLOAD_TO_COLLECTION": "Uploaden naar album", + "UNCATEGORIZED": "Ongecategoriseerd", + "ARCHIVE": "Archiveren", + "FAVORITES": "Favorieten", + "ARCHIVE_COLLECTION": "Album archiveren", + "ARCHIVE_SECTION_NAME": "Archief", + "ALL_SECTION_NAME": "Alle", + "MOVE_TO_COLLECTION": "Verplaats naar album", + "UNARCHIVE": "Uit archief halen", + "UNARCHIVE_COLLECTION": "Album uit archief halen", + "HIDE_COLLECTION": "Verberg album", + "UNHIDE_COLLECTION": "Album zichtbaar maken", + "MOVE": "Verplaatsen", + "ADD": "Toevoegen", + "REMOVE": "Verwijderen", + "YES_REMOVE": "Ja, verwijderen", + "REMOVE_FROM_COLLECTION": "Verwijderen uit album", + "TRASH": "Prullenbak", + "MOVE_TO_TRASH": "Verplaatsen naar prullenbak", + "TRASH_FILES_MESSAGE": "De geselecteerde bestanden worden verwijderd uit alle albums en verplaatst naar de prullenbak.", + "TRASH_FILE_MESSAGE": "Het bestand wordt uit alle albums verwijderd en verplaatst naar de prullenbak.", + "DELETE_PERMANENTLY": "Permanent verwijderen", + "RESTORE": "Herstellen", + "RESTORE_TO_COLLECTION": "Terugzetten naar album", + "EMPTY_TRASH": "Prullenbak leegmaken", + "EMPTY_TRASH_TITLE": "Prullenbak leegmaken?", + "EMPTY_TRASH_MESSAGE": "Geselecteerde bestanden zullen permanent worden verwijderd van uw ente account.", + "LEAVE_SHARED_ALBUM": "Ja, verwijderen", + "LEAVE_ALBUM": "Album verlaten", + "LEAVE_SHARED_ALBUM_TITLE": "Gedeeld album verwijderen?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Je verlaat het album, en het zal niet meer zichtbaar voor je zijn.", + "NOT_FILE_OWNER": "U kunt bestanden niet verwijderen in een gedeeld album", + "CONFIRM_SELF_REMOVE_MESSAGE": "De geselecteerde items worden verwijderd uit dit album. De items die alleen in dit album staan, worden verplaatst naar 'Niet gecategoriseerd'.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Sommige van de items die u verwijdert zijn door andere mensen toegevoegd, en u verliest de toegang daartoe.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oudste", + "SORT_BY_UPDATION_TIME_DESCENDING": "Laatst gewijzigd op", + "SORT_BY_NAME": "Naam", + "COMPRESS_THUMBNAILS": "Comprimeren van thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails gecomprimeerd", + "FIX_THUMBNAIL": "Comprimeren", + "FIX_THUMBNAIL_LATER": "Later comprimeren", + "REPLACE_THUMBNAIL_NOT_STARTED": "Sommige van uw video thumbnails kunnen worden gecomprimeerd om ruimte te besparen. Wilt u dat ente ze comprimeert?", + "REPLACE_THUMBNAIL_COMPLETED": "Alle thumbnails zijn gecomprimeerd", + "REPLACE_THUMBNAIL_NOOP": "Je hebt geen thumbnails die verder gecomprimeerd kunnen worden", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Kon sommige van uw thumbnails niet comprimeren, probeer het opnieuw", + "FIX_CREATION_TIME": "Herstel tijd", + "FIX_CREATION_TIME_IN_PROGRESS": "Tijd aan het herstellen", + "CREATION_TIME_UPDATED": "Bestandstijd bijgewerkt", + "UPDATE_CREATION_TIME_NOT_STARTED": "Selecteer de optie die u wilt gebruiken", + "UPDATE_CREATION_TIME_COMPLETED": "Alle bestanden succesvol bijgewerkt", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "Bestandstijd update mislukt voor sommige bestanden, probeer het opnieuw", + "CAPTION_CHARACTER_LIMIT": "5000 tekens max", + "DATE_TIME_ORIGINAL": "EXIF:DatumTijdOrigineel", + "DATE_TIME_DIGITIZED": "EXIF:DatumTijdDigitaliseerd", + "METADATA_DATE": "EXIF:MetadataDatum", + "CUSTOM_TIME": "Aangepaste tijd", + "REOPEN_PLAN_SELECTOR_MODAL": "Abonnementen heropenen", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Kon abonnementen niet openen", + "INSTALL": "Installeren", + "SHARING_DETAILS": "Delen van informatie", + "MODIFY_SHARING": "Delen wijzigen", + "ADD_COLLABORATORS": "Samenwerker toevoegen", + "ADD_NEW_EMAIL": "Nieuw e-mailadres toevoegen", + "shared_with_people_zero": "Delen met specifieke mensen", + "shared_with_people_one": "Gedeeld met 1 persoon", + "shared_with_people_other": "Gedeeld met {{count, number}} mensen", + "participants_zero": "Geen deelnemers", + "participants_one": "1 deelnemer", + "participants_other": "{{count, number}} deelnemers", + "ADD_VIEWERS": "Voeg kijkers toe", + "PARTICIPANTS": "Deelnemers", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} zullen geen foto's meer kunnen toevoegen aan dit album

Ze zullen nog steeds bestaande foto's kunnen verwijderen die door hen zijn toegevoegd

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} zal foto's aan het album kunnen toevoegen", + "CONVERT_TO_VIEWER": "Ja, converteren naar kijker", + "CONVERT_TO_COLLABORATOR": "Ja, converteren naar samenwerker", + "CHANGE_PERMISSION": "Rechten aanpassen?", + "REMOVE_PARTICIPANT": "Verwijderen?", + "CONFIRM_REMOVE": "Ja, verwijderen", + "MANAGE": "Beheren", + "ADDED_AS": "Toegevoegd als", + "COLLABORATOR_RIGHTS": "Samenwerkers kunnen foto's en video's toevoegen aan het gedeelde album", + "REMOVE_PARTICIPANT_HEAD": "Deelnemer verwijderen", + "OWNER": "Eigenaar", + "COLLABORATORS": "Samenwerker", + "ADD_MORE": "Meer toevoegen", + "VIEWERS": "Kijkers", + "OR_ADD_EXISTING": "Of kies een bestaande", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} zullen worden verwijderd uit het gedeelde album

Alle door hen toegevoegde foto's worden ook uit het album verwijderd

", + "NOT_FOUND": "404 - niet gevonden", + "LINK_EXPIRED": "Link verlopen", + "LINK_EXPIRED_MESSAGE": "Deze link is verlopen of uitgeschakeld!", + "MANAGE_LINK": "Link beheren", + "LINK_TOO_MANY_REQUESTS": "Dit album is te populair voor ons om te verwerken!", + "FILE_DOWNLOAD": "Downloads toestaan", + "LINK_PASSWORD_LOCK": "Wachtwoord versleuteling", + "PUBLIC_COLLECT": "Foto's toevoegen toestaan", + "LINK_DEVICE_LIMIT": "Apparaat limiet", + "NO_DEVICE_LIMIT": "Geen", + "LINK_EXPIRY": "Vervaldatum link", + "NEVER": "Nooit", + "DISABLE_FILE_DOWNLOAD": "Download uitschakelen", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Weet u zeker dat u de downloadknop voor bestanden wilt uitschakelen?

Kijkers kunnen nog steeds screenshots maken of een kopie van uw foto's opslaan met behulp van externe hulpmiddelen.

", + "MALICIOUS_CONTENT": "Bevat kwaadwillende inhoud", + "COPYRIGHT": "Schending van het auteursrecht van iemand die ik mag vertegenwoordigen", + "SHARED_USING": "Gedeeld via ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Gebruik code {{referralCode}} om 10 GB gratis te krijgen", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Schakel cijfercode vergrendeling uit", + "DISABLE_PASSWORD_MESSAGE": "Weet u zeker dat u de cijfercode vergrendeling wilt uitschakelen?", + "PASSWORD_LOCK": "Cijfercode vergrendeling", + "LOCK": "Vergrendeling", + "DOWNLOAD_UPLOAD_LOGS": "Logboeken voor foutmeldingen", + "UPLOAD_FILES": "Bestand", + "UPLOAD_DIRS": "Map", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Dubbele bestanden verwijderen", + "AUTHENTICATOR_SECTION": "Verificatie apparaat", + "NO_DUPLICATES_FOUND": "Je hebt geen dubbele bestanden die kunnen worden gewist", + "CLUB_BY_CAPTURE_TIME": "Samenvoegen op tijd", + "FILES": "Bestanden", + "EACH": "Elke", + "DEDUPLICATE_BASED_ON_SIZE": "De volgende bestanden zijn samengevoegd op basis van hun groottes. Controleer en verwijder items waarvan je denkt dat ze dubbel zijn", + "STOP_ALL_UPLOADS_MESSAGE": "Weet u zeker dat u wilt stoppen met alle uploads die worden uitgevoerd?", + "STOP_UPLOADS_HEADER": "Stoppen met uploaden?", + "YES_STOP_UPLOADS": "Ja, stop uploaden", + "STOP_DOWNLOADS_HEADER": "Downloaden stoppen?", + "YES_STOP_DOWNLOADS": "Ja, downloads stoppen", + "STOP_ALL_DOWNLOADS_MESSAGE": "Weet je zeker dat je wilt stoppen met alle downloads die worden uitgevoerd?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "Alle albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "Alle verborgen albums", + "HIDDEN_ALBUMS": "Verborgen albums", + "HIDDEN_ITEMS": "Verborgen bestanden", + "HIDDEN_ITEMS_SECTION_NAME": "Verborgen_items", + "ENTER_TWO_FACTOR_OTP": "Voer de 6-cijferige code van uw verificatie app in.", + "CREATE_ACCOUNT": "Account aanmaken", + "COPIED": "Gekopieerd", + "CANVAS_BLOCKED_TITLE": "Kan thumbnail niet genereren", + "CANVAS_BLOCKED_MESSAGE": "

Het lijkt erop dat uw browser geen toegang heeft tot canvas, die nodig is om thumbnails voor uw foto's te genereren

Schakel toegang tot het canvas van uw browser in, of bekijk onze desktop app

", + "WATCH_FOLDERS": "Monitor mappen", + "UPGRADE_NOW": "Nu upgraden", + "RENEW_NOW": "Nu verlengen", + "STORAGE": "Opslagruimte", + "USED": "gebruikt", + "YOU": "Jij", + "FAMILY": "Familie", + "FREE": "free", + "OF": "van", + "WATCHED_FOLDERS": "Gemonitorde mappen", + "NO_FOLDERS_ADDED": "Nog geen mappen toegevoegd!", + "FOLDERS_AUTOMATICALLY_MONITORED": "De mappen die u hier toevoegt worden automatisch gemonitord", + "UPLOAD_NEW_FILES_TO_ENTE": "Nieuwe bestanden uploaden naar ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Verwijderde bestanden van ente opruimen", + "ADD_FOLDER": "Map toevoegen", + "STOP_WATCHING": "Stop monitoren", + "STOP_WATCHING_FOLDER": "Stop monitoren van map?", + "STOP_WATCHING_DIALOG_MESSAGE": "Uw bestaande bestanden zullen niet worden verwijderd, maar ente stopt met het automatisch bijwerken van het gekoppelde ente album bij wijzigingen in deze map.", + "YES_STOP": "Ja, stop", + "MONTH_SHORT": "mo", + "YEAR": "jaar", + "FAMILY_PLAN": "Familie abonnement", + "DOWNLOAD_LOGS": "Logboek downloaden", + "DOWNLOAD_LOGS_MESSAGE": "

Dit zal logboeken downloaden, die u ons kunt e-mailen om te helpen bij het debuggen van uw probleem.

Houd er rekening mee dat bestandsnamen worden opgenomen om problemen met specifieke bestanden bij te houden.

", + "CHANGE_FOLDER": "Map wijzigen", + "TWO_MONTHS_FREE": "Krijg 2 maanden gratis op jaarlijkse abonnementen", + "GB": "GB", + "POPULAR": "Populair", + "FREE_PLAN_OPTION_LABEL": "Doorgaan met gratis account", + "FREE_PLAN_DESCRIPTION": "1 GB voor 1 jaar", + "CURRENT_USAGE": "Huidig gebruik is {{usage}}", + "WEAK_DEVICE": "De webbrowser die u gebruikt is niet krachtig genoeg om uw foto's te versleutelen. Probeer in te loggen op uw computer, of download de ente mobiel/desktop app.", + "DRAG_AND_DROP_HINT": "Of sleep en plaats in het ente venster", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Uw geüploade gegevens worden gepland voor verwijdering, en uw account zal permanent worden verwijderd.

Deze actie is onomkeerbaar.", + "AUTHENTICATE": "Verifiëren", + "UPLOADED_TO_SINGLE_COLLECTION": "Geüpload naar enkele collectie", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Geüpload naar verschillende collecties", + "NEVERMIND": "Laat maar", + "UPDATE_AVAILABLE": "Update beschikbaar", + "UPDATE_INSTALLABLE_MESSAGE": "Er staat een nieuwe versie van ente klaar om te worden geïnstalleerd.", + "INSTALL_NOW": "Nu installeren", + "INSTALL_ON_NEXT_LAUNCH": "Installeren bij volgende start", + "UPDATE_AVAILABLE_MESSAGE": "Er is een nieuwe versie van ente vrijgegeven, maar deze kan niet automatisch worden gedownload en geïnstalleerd.", + "DOWNLOAD_AND_INSTALL": "Downloaden en installeren", + "IGNORE_THIS_VERSION": "Negeer deze versie", + "TODAY": "Vandaag", + "YESTERDAY": "Gisteren", + "NAME_PLACEHOLDER": "Naam...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Kan geen albums maken uit bestand/map mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Je hebt een mix van bestanden en mappen gesleept en laten vallen.

Geef ofwel alleen bestanden aan, of alleen mappen bij het selecteren van de optie om afzonderlijke albums te maken

", + "CHOSE_THEME": "Kies thema", + "ML_SEARCH": "ML zoeken (bèta)", + "ENABLE_ML_SEARCH_DESCRIPTION": "

Dit zal algoritmes op het apparaat inschakelen die zullen beginnen met het lokaal analyseren van uw geüploade foto's.

Voor het eerst na inloggen of het inschakelen van deze functie zal het alle afbeeldingen op het lokale apparaat downloaden om ze te analyseren. Schakel dit dus alleen in als je akkoord bent met gegevensverbruik en lokale verwerking van alle afbeeldingen in uw fotobibliotheek.

Als dit de eerste keer is dat uw dit inschakelt, vragen we u ook om toestemming om gegevens te verwerken.

", + "ML_MORE_DETAILS": "Meer details", + "ENABLE_FACE_SEARCH": "Zoeken op gezichten inschakelen", + "ENABLE_FACE_SEARCH_TITLE": "Zoeken op gezichten inschakelen?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Als u zoeken op gezichten inschakelt, analyseert ente de gezichtsgeometrie uit uw foto's. Dit gebeurt op uw apparaat en alle gegenereerde biometrische gegevens worden end-to-end versleuteld.

Klik hier voor meer informatie over deze functie in ons privacybeleid

", + "DISABLE_BETA": "Bèta uitschakelen", + "DISABLE_FACE_SEARCH": "Zoeken op gezichten uitschakelen", + "DISABLE_FACE_SEARCH_TITLE": "Zoeken op gezichten uitschakelen?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente zal stoppen met het analyseren van de gezichtsgeometrie, en zal ML zoeken (beta) uitschakelen

U kan zoeken op gezichten opnieuw inschakelen wanneer u wilt, dus deze handeling is veilig.

", + "ADVANCED": "Geavanceerd", + "FACE_SEARCH_CONFIRMATION": "Ik begrijp het, en wil ente toestaan om gezichten te analyseren", + "LABS": "Lab's", + "YOURS": "jouw", + "PASSPHRASE_STRENGTH_WEAK": "Wachtwoord sterkte: Zwak", + "PASSPHRASE_STRENGTH_MODERATE": "Wachtwoord sterkte: Matig", + "PASSPHRASE_STRENGTH_STRONG": "Wachtwoord sterkte: Sterk", + "PREFERENCES": "Instellingen", + "LANGUAGE": "Taal", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Ongeldige export map", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

De export map die u heeft geselecteerd bestaat niet.

Selecteer een geldige map.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Abonnementsverificatie mislukt", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "na één uur", + "DAY": "na één dag", + "WEEK": "na één week", + "MONTH": "na één maand", + "YEAR": "na één jaar" + }, + "COPY_LINK": "Link kopiëren", + "DONE": "Voltooid", + "LINK_SHARE_TITLE": "Of deel een link", + "REMOVE_LINK": "Link verwijderen", + "CREATE_PUBLIC_SHARING": "Maak publieke link", + "PUBLIC_LINK_CREATED": "Publieke link aangemaakt", + "PUBLIC_LINK_ENABLED": "Publieke link ingeschakeld", + "COLLECT_PHOTOS": "Foto's verzamelen", + "PUBLIC_COLLECT_SUBTEXT": "Sta toe dat mensen met de link ook foto's kunnen toevoegen aan het gedeelde album.", + "STOP_EXPORT": "Stoppen", + "EXPORT_PROGRESS": "{{progress.success}} / {{progress.total}} bestanden geëxporteerd", + "MIGRATING_EXPORT": "Voorbereiden...", + "RENAMING_COLLECTION_FOLDERS": "Albumnamen hernoemen...", + "TRASHING_DELETED_FILES": "Verwijderde bestanden naar prullenbak...", + "TRASHING_DELETED_COLLECTIONS": "Verwijderde albums naar prullenbak...", + "EXPORT_NOTIFICATION": { + "START": "Exporteren begonnen", + "IN_PROGRESS": "Exporteren is al bezig", + "FINISH": "Exporteren voltooid", + "UP_TO_DATE": "Geen nieuwe bestanden om te exporteren" + }, + "CONTINUOUS_EXPORT": "Continue synchroniseren", + "TOTAL_ITEMS": "Totaal aantal bestanden", + "PENDING_ITEMS": "Bestanden in behandeling", + "EXPORT_STARTING": "Exporteren begonnen...", + "DELETE_ACCOUNT_REASON_LABEL": "Wat is de belangrijkste reden waarom je jouw account verwijdert?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Kies een reden", + "DELETE_REASON": { + "MISSING_FEATURE": "Ik mis een belangrijke functie", + "BROKEN_BEHAVIOR": "De app of een bepaalde functie functioneert niet zoals ik verwacht", + "FOUND_ANOTHER_SERVICE": "Ik heb een andere dienst gevonden die me beter bevalt", + "NOT_LISTED": "Mijn reden wordt niet vermeld" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We vinden het jammer je te zien gaan. Deel alsjeblieft je feedback om ons te helpen verbeteren.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Ja, ik wil permanent mijn account inclusief alle gegevens verwijderen", + "CONFIRM_DELETE_ACCOUNT": "Account verwijderen bevestigen", + "FEEDBACK_REQUIRED": "Help ons alsjeblieft met deze informatie", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "Wat doet de andere dienst beter?", + "RECOVER_TWO_FACTOR": "Herstel tweestaps", + "at": "om", + "AUTH_NEXT": "volgende", + "AUTH_DOWNLOAD_MOBILE_APP": "Download onze mobiele app om uw geheimen te beheren", + "HIDDEN": "Verborgen", + "HIDE": "Verbergen", + "UNHIDE": "Zichtbaar maken", + "UNHIDE_TO_COLLECTION": "Zichtbaar maken in album", + "SORT_BY": "Sorteren op", + "NEWEST_FIRST": "Nieuwste eerst", + "OLDEST_FIRST": "Oudste eerst", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Dit bestand kan niet worden bekeken in de app, klik hier om het origineel te downloaden", + "SELECT_COLLECTION": "Album selecteren", + "PIN_ALBUM": "Album bovenaan vastzetten", + "UNPIN_ALBUM": "Album losmaken", + "DOWNLOAD_COMPLETE": "Download compleet", + "DOWNLOADING_COLLECTION": "{{name}} downloaden", + "DOWNLOAD_FAILED": "Download mislukt", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} bestanden", + "CRASH_REPORTING": "Foutenrapportering", + "CHRISTMAS": "Kerst", + "CHRISTMAS_EVE": "Kerstavond", + "NEW_YEAR": "Nieuwjaar", + "NEW_YEAR_EVE": "Oudjaarsavond", + "IMAGE": "Afbeelding", + "VIDEO": "Video", + "LIVE_PHOTO": "Live foto", + "CONVERT": "Converteren", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Weet u zeker dat u de editor wilt afsluiten?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download uw bewerkte afbeelding of sla een kopie op in ente om uw wijzigingen te behouden.", + "BRIGHTNESS": "Helderheid", + "CONTRAST": "Contrast", + "SATURATION": "Saturatie", + "BLUR": "Vervagen", + "INVERT_COLORS": "Kleuren omkeren", + "ASPECT_RATIO": "Beeldverhouding", + "SQUARE": "Vierkant", + "ROTATE_LEFT": "Roteer links", + "ROTATE_RIGHT": "Roteer rechts", + "FLIP_VERTICALLY": "Verticaal spiegelen", + "FLIP_HORIZONTALLY": "Horizontaal spiegelen", + "DOWNLOAD_EDITED": "Download Bewerkt", + "SAVE_A_COPY_TO_ENTE": "Kopie in ente opslaan", + "RESTORE_ORIGINAL": "Origineel herstellen", + "TRANSFORM": "Transformeer", + "COLORS": "Kleuren", + "FLIP": "Omdraaien", + "ROTATION": "Draaiing", + "RESET": "Herstellen", + "PHOTO_EDITOR": "Fotobewerker", + "FASTER_UPLOAD": "Snellere uploads", + "FASTER_UPLOAD_DESCRIPTION": "Uploaden door nabije servers", + "MAGIC_SEARCH_STATUS": "Magische Zoekfunctie Status", + "INDEXED_ITEMS": "Geïndexeerde bestanden", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache map", + "PASSKEYS": "Passkeys", + "FREEHAND": "Losse hand", + "APPLY_CROP": "Bijsnijden toepassen", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "Tenminste één transformatie of kleuraanpassing moet worden uitgevoerd voordat u opslaat." +} diff --git a/web/apps/auth/public/locales/pt-BR/translation.json b/web/apps/auth/public/locales/pt-BR/translation.json new file mode 100644 index 000000000..dd264db38 --- /dev/null +++ b/web/apps/auth/public/locales/pt-BR/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Backups privados
para as suas memórias
", + "HERO_SLIDE_1": "Criptografia de ponta a ponta por padrão", + "HERO_SLIDE_2_TITLE": "
Armazenado com segurança
em um abrigo avançado
", + "HERO_SLIDE_2": "Feito para ter logenvidade", + "HERO_SLIDE_3_TITLE": "
Disponível
em qualquer lugar
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Entrar", + "SIGN_UP": "Registrar", + "NEW_USER": "Novo no ente", + "EXISTING_USER": "Utilizador existente", + "ENTER_NAME": "Insira o nome", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Adicione um nome para que os seus amigos saibam a quem agradecer por estas ótimas fotos!", + "ENTER_EMAIL": "Insira o endereço de e-mail", + "EMAIL_ERROR": "Inserir um endereço de e-mail válido", + "REQUIRED": "Obrigatório", + "EMAIL_SENT": "Código de verificação enviado para {{email}}", + "CHECK_INBOX": "Verifique a sua caixa de entrada (e spam) para concluir a verificação", + "ENTER_OTT": "Código de verificação", + "RESEND_MAIL": "Reenviar código", + "VERIFY": "Verificar", + "UNKNOWN_ERROR": "Ocorreu um erro. Tente novamente", + "INVALID_CODE": "Código de verificação inválido", + "EXPIRED_CODE": "O seu código de verificação expirou", + "SENDING": "Enviando...", + "SENT": "Enviado!", + "PASSWORD": "Senha", + "LINK_PASSWORD": "Insira a senha para desbloquear o álbum", + "RETURN_PASSPHRASE_HINT": "Senha", + "SET_PASSPHRASE": "Definir senha", + "VERIFY_PASSPHRASE": "Iniciar sessão", + "INCORRECT_PASSPHRASE": "Palavra-passe incorreta", + "ENTER_ENC_PASSPHRASE": "Por favor, digite uma senha que podemos usar para criptografar seus dados", + "PASSPHRASE_DISCLAIMER": "Não armazenamos sua senha, portanto, se você esquecê-la, não poderemos ajudarna recuperação de seus dados sem uma chave de recuperação.", + "WELCOME_TO_ENTE_HEADING": "Bem-vindo ao ", + "WELCOME_TO_ENTE_SUBHEADING": "Armazenamento criptografado de ponta a ponta de fotos e compartilhamento", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Onde suas melhores fotos vivem", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Gerando chaves de criptografia...", + "PASSPHRASE_HINT": "Senha", + "CONFIRM_PASSPHRASE": "Confirmar senha", + "REFERRAL_CODE_HINT": "Como você ouviu sobre o Ente? (opcional)", + "REFERRAL_INFO": "Não rastreamos instalações do aplicativo. Seria útil se você nos contasse onde nos encontrou!", + "PASSPHRASE_MATCH_ERROR": "As senhas não coincidem", + "CONSOLE_WARNING_STOP": "PARAR!", + "CONSOLE_WARNING_DESC": "Este é um recurso de navegador destinado a desenvolvedores. Por favor, não copie e cole o código não confirmado aqui.", + "CREATE_COLLECTION": "Novo álbum", + "ENTER_ALBUM_NAME": "Nome do álbum", + "CLOSE_OPTION": "Fechar (Esc)", + "ENTER_FILE_NAME": "Nome do arquivo", + "CLOSE": "Fechar", + "NO": "Não", + "NOTHING_HERE": "Nada para ver aqui! 👀", + "UPLOAD": "Enviar", + "IMPORT": "Importar", + "ADD_PHOTOS": "Adicionar fotos", + "ADD_MORE_PHOTOS": "Adicionar mais fotos", + "add_photos_one": "Adicionar item", + "add_photos_other": "Adicionar {{count, number}} itens", + "SELECT_PHOTOS": "Selecionar fotos", + "FILE_UPLOAD": "Envio de Arquivo", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparando para enviar", + "1": "Lendo arquivos de metadados do google", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} metadados dos arquivos extraídos", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} arquivos processados", + "4": "Cancelando envios restante", + "5": "Backup concluído" + }, + "FILE_NOT_UPLOADED_LIST": "Os seguintes arquivos não foram enviados", + "SUBSCRIPTION_EXPIRED": "Assinatura expirada", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Sua assinatura expirou, por favor renove-a", + "STORAGE_QUOTA_EXCEEDED": "Limite de armazenamento excedido", + "INITIAL_LOAD_DELAY_WARNING": "Primeiro carregamento pode levar algum tempo", + "USER_DOES_NOT_EXIST": "Desculpe, não foi possível encontrar um usuário com este e-mail", + "NO_ACCOUNT": "Não possui uma conta", + "ACCOUNT_EXISTS": "Já possui uma conta", + "CREATE": "Criar", + "DOWNLOAD": "Baixar", + "DOWNLOAD_OPTION": "Baixar (D)", + "DOWNLOAD_FAVORITES": "Baixar favoritos", + "DOWNLOAD_UNCATEGORIZED": "Baixar não categorizado", + "DOWNLOAD_HIDDEN_ITEMS": "Baixar itens ocultos", + "COPY_OPTION": "Copiar como PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Mudar para tela cheia (F)", + "ZOOM_IN_OUT": "Ampliar/Reduzir", + "PREVIOUS": "Anterior (←)", + "NEXT": "Próximo (→)", + "TITLE_PHOTOS": "Ente Fotos", + "TITLE_ALBUMS": "Ente Fotos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Envie sua primeira foto", + "IMPORT_YOUR_FOLDERS": "Importar suas pastas", + "UPLOAD_DROPZONE_MESSAGE": "Arraste para salvar seus arquivos", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Arraste para adicionar pasta monitorada", + "TRASH_FILES_TITLE": "Excluir arquivos?", + "TRASH_FILE_TITLE": "Excluir arquivo?", + "DELETE_FILES_TITLE": "Excluir imediatamente?", + "DELETE_FILES_MESSAGE": "Os arquivos selecionados serão excluídos permanentemente da sua conta ente.", + "DELETE": "Excluir", + "DELETE_OPTION": "Excluir (DEL)", + "FAVORITE_OPTION": "Favorito (L)", + "UNFAVORITE_OPTION": "Remover Favorito (L)", + "MULTI_FOLDER_UPLOAD": "Várias pastas detectadas", + "UPLOAD_STRATEGY_CHOICE": "Gostaria de enviá-los para", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Um único álbum", + "OR": "ou", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Álbuns separados", + "SESSION_EXPIRED_MESSAGE": "A sua sessão expirou. Por favor inicie sessão novamente para continuar", + "SESSION_EXPIRED": "Sessão expirada", + "PASSWORD_GENERATION_FAILED": "Seu navegador foi incapaz de gerar uma chave forte que atende aos padrões de criptografia, por favor, tente usar o aplicativo móvel ou outro navegador", + "CHANGE_PASSWORD": "Alterar senha", + "GO_BACK": "Voltar", + "RECOVERY_KEY": "Chave de recuperação", + "SAVE_LATER": "Fazer isso mais tarde", + "SAVE": "Salvar Chave", + "RECOVERY_KEY_DESCRIPTION": "Caso você esqueça sua senha, a única maneira de recuperar seus dados é com essa chave.", + "RECOVER_KEY_GENERATION_FAILED": "Não foi possível gerar o código de recuperação, tente novamente", + "KEY_NOT_STORED_DISCLAIMER": "Não armazenamos essa chave, por favor, salve essa chave de palavras em um lugar seguro", + "FORGOT_PASSWORD": "Esqueci a senha", + "RECOVER_ACCOUNT": "Recuperar conta", + "RECOVERY_KEY_HINT": "Chave de recuperação", + "RECOVER": "Recuperar", + "NO_RECOVERY_KEY": "Não possui a chave de recuperação?", + "INCORRECT_RECOVERY_KEY": "Chave de recuperação incorreta", + "SORRY": "Desculpe", + "NO_RECOVERY_KEY_MESSAGE": "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, seus dados não podem ser descriptografados sem sua senha ou chave de recuperação", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Por favor, envie um e-mail para {{emailID}} a partir do seu endereço de e-mail registrado", + "CONTACT_SUPPORT": "Falar com o suporte", + "REQUEST_FEATURE": "Solicitar Funcionalidade", + "SUPPORT": "Suporte", + "CONFIRM": "Confirmar", + "CANCEL": "Cancelar", + "LOGOUT": "Encerrar sessão", + "DELETE_ACCOUNT": "Excluir conta", + "DELETE_ACCOUNT_MESSAGE": "

Por favor, envie um e-mail para {{emailID}} a partir do seu endereço de e-mail registrado.

Seu pedido será processado dentro de 72 horas.

", + "LOGOUT_MESSAGE": "Você tem certeza que deseja encerrar a sessão?", + "CHANGE_EMAIL": "Mudar e-mail", + "OK": "Aceitar", + "SUCCESS": "Bem-sucedido", + "ERROR": "Erro", + "MESSAGE": "Mensagem", + "INSTALL_MOBILE_APP": "Instale nosso aplicativo Android ou iOS para fazer backup automático de todas as suas fotos", + "DOWNLOAD_APP_MESSAGE": "Desculpe, esta operação só é suportada em nosso aplicativo para computador", + "DOWNLOAD_APP": "Baixar aplicativo para computador", + "EXPORT": "Exportar dados", + "SUBSCRIPTION": "Assinatura", + "SUBSCRIBE": "Assinar", + "MANAGEMENT_PORTAL": "Gerenciar métodos de pagamento", + "MANAGE_FAMILY_PORTAL": "Gerenciar Família", + "LEAVE_FAMILY_PLAN": "Sair do plano familiar", + "LEAVE": "Sair", + "LEAVE_FAMILY_CONFIRM": "Tem certeza que deseja sair do plano familiar?", + "CHOOSE_PLAN": "Escolha seu plano", + "MANAGE_PLAN": "Gerenciar sua assinatura", + "ACTIVE": "Ativo", + "OFFLINE_MSG": "Você está offline, memórias em cache estão sendo mostradas", + "FREE_SUBSCRIPTION_INFO": "Você está no plano gratuito que expira em {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Você está em um plano familiar gerenciado por", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renovações em {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Termina em {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Sua assinatura será cancelada em {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Seu complemento {{storage, string}} é válido até o dia {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Você excedeu sua cota de armazenamento, por favor atualize", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Recebemos o seu pagamento

Sua assinatura é válida até {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Sua compra foi cancelada, por favor, tente novamente se quiser assinar", + "SUBSCRIPTION_PURCHASE_FAILED": "Falha na compra de assinatura, tente novamente", + "SUBSCRIPTION_UPDATE_FAILED": "Falha ao atualizar assinatura, tente novamente", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Desculpe-nos, o pagamento falhou quando tentamos cobrar o seu cartão, por favor atualize seu método de pagamento e tente novamente", + "STRIPE_AUTHENTICATION_FAILED": "Não foi possível autenticar seu método de pagamento. Por favor, escolha outro método de pagamento e tente novamente", + "UPDATE_PAYMENT_METHOD": "Atualizar forma de pagamento", + "MONTHLY": "Mensal", + "YEARLY": "Anual", + "UPDATE_SUBSCRIPTION_MESSAGE": "Tem certeza que deseja trocar de plano?", + "UPDATE_SUBSCRIPTION": "Mudar de plano", + "CANCEL_SUBSCRIPTION": "Cancelar assinatura", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Todos os seus dados serão excluídos dos nossos servidores no final deste período de cobrança.

Você tem certeza que deseja cancelar sua assinatura?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Tem certeza que deseja cancelar sua assinatura?

", + "SUBSCRIPTION_CANCEL_FAILED": "Falha ao cancelar a assinatura", + "SUBSCRIPTION_CANCEL_SUCCESS": "Assinatura cancelada com sucesso", + "REACTIVATE_SUBSCRIPTION": "Reativar assinatura", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Uma vez reativado, você será cobrado em {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Assinatura ativada com sucesso ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Falha ao reativar as renovações de assinaturas", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Obrigado", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancelar assinatura móvel", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Por favor, cancele sua assinatura do aplicativo móvel para ativar uma assinatura aqui", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Entre em contato com {{emailID}} para gerenciar sua assinatura", + "RENAME": "Renomear", + "RENAME_FILE": "Renomear arquivo", + "RENAME_COLLECTION": "Renomear álbum", + "DELETE_COLLECTION_TITLE": "Excluir álbum?", + "DELETE_COLLECTION": "Excluir álbum", + "DELETE_COLLECTION_MESSAGE": "Também excluir as fotos (e vídeos) presentes neste álbum de todos os outros álbuns dos quais eles fazem parte?", + "DELETE_PHOTOS": "Excluir fotos", + "KEEP_PHOTOS": "Manter fotos", + "SHARE": "Compartilhar", + "SHARE_COLLECTION": "Compartilhar álbum", + "SHAREES": "Compartilhado com", + "SHARE_WITH_SELF": "Você não pode compartilhar consigo mesmo", + "ALREADY_SHARED": "Ops, você já está compartilhando isso com {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Álbum compartilhado não permitido", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Compartilhamento está desabilitado para contas gratuitas", + "DOWNLOAD_COLLECTION": "Baixar álbum", + "DOWNLOAD_COLLECTION_MESSAGE": "

Tem certeza que deseja baixar o álbum completo?

Todos os arquivos serão colocados na fila para baixar sequencialmente

", + "CREATE_ALBUM_FAILED": "Falha ao criar álbum, por favor tente novamente", + "SEARCH": "Pesquisar", + "SEARCH_RESULTS": "Resultados de pesquisa", + "NO_RESULTS": "Nenhum resultado encontrado", + "SEARCH_HINT": "Pesquisar por álbuns, datas, descrições, ...", + "SEARCH_TYPE": { + "COLLECTION": "Álbum", + "LOCATION": "Local", + "CITY": "Local", + "DATE": "Data", + "FILE_NAME": "Nome do arquivo", + "THING": "Conteúdo", + "FILE_CAPTION": "Descrição", + "FILE_TYPE": "Tipo de arquivo", + "CLIP": "Mágica" + }, + "photos_count_zero": "Sem memórias", + "photos_count_one": "1 memória", + "photos_count_other": "{{count, number}} memórias", + "TERMS_AND_CONDITIONS": "Eu concordo com os termos e a política de privacidade", + "ADD_TO_COLLECTION": "Adicionar ao álbum", + "SELECTED": "selecionado", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Este vídeo não pode ser reproduzido no seu navegador", + "PEOPLE": "Pessoas", + "INDEXING_SCHEDULED": "Indexação está programada...", + "ANALYZING_PHOTOS": "Indexando fotos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexando pessoas em {{indexStatus.nSyncedFiles,number}} fotos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "rostos não identificados", + "OBJECTS": "objetos", + "TEXT": "texto", + "INFO": "Informação ", + "INFO_OPTION": "Informação (I)", + "FILE_NAME": "Nome do arquivo", + "CAPTION_PLACEHOLDER": "Adicionar uma descrição", + "LOCATION": "Local", + "SHOW_ON_MAP": "Ver no OpenStreetMap", + "MAP": "Mapa", + "MAP_SETTINGS": "Ajustes do mapa", + "ENABLE_MAPS": "Habilitar mapa?", + "ENABLE_MAP": "Habilitar mapa", + "DISABLE_MAPS": "Desativar Mapas?", + "ENABLE_MAP_DESCRIPTION": "Isto mostrará suas fotos em um mapa do mundo.

Este mapa é hospedado pelo OpenStreetMap , e os exatos locais de suas fotos nunca são compartilhados.

Você pode desativar esse recurso a qualquer momento nas Configurações.

", + "DISABLE_MAP_DESCRIPTION": "

Isto irá desativar a exibição de suas fotos em um mapa mundial.

Você pode ativar este recurso a qualquer momento nas Configurações.

", + "DISABLE_MAP": "Desabilitar mapa", + "DETAILS": "Detalhes", + "VIEW_EXIF": "Ver todos os dados EXIF", + "NO_EXIF": "Sem dados EXIF", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Dois fatores", + "TWO_FACTOR_AUTHENTICATION": "Autenticação de dois fatores", + "TWO_FACTOR_QR_INSTRUCTION": "Digitalize o código QR abaixo com o seu aplicativo de autenticador favorito", + "ENTER_CODE_MANUALLY": "Inserir código manualmente", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Por favor, insira este código no seu aplicativo autenticador favorito", + "SCAN_QR_CODE": "Em vez disso, escaneie um Código QR", + "ENABLE_TWO_FACTOR": "Ativar autenticação de dois fatores", + "ENABLE": "Habilitar", + "LOST_DEVICE": "Dispositivo de dois fatores perdido", + "INCORRECT_CODE": "Código incorreto", + "TWO_FACTOR_INFO": "Adicione uma camada adicional de segurança, exigindo mais do que seu e-mail e senha para entrar na sua conta", + "DISABLE_TWO_FACTOR_LABEL": "Desativar autenticação de dois fatores", + "UPDATE_TWO_FACTOR_LABEL": "Atualize seu dispositivo autenticador", + "DISABLE": "Desativar", + "RECONFIGURE": "Reconfigurar", + "UPDATE_TWO_FACTOR": "Atualizar dois fatores", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuar adiante anulará qualquer autenticador configurado anteriormente", + "UPDATE": "Atualização", + "DISABLE_TWO_FACTOR": "Desativar autenticação de dois fatores", + "DISABLE_TWO_FACTOR_MESSAGE": "Você tem certeza de que deseja desativar a autenticação de dois fatores", + "TWO_FACTOR_DISABLE_FAILED": "Não foi possível desativar dois fatores, por favor tente novamente", + "EXPORT_DATA": "Exportar dados", + "SELECT_FOLDER": "Selecione a pasta", + "DESTINATION": "Destino", + "START": "Iniciar", + "LAST_EXPORT_TIME": "Data da última exportação", + "EXPORT_AGAIN": "Resincronizar", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Armazenamento local não acessível", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Seu navegador ou uma extensão está bloqueando o ente de salvar os dados no armazenamento local. Por favor, tente carregar esta página depois de alternar o modo de navegação.", + "SEND_OTT": "Enviar códigos OTP", + "EMAIl_ALREADY_OWNED": "Este e-mail já está em uso", + "ETAGS_BLOCKED": "

Não foi possível fazer o envio dos seguintes arquivos devido à configuração do seu navegador.

Por favor, desative quaisquer complementos que possam estar impedindo o ente de utilizar eTags para enviar arquivos grandes, ou utilize nosso aplicativo para computador para uma experiência de importação mais confiável.

", + "SKIPPED_VIDEOS_INFO": "

Atualmente, não oferecemos suporte para adicionar vídeos através de links públicos.

Para compartilhar vídeos, por favor, faça cadastro no ente e compartilhe com os destinatários pretendidos usando seus e-mails.

", + "LIVE_PHOTOS_DETECTED": "Os arquivos de foto e vídeo das suas Fotos em Movimento foram mesclados em um único arquivo", + "RETRY_FAILED": "Repetir envios que falharam", + "FAILED_UPLOADS": "Envios com falhas ", + "SKIPPED_FILES": "Envios ignorados", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Falha ao gerar miniaturas", + "UNSUPPORTED_FILES": "Arquivos não suportados", + "SUCCESSFUL_UPLOADS": "Envios bem sucedidos", + "SKIPPED_INFO": "Ignorar estes como existem arquivos com nomes correspondentes no mesmo álbum", + "UNSUPPORTED_INFO": "ente ainda não suporta estes formatos de arquivo", + "BLOCKED_UPLOADS": "Envios bloqueados", + "SKIPPED_VIDEOS": "Vídeos ignorados", + "INPROGRESS_METADATA_EXTRACTION": "Em andamento", + "INPROGRESS_UPLOADS": "Envios em andamento", + "TOO_LARGE_UPLOADS": "Arquivos grandes", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Armazenamento insuficiente", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Estes arquivos não foram carregados pois excedem o tamanho máximo para seu plano de armazenamento", + "TOO_LARGE_INFO": "Estes arquivos não foram carregados pois excedem nosso limite máximo de tamanho de arquivo", + "THUMBNAIL_GENERATION_FAILED_INFO": "Estes arquivos foram enviados, mas infelizmente não conseguimos gerar as miniaturas para eles.", + "UPLOAD_TO_COLLECTION": "Enviar para o álbum", + "UNCATEGORIZED": "Sem categoria", + "ARCHIVE": "Arquivar", + "FAVORITES": "Favoritos", + "ARCHIVE_COLLECTION": "Arquivar álbum", + "ARCHIVE_SECTION_NAME": "Arquivar", + "ALL_SECTION_NAME": "Todos", + "MOVE_TO_COLLECTION": "Mover para álbum", + "UNARCHIVE": "Desarquivar", + "UNARCHIVE_COLLECTION": "Desarquivar álbum", + "HIDE_COLLECTION": "Ocultar álbum", + "UNHIDE_COLLECTION": "Reexibir álbum", + "MOVE": "Mover", + "ADD": "Adicionar", + "REMOVE": "Remover", + "YES_REMOVE": "Sim, remover", + "REMOVE_FROM_COLLECTION": "Remover do álbum", + "TRASH": "Lixeira", + "MOVE_TO_TRASH": "Mover para a lixeira", + "TRASH_FILES_MESSAGE": "Os itens selecionados serão excluídos de todos os álbuns e movidos para o lixo.", + "TRASH_FILE_MESSAGE": "Os itens selecionados serão excluídos de todos os álbuns e movidos para o lixo.", + "DELETE_PERMANENTLY": "Excluir permanentemente", + "RESTORE": "Restaurar", + "RESTORE_TO_COLLECTION": "Restaurar para álbum", + "EMPTY_TRASH": "Esvaziar a lixeira", + "EMPTY_TRASH_TITLE": "Esvaziar a lixeira?", + "EMPTY_TRASH_MESSAGE": "Estes arquivos serão excluídos permanentemente da sua conta do ente.", + "LEAVE_SHARED_ALBUM": "Sim, sair", + "LEAVE_ALBUM": "Sair do álbum", + "LEAVE_SHARED_ALBUM_TITLE": "Sair do álbum compartilhado?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Você deixará o álbum e ele deixará de ser visível para você.", + "NOT_FILE_OWNER": "Você não pode excluir arquivos em um álbum compartilhado", + "CONFIRM_SELF_REMOVE_MESSAGE": "Os itens selecionados serão removidos deste álbum. Itens que estão somente neste álbum serão movidos a aba Sem Categoria.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Alguns dos itens que você está removendo foram adicionados por outras pessoas, e você perderá o acesso a eles.", + "SORT_BY_CREATION_TIME_ASCENDING": "Mais antigo", + "SORT_BY_UPDATION_TIME_DESCENDING": "Última atualização", + "SORT_BY_NAME": "Nome", + "COMPRESS_THUMBNAILS": "Compactar miniaturas", + "THUMBNAIL_REPLACED": "Miniaturas compactadas", + "FIX_THUMBNAIL": "Compactar", + "FIX_THUMBNAIL_LATER": "Compactar depois", + "REPLACE_THUMBNAIL_NOT_STARTED": "Algumas miniaturas de seus vídeos podem ser compactadas para economizar espaço. Você gostaria de compactá-las?", + "REPLACE_THUMBNAIL_COMPLETED": "Miniaturas compactadas com sucesso", + "REPLACE_THUMBNAIL_NOOP": "Você não tem nenhuma miniatura que possa ser compactadas mais", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Não foi possível compactar algumas das suas miniaturas, por favor tente novamente", + "FIX_CREATION_TIME": "Corrigir hora", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Selecione a carteira que você deseja usar", + "UPDATE_CREATION_TIME_COMPLETED": "Todos os arquivos atualizados com sucesso", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 caracteres no máximo", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Tempo personalizado", + "REOPEN_PLAN_SELECTOR_MODAL": "Reabrir planos", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Falha ao abrir planos", + "INSTALL": "Instalar", + "SHARING_DETAILS": "Detalhes de compartilhamento", + "MODIFY_SHARING": "Modificar compartilhamento", + "ADD_COLLABORATORS": "Adicionar colaboradores", + "ADD_NEW_EMAIL": "Adicionar um novo email", + "shared_with_people_zero": "Compartilhar com pessoas específicas", + "shared_with_people_one": "Compartilhado com 1 pessoa", + "shared_with_people_other": "Compartilhado com {{count, number}} pessoas", + "participants_zero": "Nenhum participante", + "participants_one": "1 participante", + "participants_other": "{{count, number}} participantes", + "ADD_VIEWERS": "Adicionar visualizações", + "PARTICIPANTS": "Participantes", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} Não poderá adicionar mais fotos a este álbum

Eles ainda poderão remover as fotos existentes adicionadas por eles

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} poderá adicionar fotos ao álbum", + "CONVERT_TO_VIEWER": "Sim, converter para visualizador", + "CONVERT_TO_COLLABORATOR": "Sim, converter para colaborador", + "CHANGE_PERMISSION": "Alterar permissões?", + "REMOVE_PARTICIPANT": "Remover?", + "CONFIRM_REMOVE": "Sim, remover", + "MANAGE": "Gerenciar", + "ADDED_AS": "Adicionado como", + "COLLABORATOR_RIGHTS": "Os colaboradores podem adicionar fotos e vídeos ao álbum compartilhado", + "REMOVE_PARTICIPANT_HEAD": "Remover participante", + "OWNER": "Proprietário", + "COLLABORATORS": "Colaboradores", + "ADD_MORE": "Adicionar mais", + "VIEWERS": "Visualizações", + "OR_ADD_EXISTING": "Ou escolha um existente", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} será removido deste álbum compartilhado

Quaisquer fotos adicionadas por eles também serão removidas do álbum

", + "NOT_FOUND": "404 Página não encontrada", + "LINK_EXPIRED": "Link expirado", + "LINK_EXPIRED_MESSAGE": "Este link expirou ou foi desativado!", + "MANAGE_LINK": "Gerenciar link", + "LINK_TOO_MANY_REQUESTS": "Desculpe, este álbum foi visualizado em muitos dispositivos!", + "FILE_DOWNLOAD": "Permitir transferências", + "LINK_PASSWORD_LOCK": "Bloqueio de senha", + "PUBLIC_COLLECT": "Permitir adicionar fotos", + "LINK_DEVICE_LIMIT": "Limite de dispositivos", + "NO_DEVICE_LIMIT": "Nenhum", + "LINK_EXPIRY": "Expiração do link", + "NEVER": "Nunca", + "DISABLE_FILE_DOWNLOAD": "Desabilitar transferência", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Tem certeza de que deseja desativar o botão de download para arquivos?

Os visualizadores ainda podem capturar imagens da tela ou salvar uma cópia de suas fotos usando ferramentas externas.

", + "MALICIOUS_CONTENT": "Contém conteúdo malicioso", + "COPYRIGHT": "Viola os direitos autorais de alguém que estou autorizado a representar", + "SHARED_USING": "Compartilhar usando ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use o código {{referralCode}} para obter 10 GB de graça", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Desativar bloqueio por senha", + "DISABLE_PASSWORD_MESSAGE": "Tem certeza que deseja desativar o bloqueio por senha?", + "PASSWORD_LOCK": "Bloqueio de senha", + "LOCK": "Bloquear", + "DOWNLOAD_UPLOAD_LOGS": "Logs de depuração", + "UPLOAD_FILES": "Arquivo", + "UPLOAD_DIRS": "Pasta", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "Arquivos Deduplicados", + "AUTHENTICATOR_SECTION": "Autenticação", + "NO_DUPLICATES_FOUND": "Você não tem arquivos duplicados que possam ser limpos", + "CLUB_BY_CAPTURE_TIME": "Agrupar por tempo de captura", + "FILES": "Arquivos", + "EACH": "Cada", + "DEDUPLICATE_BASED_ON_SIZE": "Os seguintes arquivos foram listados com base em seus tamanhos, por favor, reveja e exclua os itens que você acredita que são duplicados", + "STOP_ALL_UPLOADS_MESSAGE": "Tem certeza que deseja parar todos os envios em andamento?", + "STOP_UPLOADS_HEADER": "Parar envios?", + "YES_STOP_UPLOADS": "Sim, parar envios", + "STOP_DOWNLOADS_HEADER": "Parar transferências?", + "YES_STOP_DOWNLOADS": "Sim, parar transferências", + "STOP_ALL_DOWNLOADS_MESSAGE": "Tem certeza que deseja parar todos as transferências em andamento?", + "albums_one": "1 Álbum", + "albums_other": "{{count, number}} Álbuns", + "ALL_ALBUMS": "Todos os álbuns", + "ALBUMS": "Álbuns", + "ALL_HIDDEN_ALBUMS": "Todos os álbuns ocultos", + "HIDDEN_ALBUMS": "Álbuns ocultos", + "HIDDEN_ITEMS": "Itens ocultos", + "HIDDEN_ITEMS_SECTION_NAME": "Itens_ocultos", + "ENTER_TWO_FACTOR_OTP": "Digite o código de 6 dígitos de\nseu aplicativo autenticador.", + "CREATE_ACCOUNT": "Criar uma conta", + "COPIED": "Copiado", + "CANVAS_BLOCKED_TITLE": "Não foi possível gerar miniatura", + "CANVAS_BLOCKED_MESSAGE": "

Parece que o seu navegador desativou o acesso à tela que é necessário para gerar miniaturas para as suas fotos

Por favor, habilite o acesso à tela do seu navegador, ou veja nosso aplicativo para computador

", + "WATCH_FOLDERS": "Pastas monitoradas", + "UPGRADE_NOW": "Aprimorar agora", + "RENEW_NOW": "Renovar agora", + "STORAGE": "Armazenamento", + "USED": "usado", + "YOU": "Você", + "FAMILY": "Família", + "FREE": "grátis", + "OF": "de", + "WATCHED_FOLDERS": "Pastas monitoradas", + "NO_FOLDERS_ADDED": "Nenhuma pasta adicionada ainda!", + "FOLDERS_AUTOMATICALLY_MONITORED": "As pastas que você adicionar aqui serão monitoradas automaticamente", + "UPLOAD_NEW_FILES_TO_ENTE": "Enviar novos arquivos para o ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remover arquivos excluídos do ente", + "ADD_FOLDER": "Adicionar pasta", + "STOP_WATCHING": "Parar de acompanhar", + "STOP_WATCHING_FOLDER": "Parar de acompanhar a pasta?", + "STOP_WATCHING_DIALOG_MESSAGE": "Seus arquivos existentes não serão excluídos, mas ente irá parar de atualizar automaticamente o álbum associado em alterações nesta pasta.", + "YES_STOP": "Sim, parar", + "MONTH_SHORT": "mês", + "YEAR": "ano", + "FAMILY_PLAN": "Plano familiar", + "DOWNLOAD_LOGS": "Baixar logs", + "DOWNLOAD_LOGS_MESSAGE": "

Isto irá baixar os logs de depuração, que você pode enviar para nós para ajudar a depurar seu problema.

Por favor, note que os nomes de arquivos serão incluídos para ajudar a rastrear problemas com arquivos específicos.

", + "CHANGE_FOLDER": "Alterar pasta", + "TWO_MONTHS_FREE": "Obtenha 2 meses gratuitos em planos anuais", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continuar com teste gratuito", + "FREE_PLAN_DESCRIPTION": "1 GB por 1 ano", + "CURRENT_USAGE": "O uso atual é {{usage}}", + "WEAK_DEVICE": "O navegador da web que você está usando não é poderoso o suficiente para criptografar suas fotos. Por favor, tente entrar para o ente no computador ou baixe o aplicativo móvel.", + "DRAG_AND_DROP_HINT": "Ou arraste e solte na janela ente", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Seus dados enviados serão agendados para exclusão e sua conta será excluída permanentemente.

Essa ação não é reversível.", + "AUTHENTICATE": "Autenticar", + "UPLOADED_TO_SINGLE_COLLECTION": "Enviado para coleção única", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Enviada para separar coleções", + "NEVERMIND": "Esquecer", + "UPDATE_AVAILABLE": "Atualização disponível", + "UPDATE_INSTALLABLE_MESSAGE": "Uma nova versão do ente está pronta para ser instalada.", + "INSTALL_NOW": "Instalar agora", + "INSTALL_ON_NEXT_LAUNCH": "Instalar na próxima inicialização", + "UPDATE_AVAILABLE_MESSAGE": "Uma nova versão do ente foi lançada, mas não pode ser baixada e instalada automaticamente.", + "DOWNLOAD_AND_INSTALL": "Baixar e instalar", + "IGNORE_THIS_VERSION": "Ignorar esta versão", + "TODAY": "Hoje", + "YESTERDAY": "Ontem", + "NAME_PLACEHOLDER": "Nome...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Não foi possível criar álbuns a partir da mistura de arquivos/pastas", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Você arrastou e deixou uma mistura de arquivos e pastas.

Por favor, forneça apenas arquivos ou apenas pastas ao selecionar a opção para criar álbuns separados

", + "CHOSE_THEME": "Escolher tema", + "ML_SEARCH": "Reconhecimento facial", + "ENABLE_ML_SEARCH_DESCRIPTION": "

Isso permitirá aprendizado de máquina no dispositivo e busca facial, iniciando a análise de suas fotos enviadas localmente.

Na primeira execução após o login ou habilitação desta funcionalidade, será feito o download de todas as imagens no dispositivo local para análise. Portanto, ative isso apenas se estiver confortável com o consumo de largura de banda e processamento local de todas as imagens em sua biblioteca de fotos.

Se esta for a primeira vez que você está habilitando isso, também solicitaremos sua permissão para processar dados faciais.

", + "ML_MORE_DETAILS": "Mais detalhes", + "ENABLE_FACE_SEARCH": "Habilitar reconhecimento facial", + "ENABLE_FACE_SEARCH_TITLE": "Habilitar reconhecimento facial?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Se você habilitar o reconhecimento facial, o aplicativo extrairá a geometria do rosto de suas fotos. Isso ocorrerá em seu dispositivo, e quaisquer dados biométricos gerados serão criptografados de ponta a ponta.

Por favor, clique aqui para obter mais detalhes sobre esta funcionalidade em nossa política de privacidade

", + "DISABLE_BETA": "Pausar reconhecimento", + "DISABLE_FACE_SEARCH": "Desativar reconhecimento facial", + "DISABLE_FACE_SEARCH_TITLE": "Desativar reconhecimento facial?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente irá parar de processar geometria facial.

Você pode reativar o reconhecimento facial novamente, se desejar, então esta operação está segura.

", + "ADVANCED": "Avançado", + "FACE_SEARCH_CONFIRMATION": "Eu entendo, e desejo permitir que o ente processe a geometria do rosto", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Força da senha: fraca", + "PASSPHRASE_STRENGTH_MODERATE": "Força da senha: moderada", + "PASSPHRASE_STRENGTH_STRONG": "Força da senha: forte", + "PREFERENCES": "Preferências", + "LANGUAGE": "Idioma", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Diretório de exportação inválido", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

O diretório de exportação que você selecionou não existe.

Por favor, selecione um diretório válido.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Falha na verificação de assinatura", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "após uma hora", + "DAY": "após um dia", + "WEEK": "após uma semana", + "MONTH": "após um mês", + "YEAR": "após um ano" + }, + "COPY_LINK": "Copiar link", + "DONE": "Concluído", + "LINK_SHARE_TITLE": "Ou compartilhe um link", + "REMOVE_LINK": "Remover link", + "CREATE_PUBLIC_SHARING": "Criar link público", + "PUBLIC_LINK_CREATED": "Link público criado", + "PUBLIC_LINK_ENABLED": "Link público ativado", + "COLLECT_PHOTOS": "Coletar fotos", + "PUBLIC_COLLECT_SUBTEXT": "Permita que as pessoas com o link também adicionem fotos ao álbum compartilhado.", + "STOP_EXPORT": "Parar", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} itens sincronizados", + "MIGRATING_EXPORT": "Preparando...", + "RENAMING_COLLECTION_FOLDERS": "Renomeando pastas do álbum...", + "TRASHING_DELETED_FILES": "Descartando arquivos excluídos...", + "TRASHING_DELETED_COLLECTIONS": "Descartando álbuns excluídos...", + "EXPORT_NOTIFICATION": { + "START": "Exportação iniciada", + "IN_PROGRESS": "Exportação já em andamento", + "FINISH": "Exportação finalizada", + "UP_TO_DATE": "Não há arquivos novos para exportar" + }, + "CONTINUOUS_EXPORT": "Sincronizar continuamente", + "TOTAL_ITEMS": "Total de itens", + "PENDING_ITEMS": "Itens pendentes", + "EXPORT_STARTING": "Iniciando a exportação...", + "DELETE_ACCOUNT_REASON_LABEL": "Qual é o principal motivo para você excluir sua conta?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Selecione um motivo", + "DELETE_REASON": { + "MISSING_FEATURE": "Está faltando um recurso que eu preciso", + "BROKEN_BEHAVIOR": "O aplicativo ou um determinado recurso não está funcionando como eu acredito que deveria", + "FOUND_ANOTHER_SERVICE": "Encontrei outro serviço que gosto mais", + "NOT_LISTED": "Meu motivo não está listado" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "Sentimos muito em vê-lo partir. Explique por que você está partindo para nos ajudar a melhorar.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Comentários", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Sim, desejo excluir permanentemente esta conta e todos os seus dados", + "CONFIRM_DELETE_ACCOUNT": "Confirmar exclusão da conta", + "FEEDBACK_REQUIRED": "Por favor, ajude-nos com esta informação", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "O que o outro serviço faz melhor?", + "RECOVER_TWO_FACTOR": "Recuperar dois fatores", + "at": "at", + "AUTH_NEXT": "próximo", + "AUTH_DOWNLOAD_MOBILE_APP": "Baixe nosso aplicativo móvel para gerenciar seus segredos", + "HIDDEN": "Escondido", + "HIDE": "Ocultar", + "UNHIDE": "Desocultar", + "UNHIDE_TO_COLLECTION": "Reexibir para o álbum", + "SORT_BY": "Ordenar por", + "NEWEST_FIRST": "Mais recentes primeiro", + "OLDEST_FIRST": "Mais antigo primeiro", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Este arquivo não pôde ser pré-visualizado. Clique aqui para baixar o original.", + "SELECT_COLLECTION": "Selecionar álbum", + "PIN_ALBUM": "Fixar álbum", + "UNPIN_ALBUM": "Desafixar álbum", + "DOWNLOAD_COMPLETE": "Transferência concluída", + "DOWNLOADING_COLLECTION": "Transferindo {{name}}", + "DOWNLOAD_FAILED": "Falha ao baixar", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} arquivos", + "CRASH_REPORTING": "Relatório de falhas", + "CHRISTMAS": "Natal", + "CHRISTMAS_EVE": "Véspera de Natal", + "NEW_YEAR": "Ano Novo", + "NEW_YEAR_EVE": "Véspera de Ano Novo", + "IMAGE": "Imagem", + "VIDEO": "Vídeo", + "LIVE_PHOTO": "Fotos em movimento", + "CONVERT": "Converter", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Tem certeza de que deseja fechar o editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Baixe sua imagem editada ou salve uma cópia para o ente para persistir nas alterações.", + "BRIGHTNESS": "Brilho", + "CONTRAST": "Contraste", + "SATURATION": "Saturação", + "BLUR": "Desfoque", + "INVERT_COLORS": "Inverter Cores", + "ASPECT_RATIO": "Proporção da imagem", + "SQUARE": "Square", + "ROTATE_LEFT": "Girar para a Esquerda", + "ROTATE_RIGHT": "Girar para a Direita", + "FLIP_VERTICALLY": "Inverter verticalmente", + "FLIP_HORIZONTALLY": "Inverter horizontalmente", + "DOWNLOAD_EDITED": "Transferência Editada", + "SAVE_A_COPY_TO_ENTE": "Salvar uma cópia para o ente", + "RESTORE_ORIGINAL": "Restaurar original", + "TRANSFORM": "Transformar", + "COLORS": "Cores", + "FLIP": "Inverter", + "ROTATION": "Rotação", + "RESET": "Redefinir", + "PHOTO_EDITOR": "Editor de Fotos", + "FASTER_UPLOAD": "Envios mais rápidos", + "FASTER_UPLOAD_DESCRIPTION": "Rotas enviam em servidores próximos", + "MAGIC_SEARCH_STATUS": "Estado da busca mágica", + "INDEXED_ITEMS": "Itens indexados", + "CAST_ALBUM_TO_TV": "Reproduzir álbum na TV", + "ENTER_CAST_PIN_CODE": "Digite o código que você vê na TV abaixo para parear este dispositivo.", + "PAIR_DEVICE_TO_TV": "Parear dispositivos", + "TV_NOT_FOUND": "TV não encontrada. Você inseriu o PIN correto?", + "AUTO_CAST_PAIR": "Pareamento automático", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "O Auto Pair requer a conexão com servidores do Google e só funciona com dispositivos Chromecast. O Google não receberá dados confidenciais, como suas fotos.", + "PAIR_WITH_PIN": "Parear com PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Escolha um dispositivo compatível com casts no navegador popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Parear com o PIN funciona para qualquer dispositivo de tela grande onde você deseja reproduzir seu álbum.", + "VISIT_CAST_ENTE_IO": "Acesse cast.ente.io no dispositivo que você deseja parear.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair falhou. Por favor, tente novamente.", + "CACHE_DIRECTORY": "Pasta de Cache", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Aplicar Recorte", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "Pelo menos uma transformação ou ajuste de cor deve ser feito antes de salvar." +} diff --git a/web/apps/auth/public/locales/pt-PT/translation.json b/web/apps/auth/public/locales/pt-PT/translation.json new file mode 100644 index 000000000..ffb1debb4 --- /dev/null +++ b/web/apps/auth/public/locales/pt-PT/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Backups privados
para as suas memórias
", + "HERO_SLIDE_1": "End-to-end encrypted by default", + "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", + "HERO_SLIDE_2": "Designed to outlive", + "HERO_SLIDE_3_TITLE": "
Disponível
em qualquer lugar
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Entrar", + "SIGN_UP": "Registar", + "NEW_USER": "Novo no ente", + "EXISTING_USER": "Utilizador existente", + "ENTER_NAME": "Insira o nome", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Adicione um nome para que os seus amigos saibam a quem agradecer por estas ótimas fotos!", + "ENTER_EMAIL": "Insira o endereço de email", + "EMAIL_ERROR": "Inserir um endereço de email válido", + "REQUIRED": "Obrigatório", + "EMAIL_SENT": "Código de verificação enviado para {{email}}", + "CHECK_INBOX": "Verifique a sua caixa de entrada (e spam) para concluir a verificação", + "ENTER_OTT": "Código de verificação", + "RESEND_MAIL": "Reenviar código", + "VERIFY": "Verificar", + "UNKNOWN_ERROR": "Ocorreu um erro. Tente novamente", + "INVALID_CODE": "Código de verificação inválido", + "EXPIRED_CODE": "O seu código de verificação expirou", + "SENDING": "A enviar...", + "SENT": "Enviado!", + "PASSWORD": "Palavra-passe", + "LINK_PASSWORD": "Introduza a palavra-passe para desbloquear o álbum", + "RETURN_PASSPHRASE_HINT": "Palavra-passe", + "SET_PASSPHRASE": "Definir palavra-passe", + "VERIFY_PASSPHRASE": "Entrar", + "INCORRECT_PASSPHRASE": "Palavra-passe incorreta", + "ENTER_ENC_PASSPHRASE": "Please enter a password that we can use to encrypt your data", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "Bem-vindo ao ", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Where your best photos live", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generating encryption keys...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Confirm password", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Passwords don't match", + "CONSOLE_WARNING_STOP": "PARAR!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "Novo álbum", + "ENTER_ALBUM_NAME": "Nome do álbum", + "CLOSE_OPTION": "Fechar (Esc)", + "ENTER_FILE_NAME": "Nome do ficheiro", + "CLOSE": "Fechar", + "NO": "Não", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Upload", + "IMPORT": "Importar", + "ADD_PHOTOS": "Adicionar fotos", + "ADD_MORE_PHOTOS": "Adicionar mais fotos", + "add_photos_one": "Adicionar item", + "add_photos_other": "Adicionar {{count, number}} itens", + "SELECT_PHOTOS": "Selecionar fotos", + "FILE_UPLOAD": "Enviar Ficheiro", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparing to upload", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Backup complete" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Subscription expired", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Storage limit exceeded", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Não possui uma conta", + "ACCOUNT_EXISTS": "Já possui uma conta", + "CREATE": "Criar", + "DOWNLOAD": "Download", + "DOWNLOAD_OPTION": "Download (D)", + "DOWNLOAD_FAVORITES": "Download favorites", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copy as PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Upload your first photo", + "IMPORT_YOUR_FOLDERS": "Import your folders", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Delete files?", + "TRASH_FILE_TITLE": "Delete file?", + "DELETE_FILES_TITLE": "Delete immediately?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Delete", + "DELETE_OPTION": "Delete (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "A single album", + "OR": "or", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Your session has expired, please login again to continue", + "SESSION_EXPIRED": "Session expired", + "PASSWORD_GENERATION_FAILED": "Your browser was unable to generate a strong key that meets ente's encryption standards, please try using the mobile app or another browser", + "CHANGE_PASSWORD": "Change password", + "GO_BACK": "Go back", + "RECOVERY_KEY": "Recovery key", + "SAVE_LATER": "Do this later", + "SAVE": "Save Key", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Forgot password", + "RECOVER_ACCOUNT": "Recover account", + "RECOVERY_KEY_HINT": "Recovery key", + "RECOVER": "Recover", + "NO_RECOVERY_KEY": "No recovery key?", + "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", + "CONTACT_SUPPORT": "Contact support", + "REQUEST_FEATURE": "Request Feature", + "SUPPORT": "Support", + "CONFIRM": "Confirm", + "CANCEL": "Cancel", + "LOGOUT": "Logout", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Are you sure you want to logout?", + "CHANGE_EMAIL": "Change email", + "OK": "OK", + "SUCCESS": "Success", + "ERROR": "Error", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Download desktop app", + "EXPORT": "Export Data", + "SUBSCRIPTION": "Subscription", + "SUBSCRIBE": "Subscribe", + "MANAGEMENT_PORTAL": "Manage payment method", + "MANAGE_FAMILY_PORTAL": "Manage family", + "LEAVE_FAMILY_PLAN": "Leave family plan", + "LEAVE": "Leave", + "LEAVE_FAMILY_CONFIRM": "Are you sure that you want to leave family plan?", + "CHOOSE_PLAN": "Choose your plan", + "MANAGE_PLAN": "Manage your subscription", + "ACTIVE": "Active", + "OFFLINE_MSG": "You are offline, cached memories are being shown", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "You are on a family plan managed by", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renews on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Ends on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Your subscription will be cancelled on {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "You have exceeded your storage quota, please upgrade", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Subscription purchase failed , please try again", + "SUBSCRIPTION_UPDATE_FAILED": "Subscription updated failed , please try again", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Update payment method", + "MONTHLY": "Monthly", + "YEARLY": "Yearly", + "UPDATE_SUBSCRIPTION_MESSAGE": "Are you sure you want to change your plan?", + "UPDATE_SUBSCRIPTION": "Change plan", + "CANCEL_SUBSCRIPTION": "Cancel subscription", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Reactivate subscription", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Rename", + "RENAME_FILE": "Rename file", + "RENAME_COLLECTION": "Rename album", + "DELETE_COLLECTION_TITLE": "Delete album?", + "DELETE_COLLECTION": "Delete album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Delete photos", + "KEEP_PHOTOS": "Keep photos", + "SHARE": "Share", + "SHARE_COLLECTION": "Share album", + "SHAREES": "Shared with", + "SHARE_WITH_SELF": "Oops, you cannot share with yourself", + "ALREADY_SHARED": "Oops, you're already sharing this with {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Search", + "SEARCH_RESULTS": "Search results", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Location", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "File name", + "THING": "Content", + "FILE_CAPTION": "Description", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No memories", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Add to album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "People", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "File name", + "CAPTION_PLACEHOLDER": "Add a description", + "LOCATION": "Location", + "SHOW_ON_MAP": "View on OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Two-factor", + "TWO_FACTOR_AUTHENTICATION": "Two-factor authentication", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Enter the code manually", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "Scan QR code instead", + "ENABLE_TWO_FACTOR": "Enable two-factor", + "ENABLE": "Enable", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Incorrect code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Export data", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Send OTP", + "EMAIl_ALREADY_OWNED": "Email already taken", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Failed uploads ", + "SKIPPED_FILES": "Ignored uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Skipped videos", + "INPROGRESS_METADATA_EXTRACTION": "In progress", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Large files", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Insufficient storage", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "These files were not uploaded as they exceed the maximum size limit for your storage plan", + "TOO_LARGE_INFO": "These files were not uploaded as they exceed our maximum file size limit", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archive", + "FAVORITES": "Favorites", + "ARCHIVE_COLLECTION": "Archive album", + "ARCHIVE_SECTION_NAME": "Archive", + "ALL_SECTION_NAME": "All", + "MOVE_TO_COLLECTION": "Move to album", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Move", + "ADD": "Add", + "REMOVE": "Remove", + "YES_REMOVE": "Yes, remove", + "REMOVE_FROM_COLLECTION": "Remove from album", + "TRASH": "Trash", + "MOVE_TO_TRASH": "Move to trash", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Delete permanently", + "RESTORE": "Restore", + "RESTORE_TO_COLLECTION": "Restore to album", + "EMPTY_TRASH": "Empty trash", + "EMPTY_TRASH_TITLE": "Empty trash?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Yes, leave", + "LEAVE_ALBUM": "Leave album", + "LEAVE_SHARED_ALBUM_TITLE": "Leave shared album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oldest", + "SORT_BY_UPDATION_TIME_DESCENDING": "Last updated", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Compress", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Install", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - not found", + "LINK_EXPIRED": "Link expired", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Folder", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "All Albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Create account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "You", + "FAMILY": "Family", + "FREE": "free", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB for 1 year", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authenticate", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Advanced", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "PREFERENCES": "Preferences", + "LANGUAGE": "Language", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "after an hour", + "DAY": "after a day", + "WEEK": "after a week", + "MONTH": "after a month", + "YEAR": "after a year" + }, + "COPY_LINK": "Copy link", + "DONE": "Done", + "LINK_SHARE_TITLE": "Or share a link", + "REMOVE_LINK": "Remove link", + "CREATE_PUBLIC_SHARING": "Create public link", + "PUBLIC_LINK_CREATED": "Public link created", + "PUBLIC_LINK_ENABLED": "Public link enabled", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/ru-RU/translation.json b/web/apps/auth/public/locales/ru-RU/translation.json new file mode 100644 index 000000000..6870df319 --- /dev/null +++ b/web/apps/auth/public/locales/ru-RU/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private backups
for your memories
", + "HERO_SLIDE_1": "End-to-end encrypted by default", + "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", + "HERO_SLIDE_2": "Designed to outlive", + "HERO_SLIDE_3_TITLE": "
Available
everywhere
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Login", + "SIGN_UP": "Signup", + "NEW_USER": "New to ente", + "EXISTING_USER": "Existing user", + "ENTER_NAME": "Enter name", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Add a name so that your friends know who to thank for these great photos!", + "ENTER_EMAIL": "Enter email address", + "EMAIL_ERROR": "Enter a valid email", + "REQUIRED": "Required", + "EMAIL_SENT": "Verification code sent to {{email}}", + "CHECK_INBOX": "Please check your inbox (and spam) to complete verification", + "ENTER_OTT": "Verification code", + "RESEND_MAIL": "Resend code", + "VERIFY": "Verify", + "UNKNOWN_ERROR": "Something went wrong, please try again", + "INVALID_CODE": "Invalid verification code", + "EXPIRED_CODE": "Your verification code has expired", + "SENDING": "Sending...", + "SENT": "Sent!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Enter password to unlock the album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Set password", + "VERIFY_PASSPHRASE": "Sign in", + "INCORRECT_PASSPHRASE": "Incorrect password", + "ENTER_ENC_PASSPHRASE": "Please enter a password that we can use to encrypt your data", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "Welcome to ", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Where your best photos live", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generating encryption keys...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Confirm password", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Passwords don't match", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "New album", + "ENTER_ALBUM_NAME": "Album name", + "CLOSE_OPTION": "Close (Esc)", + "ENTER_FILE_NAME": "File name", + "CLOSE": "Close", + "NO": "No", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Upload", + "IMPORT": "Import", + "ADD_PHOTOS": "Add photos", + "ADD_MORE_PHOTOS": "Add more photos", + "add_photos_one": "Add 1 item", + "add_photos_other": "Add {{count, number}} items", + "SELECT_PHOTOS": "Select photos", + "FILE_UPLOAD": "File Upload", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparing to upload", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Backup complete" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Subscription expired", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Storage limit exceeded", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Don't have an account", + "ACCOUNT_EXISTS": "Already have an account", + "CREATE": "Create", + "DOWNLOAD": "Download", + "DOWNLOAD_OPTION": "Download (D)", + "DOWNLOAD_FAVORITES": "Download favorites", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copy as PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Upload your first photo", + "IMPORT_YOUR_FOLDERS": "Import your folders", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Delete files?", + "TRASH_FILE_TITLE": "Delete file?", + "DELETE_FILES_TITLE": "Delete immediately?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Delete", + "DELETE_OPTION": "Delete (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "A single album", + "OR": "or", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Your session has expired, please login again to continue", + "SESSION_EXPIRED": "Session expired", + "PASSWORD_GENERATION_FAILED": "Your browser was unable to generate a strong key that meets ente's encryption standards, please try using the mobile app or another browser", + "CHANGE_PASSWORD": "Change password", + "GO_BACK": "Go back", + "RECOVERY_KEY": "Recovery key", + "SAVE_LATER": "Do this later", + "SAVE": "Save Key", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Forgot password", + "RECOVER_ACCOUNT": "Recover account", + "RECOVERY_KEY_HINT": "Recovery key", + "RECOVER": "Recover", + "NO_RECOVERY_KEY": "No recovery key?", + "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", + "CONTACT_SUPPORT": "Contact support", + "REQUEST_FEATURE": "Request Feature", + "SUPPORT": "Support", + "CONFIRM": "Confirm", + "CANCEL": "Cancel", + "LOGOUT": "Logout", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Are you sure you want to logout?", + "CHANGE_EMAIL": "Change email", + "OK": "OK", + "SUCCESS": "Success", + "ERROR": "Error", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Download desktop app", + "EXPORT": "Export Data", + "SUBSCRIPTION": "Subscription", + "SUBSCRIBE": "Subscribe", + "MANAGEMENT_PORTAL": "Manage payment method", + "MANAGE_FAMILY_PORTAL": "Manage family", + "LEAVE_FAMILY_PLAN": "Leave family plan", + "LEAVE": "Leave", + "LEAVE_FAMILY_CONFIRM": "Are you sure that you want to leave family plan?", + "CHOOSE_PLAN": "Choose your plan", + "MANAGE_PLAN": "Manage your subscription", + "ACTIVE": "Active", + "OFFLINE_MSG": "You are offline, cached memories are being shown", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "You are on a family plan managed by", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renews on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Ends on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Your subscription will be cancelled on {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "You have exceeded your storage quota, please upgrade", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Subscription purchase failed , please try again", + "SUBSCRIPTION_UPDATE_FAILED": "Subscription updated failed , please try again", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Update payment method", + "MONTHLY": "Monthly", + "YEARLY": "Yearly", + "UPDATE_SUBSCRIPTION_MESSAGE": "Are you sure you want to change your plan?", + "UPDATE_SUBSCRIPTION": "Change plan", + "CANCEL_SUBSCRIPTION": "Cancel subscription", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Reactivate subscription", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Rename", + "RENAME_FILE": "Rename file", + "RENAME_COLLECTION": "Rename album", + "DELETE_COLLECTION_TITLE": "Delete album?", + "DELETE_COLLECTION": "Delete album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Delete photos", + "KEEP_PHOTOS": "Keep photos", + "SHARE": "Share", + "SHARE_COLLECTION": "Share album", + "SHAREES": "Shared with", + "SHARE_WITH_SELF": "Oops, you cannot share with yourself", + "ALREADY_SHARED": "Oops, you're already sharing this with {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Search", + "SEARCH_RESULTS": "Search results", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Location", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "File name", + "THING": "Content", + "FILE_CAPTION": "Description", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No memories", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Add to album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "People", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "File name", + "CAPTION_PLACEHOLDER": "Add a description", + "LOCATION": "Location", + "SHOW_ON_MAP": "View on OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Two-factor", + "TWO_FACTOR_AUTHENTICATION": "Two-factor authentication", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Enter the code manually", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "Scan QR code instead", + "ENABLE_TWO_FACTOR": "Enable two-factor", + "ENABLE": "Enable", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Incorrect code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Export data", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Send OTP", + "EMAIl_ALREADY_OWNED": "Email already taken", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Failed uploads ", + "SKIPPED_FILES": "Ignored uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Skipped videos", + "INPROGRESS_METADATA_EXTRACTION": "In progress", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Large files", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Insufficient storage", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "These files were not uploaded as they exceed the maximum size limit for your storage plan", + "TOO_LARGE_INFO": "These files were not uploaded as they exceed our maximum file size limit", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archive", + "FAVORITES": "Favorites", + "ARCHIVE_COLLECTION": "Archive album", + "ARCHIVE_SECTION_NAME": "Archive", + "ALL_SECTION_NAME": "All", + "MOVE_TO_COLLECTION": "Move to album", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Move", + "ADD": "Add", + "REMOVE": "Remove", + "YES_REMOVE": "Yes, remove", + "REMOVE_FROM_COLLECTION": "Remove from album", + "TRASH": "Trash", + "MOVE_TO_TRASH": "Move to trash", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Delete permanently", + "RESTORE": "Restore", + "RESTORE_TO_COLLECTION": "Restore to album", + "EMPTY_TRASH": "Empty trash", + "EMPTY_TRASH_TITLE": "Empty trash?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Yes, leave", + "LEAVE_ALBUM": "Leave album", + "LEAVE_SHARED_ALBUM_TITLE": "Leave shared album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oldest", + "SORT_BY_UPDATION_TIME_DESCENDING": "Last updated", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Compress", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Install", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - not found", + "LINK_EXPIRED": "Link expired", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Folder", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "All Albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Create account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "You", + "FAMILY": "Family", + "FREE": "free", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB for 1 year", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authenticate", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Advanced", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "PREFERENCES": "Preferences", + "LANGUAGE": "Language", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "after an hour", + "DAY": "after a day", + "WEEK": "after a week", + "MONTH": "after a month", + "YEAR": "after a year" + }, + "COPY_LINK": "Copy link", + "DONE": "Done", + "LINK_SHARE_TITLE": "Or share a link", + "REMOVE_LINK": "Remove link", + "CREATE_PUBLIC_SHARING": "Create public link", + "PUBLIC_LINK_CREATED": "Public link created", + "PUBLIC_LINK_ENABLED": "Public link enabled", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/tr-TR/translation.json b/web/apps/auth/public/locales/tr-TR/translation.json new file mode 100644 index 000000000..6870df319 --- /dev/null +++ b/web/apps/auth/public/locales/tr-TR/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private backups
for your memories
", + "HERO_SLIDE_1": "End-to-end encrypted by default", + "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", + "HERO_SLIDE_2": "Designed to outlive", + "HERO_SLIDE_3_TITLE": "
Available
everywhere
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Login", + "SIGN_UP": "Signup", + "NEW_USER": "New to ente", + "EXISTING_USER": "Existing user", + "ENTER_NAME": "Enter name", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Add a name so that your friends know who to thank for these great photos!", + "ENTER_EMAIL": "Enter email address", + "EMAIL_ERROR": "Enter a valid email", + "REQUIRED": "Required", + "EMAIL_SENT": "Verification code sent to {{email}}", + "CHECK_INBOX": "Please check your inbox (and spam) to complete verification", + "ENTER_OTT": "Verification code", + "RESEND_MAIL": "Resend code", + "VERIFY": "Verify", + "UNKNOWN_ERROR": "Something went wrong, please try again", + "INVALID_CODE": "Invalid verification code", + "EXPIRED_CODE": "Your verification code has expired", + "SENDING": "Sending...", + "SENT": "Sent!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Enter password to unlock the album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Set password", + "VERIFY_PASSPHRASE": "Sign in", + "INCORRECT_PASSPHRASE": "Incorrect password", + "ENTER_ENC_PASSPHRASE": "Please enter a password that we can use to encrypt your data", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "Welcome to ", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Where your best photos live", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generating encryption keys...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Confirm password", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Passwords don't match", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "New album", + "ENTER_ALBUM_NAME": "Album name", + "CLOSE_OPTION": "Close (Esc)", + "ENTER_FILE_NAME": "File name", + "CLOSE": "Close", + "NO": "No", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Upload", + "IMPORT": "Import", + "ADD_PHOTOS": "Add photos", + "ADD_MORE_PHOTOS": "Add more photos", + "add_photos_one": "Add 1 item", + "add_photos_other": "Add {{count, number}} items", + "SELECT_PHOTOS": "Select photos", + "FILE_UPLOAD": "File Upload", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparing to upload", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Backup complete" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Subscription expired", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Storage limit exceeded", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Don't have an account", + "ACCOUNT_EXISTS": "Already have an account", + "CREATE": "Create", + "DOWNLOAD": "Download", + "DOWNLOAD_OPTION": "Download (D)", + "DOWNLOAD_FAVORITES": "Download favorites", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copy as PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Upload your first photo", + "IMPORT_YOUR_FOLDERS": "Import your folders", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Delete files?", + "TRASH_FILE_TITLE": "Delete file?", + "DELETE_FILES_TITLE": "Delete immediately?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Delete", + "DELETE_OPTION": "Delete (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "A single album", + "OR": "or", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Your session has expired, please login again to continue", + "SESSION_EXPIRED": "Session expired", + "PASSWORD_GENERATION_FAILED": "Your browser was unable to generate a strong key that meets ente's encryption standards, please try using the mobile app or another browser", + "CHANGE_PASSWORD": "Change password", + "GO_BACK": "Go back", + "RECOVERY_KEY": "Recovery key", + "SAVE_LATER": "Do this later", + "SAVE": "Save Key", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Forgot password", + "RECOVER_ACCOUNT": "Recover account", + "RECOVERY_KEY_HINT": "Recovery key", + "RECOVER": "Recover", + "NO_RECOVERY_KEY": "No recovery key?", + "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", + "CONTACT_SUPPORT": "Contact support", + "REQUEST_FEATURE": "Request Feature", + "SUPPORT": "Support", + "CONFIRM": "Confirm", + "CANCEL": "Cancel", + "LOGOUT": "Logout", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Are you sure you want to logout?", + "CHANGE_EMAIL": "Change email", + "OK": "OK", + "SUCCESS": "Success", + "ERROR": "Error", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Download desktop app", + "EXPORT": "Export Data", + "SUBSCRIPTION": "Subscription", + "SUBSCRIBE": "Subscribe", + "MANAGEMENT_PORTAL": "Manage payment method", + "MANAGE_FAMILY_PORTAL": "Manage family", + "LEAVE_FAMILY_PLAN": "Leave family plan", + "LEAVE": "Leave", + "LEAVE_FAMILY_CONFIRM": "Are you sure that you want to leave family plan?", + "CHOOSE_PLAN": "Choose your plan", + "MANAGE_PLAN": "Manage your subscription", + "ACTIVE": "Active", + "OFFLINE_MSG": "You are offline, cached memories are being shown", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "You are on a family plan managed by", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renews on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Ends on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Your subscription will be cancelled on {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "You have exceeded your storage quota, please upgrade", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Subscription purchase failed , please try again", + "SUBSCRIPTION_UPDATE_FAILED": "Subscription updated failed , please try again", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Update payment method", + "MONTHLY": "Monthly", + "YEARLY": "Yearly", + "UPDATE_SUBSCRIPTION_MESSAGE": "Are you sure you want to change your plan?", + "UPDATE_SUBSCRIPTION": "Change plan", + "CANCEL_SUBSCRIPTION": "Cancel subscription", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Reactivate subscription", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Rename", + "RENAME_FILE": "Rename file", + "RENAME_COLLECTION": "Rename album", + "DELETE_COLLECTION_TITLE": "Delete album?", + "DELETE_COLLECTION": "Delete album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Delete photos", + "KEEP_PHOTOS": "Keep photos", + "SHARE": "Share", + "SHARE_COLLECTION": "Share album", + "SHAREES": "Shared with", + "SHARE_WITH_SELF": "Oops, you cannot share with yourself", + "ALREADY_SHARED": "Oops, you're already sharing this with {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Search", + "SEARCH_RESULTS": "Search results", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Location", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "File name", + "THING": "Content", + "FILE_CAPTION": "Description", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No memories", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Add to album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "People", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "File name", + "CAPTION_PLACEHOLDER": "Add a description", + "LOCATION": "Location", + "SHOW_ON_MAP": "View on OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Two-factor", + "TWO_FACTOR_AUTHENTICATION": "Two-factor authentication", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Enter the code manually", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "Scan QR code instead", + "ENABLE_TWO_FACTOR": "Enable two-factor", + "ENABLE": "Enable", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Incorrect code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Export data", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Send OTP", + "EMAIl_ALREADY_OWNED": "Email already taken", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Failed uploads ", + "SKIPPED_FILES": "Ignored uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Skipped videos", + "INPROGRESS_METADATA_EXTRACTION": "In progress", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Large files", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Insufficient storage", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "These files were not uploaded as they exceed the maximum size limit for your storage plan", + "TOO_LARGE_INFO": "These files were not uploaded as they exceed our maximum file size limit", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archive", + "FAVORITES": "Favorites", + "ARCHIVE_COLLECTION": "Archive album", + "ARCHIVE_SECTION_NAME": "Archive", + "ALL_SECTION_NAME": "All", + "MOVE_TO_COLLECTION": "Move to album", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Move", + "ADD": "Add", + "REMOVE": "Remove", + "YES_REMOVE": "Yes, remove", + "REMOVE_FROM_COLLECTION": "Remove from album", + "TRASH": "Trash", + "MOVE_TO_TRASH": "Move to trash", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Delete permanently", + "RESTORE": "Restore", + "RESTORE_TO_COLLECTION": "Restore to album", + "EMPTY_TRASH": "Empty trash", + "EMPTY_TRASH_TITLE": "Empty trash?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Yes, leave", + "LEAVE_ALBUM": "Leave album", + "LEAVE_SHARED_ALBUM_TITLE": "Leave shared album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oldest", + "SORT_BY_UPDATION_TIME_DESCENDING": "Last updated", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Compress", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Install", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - not found", + "LINK_EXPIRED": "Link expired", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Folder", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "All Albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Create account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "You", + "FAMILY": "Family", + "FREE": "free", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB for 1 year", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authenticate", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Advanced", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "PREFERENCES": "Preferences", + "LANGUAGE": "Language", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "after an hour", + "DAY": "after a day", + "WEEK": "after a week", + "MONTH": "after a month", + "YEAR": "after a year" + }, + "COPY_LINK": "Copy link", + "DONE": "Done", + "LINK_SHARE_TITLE": "Or share a link", + "REMOVE_LINK": "Remove link", + "CREATE_PUBLIC_SHARING": "Create public link", + "PUBLIC_LINK_CREATED": "Public link created", + "PUBLIC_LINK_ENABLED": "Public link enabled", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/auth/public/locales/zh-CN/translation.json b/web/apps/auth/public/locales/zh-CN/translation.json new file mode 100644 index 000000000..15ef565dd --- /dev/null +++ b/web/apps/auth/public/locales/zh-CN/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
私人备份
为您的回忆
", + "HERO_SLIDE_1": "默认端到端加密", + "HERO_SLIDE_2_TITLE": "
安全地存放
在一个掩护所中
", + "HERO_SLIDE_2": "经久耐用", + "HERO_SLIDE_3_TITLE": "
可用于
各处
", + "HERO_SLIDE_3": "安卓, iOS, 网页端, 桌面端", + "LOGIN": "登录", + "SIGN_UP": "注册", + "NEW_USER": "刚来到 ente", + "EXISTING_USER": "现有用户", + "ENTER_NAME": "现有用户", + "PUBLIC_UPLOADER_NAME_MESSAGE": "请添加一个名字,以便您的朋友知晓该感谢谁拍摄了这些精美的照片!", + "ENTER_EMAIL": "请输入电子邮件地址", + "EMAIL_ERROR": "请输入有效的电子邮件", + "REQUIRED": "必需的", + "EMAIL_SENT": "验证码已发送至 {{email}}", + "CHECK_INBOX": "请检查您的收件箱 (或者是在您的“垃圾邮件”列表内) 以完成验证", + "ENTER_OTT": "验证码", + "RESEND_MAIL": "重新发送验证码", + "VERIFY": "验证", + "UNKNOWN_ERROR": "出了点问题,请重试", + "INVALID_CODE": "验证码无效", + "EXPIRED_CODE": "您的验证码已过期", + "SENDING": "发送中……", + "SENT": "已发送!", + "PASSWORD": "密码", + "LINK_PASSWORD": "输入密码来解锁相册", + "RETURN_PASSPHRASE_HINT": "密码", + "SET_PASSPHRASE": "设置密码", + "VERIFY_PASSPHRASE": "登录", + "INCORRECT_PASSPHRASE": "密码错误", + "ENTER_ENC_PASSPHRASE": "请输入我们可以用来加密您数据的密码", + "PASSPHRASE_DISCLAIMER": "我们不会存储您的密码,因此如果您忘记密码, 我们将无法帮助您在没有恢复密钥的情况下恢复您的数据。", + "WELCOME_TO_ENTE_HEADING": "欢迎来到 ", + "WELCOME_TO_ENTE_SUBHEADING": "端到端加密的照片存储和共享", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "可以让您存放照片的最好的地方", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "正在生成加密密钥...", + "PASSPHRASE_HINT": "密码", + "CONFIRM_PASSPHRASE": "请确认密码", + "REFERRAL_CODE_HINT": "您是如何知道Ente的? (可选的)", + "REFERRAL_INFO": "我们不跟踪应用程序安装情况,如果您告诉我们您是在哪里找到我们的,将会有所帮助!", + "PASSPHRASE_MATCH_ERROR": "两次输入的密码不一致", + "CONSOLE_WARNING_STOP": "停止!", + "CONSOLE_WARNING_DESC": "这是专为开发人员设计的浏览器功能。 请不要在此处复制粘贴未经验证的代码。", + "CREATE_COLLECTION": "新建相册", + "ENTER_ALBUM_NAME": "相册名称", + "CLOSE_OPTION": "关闭 (或按Esc键)", + "ENTER_FILE_NAME": "文件名", + "CLOSE": "关闭", + "NO": "否", + "NOTHING_HERE": "这里空空如也 👀", + "UPLOAD": "上传", + "IMPORT": "导入", + "ADD_PHOTOS": "添加照片", + "ADD_MORE_PHOTOS": "添加更多的照片", + "add_photos_one": "添加1个项目", + "add_photos_other": "添加 {{count, number}} 个项目", + "SELECT_PHOTOS": "选择图片", + "FILE_UPLOAD": "上传文件", + "UPLOAD_STAGE_MESSAGE": { + "0": "正在准备上传", + "1": "正在读取 Google 元数据文件", + "2": "文件元数据提取状态:已完成 {{uploadCounter.finished, number}} / 共 {{uploadCounter.total, number}}", + "3": "文件备份状态:已完成 {{uploadCounter.finished, number}} / 共 {{uploadCounter.total, number}}", + "4": "正在取消剩余的上传内容", + "5": "备份完成" + }, + "FILE_NOT_UPLOADED_LIST": "以下文件未上传", + "SUBSCRIPTION_EXPIRED": "您的订阅已过期", + "SUBSCRIPTION_EXPIRED_MESSAGE": "您的订阅已过期,请 续期", + "STORAGE_QUOTA_EXCEEDED": "已超出存储限制", + "INITIAL_LOAD_DELAY_WARNING": "第一次加载可能需要一些时间", + "USER_DOES_NOT_EXIST": "抱歉,找不到该电子邮件的用户", + "NO_ACCOUNT": "没有账号", + "ACCOUNT_EXISTS": "已有账户", + "CREATE": "创建", + "DOWNLOAD": "下载", + "DOWNLOAD_OPTION": "下载 (D)", + "DOWNLOAD_FAVORITES": "下载收藏", + "DOWNLOAD_UNCATEGORIZED": "下载未分类的", + "DOWNLOAD_HIDDEN_ITEMS": "下载隐藏项目", + "COPY_OPTION": "复制为 PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "切换至全屏 (F)", + "ZOOM_IN_OUT": "放大/缩小", + "PREVIOUS": "上一个 (←)", + "NEXT": "下一个 (→)", + "TITLE_PHOTOS": "ente 照片", + "TITLE_ALBUMS": "ente 照片", + "TITLE_AUTH": "ente 验证器", + "UPLOAD_FIRST_PHOTO": "上传您的第一张照片", + "IMPORT_YOUR_FOLDERS": "导入您的文件夹", + "UPLOAD_DROPZONE_MESSAGE": "拖放以备份您的文件", + "WATCH_FOLDER_DROPZONE_MESSAGE": "拖放以添加观看的文件夹", + "TRASH_FILES_TITLE": "要删除文件吗?", + "TRASH_FILE_TITLE": "要删除文件吗?", + "DELETE_FILES_TITLE": "要立即删除吗?", + "DELETE_FILES_MESSAGE": "所选文件将从您的账户中永久删除。", + "DELETE": "删除", + "DELETE_OPTION": "删除(DEL)", + "FAVORITE_OPTION": "收藏 (L)", + "UNFAVORITE_OPTION": "取消收藏 (L)", + "MULTI_FOLDER_UPLOAD": "检测到多个文件夹", + "UPLOAD_STRATEGY_CHOICE": "你想要上传他们到", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "单个相册", + "OR": "或者", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "独立相册", + "SESSION_EXPIRED_MESSAGE": "您的会话已过期,请重新登录以继续", + "SESSION_EXPIRED": "会话已过期", + "PASSWORD_GENERATION_FAILED": "您的浏览器无法生成一个符合ente加密标准的强密钥,请尝试使用移动应用程序或其他浏览器", + "CHANGE_PASSWORD": "修改密码", + "GO_BACK": "返回", + "RECOVERY_KEY": "恢复密钥", + "SAVE_LATER": "稍后再做", + "SAVE": "保存密钥", + "RECOVERY_KEY_DESCRIPTION": "如果您忘记了密码,恢复数据的唯一方法就是使用此密钥。", + "RECOVER_KEY_GENERATION_FAILED": "无法生成恢复代码,请重试", + "KEY_NOT_STORED_DISCLAIMER": "我们不存储此密钥,因此请将其保存在安全的地方", + "FORGOT_PASSWORD": "忘记密码", + "RECOVER_ACCOUNT": "恢复账户", + "RECOVERY_KEY_HINT": "恢复密钥", + "RECOVER": "恢复", + "NO_RECOVERY_KEY": "没有恢复密钥?", + "INCORRECT_RECOVERY_KEY": "不正确的恢复密钥", + "SORRY": "抱歉", + "NO_RECOVERY_KEY_MESSAGE": "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "请用您注册ente账户的电子邮箱发一封邮件给 {{emailID}}", + "CONTACT_SUPPORT": "联系支持", + "REQUEST_FEATURE": "功能建议", + "SUPPORT": "支持", + "CONFIRM": "确认", + "CANCEL": "取消", + "LOGOUT": "退出登录", + "DELETE_ACCOUNT": "删除账户", + "DELETE_ACCOUNT_MESSAGE": "

请从您注册的电子邮件地址发送一封电子邮件到 {{emailID}}

。您的请求将在72小时内处理。

", + "LOGOUT_MESSAGE": "你确定要退出登录吗?", + "CHANGE_EMAIL": "更换邮箱", + "OK": "确定", + "SUCCESS": "成功", + "ERROR": "错误", + "MESSAGE": "消息", + "INSTALL_MOBILE_APP": "安装我们的 AndroidiOS 应用程序来自动备份您的所有照片", + "DOWNLOAD_APP_MESSAGE": "抱歉,目前只有我们的桌面应用程序支持此操作", + "DOWNLOAD_APP": "下载桌面应用程序", + "EXPORT": "导出数据", + "SUBSCRIPTION": "订阅", + "SUBSCRIBE": "订阅", + "MANAGEMENT_PORTAL": "管理付款方式", + "MANAGE_FAMILY_PORTAL": "管理家庭", + "LEAVE_FAMILY_PLAN": "离开家庭计划", + "LEAVE": "离开", + "LEAVE_FAMILY_CONFIRM": "您确定要离开家庭计划吗?", + "CHOOSE_PLAN": "选择您的计划", + "MANAGE_PLAN": "管理您的订阅", + "ACTIVE": "已激活", + "OFFLINE_MSG": "您处于离线状态,正在显示已缓存的回忆", + "FREE_SUBSCRIPTION_INFO": "您使用的是将于{{date, dateTime}} 过期的免费计划", + "FAMILY_SUBSCRIPTION_INFO": "您正在使用由 管理的家庭计划", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "于 {{date, dateTime}} 续费", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "结束于 {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "您的订阅将于 {{date, dateTime}} 取消", + "ADD_ON_AVAILABLE_TILL": "您的 {{storage, string}} 插件有效期至 {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "您已超过您的存储配额,请 升级", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

我们已经收到您的付款

您的订阅有效期至 {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "您的购买已取消,如果您想订阅,请重试", + "SUBSCRIPTION_PURCHASE_FAILED": "订阅购买失败,请重试", + "SUBSCRIPTION_UPDATE_FAILED": "订阅更新失败,请重试", + "UPDATE_PAYMENT_METHOD_MESSAGE": "很抱歉,我们尝试从您的卡中扣款时支付失败,请更新您的付款方式并重试", + "STRIPE_AUTHENTICATION_FAILED": "我们无法验证您的付款方式。请选择不同的付款方式并重试", + "UPDATE_PAYMENT_METHOD": "更新付款方式", + "MONTHLY": "每月", + "YEARLY": "每年", + "UPDATE_SUBSCRIPTION_MESSAGE": "您确定要更改您的计划吗?", + "UPDATE_SUBSCRIPTION": "更改计划", + "CANCEL_SUBSCRIPTION": "取消订阅", + "CANCEL_SUBSCRIPTION_MESSAGE": "

您的所有数据将在此计费期结束时从我们的服务器中删除。

您确定要取消您的订阅吗?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

您确定要取消订阅吗?

", + "SUBSCRIPTION_CANCEL_FAILED": "取消订阅失败", + "SUBSCRIPTION_CANCEL_SUCCESS": "订阅成功取消", + "REACTIVATE_SUBSCRIPTION": "重新激活订阅", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "重新激活后,您将在 {{date, dateTime}} 前支付费用", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "订阅已成功激活 ", + "SUBSCRIPTION_ACTIVATE_FAILED": "无法重新激活订阅续费", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "非常感谢您", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "取消手机订阅", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "请从手机应用取消您的订阅以激活这里的订阅", + "MAIL_TO_MANAGE_SUBSCRIPTION": "请联系我们 {{emailID}} 来管理您的订阅", + "RENAME": "重命名", + "RENAME_FILE": "重命名文件", + "RENAME_COLLECTION": "重命名相册", + "DELETE_COLLECTION_TITLE": "要删除相册吗?", + "DELETE_COLLECTION": "删除相册", + "DELETE_COLLECTION_MESSAGE": "也删除此相册中存在的照片(和视频),从 他们所加入的所有 个其他相册?", + "DELETE_PHOTOS": "删除照片", + "KEEP_PHOTOS": "保留照片", + "SHARE": "分享", + "SHARE_COLLECTION": "分享相册", + "SHAREES": "已分享给", + "SHARE_WITH_SELF": "哎呀,您不能与自己分享", + "ALREADY_SHARED": "哎呀,您已经和 {{email}} 分享了", + "SHARING_BAD_REQUEST_ERROR": "不允许分享相册", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "免费账户禁用共享", + "DOWNLOAD_COLLECTION": "下载相册", + "DOWNLOAD_COLLECTION_MESSAGE": "

您确定要下载完整相册吗?

所有文件都将按顺序排队进行下载

", + "CREATE_ALBUM_FAILED": "相册创建失败,请重试", + "SEARCH": "搜索", + "SEARCH_RESULTS": "搜索结果", + "NO_RESULTS": "未找到任何结果", + "SEARCH_HINT": "搜索相册、日期...", + "SEARCH_TYPE": { + "COLLECTION": "相册", + "LOCATION": "地理位置", + "CITY": "位置", + "DATE": "日期", + "FILE_NAME": "文件名", + "THING": "内容", + "FILE_CAPTION": "说明", + "FILE_TYPE": "文件类型", + "CLIP": "魔法" + }, + "photos_count_zero": "没有回忆", + "photos_count_one": "1个回忆", + "photos_count_other": "{{count, number}} 个回忆", + "TERMS_AND_CONDITIONS": "我同意 条款隐私政策", + "ADD_TO_COLLECTION": "添加到相册", + "SELECTED": "已选", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "此视频无法在您的浏览器中播放", + "PEOPLE": "人物", + "INDEXING_SCHEDULED": "索引已安排...", + "ANALYZING_PHOTOS": "分析 {{indexStatus.nTotalFiles}} 的新照片{{indexStatus.nSyncedFiles}} 已完成)...", + "INDEXING_PEOPLE": "正在为 {{indexStatus.nSyncedFiles}} 张照片中的人物建立索引...", + "INDEXING_DONE": "已索引 {{indexStatus.nSyncedFiles}} 张照片", + "UNIDENTIFIED_FACES": "身份不明的面孔", + "OBJECTS": "对象", + "TEXT": "文本", + "INFO": "图片信息 ", + "INFO_OPTION": "图片信息 (I)", + "FILE_NAME": "文件名", + "CAPTION_PLACEHOLDER": "添加说明", + "LOCATION": "地理位置", + "SHOW_ON_MAP": "在 OpenStreetMap 上查看", + "MAP": "地图", + "MAP_SETTINGS": "地图设置", + "ENABLE_MAPS": "要启用地图吗?", + "ENABLE_MAP": "启用地图", + "DISABLE_MAPS": "要禁用地图吗?", + "ENABLE_MAP_DESCRIPTION": "

这将在世界地图上显示您的照片。

该地图由 OpenStreetMap 托管,并且您照片的确切位置永远不会共享。

您可以随时从“设置”中禁用此功能。

", + "DISABLE_MAP_DESCRIPTION": "

这将禁止在世界地图上显示您的照片。

您可以随时从“设置”中启用此功能。

", + "DISABLE_MAP": "禁用地图", + "DETAILS": "详情", + "VIEW_EXIF": "查看所有 EXIF 数据", + "NO_EXIF": "无 EXIF 数据", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "双因素", + "TWO_FACTOR_AUTHENTICATION": "双因素认证", + "TWO_FACTOR_QR_INSTRUCTION": "使用您最喜欢的身份验证器应用程序(2FA)扫描下面的二维码", + "ENTER_CODE_MANUALLY": "请手动输入代码", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "请在您最喜欢的验证器应用中输入此代码", + "SCAN_QR_CODE": "改为扫描二维码", + "ENABLE_TWO_FACTOR": "启用双因素认证", + "ENABLE": "启用", + "LOST_DEVICE": "丢失了双因素认证设备", + "INCORRECT_CODE": "代码错误", + "TWO_FACTOR_INFO": "登录您的账户不仅需要您的电子邮件和密码,还需要额外的安全层", + "DISABLE_TWO_FACTOR_LABEL": "禁用双因素认证", + "UPDATE_TWO_FACTOR_LABEL": "更新您的身份验证器设备", + "DISABLE": "禁用", + "RECONFIGURE": "重新配置", + "UPDATE_TWO_FACTOR": "更新双因素认证", + "UPDATE_TWO_FACTOR_MESSAGE": "向前继续将使之前配置的任何身份验证器无效", + "UPDATE": "更新", + "DISABLE_TWO_FACTOR": "禁用双因素认证", + "DISABLE_TWO_FACTOR_MESSAGE": "您确定要禁用您的双因素认证吗?", + "TWO_FACTOR_DISABLE_FAILED": "禁用双因素认证失败,请再试一次", + "EXPORT_DATA": "导出数据", + "SELECT_FOLDER": "选择文件夹", + "DESTINATION": "目标位置", + "START": "开始", + "LAST_EXPORT_TIME": "最后一次导出时间", + "EXPORT_AGAIN": "重新同步", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "无法访问本地存储", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "您的浏览器或插件阻止 ente 将数据保存到本地存储。 请在切换浏览模式后再尝试加载此页面。", + "SEND_OTT": "发送 OTP", + "EMAIl_ALREADY_OWNED": "电子邮箱已被注册", + "ETAGS_BLOCKED": "

由于您的浏览器配置,我们无法上传以下文件。

请禁用任何可能阻止ente 使用 eTags 上传大文件的附加组件, 或者使用我们的 桌面应用程序 获取更可靠的导入体验。

", + "SKIPPED_VIDEOS_INFO": "

目前,我们不支持在公共链接内添加视频。

若要分享视频,请 注册 并通过电子邮件与预定收件人分享。

", + "LIVE_PHOTOS_DETECTED": "Live Photos 中的照片和视频文件已合并为一个文件", + "RETRY_FAILED": "重试上传失败的文件", + "FAILED_UPLOADS": "上传失败 ", + "SKIPPED_FILES": "已忽略的上传内容", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "缩略图生成失败", + "UNSUPPORTED_FILES": "不支持的文件", + "SUCCESSFUL_UPLOADS": "上传成功", + "SKIPPED_INFO": "跳过这些,因为在同一相册中有具有匹配名称的文件", + "UNSUPPORTED_INFO": "ente 尚不支持这些文件格式", + "BLOCKED_UPLOADS": "已阻止上传", + "SKIPPED_VIDEOS": "已跳过的视频", + "INPROGRESS_METADATA_EXTRACTION": "进行中", + "INPROGRESS_UPLOADS": "上传进行中", + "TOO_LARGE_UPLOADS": "大文件", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "存储空间不足", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "这些文件没有上传,因为它们超过了您的存储计划的最大大小限制", + "TOO_LARGE_INFO": "这些文件没有上传,因为它们超过了我们的最大文件大小限制", + "THUMBNAIL_GENERATION_FAILED_INFO": "这些文件已上传,但遗憾的是,我们无法为它们生成缩略图。", + "UPLOAD_TO_COLLECTION": "上传至相册", + "UNCATEGORIZED": "未分类的", + "ARCHIVE": "存档", + "FAVORITES": "收藏", + "ARCHIVE_COLLECTION": "存档相册", + "ARCHIVE_SECTION_NAME": "存档", + "ALL_SECTION_NAME": "全部", + "MOVE_TO_COLLECTION": "移动到相册", + "UNARCHIVE": "取消存档", + "UNARCHIVE_COLLECTION": "取消存档相册", + "HIDE_COLLECTION": "隐藏相册", + "UNHIDE_COLLECTION": "取消隐藏相册", + "MOVE": "移动", + "ADD": "添加", + "REMOVE": "移除", + "YES_REMOVE": "是,移除", + "REMOVE_FROM_COLLECTION": "从相册中移除", + "TRASH": "回收站", + "MOVE_TO_TRASH": "移动到回收站", + "TRASH_FILES_MESSAGE": "选中的文件将从所有相册中删除并移动到回收站。", + "TRASH_FILE_MESSAGE": "该文件将从所有相册中删除并移动到回收站。", + "DELETE_PERMANENTLY": "永久删除", + "RESTORE": "恢复", + "RESTORE_TO_COLLECTION": "恢复到相册", + "EMPTY_TRASH": "清空回收站", + "EMPTY_TRASH_TITLE": "要清空回收站吗?", + "EMPTY_TRASH_MESSAGE": "这些文件将从您的 ente 账户中永久删除。", + "LEAVE_SHARED_ALBUM": "是,离开", + "LEAVE_ALBUM": "离开相册", + "LEAVE_SHARED_ALBUM_TITLE": "要离开共享相册吗?", + "LEAVE_SHARED_ALBUM_MESSAGE": "您将离开相册,它将不再对您可见。", + "NOT_FILE_OWNER": "您不能删除共享相册中的文件", + "CONFIRM_SELF_REMOVE_MESSAGE": "所选项目将从该相册中删除。 仅在此相册中的项目将移至未分类。", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "您要删除的某些项目是由其他人添加的,您将无法访问它们。", + "SORT_BY_CREATION_TIME_ASCENDING": "最早的", + "SORT_BY_UPDATION_TIME_DESCENDING": "最后更新", + "SORT_BY_NAME": "名称", + "COMPRESS_THUMBNAILS": "压缩缩略图", + "THUMBNAIL_REPLACED": "缩略图已压缩", + "FIX_THUMBNAIL": "压缩", + "FIX_THUMBNAIL_LATER": "稍后压缩", + "REPLACE_THUMBNAIL_NOT_STARTED": "您的一些视频缩略图可以被压缩以节省空间,您想要ente 压缩它们吗?", + "REPLACE_THUMBNAIL_COMPLETED": "已成功压缩所有缩略图", + "REPLACE_THUMBNAIL_NOOP": "您没有可以进一步压缩的缩略图", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "无法压缩您的一些缩略图,请重试", + "FIX_CREATION_TIME": "固定时间", + "FIX_CREATION_TIME_IN_PROGRESS": "正在固定时间", + "CREATION_TIME_UPDATED": "文件时间已更新", + "UPDATE_CREATION_TIME_NOT_STARTED": "选择您想要使用的选项", + "UPDATE_CREATION_TIME_COMPLETED": "已成功更新所有文件", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "部分文件的文件时间更新失败,请重试", + "CAPTION_CHARACTER_LIMIT": "5000个字符上限", + "DATE_TIME_ORIGINAL": "EXIF:日期 时间 原始文件", + "DATE_TIME_DIGITIZED": "EXIF:日期 时间 数字化", + "METADATA_DATE": "EXIF:元数据日期", + "CUSTOM_TIME": "自定义时间", + "REOPEN_PLAN_SELECTOR_MODAL": "重新启动计划", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "未能打开计划", + "INSTALL": "安装", + "SHARING_DETAILS": "共享的详细信息", + "MODIFY_SHARING": "更改共享", + "ADD_COLLABORATORS": "添加协作者", + "ADD_NEW_EMAIL": "添加新的电子邮件", + "shared_with_people_zero": "与特定人员分享", + "shared_with_people_one": "已与1个人共享", + "shared_with_people_other": "已与 {count, number} 个人共享", + "participants_zero": "暂无参与者", + "participants_one": "1 名参与者", + "participants_other": "{{count, number}} 名参与者", + "ADD_VIEWERS": "添加查看者", + "PARTICIPANTS": "参与者", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} 将无法向相册添加更多照片

他们仍然可以删除他们添加的照片

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} 将能够将照片添加到相册", + "CONVERT_TO_VIEWER": "是的,转换为查看者", + "CONVERT_TO_COLLABORATOR": "是,转换为协作者", + "CHANGE_PERMISSION": "要修改权限吗?", + "REMOVE_PARTICIPANT": "要移除吗?", + "CONFIRM_REMOVE": "是,移除", + "MANAGE": "管理", + "ADDED_AS": "已添加为", + "COLLABORATOR_RIGHTS": "协作者可以将照片和视频添加到共享相册中", + "REMOVE_PARTICIPANT_HEAD": "移除参与者", + "OWNER": "所有者", + "COLLABORATORS": "协作者", + "ADD_MORE": "添加更多", + "VIEWERS": "查看者", + "OR_ADD_EXISTING": "或选择一个现有的", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} 将从相册中删除

他们添加的所有照片也将从相册中删除

", + "NOT_FOUND": "404 - 未找到", + "LINK_EXPIRED": "链接已过期", + "LINK_EXPIRED_MESSAGE": "此链接已过期或已被禁用!", + "MANAGE_LINK": "管理链接", + "LINK_TOO_MANY_REQUESTS": "这个相册太受欢迎,我们无法处理!", + "FILE_DOWNLOAD": "允许下载", + "LINK_PASSWORD_LOCK": "密码锁", + "PUBLIC_COLLECT": "允许添加照片", + "LINK_DEVICE_LIMIT": "设备限制", + "NO_DEVICE_LIMIT": "无", + "LINK_EXPIRY": "链接过期", + "NEVER": "永不", + "DISABLE_FILE_DOWNLOAD": "禁止下载", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

您确定要禁用文件下载按钮吗?

观看者仍然可以使用外部工具进行屏幕截图或保存您的照片副本。

", + "MALICIOUS_CONTENT": "哈哈哈急急急", + "COPYRIGHT": "不不不急急急就是", + "SHARED_USING": "分享方式 ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "使用代码 {{referralCode}} 获得 10 GB 免费空间", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "禁用密码锁", + "DISABLE_PASSWORD_MESSAGE": "您确定要禁用密码锁吗?", + "PASSWORD_LOCK": "密码锁", + "LOCK": "锁定", + "DOWNLOAD_UPLOAD_LOGS": "调试日志", + "UPLOAD_FILES": "文件", + "UPLOAD_DIRS": "文件夹", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "删除重复文件", + "AUTHENTICATOR_SECTION": "身份验证器", + "NO_DUPLICATES_FOUND": "您没有可以清除的重复文件", + "CLUB_BY_CAPTURE_TIME": "按抓取时间断开", + "FILES": "文件", + "EACH": "每个", + "DEDUPLICATE_BASED_ON_SIZE": "以下文件根据大小进行了合并,请检查并删除您认为重复的项目", + "STOP_ALL_UPLOADS_MESSAGE": "您确定要停止所有正在进行的上传吗?", + "STOP_UPLOADS_HEADER": "要停止上传吗?", + "YES_STOP_UPLOADS": "是的,停止上传", + "STOP_DOWNLOADS_HEADER": "要停止下载吗?", + "YES_STOP_DOWNLOADS": "是,停止下载", + "STOP_ALL_DOWNLOADS_MESSAGE": "您确定要停止所有正在进行的下载?", + "albums_one": "1个相册", + "albums_other": "{{count, number}} 个相册", + "ALL_ALBUMS": "所有相册", + "ALBUMS": "相册", + "ALL_HIDDEN_ALBUMS": "所有隐藏的相册", + "HIDDEN_ALBUMS": "隐藏的相册", + "HIDDEN_ITEMS": "隐藏的项目", + "HIDDEN_ITEMS_SECTION_NAME": "隐藏的项目", + "ENTER_TWO_FACTOR_OTP": "请输入您从身份验证应用上获得的6位数代码", + "CREATE_ACCOUNT": "创建账户", + "COPIED": "已复制", + "CANVAS_BLOCKED_TITLE": "无法生成缩略图", + "CANVAS_BLOCKED_MESSAGE": "

看起来您的浏览器已禁用了需要为您的照片生成缩略图的canvas访问权限

请允许访问您浏览器的canvas, 或使用我们的桌面应用程序

", + "WATCH_FOLDERS": "观看文件夹", + "UPGRADE_NOW": "立即升级", + "RENEW_NOW": "立即续费", + "STORAGE": "存储空间", + "USED": "已使用", + "YOU": "您", + "FAMILY": "家庭", + "FREE": "空闲", + "OF": "/", + "WATCHED_FOLDERS": "观看文件夹", + "NO_FOLDERS_ADDED": "尚未添加任何文件夹!", + "FOLDERS_AUTOMATICALLY_MONITORED": "您在此处添加的文件夹将自动监控", + "UPLOAD_NEW_FILES_TO_ENTE": "上传新文件至 ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "从ente 移除已删除的文件", + "ADD_FOLDER": "添加文件夹", + "STOP_WATCHING": "停止监控", + "STOP_WATCHING_FOLDER": "要停止监控文件夹?", + "STOP_WATCHING_DIALOG_MESSAGE": "您现有的文件不会被删除,但 ente 将停止自动更新链接的 ente 相册在此文件夹中的更改。", + "YES_STOP": "是的,停止", + "MONTH_SHORT": "月", + "YEAR": "年", + "FAMILY_PLAN": "家庭计划", + "DOWNLOAD_LOGS": "下载日志", + "DOWNLOAD_LOGS_MESSAGE": "

这将下载调试日志,您可以发送电子邮件给我们来帮助调试您的问题。

请注意文件名将被包含,以帮助跟踪特定文件中的问题。

", + "CHANGE_FOLDER": "更改文件夹", + "TWO_MONTHS_FREE": "在年度计划上免费获得 2 个月", + "GB": "GB", + "POPULAR": "流行的", + "FREE_PLAN_OPTION_LABEL": "继续免费试用", + "FREE_PLAN_DESCRIPTION": "1 GB 1年", + "CURRENT_USAGE": "当前使用量是 {{usage}}", + "WEAK_DEVICE": "您使用的网络浏览器功能不够强大,无法加密您的照片。 请尝试在电脑上登录ente,或下载ente移动/桌面应用程序。", + "DRAG_AND_DROP_HINT": "或者拖动并拖动到 ente 窗口", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "您上传的数据将被安排删除,您的账户将被永久删除。

此操作不可逆。", + "AUTHENTICATE": "身份认证", + "UPLOADED_TO_SINGLE_COLLECTION": "已上传到单个收藏", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "已上传到单独收藏", + "NEVERMIND": "没关系", + "UPDATE_AVAILABLE": "有可用的更新", + "UPDATE_INSTALLABLE_MESSAGE": "新版本的 ente 已准备好安装。", + "INSTALL_NOW": "立即安装", + "INSTALL_ON_NEXT_LAUNCH": "在下次启动时安装", + "UPDATE_AVAILABLE_MESSAGE": "新版本的 ente 已发布,但无法自动下载和安装。", + "DOWNLOAD_AND_INSTALL": "下载并安装", + "IGNORE_THIS_VERSION": "忽略该版本", + "TODAY": "今天", + "YESTERDAY": "昨天", + "NAME_PLACEHOLDER": "名称...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "无法从文件/文件夹组合中创建相册", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

你已拖放了文件和文件夹的组合。

选择创建单独相册的选项时,请只提供文件或只提供文件夹

", + "CHOSE_THEME": "选择主题", + "ML_SEARCH": "ML 搜索 (测试版)", + "ENABLE_ML_SEARCH_DESCRIPTION": "

这将启用设备上的机器学习和面部搜索,这将开始分析您上传的本地照片。

在登录或启用此功能后第一次运行时,它将下载本地设备上的所有图像来分析。 所以请只在您可以使用带宽和本地处理您的照片库中的所有图像时启用此功能。

如果这是您首次启用此功能,我们也会请求您处理面部数据的许可。

", + "ML_MORE_DETAILS": "更多详情", + "ENABLE_FACE_SEARCH": "启用面部搜索", + "ENABLE_FACE_SEARCH_TITLE": "要启用面部搜索吗?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

如果您启用面部搜索,ente 将从照片中提取脸部几何形状。 这将发生在您的设备上,任何生成的生物测定数据都将是端到端加密的。

请单击此处以在我们的隐私政策中了解有关此功能的更多详细信息

", + "DISABLE_BETA": "禁用beta", + "DISABLE_FACE_SEARCH": "禁用面部搜索", + "DISABLE_FACE_SEARCH_TITLE": "要禁用面部搜索吗?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente 将停止处理面部的几何形状, 并将禁用 ML 搜索 (测试版)

如果您愿意,您可以重新启用面部搜索,因此该操作是安全的。

", + "ADVANCED": "高级设置", + "FACE_SEARCH_CONFIRMATION": "我理解,并希望允许ente处理面部几何形状", + "LABS": "实验室", + "YOURS": "你的", + "PASSPHRASE_STRENGTH_WEAK": "密码强度:较弱", + "PASSPHRASE_STRENGTH_MODERATE": "密码强度:中度", + "PASSPHRASE_STRENGTH_STRONG": "密码强度:强", + "PREFERENCES": "首选项", + "LANGUAGE": "语言", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "无效的导出目录", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

您选择的导出目录不存在。

请选择一个有效的目录。

", + "SUBSCRIPTION_VERIFICATION_ERROR": "订阅验证失败", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "1小时后", + "DAY": "一天后", + "WEEK": "一周后", + "MONTH": "一个月后", + "YEAR": "一年后" + }, + "COPY_LINK": "复制链接", + "DONE": "已完成", + "LINK_SHARE_TITLE": "或共享一个链接", + "REMOVE_LINK": "移除链接", + "CREATE_PUBLIC_SHARING": "创建公开链接", + "PUBLIC_LINK_CREATED": "公开链接已创建", + "PUBLIC_LINK_ENABLED": "公开链接已启用", + "COLLECT_PHOTOS": "收集照片", + "PUBLIC_COLLECT_SUBTEXT": "允许具有链接的人也将照片添加到共享相册。", + "STOP_EXPORT": "停止", + "EXPORT_PROGRESS": "{{progress.success}} / {{progress.total}} 个文件已导出", + "MIGRATING_EXPORT": "准备中...", + "RENAMING_COLLECTION_FOLDERS": "正在重命名相册文件夹...", + "TRASHING_DELETED_FILES": "正在回收删除的文件...", + "TRASHING_DELETED_COLLECTIONS": "正在回收已删除的相册...", + "EXPORT_NOTIFICATION": { + "START": "导出已开始", + "IN_PROGRESS": "导出已在进行中", + "FINISH": "导出完成", + "UP_TO_DATE": "没有新文件可导出" + }, + "CONTINUOUS_EXPORT": "持续同步", + "TOTAL_ITEMS": "项目总计", + "PENDING_ITEMS": "待处理的项目", + "EXPORT_STARTING": "导出开始...", + "DELETE_ACCOUNT_REASON_LABEL": "您删除账户的主要原因是什么?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "选择一个原因", + "DELETE_REASON": { + "MISSING_FEATURE": "找不到我想要的功能", + "BROKEN_BEHAVIOR": "该应用或某个功能不符合我认为应该做的行为", + "FOUND_ANOTHER_SERVICE": "我发现另一个产品更好用", + "NOT_LISTED": "我的原因未被列出" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "我们很抱歉看到您离开。请解释您为什么要离开来帮助我们改进。", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "反馈", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "是的,我想永久删除此账户及其相关数据", + "CONFIRM_DELETE_ACCOUNT": "确认删除账户", + "FEEDBACK_REQUIRED": "请帮助我们了解这个信息", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "其他服务做得更好?", + "RECOVER_TWO_FACTOR": "恢复双因素认证", + "at": "在", + "AUTH_NEXT": "下一个", + "AUTH_DOWNLOAD_MOBILE_APP": "下载我们的移动应用程序来管理您的密钥", + "HIDDEN": "已隐藏", + "HIDE": "隐藏", + "UNHIDE": "取消隐藏", + "UNHIDE_TO_COLLECTION": "取消隐藏到相册", + "SORT_BY": "排序方式", + "NEWEST_FIRST": "最新在前", + "OLDEST_FIRST": "最旧在前", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "无法预览此文件。点击这里下载原始文件。", + "SELECT_COLLECTION": "选择相册", + "PIN_ALBUM": "置顶相册", + "UNPIN_ALBUM": "取消置顶相册", + "DOWNLOAD_COMPLETE": "下载完成", + "DOWNLOADING_COLLECTION": "正在下载 {{name}}", + "DOWNLOAD_FAILED": "下载失败", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} 个文件", + "CRASH_REPORTING": "崩溃报告", + "CHRISTMAS": "圣诞", + "CHRISTMAS_EVE": "平安夜", + "NEW_YEAR": "新年", + "NEW_YEAR_EVE": "除夕", + "IMAGE": "图像", + "VIDEO": "视频", + "LIVE_PHOTO": "实况照片", + "CONVERT": "转换", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "您确定要关闭编辑器吗?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "下载已编辑的图片或将副本保存到 ente 以保留您的更改。", + "BRIGHTNESS": "亮度", + "CONTRAST": "对比度", + "SATURATION": "饱和度", + "BLUR": "模糊", + "INVERT_COLORS": "反相颜色", + "ASPECT_RATIO": "长宽比", + "SQUARE": "面积", + "ROTATE_LEFT": "向左旋转", + "ROTATE_RIGHT": "向右旋转", + "FLIP_VERTICALLY": "垂直翻转", + "FLIP_HORIZONTALLY": "水平翻转", + "DOWNLOAD_EDITED": "下载已编辑图片", + "SAVE_A_COPY_TO_ENTE": "保存副本到 ente", + "RESTORE_ORIGINAL": "复原", + "TRANSFORM": "转换", + "COLORS": "颜色", + "FLIP": "上下翻转", + "ROTATION": "回转", + "RESET": "重设", + "PHOTO_EDITOR": "照片编辑器", + "FASTER_UPLOAD": "更快上传", + "FASTER_UPLOAD_DESCRIPTION": "通过附近的服务器路由上传", + "MAGIC_SEARCH_STATUS": "魔法搜索状态", + "INDEXED_ITEMS": "索引项目", + "CAST_ALBUM_TO_TV": "在电视上播放相册", + "ENTER_CAST_PIN_CODE": "输入您在下面的电视上看到的代码来配对此设备。", + "PAIR_DEVICE_TO_TV": "配对设备", + "TV_NOT_FOUND": "未找到电视。您输入的 PIN 码正确吗?", + "AUTO_CAST_PAIR": "自动配对", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "自动配对需要连接到 Google 服务器,且仅适用于支持 Chromecast 的设备。Google 不会接收敏感数据,例如您的照片。", + "PAIR_WITH_PIN": "用 PIN 配对", + "CHOOSE_DEVICE_FROM_BROWSER": "从浏览器弹出窗口中选择兼容 Cast 的设备。", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "用 PIN 配对适用于任何大屏幕设备,您可以在这些设备上播放您的相册。", + "VISIT_CAST_ENTE_IO": "在您要配对的设备上访问 cast.ente.io 。", + "CAST_AUTO_PAIR_FAILED": "Chromecast 自动配对失败。请再试一次。", + "CACHE_DIRECTORY": "缓存文件夹", + "PASSKEYS": "通行密钥", + "FREEHAND": "手画", + "APPLY_CROP": "应用裁剪", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "保存之前必须至少执行一项转换或颜色调整。" +} diff --git a/web/apps/auth/public/manifest.json b/web/apps/auth/public/manifest.json new file mode 100644 index 000000000..1190f9681 --- /dev/null +++ b/web/apps/auth/public/manifest.json @@ -0,0 +1,39 @@ +{ + "short_name": "ente Auth", + "name": "ente Auth | encrypted 2FA app", + "icons": [ + { + "src": "/images/auth/192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "/images/auth/256.png", + "type": "image/png", + "sizes": "256x256" + }, + { + "src": "/images/auth/512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": "/", + "background_color": "#191919", + "display": "standalone", + "scope": "/", + "theme_color": "#111", + "description": "Open-source 2FA app with end-to-end encrypted backups", + "prefer_related_applications": true, + "related_applications": [ + { + "platform": "play", + "url": "https://play.google.com/store/apps/details?id=io.ente.auth", + "id": "io.ente.photos" + }, + { + "platform": "itunes", + "url": "https://apps.apple.com/in/app/ente-photos/id6444121398" + } + ] +} \ No newline at end of file diff --git a/web/apps/auth/public/offline.html b/web/apps/auth/public/offline.html new file mode 100644 index 000000000..50d7ed625 --- /dev/null +++ b/web/apps/auth/public/offline.html @@ -0,0 +1,59 @@ + + + + ente Auth + + + + + +
+

seems like you are offline :(

+ please check your internet connection +
+ + diff --git a/web/apps/auth/public/robots.txt b/web/apps/auth/public/robots.txt new file mode 100644 index 000000000..5e1daca27 --- /dev/null +++ b/web/apps/auth/public/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +Allow: /.well-known/* +Disallow: \ No newline at end of file diff --git a/web/apps/auth/sentry.client.config.ts b/web/apps/auth/sentry.client.config.ts new file mode 100644 index 000000000..373718e8e --- /dev/null +++ b/web/apps/auth/sentry.client.config.ts @@ -0,0 +1,3 @@ +import { initSentry } from "@ente/shared/sentry/config/sentry.config.base"; + +initSentry("https://5d344112b570b1a368b6f5c1d0bb798b@sentry.ente.io/8"); diff --git a/web/apps/auth/sentry.edge.config.ts b/web/apps/auth/sentry.edge.config.ts new file mode 100644 index 000000000..e69de29bb diff --git a/web/apps/auth/sentry.properties b/web/apps/auth/sentry.properties new file mode 100644 index 000000000..e9b0cad16 --- /dev/null +++ b/web/apps/auth/sentry.properties @@ -0,0 +1,6 @@ +# This file is used by the SentryWebpackPlugin to upload sourcemaps when the +# SENTRY_AUTH_TOKEN environment variable is defined. + +defaults.url = https://sentry.ente.io/ +defaults.org = ente +defaults.project = web-auth diff --git a/web/apps/auth/sentry.server.config.ts b/web/apps/auth/sentry.server.config.ts new file mode 100644 index 000000000..e69de29bb diff --git a/web/apps/auth/src/components/AuthFooter.tsx b/web/apps/auth/src/components/AuthFooter.tsx new file mode 100644 index 000000000..0d3a75058 --- /dev/null +++ b/web/apps/auth/src/components/AuthFooter.tsx @@ -0,0 +1,20 @@ +import { Button } from "@mui/material"; +import { t } from "i18next"; + +export const AuthFooter = () => { + return ( +
+

{t("AUTH_DOWNLOAD_MOBILE_APP")}

+ + + +
+ ); +}; diff --git a/web/apps/auth/src/components/Navbar.tsx b/web/apps/auth/src/components/Navbar.tsx new file mode 100644 index 000000000..293d7fc16 --- /dev/null +++ b/web/apps/auth/src/components/Navbar.tsx @@ -0,0 +1,36 @@ +import { logoutUser } from "@ente/accounts/services/user"; +import { HorizontalFlex } from "@ente/shared/components/Container"; +import { EnteLogo } from "@ente/shared/components/EnteLogo"; +import NavbarBase from "@ente/shared/components/Navbar/base"; +import OverflowMenu from "@ente/shared/components/OverflowMenu/menu"; +import { OverflowMenuOption } from "@ente/shared/components/OverflowMenu/option"; +import LogoutOutlined from "@mui/icons-material/LogoutOutlined"; +import MoreHoriz from "@mui/icons-material/MoreHoriz"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import React from "react"; + +export default function AuthNavbar() { + const { isMobile } = React.useContext(AppContext); + return ( + + + + + + } + > + } + onClick={logoutUser} + > + {t("LOGOUT")} + + + + + ); +} diff --git a/web/apps/auth/src/components/OTPDisplay.tsx b/web/apps/auth/src/components/OTPDisplay.tsx new file mode 100644 index 000000000..38de665aa --- /dev/null +++ b/web/apps/auth/src/components/OTPDisplay.tsx @@ -0,0 +1,237 @@ +import { ButtonBase, Snackbar } from "@mui/material"; +import { t } from "i18next"; +import { HOTP, TOTP } from "otpauth"; +import { useEffect, useState } from "react"; +import { Code } from "types/code"; +import TimerProgress from "./TimerProgress"; + +const TOTPDisplay = ({ issuer, account, code, nextCode, period }) => { + return ( +
+ +
+
+

+ {issuer} +

+

+ {account} +

+

+ {code} +

+
+
+
+

+ {t("AUTH_NEXT")} +

+

+ {nextCode} +

+
+
+
+ ); +}; + +function BadCodeInfo({ codeInfo, codeErr }) { + const [showRawData, setShowRawData] = useState(false); + + return ( +
+
{codeInfo.title}
+
{codeErr}
+
+ {showRawData ? ( +
setShowRawData(false)}> + {codeInfo.rawData ?? "no raw data"} +
+ ) : ( +
setShowRawData(true)}>Show rawData
+ )} +
+
+ ); +} + +interface OTPDisplayProps { + codeInfo: Code; +} + +const OTPDisplay = (props: OTPDisplayProps) => { + const { codeInfo } = props; + const [code, setCode] = useState(""); + const [nextCode, setNextCode] = useState(""); + const [codeErr, setCodeErr] = useState(""); + const [hasCopied, setHasCopied] = useState(false); + + const generateCodes = () => { + try { + const currentTime = new Date().getTime(); + if (codeInfo.type.toLowerCase() === "totp") { + const totp = new TOTP({ + secret: codeInfo.secret, + algorithm: codeInfo.algorithm ?? Code.defaultAlgo, + period: codeInfo.period ?? Code.defaultPeriod, + digits: codeInfo.digits ?? Code.defaultDigits, + }); + setCode(totp.generate()); + setNextCode( + totp.generate({ + timestamp: currentTime + codeInfo.period * 1000, + }), + ); + } else if (codeInfo.type.toLowerCase() === "hotp") { + const hotp = new HOTP({ + secret: codeInfo.secret, + counter: 0, + algorithm: codeInfo.algorithm, + }); + setCode(hotp.generate()); + setNextCode(hotp.generate({ counter: 1 })); + } + } catch (err) { + setCodeErr(err.message); + } + }; + + const copyCode = () => { + navigator.clipboard.writeText(code); + setHasCopied(true); + setTimeout(() => { + setHasCopied(false); + }, 2000); + }; + + useEffect(() => { + // this is to set the initial code and nextCode on component mount + generateCodes(); + const codeType = codeInfo.type; + const codePeriodInMs = codeInfo.period * 1000; + const timeToNextCode = + codePeriodInMs - (new Date().getTime() % codePeriodInMs); + const intervalId = null; + // wait until we are at the start of the next code period, + // and then start the interval loop + setTimeout(() => { + // we need to call generateCodes() once before the interval loop + // to set the initial code and nextCode + generateCodes(); + codeType.toLowerCase() === "totp" || + codeType.toLowerCase() === "hotp" + ? setInterval(() => { + generateCodes(); + }, codePeriodInMs) + : null; + }, timeToNextCode); + + return () => { + if (intervalId) clearInterval(intervalId); + }; + }, [codeInfo]); + + return ( +
+ {codeErr === "" ? ( + { + copyCode(); + }} + > + + + + ) : ( + + )} +
+ ); +}; + +export default OTPDisplay; diff --git a/web/apps/auth/src/components/TimerProgress.tsx b/web/apps/auth/src/components/TimerProgress.tsx new file mode 100644 index 000000000..d1f3726f6 --- /dev/null +++ b/web/apps/auth/src/components/TimerProgress.tsx @@ -0,0 +1,41 @@ +import { useEffect, useState } from "react"; + +const TimerProgress = ({ period }) => { + const [progress, setProgress] = useState(0); + const [ticker, setTicker] = useState(null); + const microSecondsInPeriod = period * 1000000; + + const startTicker = () => { + const ticker = setInterval(() => { + updateTimeRemaining(); + }, 10); + setTicker(ticker); + }; + + const updateTimeRemaining = () => { + const timeRemaining = + microSecondsInPeriod - + ((new Date().getTime() * 1000) % microSecondsInPeriod); + setProgress(timeRemaining / microSecondsInPeriod); + }; + + useEffect(() => { + startTicker(); + return () => clearInterval(ticker); + }, []); + + const color = progress > 0.4 ? "green" : "orange"; + + return ( +
+ ); +}; + +export default TimerProgress; diff --git a/web/apps/auth/src/pages/404.tsx b/web/apps/auth/src/pages/404.tsx new file mode 100644 index 000000000..edb4ae7f7 --- /dev/null +++ b/web/apps/auth/src/pages/404.tsx @@ -0,0 +1,17 @@ +import { APPS } from "@ente/shared/apps/constants"; +import NotFoundPage from "@ente/shared/next/pages/404"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function NotFound() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx new file mode 100644 index 000000000..156f2e455 --- /dev/null +++ b/web/apps/auth/src/pages/_app.tsx @@ -0,0 +1,213 @@ +import AppNavbar from "@ente/shared/components/Navbar/app"; +import { t } from "i18next"; +import { createContext, useEffect, useRef, useState } from "react"; + +import { Overlay } from "@ente/shared/components/Container"; +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import { + DialogBoxAttributesV2, + SetDialogBoxAttributesV2, +} from "@ente/shared/components/DialogBoxV2/types"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { MessageContainer } from "@ente/shared/components/MessageContainer"; +import { + clearLogsIfLocalStorageLimitExceeded, + logStartupMessage, +} from "@ente/shared/logging/web"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { LS_KEYS } from "@ente/shared/storage/localStorage"; +import { CssBaseline, useMediaQuery } from "@mui/material"; +import { ThemeProvider } from "@mui/material/styles"; +import Head from "next/head"; +import { useRouter } from "next/router"; +import LoadingBar from "react-top-loading-bar"; + +import { setupI18n } from "@/ui/i18n"; +import { CacheProvider } from "@emotion/react"; +import { + APP_TITLES, + APPS, + CLIENT_PACKAGE_NAMES, +} from "@ente/shared/apps/constants"; +import { EnteAppProps } from "@ente/shared/apps/types"; +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import { useLocalState } from "@ente/shared/hooks/useLocalState"; +import { getTheme } from "@ente/shared/themes"; +import { THEME_COLOR } from "@ente/shared/themes/constants"; +import createEmotionCache from "@ente/shared/themes/createEmotionCache"; +import { SetTheme } from "@ente/shared/themes/types"; +import "../../public/css/global.css"; + +type AppContextType = { + showNavBar: (show: boolean) => void; + startLoading: () => void; + finishLoading: () => void; + isMobile: boolean; + themeColor: THEME_COLOR; + setThemeColor: SetTheme; + somethingWentWrong: () => void; + setDialogBoxAttributesV2: SetDialogBoxAttributesV2; +}; + +export const AppContext = createContext(null); + +// Client-side cache, shared for the whole session of the user in the browser. +const clientSideEmotionCache = createEmotionCache(); + +export default function App(props: EnteAppProps) { + const { + Component, + emotionCache = clientSideEmotionCache, + pageProps, + } = props; + const router = useRouter(); + const [isI18nReady, setIsI18nReady] = useState(false); + const [loading, setLoading] = useState(false); + const [offline, setOffline] = useState( + typeof window !== "undefined" && !window.navigator.onLine, + ); + const [showNavbar, setShowNavBar] = useState(false); + const isLoadingBarRunning = useRef(false); + const loadingBar = useRef(null); + const [dialogBoxAttributeV2, setDialogBoxAttributesV2] = + useState(); + const [dialogBoxV2View, setDialogBoxV2View] = useState(false); + const isMobile = useMediaQuery("(max-width:428px)"); + const [themeColor, setThemeColor] = useLocalState( + LS_KEYS.THEME, + THEME_COLOR.DARK, + ); + + useEffect(() => { + //setup i18n + setupI18n().finally(() => setIsI18nReady(true)); + // set client package name in headers + HTTPService.setHeaders({ + "X-Client-Package": CLIENT_PACKAGE_NAMES.get(APPS.AUTH), + }); + // setup logging + clearLogsIfLocalStorageLimitExceeded(); + logStartupMessage(APPS.AUTH); + }, []); + + const setUserOnline = () => setOffline(false); + const setUserOffline = () => setOffline(true); + + useEffect(() => { + if (isI18nReady) { + console.log( + `%c${t("CONSOLE_WARNING_STOP")}`, + "color: red; font-size: 52px;", + ); + console.log(`%c${t("CONSOLE_WARNING_DESC")}`, "font-size: 20px;"); + } + }, [isI18nReady]); + + useEffect(() => { + router.events.on("routeChangeStart", (url: string) => { + const newPathname = url.split("?")[0] as PAGES; + if (window.location.pathname !== newPathname) { + setLoading(true); + } + }); + + router.events.on("routeChangeComplete", () => { + setLoading(false); + }); + + window.addEventListener("online", setUserOnline); + window.addEventListener("offline", setUserOffline); + + return () => { + window.removeEventListener("online", setUserOnline); + window.removeEventListener("offline", setUserOffline); + }; + }, []); + + useEffect(() => { + setDialogBoxV2View(true); + }, [dialogBoxAttributeV2]); + + const showNavBar = (show: boolean) => setShowNavBar(show); + + const startLoading = () => { + !isLoadingBarRunning.current && loadingBar.current?.continuousStart(); + isLoadingBarRunning.current = true; + }; + const finishLoading = () => { + setTimeout(() => { + isLoadingBarRunning.current && loadingBar.current?.complete(); + isLoadingBarRunning.current = false; + }, 100); + }; + + const closeDialogBoxV2 = () => setDialogBoxV2View(false); + + const somethingWentWrong = () => + setDialogBoxAttributesV2({ + title: t("ERROR"), + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + + return ( + + + + {isI18nReady + ? t("TITLE", { context: APPS.AUTH }) + : APP_TITLES.get(APPS.AUTH)} + + + + + + + {showNavbar && } + + {offline && t("OFFLINE_MSG")} + + + + + + + + {(loading || !isI18nReady) && ( + ({ + display: "flex", + justifyContent: "center", + alignItems: "center", + zIndex: 2000, + backgroundColor: theme.colors.background.base, + })} + > + + + )} + + + + + ); +} diff --git a/web/apps/auth/src/pages/_document.tsx b/web/apps/auth/src/pages/_document.tsx new file mode 100644 index 000000000..09d4d5782 --- /dev/null +++ b/web/apps/auth/src/pages/_document.tsx @@ -0,0 +1,7 @@ +import DocumentPage, { + EnteDocumentProps, +} from "@ente/shared/next/pages/_document"; + +export default function Document(props: EnteDocumentProps) { + return ; +} diff --git a/web/apps/auth/src/pages/_error.tsx b/web/apps/auth/src/pages/_error.tsx new file mode 100644 index 000000000..bf1bb89be --- /dev/null +++ b/web/apps/auth/src/pages/_error.tsx @@ -0,0 +1,17 @@ +import { APPS } from "@ente/shared/apps/constants"; +import ErrorPage from "@ente/shared/next/pages/_error"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Error() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/auth/index.tsx b/web/apps/auth/src/pages/auth/index.tsx new file mode 100644 index 000000000..6d8bbecc2 --- /dev/null +++ b/web/apps/auth/src/pages/auth/index.tsx @@ -0,0 +1,142 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { AUTH_PAGES as PAGES } from "@ente/shared/constants/pages"; +import { CustomError } from "@ente/shared/error"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { TextField } from "@mui/material"; +import { AuthFooter } from "components/AuthFooter"; +import AuthNavbar from "components/Navbar"; +import OTPDisplay from "components/OTPDisplay"; +import { t } from "i18next"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext, useEffect, useState } from "react"; +import { getAuthCodes } from "services"; + +const AuthenticatorCodesPage = () => { + const appContext = useContext(AppContext); + const router = useRouter(); + const [codes, setCodes] = useState([]); + const [hasFetched, setHasFetched] = useState(false); + const [searchTerm, setSearchTerm] = useState(""); + + useEffect(() => { + const fetchCodes = async () => { + try { + const res = await getAuthCodes(); + setCodes(res); + } catch (err) { + if (err.message === CustomError.KEY_MISSING) { + InMemoryStore.set(MS_KEYS.REDIRECT_URL, PAGES.AUTH); + router.push(PAGES.ROOT); + } else { + // do not log errors + } + } + setHasFetched(true); + }; + fetchCodes(); + appContext.showNavBar(false); + }, []); + + const filteredCodes = codes.filter( + (secret) => + (secret.issuer ?? "") + .toLowerCase() + .includes(searchTerm.toLowerCase()) || + (secret.account ?? "") + .toLowerCase() + .includes(searchTerm.toLowerCase()), + ); + + if (!hasFetched) { + return ( + <> + + + + + ); + } + + return ( + <> + +
+
+ {filteredCodes.length === 0 && searchTerm.length === 0 ? ( + <> + ) : ( + setSearchTerm(e.target.value)} + variant="filled" + style={{ width: "350px" }} + value={searchTerm} + autoFocus + /> + )} + +
+
+ {filteredCodes.length === 0 ? ( +
+ {searchTerm.length !== 0 ? ( +

{t("NO_RESULTS")}

+ ) : ( +
+ )} +
+ ) : ( + filteredCodes.map((code) => ( + + )) + )} +
+
+ +
+
+ + + ); +}; + +export default AuthenticatorCodesPage; diff --git a/web/apps/auth/src/pages/change-email/index.tsx b/web/apps/auth/src/pages/change-email/index.tsx new file mode 100644 index 000000000..3bd1e89ab --- /dev/null +++ b/web/apps/auth/src/pages/change-email/index.tsx @@ -0,0 +1,17 @@ +import ChangeEmailPage from "@ente/accounts/pages/change-email"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function ChangeEmail() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/change-password/index.tsx b/web/apps/auth/src/pages/change-password/index.tsx new file mode 100644 index 000000000..567748755 --- /dev/null +++ b/web/apps/auth/src/pages/change-password/index.tsx @@ -0,0 +1,17 @@ +import ChangePasswordPage from "@ente/accounts/pages/change-password"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function ChangePassword() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/credentials/index.tsx b/web/apps/auth/src/pages/credentials/index.tsx new file mode 100644 index 000000000..c73a22089 --- /dev/null +++ b/web/apps/auth/src/pages/credentials/index.tsx @@ -0,0 +1,17 @@ +import CredentialPage from "@ente/accounts/pages/credentials"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Credential() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/generate/index.tsx b/web/apps/auth/src/pages/generate/index.tsx new file mode 100644 index 000000000..fe488e0c2 --- /dev/null +++ b/web/apps/auth/src/pages/generate/index.tsx @@ -0,0 +1,17 @@ +import GeneratePage from "@ente/accounts/pages/generate"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Generate() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/index.tsx b/web/apps/auth/src/pages/index.tsx new file mode 100644 index 000000000..09b22fe49 --- /dev/null +++ b/web/apps/auth/src/pages/index.tsx @@ -0,0 +1,14 @@ +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import { useRouter } from "next/router"; +import { useEffect } from "react"; + +const IndexPage = () => { + const router = useRouter(); + useEffect(() => { + router.push(PAGES.LOGIN); + }, []); + + return <>; +}; + +export default IndexPage; diff --git a/web/apps/auth/src/pages/login/index.tsx b/web/apps/auth/src/pages/login/index.tsx new file mode 100644 index 000000000..434a31557 --- /dev/null +++ b/web/apps/auth/src/pages/login/index.tsx @@ -0,0 +1,17 @@ +import LoginPage from "@ente/accounts/pages/login"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Login() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/recover/index.tsx b/web/apps/auth/src/pages/recover/index.tsx new file mode 100644 index 000000000..9629de5d6 --- /dev/null +++ b/web/apps/auth/src/pages/recover/index.tsx @@ -0,0 +1,17 @@ +import RecoverPage from "@ente/accounts/pages/recover"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Recover() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/signup/index.tsx b/web/apps/auth/src/pages/signup/index.tsx new file mode 100644 index 000000000..b7cbccd97 --- /dev/null +++ b/web/apps/auth/src/pages/signup/index.tsx @@ -0,0 +1,17 @@ +import SignupPage from "@ente/accounts/pages/signup"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Sigup() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/two-factor/recover/index.tsx b/web/apps/auth/src/pages/two-factor/recover/index.tsx new file mode 100644 index 000000000..965a77755 --- /dev/null +++ b/web/apps/auth/src/pages/two-factor/recover/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorRecoverPage from "@ente/accounts/pages/two-factor/recover"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorRecover() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/two-factor/setup/index.tsx b/web/apps/auth/src/pages/two-factor/setup/index.tsx new file mode 100644 index 000000000..4a027ded6 --- /dev/null +++ b/web/apps/auth/src/pages/two-factor/setup/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorSetupPage from "@ente/accounts/pages/two-factor/setup"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorSetup() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/two-factor/verify/index.tsx b/web/apps/auth/src/pages/two-factor/verify/index.tsx new file mode 100644 index 000000000..1c90e49a8 --- /dev/null +++ b/web/apps/auth/src/pages/two-factor/verify/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorVerifyPage from "@ente/accounts/pages/two-factor/verify"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorVerify() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/pages/verify/index.tsx b/web/apps/auth/src/pages/verify/index.tsx new file mode 100644 index 000000000..ff3317cab --- /dev/null +++ b/web/apps/auth/src/pages/verify/index.tsx @@ -0,0 +1,17 @@ +import VerifyPage from "@ente/accounts/pages/verify"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Verify() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/auth/src/services/index.ts b/web/apps/auth/src/services/index.ts new file mode 100644 index 000000000..893ddfb66 --- /dev/null +++ b/web/apps/auth/src/services/index.ts @@ -0,0 +1,115 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { ApiError, CustomError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { getActualKey } from "@ente/shared/user"; +import { HttpStatusCode } from "axios"; +import { AuthEntity, AuthKey } from "types/api"; +import { Code } from "types/code"; + +const ENDPOINT = getEndpoint(); +export const getAuthCodes = async (): Promise => { + const masterKey = await getActualKey(); + try { + const authKeyData = await getAuthKey(); + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const authenticatorKey = await cryptoWorker.decryptB64( + authKeyData.encryptedKey, + authKeyData.header, + masterKey, + ); + // always fetch all data from server for now + const authEntity: AuthEntity[] = await getDiff(0); + const authCodes = await Promise.all( + authEntity + .filter((f) => !f.isDeleted) + .map(async (entity) => { + try { + const decryptedCode = + await cryptoWorker.decryptMetadata( + entity.encryptedData, + entity.header, + authenticatorKey, + ); + return Code.fromRawData(entity.id, decryptedCode); + } catch (e) { + logError( + Error("failed to parse code"), + "codeId = " + entity.id, + ); + return null; + } + }), + ); + // Remove null and undefined values + const filteredAuthCodes = authCodes.filter( + (f) => f !== null && f !== undefined, + ); + filteredAuthCodes.sort((a, b) => { + if (a.issuer && b.issuer) { + return a.issuer.localeCompare(b.issuer); + } + if (a.issuer) { + return -1; + } + if (b.issuer) { + return 1; + } + return 0; + }); + return filteredAuthCodes; + } catch (e) { + if (e.message !== CustomError.AUTH_KEY_NOT_FOUND) { + logError(e, "get authenticator entities failed"); + } + throw e; + } +}; + +export const getAuthKey = async (): Promise => { + try { + const resp = await HTTPService.get( + `${ENDPOINT}/authenticator/key`, + {}, + { + "X-Auth-Token": getToken(), + }, + ); + return resp.data; + } catch (e) { + if ( + e instanceof ApiError && + e.httpStatusCode === HttpStatusCode.NotFound + ) { + throw Error(CustomError.AUTH_KEY_NOT_FOUND); + } else { + logError(e, "Get key failed"); + throw e; + } + } +}; + +// return a promise which resolves to list of AuthEnitity +export const getDiff = async ( + sinceTime: number, + limit = 2500, +): Promise => { + try { + const resp = await HTTPService.get( + `${ENDPOINT}/authenticator/entity/diff`, + { + sinceTime, + limit, + }, + { + "X-Auth-Token": getToken(), + }, + ); + return resp.data.diff; + } catch (e) { + logError(e, "Get diff failed"); + throw e; + } +}; diff --git a/web/apps/auth/src/types/api.ts b/web/apps/auth/src/types/api.ts new file mode 100644 index 000000000..569df8185 --- /dev/null +++ b/web/apps/auth/src/types/api.ts @@ -0,0 +1,13 @@ +export interface AuthEntity { + id: string; + encryptedData: string | null; + header: string | null; + isDeleted: boolean; + createdAt: number; + updatedAt: number; +} + +export interface AuthKey { + encryptedKey: string; + header: string; +} diff --git a/web/apps/auth/src/types/code.ts b/web/apps/auth/src/types/code.ts new file mode 100644 index 000000000..d61a2dcd6 --- /dev/null +++ b/web/apps/auth/src/types/code.ts @@ -0,0 +1,182 @@ +import { URI } from "vscode-uri"; + +type Type = "totp" | "TOTP" | "hotp" | "HOTP"; + +type AlgorithmType = + | "sha1" + | "SHA1" + | "sha256" + | "SHA256" + | "sha512" + | "SHA512"; + +export class Code { + static readonly defaultDigits = 6; + static readonly defaultAlgo = "sha1"; + static readonly defaultPeriod = 30; + + // id for the corresponding auth entity + id?: String; + account: string; + issuer: string; + digits?: number; + period: number; + secret: string; + algorithm: AlgorithmType; + type: Type; + rawData?: string; + + constructor( + account: string, + issuer: string, + digits: number | undefined, + period: number, + secret: string, + algorithm: AlgorithmType, + type: Type, + rawData?: string, + id?: string, + ) { + this.account = account; + this.issuer = issuer; + this.digits = digits; + this.period = period; + this.secret = secret; + this.algorithm = algorithm; + this.type = type; + this.rawData = rawData; + this.id = id; + } + + static fromRawData(id: string, rawData: string): Code { + let santizedRawData = rawData + .replace(/\+/g, "%2B") + .replace(/:/g, "%3A") + .replaceAll("\r", ""); + if (santizedRawData.startsWith('"')) { + santizedRawData = santizedRawData.substring(1); + } + if (santizedRawData.endsWith('"')) { + santizedRawData = santizedRawData.substring( + 0, + santizedRawData.length - 1, + ); + } + + const uriParams = {}; + const searchParamsString = + decodeURIComponent(santizedRawData).split("?")[1]; + searchParamsString.split("&").forEach((pair) => { + const [key, value] = pair.split("="); + uriParams[key] = value; + }); + + const uri = URI.parse(santizedRawData); + let uriPath = decodeURIComponent(uri.path); + if ( + uriPath.startsWith("/otpauth://") || + uriPath.startsWith("otpauth://") + ) { + uriPath = uriPath.split("otpauth://")[1]; + } else if (uriPath.startsWith("otpauth%3A//")) { + uriPath = uriPath.split("otpauth%3A//")[1]; + } + + return new Code( + Code._getAccount(uriPath), + Code._getIssuer(uriPath, uriParams), + Code._getDigits(uriParams), + Code._getPeriod(uriParams), + Code.getSanitizedSecret(uriParams), + Code._getAlgorithm(uriParams), + Code._getType(uriPath), + rawData, + id, + ); + } + + private static _getAccount(uriPath: string): string { + try { + const path = decodeURIComponent(uriPath); + if (path.includes(":")) { + return path.split(":")[1]; + } else if (path.includes("/")) { + return path.split("/")[1]; + } + } catch (e) { + return ""; + } + } + + private static _getIssuer( + uriPath: string, + uriParams: { get?: any }, + ): string { + try { + if (uriParams["issuer"] !== undefined) { + let issuer = uriParams["issuer"]; + // This is to handle bug in the ente auth app + if (issuer.endsWith("period")) { + issuer = issuer.substring(0, issuer.length - 6); + } + return issuer; + } + let path = decodeURIComponent(uriPath); + if (path.startsWith("totp/") || path.startsWith("hotp/")) { + path = path.substring(5); + } + if (path.includes(":")) { + return path.split(":")[0]; + } else if (path.includes("-")) { + return path.split("-")[0]; + } + return path; + } catch (e) { + return ""; + } + } + + private static _getDigits(uriParams): number { + try { + return parseInt(uriParams["digits"], 10) || Code.defaultDigits; + } catch (e) { + return Code.defaultDigits; + } + } + + private static _getPeriod(uriParams): number { + try { + return parseInt(uriParams["period"], 10) || Code.defaultPeriod; + } catch (e) { + return Code.defaultPeriod; + } + } + + private static _getAlgorithm(uriParams): AlgorithmType { + try { + const algorithm = uriParams["algorithm"].toLowerCase(); + if (algorithm === "sha256") { + return algorithm; + } else if (algorithm === "sha512") { + return algorithm; + } + } catch (e) { + // nothing + } + return "sha1"; + } + + private static _getType(uriPath: string): Type { + const oauthType = uriPath.split("/")[0].substring(0); + if (oauthType.toLowerCase() === "totp") { + return "totp"; + } else if (oauthType.toLowerCase() === "hotp") { + return "hotp"; + } + throw new Error(`Unsupported format with host ${oauthType}`); + } + + static getSanitizedSecret(uriParams): string { + return uriParams["secret"].replace(/ /g, "").toUpperCase(); + } +} diff --git a/web/apps/auth/tsconfig.json b/web/apps/auth/tsconfig.json new file mode 100644 index 000000000..d9092609d --- /dev/null +++ b/web/apps/auth/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./src", + "downlevelIteration": true, + "jsx": "preserve", + "jsxImportSource": "@emotion/react", + "lib": ["dom", "dom.iterable", "esnext", "webworker"], + "noImplicitAny": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "strictNullChecks": false, + "target": "es5", + "useUnknownInCatchVariables": false + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.js", + "../../packages/shared/themes/mui-theme.d.ts" + ], + "exclude": ["node_modules", "out", ".next", "thirdparty"] +} diff --git a/web/apps/cast/.eslintrc.js b/web/apps/cast/.eslintrc.js new file mode 100644 index 000000000..b1c4c2e16 --- /dev/null +++ b/web/apps/cast/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + // When root is set to true, ESLint will stop looking for configuration files in parent directories. + // This is required here to ensure desktop picks the right eslint config, where this app is + // packaged as a submodule. + root: true, + extends: ["@ente/eslint-config"], + parser: "@typescript-eslint/parser", + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.json", + }, + ignorePatterns: [".eslintrc.js", "out"], +}; diff --git a/web/apps/cast/next.config.js b/web/apps/cast/next.config.js new file mode 100644 index 000000000..eea88bf93 --- /dev/null +++ b/web/apps/cast/next.config.js @@ -0,0 +1,3 @@ +const nextConfigBase = require("@/next/next.config.base.js"); + +module.exports = nextConfigBase; diff --git a/web/apps/cast/package.json b/web/apps/cast/package.json new file mode 100644 index 000000000..e544cd370 --- /dev/null +++ b/web/apps/cast/package.json @@ -0,0 +1,16 @@ +{ + "name": "cast", + "version": "0.0.0", + "private": true, + "dependencies": { + "@/next": "*", + "@ente/accounts": "*", + "@ente/eslint-config": "*", + "@ente/shared": "*", + "jszip": "3.10.1", + "mime-types": "^2.1.35" + }, + "devDependencies": { + "sass": "^1.69.5" + } +} diff --git a/web/apps/cast/public/favicon.ico b/web/apps/cast/public/favicon.ico new file mode 100644 index 000000000..4570eb8d9 Binary files /dev/null and b/web/apps/cast/public/favicon.ico differ diff --git a/web/apps/cast/public/images/ente.svg b/web/apps/cast/public/images/ente.svg new file mode 100644 index 000000000..33bd74256 --- /dev/null +++ b/web/apps/cast/public/images/ente.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/apps/cast/public/images/help-qrcode.webp b/web/apps/cast/public/images/help-qrcode.webp new file mode 100644 index 000000000..79cd22c99 Binary files /dev/null and b/web/apps/cast/public/images/help-qrcode.webp differ diff --git a/web/apps/cast/sentry.client.config.ts b/web/apps/cast/sentry.client.config.ts new file mode 100644 index 000000000..c43273663 --- /dev/null +++ b/web/apps/cast/sentry.client.config.ts @@ -0,0 +1,3 @@ +import { initSentry } from "@ente/shared/sentry/config/sentry.config.base"; + +initSentry("https://0f7214c7feb9b1dd2fed5db09b42fa1b@sentry.ente.io/5"); diff --git a/web/apps/cast/sentry.edge.config.ts b/web/apps/cast/sentry.edge.config.ts new file mode 100644 index 000000000..e69de29bb diff --git a/web/apps/cast/sentry.properties b/web/apps/cast/sentry.properties new file mode 100644 index 000000000..27c3a286f --- /dev/null +++ b/web/apps/cast/sentry.properties @@ -0,0 +1,6 @@ +# This file is used by the SentryWebpackPlugin to upload sourcemaps when the +# SENTRY_AUTH_TOKEN environment variable is defined. + +defaults.url = https://sentry.ente.io/ +defaults.org = ente +defaults.project = web-photos diff --git a/web/apps/cast/sentry.server.config.ts b/web/apps/cast/sentry.server.config.ts new file mode 100644 index 000000000..e69de29bb diff --git a/web/apps/cast/src/components/FilledCircleCheck/FilledCircleCheck.module.scss b/web/apps/cast/src/components/FilledCircleCheck/FilledCircleCheck.module.scss new file mode 100644 index 000000000..535a2448a --- /dev/null +++ b/web/apps/cast/src/components/FilledCircleCheck/FilledCircleCheck.module.scss @@ -0,0 +1,51 @@ +.circle { + width: 100px; + height: 100px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 50%; + overflow: hidden; + + &.animate { + animation: scaleIn 0.3s ease-in-out forwards; + } +} + +@keyframes scaleIn { + 0% { + transform: scale(0); + } + 50% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} + +.checkmark { + width: 100px; + height: 100px; + + &__circle { + fill: green; + } + + &__check { + transform-origin: 50% 50%; + stroke-dasharray: 48; + stroke-dashoffset: 48; + animation: strokeCheck 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.6s forwards; + stroke: white; + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; + } +} + +@keyframes strokeCheck { + 100% { + stroke-dashoffset: 0; + } +} diff --git a/web/apps/cast/src/components/FilledCircleCheck/index.tsx b/web/apps/cast/src/components/FilledCircleCheck/index.tsx new file mode 100644 index 000000000..cce8c935f --- /dev/null +++ b/web/apps/cast/src/components/FilledCircleCheck/index.tsx @@ -0,0 +1,35 @@ +import { useEffect, useState } from "react"; +import styles from "./FilledCircleCheck.module.scss"; // Import our CSS module + +const FilledCircleCheck = () => { + const [animate, setAnimate] = useState(false); + + useEffect(() => { + setAnimate(true); + }, []); + + return ( +
+ + + + +
+ ); +}; + +export default FilledCircleCheck; diff --git a/web/apps/cast/src/components/LargeType.tsx b/web/apps/cast/src/components/LargeType.tsx new file mode 100644 index 000000000..bb0728699 --- /dev/null +++ b/web/apps/cast/src/components/LargeType.tsx @@ -0,0 +1,66 @@ +const colourPool = [ + "#87CEFA", // Light Blue + "#90EE90", // Light Green + "#F08080", // Light Coral + "#FFFFE0", // Light Yellow + "#FFB6C1", // Light Pink + "#E0FFFF", // Light Cyan + "#FAFAD2", // Light Goldenrod + "#87CEFA", // Light Sky Blue + "#D3D3D3", // Light Gray + "#B0C4DE", // Light Steel Blue + "#FFA07A", // Light Salmon + "#20B2AA", // Light Sea Green + "#778899", // Light Slate Gray + "#AFEEEE", // Light Turquoise + "#7A58C1", // Light Violet + "#FFA500", // Light Orange + "#A0522D", // Light Brown + "#9370DB", // Light Purple + "#008080", // Light Teal + "#808000", // Light Olive +]; + +export default function LargeType({ chars }: { chars: string[] }) { + return ( + + {chars.map((char, i) => ( + + + {char} + + + {i + 1} + + + ))} +
+ ); +} diff --git a/web/apps/cast/src/components/PairedSuccessfullyOverlay.tsx b/web/apps/cast/src/components/PairedSuccessfullyOverlay.tsx new file mode 100644 index 000000000..845416fed --- /dev/null +++ b/web/apps/cast/src/components/PairedSuccessfullyOverlay.tsx @@ -0,0 +1,46 @@ +import FilledCircleCheck from "./FilledCircleCheck"; + +export default function PairedSuccessfullyOverlay() { + return ( +
+
+ +

+ Pairing Complete +

+

+ We're preparing your album. +
This should only take a few seconds. +

+
+
+ ); +} diff --git a/web/apps/cast/src/components/Theatre/PhotoAuditorium.tsx b/web/apps/cast/src/components/Theatre/PhotoAuditorium.tsx new file mode 100644 index 000000000..dc5a18f0b --- /dev/null +++ b/web/apps/cast/src/components/Theatre/PhotoAuditorium.tsx @@ -0,0 +1,95 @@ +import { SlideshowContext } from "pages/slideshow"; +import { useContext, useEffect, useState } from "react"; + +export default function PhotoAuditorium({ + url, + nextSlideUrl, +}: { + url: string; + nextSlideUrl: string; +}) { + const { showNextSlide } = useContext(SlideshowContext); + + const [showPreloadedNextSlide, setShowPreloadedNextSlide] = useState(false); + const [nextSlidePrerendered, setNextSlidePrerendered] = useState(false); + const [prerenderTime, setPrerenderTime] = useState(null); + + useEffect(() => { + let timeout: NodeJS.Timeout; + let timeout2: NodeJS.Timeout; + + if (nextSlidePrerendered) { + const elapsedTime = prerenderTime ? Date.now() - prerenderTime : 0; + const delayTime = Math.max(5000 - elapsedTime, 0); + + if (elapsedTime >= 5000) { + setShowPreloadedNextSlide(true); + } else { + timeout = setTimeout(() => { + setShowPreloadedNextSlide(true); + }, delayTime); + } + + if (showNextSlide) { + timeout2 = setTimeout(() => { + showNextSlide(); + setNextSlidePrerendered(false); + setPrerenderTime(null); + setShowPreloadedNextSlide(false); + }, delayTime); + } + } + + return () => { + if (timeout) clearTimeout(timeout); + if (timeout2) clearTimeout(timeout2); + }; + }, [nextSlidePrerendered, showNextSlide, prerenderTime]); + + return ( +
+
+ + { + setNextSlidePrerendered(true); + setPrerenderTime(Date.now()); + }} + /> +
+
+ ); +} diff --git a/web/apps/cast/src/components/Theatre/VideoAuditorium.tsx b/web/apps/cast/src/components/Theatre/VideoAuditorium.tsx new file mode 100644 index 000000000..2bf5ed490 --- /dev/null +++ b/web/apps/cast/src/components/Theatre/VideoAuditorium.tsx @@ -0,0 +1,55 @@ +import mime from "mime-types"; +import { SlideshowContext } from "pages/slideshow"; +import { useContext, useEffect, useRef } from "react"; + +export default function VideoAuditorium({ + name, + url, +}: { + name: string; + url: string; +}) { + const { showNextSlide } = useContext(SlideshowContext); + + const videoRef = useRef(null); + + useEffect(() => { + attemptPlay(); + }, [url, videoRef]); + + const attemptPlay = async () => { + if (videoRef.current) { + try { + await videoRef.current.play(); + } catch { + showNextSlide(); + } + } + }; + + return ( +
+ +
+ ); +} diff --git a/web/apps/cast/src/components/Theatre/index.tsx b/web/apps/cast/src/components/Theatre/index.tsx new file mode 100644 index 000000000..f7cac9c54 --- /dev/null +++ b/web/apps/cast/src/components/Theatre/index.tsx @@ -0,0 +1,30 @@ +import { FILE_TYPE } from "constants/file"; +import PhotoAuditorium from "./PhotoAuditorium"; +// import VideoAuditorium from './VideoAuditorium'; + +interface fileProp { + fileName: string; + fileURL: string; + type: FILE_TYPE; +} + +interface IProps { + file1: fileProp; + file2: fileProp; +} + +export default function Theatre(props: IProps) { + switch (props.file1.type && props.file2.type) { + case FILE_TYPE.IMAGE: + return ( + + ); + // case FILE_TYPE.VIDEO: + // return ( + // + // ); + } +} diff --git a/web/apps/cast/src/components/TimerBar.tsx b/web/apps/cast/src/components/TimerBar.tsx new file mode 100644 index 000000000..7f4d02171 --- /dev/null +++ b/web/apps/cast/src/components/TimerBar.tsx @@ -0,0 +1,30 @@ +import { useEffect, useState } from "react"; + +export default function TimerBar({ percentage }: { percentage: number }) { + const okColor = "#75C157"; + const warningColor = "#FFC000"; + const lateColor = "#FF0000"; + + const [backgroundColor, setBackgroundColor] = useState(okColor); + + useEffect(() => { + if (percentage >= 40) { + setBackgroundColor(okColor); + } else if (percentage >= 20) { + setBackgroundColor(warningColor); + } else { + setBackgroundColor(lateColor); + } + }, [percentage]); + + return ( +
+ ); +} diff --git a/web/apps/cast/src/constants/api.ts b/web/apps/cast/src/constants/api.ts new file mode 100644 index 000000000..17571f7f3 --- /dev/null +++ b/web/apps/cast/src/constants/api.ts @@ -0,0 +1 @@ +export const REQUEST_BATCH_SIZE = 1000; diff --git a/web/apps/cast/src/constants/apps.ts b/web/apps/cast/src/constants/apps.ts new file mode 100644 index 000000000..f8c3f9657 --- /dev/null +++ b/web/apps/cast/src/constants/apps.ts @@ -0,0 +1,56 @@ +import { getAlbumsURL } from "@ente/shared/network/api"; +import { runningInBrowser } from "@ente/shared/platform"; +import { PAGES } from "constants/pages"; + +export enum APPS { + PHOTOS = "PHOTOS", + AUTH = "AUTH", + ALBUMS = "ALBUMS", +} + +export const ALLOWED_APP_PAGES = new Map([ + [APPS.ALBUMS, [PAGES.SHARED_ALBUMS, PAGES.ROOT]], + [ + APPS.AUTH, + [ + PAGES.ROOT, + PAGES.LOGIN, + PAGES.SIGNUP, + PAGES.VERIFY, + PAGES.CREDENTIALS, + PAGES.RECOVER, + PAGES.CHANGE_PASSWORD, + PAGES.GENERATE, + PAGES.AUTH, + PAGES.TWO_FACTOR_VERIFY, + PAGES.TWO_FACTOR_RECOVER, + ], + ], +]); + +export const CLIENT_PACKAGE_NAMES = new Map([ + [APPS.ALBUMS, "io.ente.albums.web"], + [APPS.PHOTOS, "io.ente.photos.web"], + [APPS.AUTH, "io.ente.auth.web"], +]); + +export const getAppNameAndTitle = () => { + if (!runningInBrowser()) { + return {}; + } + const currentURL = new URL(window.location.href); + const albumsURL = new URL(getAlbumsURL()); + if (currentURL.origin === albumsURL.origin) { + return { name: APPS.ALBUMS, title: "ente Photos" }; + } else { + return { name: APPS.PHOTOS, title: "ente Photos" }; + } +}; + +export const getAppTitle = () => { + return getAppNameAndTitle().title; +}; + +export const getAppName = () => { + return getAppNameAndTitle().name; +}; diff --git a/web/apps/cast/src/constants/cache.ts b/web/apps/cast/src/constants/cache.ts new file mode 100644 index 000000000..cf88f63a2 --- /dev/null +++ b/web/apps/cast/src/constants/cache.ts @@ -0,0 +1,5 @@ +export enum CACHES { + THUMBS = "thumbs", + FACE_CROPS = "face-crops", + FILES = "files", +} diff --git a/web/apps/cast/src/constants/collection.ts b/web/apps/cast/src/constants/collection.ts new file mode 100644 index 000000000..cc2c00052 --- /dev/null +++ b/web/apps/cast/src/constants/collection.ts @@ -0,0 +1,100 @@ +export const ARCHIVE_SECTION = -1; +export const TRASH_SECTION = -2; +export const DUMMY_UNCATEGORIZED_COLLECTION = -3; +export const HIDDEN_ITEMS_SECTION = -4; +export const ALL_SECTION = 0; +export const DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME = "Hidden"; + +export enum CollectionType { + folder = "folder", + favorites = "favorites", + album = "album", + uncategorized = "uncategorized", +} + +export enum CollectionSummaryType { + folder = "folder", + favorites = "favorites", + album = "album", + archive = "archive", + trash = "trash", + uncategorized = "uncategorized", + all = "all", + outgoingShare = "outgoingShare", + incomingShareViewer = "incomingShareViewer", + incomingShareCollaborator = "incomingShareCollaborator", + sharedOnlyViaLink = "sharedOnlyViaLink", + archived = "archived", + defaultHidden = "defaultHidden", + hiddenItems = "hiddenItems", + pinned = "pinned", +} +export enum COLLECTION_LIST_SORT_BY { + NAME, + CREATION_TIME_ASCENDING, + UPDATION_TIME_DESCENDING, +} + +export const COLLECTION_SHARE_DEFAULT_VALID_DURATION = + 10 * 24 * 60 * 60 * 1000 * 1000; +export const COLLECTION_SHARE_DEFAULT_DEVICE_LIMIT = 4; + +export const COLLECTION_SORT_ORDER = new Map([ + [CollectionSummaryType.all, 0], + [CollectionSummaryType.hiddenItems, 0], + [CollectionSummaryType.uncategorized, 1], + [CollectionSummaryType.favorites, 2], + [CollectionSummaryType.pinned, 3], + [CollectionSummaryType.album, 4], + [CollectionSummaryType.folder, 4], + [CollectionSummaryType.incomingShareViewer, 4], + [CollectionSummaryType.incomingShareCollaborator, 4], + [CollectionSummaryType.outgoingShare, 4], + [CollectionSummaryType.sharedOnlyViaLink, 4], + [CollectionSummaryType.archived, 4], + [CollectionSummaryType.archive, 5], + [CollectionSummaryType.trash, 6], + [CollectionSummaryType.defaultHidden, 7], +]); + +export const SYSTEM_COLLECTION_TYPES = new Set([ + CollectionSummaryType.all, + CollectionSummaryType.archive, + CollectionSummaryType.trash, + CollectionSummaryType.uncategorized, + CollectionSummaryType.hiddenItems, + CollectionSummaryType.defaultHidden, +]); + +export const ADD_TO_NOT_ALLOWED_COLLECTION = new Set([ + CollectionSummaryType.all, + CollectionSummaryType.archive, + CollectionSummaryType.incomingShareViewer, + CollectionSummaryType.trash, + CollectionSummaryType.uncategorized, + CollectionSummaryType.defaultHidden, + CollectionSummaryType.hiddenItems, +]); + +export const MOVE_TO_NOT_ALLOWED_COLLECTION = new Set([ + CollectionSummaryType.all, + CollectionSummaryType.archive, + CollectionSummaryType.incomingShareViewer, + CollectionSummaryType.incomingShareCollaborator, + CollectionSummaryType.trash, + CollectionSummaryType.uncategorized, + CollectionSummaryType.defaultHidden, + CollectionSummaryType.hiddenItems, +]); + +export const OPTIONS_NOT_HAVING_COLLECTION_TYPES = new Set([ + CollectionSummaryType.all, + CollectionSummaryType.archive, +]); + +export const HIDE_FROM_COLLECTION_BAR_TYPES = new Set([ + CollectionSummaryType.trash, + CollectionSummaryType.archive, + CollectionSummaryType.uncategorized, + CollectionSummaryType.defaultHidden, +]); diff --git a/web/apps/cast/src/constants/ffmpeg.ts b/web/apps/cast/src/constants/ffmpeg.ts new file mode 100644 index 000000000..9ecc41eb5 --- /dev/null +++ b/web/apps/cast/src/constants/ffmpeg.ts @@ -0,0 +1,3 @@ +export const INPUT_PATH_PLACEHOLDER = "INPUT"; +export const FFMPEG_PLACEHOLDER = "FFMPEG"; +export const OUTPUT_PATH_PLACEHOLDER = "OUTPUT"; diff --git a/web/apps/cast/src/constants/file.ts b/web/apps/cast/src/constants/file.ts new file mode 100644 index 000000000..46065136c --- /dev/null +++ b/web/apps/cast/src/constants/file.ts @@ -0,0 +1,43 @@ +export const MIN_EDITED_CREATION_TIME = new Date(1800, 0, 1); +export const MAX_EDITED_CREATION_TIME = new Date(); + +export const MAX_EDITED_FILE_NAME_LENGTH = 100; +export const MAX_CAPTION_SIZE = 5000; + +export const TYPE_HEIC = "heic"; +export const TYPE_HEIF = "heif"; +export const TYPE_JPEG = "jpeg"; +export const TYPE_JPG = "jpg"; + +export enum FILE_TYPE { + IMAGE, + VIDEO, + LIVE_PHOTO, + OTHERS, +} + +export const RAW_FORMATS = [ + "heic", + "rw2", + "tiff", + "arw", + "cr3", + "cr2", + "raf", + "nef", + "psd", + "dng", + "tif", +]; +export const SUPPORTED_RAW_FORMATS = [ + "heic", + "rw2", + "tiff", + "arw", + "cr3", + "cr2", + "nef", + "psd", + "dng", + "tif", +]; diff --git a/web/apps/cast/src/constants/gallery.ts b/web/apps/cast/src/constants/gallery.ts new file mode 100644 index 000000000..9865d2e80 --- /dev/null +++ b/web/apps/cast/src/constants/gallery.ts @@ -0,0 +1,15 @@ +export const GAP_BTW_TILES = 4; +export const DATE_CONTAINER_HEIGHT = 48; +export const SIZE_AND_COUNT_CONTAINER_HEIGHT = 72; +export const IMAGE_CONTAINER_MAX_HEIGHT = 180; +export const IMAGE_CONTAINER_MAX_WIDTH = 180; +export const MIN_COLUMNS = 4; +export const SPACE_BTW_DATES = 44; +export const SPACE_BTW_DATES_TO_IMAGE_CONTAINER_WIDTH_RATIO = 0.244; + +export enum PLAN_PERIOD { + MONTH = "month", + YEAR = "year", +} + +export const SYNC_INTERVAL_IN_MICROSECONDS = 1000 * 60 * 5; // 5 minutes diff --git a/web/apps/cast/src/constants/pages.ts b/web/apps/cast/src/constants/pages.ts new file mode 100644 index 000000000..af532801d --- /dev/null +++ b/web/apps/cast/src/constants/pages.ts @@ -0,0 +1,20 @@ +export enum PAGES { + CHANGE_EMAIL = "/change-email", + CHANGE_PASSWORD = "/change-password", + CREDENTIALS = "/credentials", + GALLERY = "/gallery", + GENERATE = "/generate", + LOGIN = "/login", + RECOVER = "/recover", + SIGNUP = "/signup", + TWO_FACTOR_SETUP = "/two-factor/setup", + TWO_FACTOR_VERIFY = "/two-factor/verify", + TWO_FACTOR_RECOVER = "/two-factor/recover", + VERIFY = "/verify", + ROOT = "/", + SHARED_ALBUMS = "/shared-albums", + // ML_DEBUG = '/ml-debug', + DEDUPLICATE = "/deduplicate", + // AUTH page is used to show (auth)enticator codes + AUTH = "/auth", +} diff --git a/web/apps/cast/src/constants/upload.ts b/web/apps/cast/src/constants/upload.ts new file mode 100644 index 000000000..bc6006e46 --- /dev/null +++ b/web/apps/cast/src/constants/upload.ts @@ -0,0 +1,142 @@ +import { ENCRYPTION_CHUNK_SIZE } from "@ente/shared/crypto/constants"; +import { FILE_TYPE } from "constants/file"; +import { + FileTypeInfo, + ImportSuggestion, + Location, + ParsedExtractedMetadata, +} from "types/upload"; + +// list of format that were missed by type-detection for some files. +export const WHITELISTED_FILE_FORMATS: FileTypeInfo[] = [ + { fileType: FILE_TYPE.IMAGE, exactType: "jpeg", mimeType: "image/jpeg" }, + { fileType: FILE_TYPE.IMAGE, exactType: "jpg", mimeType: "image/jpeg" }, + { fileType: FILE_TYPE.VIDEO, exactType: "webm", mimeType: "video/webm" }, + { fileType: FILE_TYPE.VIDEO, exactType: "mod", mimeType: "video/mpeg" }, + { fileType: FILE_TYPE.VIDEO, exactType: "mp4", mimeType: "video/mp4" }, + { fileType: FILE_TYPE.IMAGE, exactType: "gif", mimeType: "image/gif" }, + { fileType: FILE_TYPE.VIDEO, exactType: "dv", mimeType: "video/x-dv" }, + { + fileType: FILE_TYPE.VIDEO, + exactType: "wmv", + mimeType: "video/x-ms-asf", + }, + { + fileType: FILE_TYPE.VIDEO, + exactType: "hevc", + mimeType: "video/hevc", + }, + { + fileType: FILE_TYPE.IMAGE, + exactType: "raf", + mimeType: "image/x-fuji-raf", + }, + { + fileType: FILE_TYPE.IMAGE, + exactType: "orf", + mimeType: "image/x-olympus-orf", + }, + + { + fileType: FILE_TYPE.IMAGE, + exactType: "crw", + mimeType: "image/x-canon-crw", + }, +]; + +export const KNOWN_NON_MEDIA_FORMATS = ["xmp", "html", "txt"]; + +export const EXIFLESS_FORMATS = ["gif", "bmp"]; + +// this is the chunk size of the un-encrypted file which is read and encrypted before uploading it as a single part. +export const MULTIPART_PART_SIZE = 20 * 1024 * 1024; + +export const FILE_READER_CHUNK_SIZE = ENCRYPTION_CHUNK_SIZE; + +export const FILE_CHUNKS_COMBINED_FOR_A_UPLOAD_PART = Math.floor( + MULTIPART_PART_SIZE / FILE_READER_CHUNK_SIZE, +); + +export const RANDOM_PERCENTAGE_PROGRESS_FOR_PUT = () => 90 + 10 * Math.random(); + +export const NULL_LOCATION: Location = { latitude: null, longitude: null }; + +export enum UPLOAD_STAGES { + START, + READING_GOOGLE_METADATA_FILES, + EXTRACTING_METADATA, + UPLOADING, + CANCELLING, + FINISH, +} + +export enum UPLOAD_STRATEGY { + SINGLE_COLLECTION, + COLLECTION_PER_FOLDER, +} + +export enum UPLOAD_RESULT { + FAILED, + ALREADY_UPLOADED, + UNSUPPORTED, + BLOCKED, + TOO_LARGE, + LARGER_THAN_AVAILABLE_STORAGE, + UPLOADED, + UPLOADED_WITH_STATIC_THUMBNAIL, + ADDED_SYMLINK, +} + +export enum PICKED_UPLOAD_TYPE { + FILES = "files", + FOLDERS = "folders", + ZIPS = "zips", +} + +export const MAX_FILE_SIZE_SUPPORTED = 4 * 1024 * 1024 * 1024; // 4 GB + +export const LIVE_PHOTO_ASSET_SIZE_LIMIT = 20 * 1024 * 1024; // 20MB + +export const NULL_EXTRACTED_METADATA: ParsedExtractedMetadata = { + location: NULL_LOCATION, + creationTime: null, + width: null, + height: null, +}; + +export const A_SEC_IN_MICROSECONDS = 1e6; + +export const DEFAULT_IMPORT_SUGGESTION: ImportSuggestion = { + rootFolderName: "", + hasNestedFolders: false, + hasRootLevelFileWithFolder: false, +}; + +export const BLACK_THUMBNAIL_BASE64 = + "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEB" + + "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQ" + + "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARC" + + "ACWASwDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUF" + + "BAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk" + + "6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztL" + + "W2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAA" + + "AAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVY" + + "nLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImK" + + "kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oAD" + + "AMBAAIRAxEAPwD/AD/6ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA" + + "CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg" + + "AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAC" + + "gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo" + + "AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg" + + "AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg" + + "AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA" + + "CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA" + + "CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA" + + "KACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg" + + "AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo" + + "AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA" + + "CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAK" + + "ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA" + + "KACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo" + + "AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo" + + "AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD/9k="; diff --git a/web/apps/cast/src/constants/urls.ts b/web/apps/cast/src/constants/urls.ts new file mode 100644 index 000000000..7ec194dea --- /dev/null +++ b/web/apps/cast/src/constants/urls.ts @@ -0,0 +1,19 @@ +export const ENTE_WEBSITE_LINK = "https://ente.io"; + +export const ML_BLOG_LINK = "https://ente.io/blog/desktop-ml-beta"; + +export const FACE_SEARCH_PRIVACY_POLICY_LINK = + "https://ente.io/privacy#8-biometric-information-privacy-policy"; + +export const SUPPORT_EMAIL = "support@ente.io"; + +export const APP_DOWNLOAD_URL = "https://ente.io/download/desktop"; + +export const FEEDBACK_EMAIL = "feedback@ente.io"; + +export const DELETE_ACCOUNT_EMAIL = "account-deletion@ente.io"; + +export const WEB_ROADMAP_URL = "https://github.com/ente-io/photos-web/issues"; + +export const DESKTOP_ROADMAP_URL = + "https://github.com/ente-io/photos-desktop/issues"; diff --git a/web/apps/cast/src/pages/_app.tsx b/web/apps/cast/src/pages/_app.tsx new file mode 100644 index 000000000..8874d956d --- /dev/null +++ b/web/apps/cast/src/pages/_app.tsx @@ -0,0 +1,22 @@ +import { APPS } from "@ente/shared/apps/constants"; +import { getTheme } from "@ente/shared/themes"; +import { THEME_COLOR } from "@ente/shared/themes/constants"; +import { CssBaseline, ThemeProvider } from "@mui/material"; +import type { AppProps } from "next/app"; +import "styles/global.css"; + +export default function App({ Component, pageProps }: AppProps) { + return ( + + + +
+ +
+
+ ); +} diff --git a/web/apps/cast/src/pages/_document.tsx b/web/apps/cast/src/pages/_document.tsx new file mode 100644 index 000000000..b038dc04e --- /dev/null +++ b/web/apps/cast/src/pages/_document.tsx @@ -0,0 +1,27 @@ +import { Head, Html, Main, NextScript } from "next/document"; + +export default function Document() { + return ( + + + +
+ + + + ); +} diff --git a/web/apps/cast/src/pages/index.tsx b/web/apps/cast/src/pages/index.tsx new file mode 100644 index 000000000..dcdee782b --- /dev/null +++ b/web/apps/cast/src/pages/index.tsx @@ -0,0 +1,249 @@ +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { boxSealOpen, toB64 } from "@ente/shared/crypto/internal/libsodium"; +import { useCastReceiver } from "@ente/shared/hooks/useCastReceiver"; +import { addLogLine } from "@ente/shared/logging"; +import castGateway from "@ente/shared/network/cast"; +import LargeType from "components/LargeType"; +import _sodium from "libsodium-wrappers"; +import { useRouter } from "next/router"; +import { useEffect, useState } from "react"; +import { storeCastData } from "services/cast/castService"; + +// Function to generate cryptographically secure digits +const generateSecureData = (length: number): Uint8Array => { + const array = new Uint8Array(length); + window.crypto.getRandomValues(array); + // Modulo operation to ensure each byte is a single digit + for (let i = 0; i < length; i++) { + array[i] = array[i] % 10; + } + return array; +}; + +const convertDataToDecimalString = (data: Uint8Array): string => { + let decimalString = ""; + for (let i = 0; i < data.length; i++) { + decimalString += data[i].toString(); // No need to pad, as each value is a single digit + } + return decimalString; +}; + +export default function PairingMode() { + const [digits, setDigits] = useState([]); + const [publicKeyB64, setPublicKeyB64] = useState(""); + const [privateKeyB64, setPrivateKeyB64] = useState(""); + const [codePending, setCodePending] = useState(true); + const [isCastReady, setIsCastReady] = useState(false); + + const { cast } = useCastReceiver(); + + useEffect(() => { + init(); + }, []); + + useEffect(() => { + if (!cast) return; + if (isCastReady) return; + const context = cast.framework.CastReceiverContext.getInstance(); + + try { + const options = new cast.framework.CastReceiverOptions(); + options.customNamespaces = Object.assign({}); + options.customNamespaces["urn:x-cast:pair-request"] = + cast.framework.system.MessageType.JSON; + + options.disableIdleTimeout = true; + + context.addCustomMessageListener( + "urn:x-cast:pair-request", + messageReceiveHandler, + ); + context.start(options); + } catch (e) { + addLogLine(e, "failed to create cast context"); + } + setIsCastReady(true); + return () => { + context.stop(); + }; + }, [cast, isCastReady]); + + const messageReceiveHandler = (message: { + type: string; + senderId: string; + data: any; + }) => { + cast.framework.CastReceiverContext.getInstance().sendCustomMessage( + "urn:x-cast:pair-request", + message.senderId, + { + code: digits.join(""), + }, + ); + }; + + const init = async () => { + const data = generateSecureData(6); + setDigits(convertDataToDecimalString(data).split("")); + const keypair = await generateKeyPair(); + setPublicKeyB64(await toB64(keypair.publicKey)); + setPrivateKeyB64(await toB64(keypair.privateKey)); + }; + + const generateKeyPair = async () => { + await _sodium.ready; + + const keypair = _sodium.crypto_box_keypair(); + + return keypair; + }; + + const pollForCastData = async () => { + if (codePending) { + return; + } + // see if we were acknowledged on the client. + // the client will send us the encrypted payload using our public key that we advertised. + // then, we can decrypt this and store all the necessary info locally so we can play the collection slideshow. + let devicePayload = ""; + try { + const encDastData = await castGateway.getCastData( + `${digits.join("")}`, + ); + if (!encDastData) return; + devicePayload = encDastData; + } catch (e) { + setCodePending(true); + init(); + return; + } + + const decryptedPayload = await boxSealOpen( + devicePayload, + publicKeyB64, + privateKeyB64, + ); + + const decryptedPayloadObj = JSON.parse(atob(decryptedPayload)); + + return decryptedPayloadObj; + }; + + const advertisePublicKey = async (publicKeyB64: string) => { + // hey client, we exist! + try { + await castGateway.registerDevice( + `${digits.join("")}`, + publicKeyB64, + ); + setCodePending(false); + } catch (e) { + // schedule re-try after 5 seconds + setTimeout(() => { + init(); + }, 5000); + return; + } + }; + + const router = useRouter(); + + useEffect(() => { + if (digits.length < 1 || !publicKeyB64 || !privateKeyB64) return; + + const interval = setInterval(async () => { + const data = await pollForCastData(); + if (!data) return; + storeCastData(data); + await router.push("/slideshow"); + }, 1000); + + return () => { + clearInterval(interval); + }; + }, [digits, publicKeyB64, privateKeyB64, codePending]); + + useEffect(() => { + if (!publicKeyB64) return; + advertisePublicKey(publicKeyB64); + }, [publicKeyB64]); + + return ( + <> +
+
+ +

+ Enter this code on ente to pair this TV +

+
+ {codePending ? ( + + ) : ( + <> + + + )} +
+

+ Visit{" "} + + ente.io/cast + {" "} + for help +

+
+ +
+
+
+ + ); +} diff --git a/web/apps/cast/src/pages/slideshow.tsx b/web/apps/cast/src/pages/slideshow.tsx new file mode 100644 index 000000000..a49d497de --- /dev/null +++ b/web/apps/cast/src/pages/slideshow.tsx @@ -0,0 +1,186 @@ +import { logError } from "@ente/shared/sentry"; +import PairedSuccessfullyOverlay from "components/PairedSuccessfullyOverlay"; +import Theatre from "components/Theatre"; +import { FILE_TYPE } from "constants/file"; +import { useRouter } from "next/router"; +import { createContext, useEffect, useState } from "react"; +import { + getCastCollection, + getLocalFiles, + syncPublicFiles, +} from "services/cast/castService"; +import { Collection } from "types/collection"; +import { EnteFile } from "types/file"; +import { getPreviewableImage, isRawFileFromFileName } from "utils/file"; + +export const SlideshowContext = createContext<{ + showNextSlide: () => void; +}>(null); + +const renderableFileURLCache = new Map(); + +export default function Slideshow() { + const [collectionFiles, setCollectionFiles] = useState([]); + + const [currentFile, setCurrentFile] = useState( + undefined, + ); + const [nextFile, setNextFile] = useState(undefined); + + const [loading, setLoading] = useState(true); + const [castToken, setCastToken] = useState(""); + const [castCollection, setCastCollection] = useState< + Collection | undefined + >(undefined); + + const syncCastFiles = async (token: string) => { + try { + const castToken = window.localStorage.getItem("castToken"); + const requestedCollectionKey = + window.localStorage.getItem("collectionKey"); + const collection = await getCastCollection( + castToken, + requestedCollectionKey, + ); + if ( + castCollection === undefined || + castCollection.updationTime !== collection.updationTime + ) { + setCastCollection(collection); + await syncPublicFiles(token, collection, () => {}); + const files = await getLocalFiles(String(collection.id)); + setCollectionFiles( + files.filter((file) => isFileEligibleForCast(file)), + ); + } + } catch (e) { + logError(e, "error during sync"); + router.push("/"); + } + }; + + const init = async () => { + try { + const castToken = window.localStorage.getItem("castToken"); + setCastToken(castToken); + } catch (e) { + logError(e, "error during sync"); + router.push("/"); + } + }; + + useEffect(() => { + if (castToken) { + const intervalId = setInterval(() => { + syncCastFiles(castToken); + }, 5000); + + return () => clearInterval(intervalId); + } + }, [castToken]); + + const isFileEligibleForCast = (file: EnteFile) => { + const fileType = file.metadata.fileType; + if (fileType !== FILE_TYPE.IMAGE && fileType !== FILE_TYPE.LIVE_PHOTO) { + return false; + } + + const fileSizeLimit = 100 * 1024 * 1024; + + if (file.info.fileSize > fileSizeLimit) { + return false; + } + + const name = file.metadata.title; + + if (fileType === FILE_TYPE.IMAGE) { + if (isRawFileFromFileName(name)) { + return false; + } + } + + return true; + }; + + const router = useRouter(); + + useEffect(() => { + init(); + }, []); + + useEffect(() => { + if (collectionFiles.length < 1) return; + showNextSlide(); + }, [collectionFiles]); + + const showNextSlide = () => { + const currentIndex = collectionFiles.findIndex( + (file) => file.id === currentFile?.id, + ); + + const nextIndex = (currentIndex + 1) % collectionFiles.length; + const nextNextIndex = (nextIndex + 1) % collectionFiles.length; + + const nextFile = collectionFiles[nextIndex]; + const nextNextFile = collectionFiles[nextNextIndex]; + + setCurrentFile(nextFile); + setNextFile(nextNextFile); + }; + + const [renderableFileURL, setRenderableFileURL] = useState(""); + + const getRenderableFileURL = async () => { + if (!currentFile) return; + + const cacheValue = renderableFileURLCache.get(currentFile.id); + if (cacheValue) { + setRenderableFileURL(cacheValue); + setLoading(false); + return; + } + + try { + const blob = await getPreviewableImage( + currentFile as EnteFile, + castToken, + ); + + const url = URL.createObjectURL(blob); + + renderableFileURLCache.set(currentFile?.id, url); + + setRenderableFileURL(url); + } catch (e) { + return; + } finally { + setLoading(false); + } + }; + + useEffect(() => { + if (currentFile) { + getRenderableFileURL(); + } + }, [currentFile]); + + return ( + <> + + + + {loading && } + + ); +} diff --git a/web/apps/cast/src/services/InMemoryStore.ts b/web/apps/cast/src/services/InMemoryStore.ts new file mode 100644 index 000000000..ded73faf0 --- /dev/null +++ b/web/apps/cast/src/services/InMemoryStore.ts @@ -0,0 +1,32 @@ +export enum MS_KEYS { + OPT_OUT_OF_CRASH_REPORTS = "optOutOfCrashReports", + SRP_CONFIGURE_IN_PROGRESS = "srpConfigureInProgress", + REDIRECT_URL = "redirectUrl", +} + +type StoreType = Map, any>; + +class InMemoryStore { + private store: StoreType = new Map(); + + get(key: MS_KEYS) { + return this.store.get(key); + } + + set(key: MS_KEYS, value: any) { + this.store.set(key, value); + } + + delete(key: MS_KEYS) { + this.store.delete(key); + } + + has(key: MS_KEYS) { + return this.store.has(key); + } + clear() { + this.store.clear(); + } +} + +export default new InMemoryStore(); diff --git a/web/apps/cast/src/services/cache/cacheStorageFactory.ts b/web/apps/cast/src/services/cache/cacheStorageFactory.ts new file mode 100644 index 000000000..fd979e2f9 --- /dev/null +++ b/web/apps/cast/src/services/cache/cacheStorageFactory.ts @@ -0,0 +1,41 @@ +import { LimitedCacheStorage } from "types/cache/index"; +// import { ElectronCacheStorage } from 'services/electron/cache'; +// import { runningInElectron, runningInWorker } from 'utils/common'; +// import { WorkerElectronCacheStorageService } from 'services/workerElectronCache/service'; + +class cacheStorageFactory { + // workerElectronCacheStorageServiceInstance: WorkerElectronCacheStorageService; + getCacheStorage(): LimitedCacheStorage { + // if (runningInElectron()) { + // if (runningInWorker()) { + // if (!this.workerElectronCacheStorageServiceInstance) { + // // this.workerElectronCacheStorageServiceInstance = + // // new WorkerElectronCacheStorageService(); + // } + // return this.workerElectronCacheStorageServiceInstance; + // } else { + // // return ElectronCacheStorage; + // } + // } else { + return transformBrowserCacheStorageToLimitedCacheStorage(caches); + // } + } +} + +export const CacheStorageFactory = new cacheStorageFactory(); + +function transformBrowserCacheStorageToLimitedCacheStorage( + caches: CacheStorage, +): LimitedCacheStorage { + return { + async open(cacheName) { + const cache = await caches.open(cacheName); + return { + match: cache.match.bind(cache), + put: cache.put.bind(cache), + delete: cache.delete.bind(cache), + }; + }, + delete: caches.delete.bind(caches), + }; +} diff --git a/web/apps/cast/src/services/cache/cacheStorageService.ts b/web/apps/cast/src/services/cache/cacheStorageService.ts new file mode 100644 index 000000000..391aefb55 --- /dev/null +++ b/web/apps/cast/src/services/cache/cacheStorageService.ts @@ -0,0 +1,33 @@ +import { logError } from "@ente/shared/sentry"; +import { CacheStorageFactory } from "./cacheStorageFactory"; + +const SecurityError = "SecurityError"; +const INSECURE_OPERATION = "The operation is insecure."; +async function openCache(cacheName: string) { + try { + return await CacheStorageFactory.getCacheStorage().open(cacheName); + } catch (e) { + // ignoring insecure operation error, as it is thrown in incognito mode in firefox + if (e.name === SecurityError && e.message === INSECURE_OPERATION) { + // no-op + } else { + // log and ignore, we don't want to break the caller flow, when cache is not available + logError(e, "openCache failed"); + } + } +} +async function deleteCache(cacheName: string) { + try { + return await CacheStorageFactory.getCacheStorage().delete(cacheName); + } catch (e) { + // ignoring insecure operation error, as it is thrown in incognito mode in firefox + if (e.name === SecurityError && e.message === INSECURE_OPERATION) { + // no-op + } else { + // log and ignore, we don't want to break the caller flow, when cache is not available + logError(e, "deleteCache failed"); + } + } +} + +export const CacheStorageService = { open: openCache, delete: deleteCache }; diff --git a/web/apps/cast/src/services/cast/castService.ts b/web/apps/cast/src/services/cast/castService.ts new file mode 100644 index 000000000..0f8b368a5 --- /dev/null +++ b/web/apps/cast/src/services/cast/castService.ts @@ -0,0 +1,305 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { CustomError, parseSharingErrorCodes } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import localForage from "@ente/shared/storage/localForage"; + +import { Collection, CollectionPublicMagicMetadata } from "types/collection"; +import { EncryptedEnteFile, EnteFile } from "types/file"; +import { decryptFile, mergeMetadata, sortFiles } from "utils/file"; + +export interface SavedCollectionFiles { + collectionLocalID: string; + files: EnteFile[]; +} +const ENDPOINT = getEndpoint(); +const COLLECTION_FILES_TABLE = "collection-files"; +const COLLECTIONS_TABLE = "collections"; + +const getLastSyncKey = (collectionUID: string) => `${collectionUID}-time`; + +export const getLocalFiles = async ( + collectionUID: string, +): Promise => { + const localSavedcollectionFiles = + (await localForage.getItem( + COLLECTION_FILES_TABLE, + )) || []; + const matchedCollection = localSavedcollectionFiles.find( + (item) => item.collectionLocalID === collectionUID, + ); + return matchedCollection?.files || []; +}; + +const savecollectionFiles = async ( + collectionUID: string, + files: EnteFile[], +) => { + const collectionFiles = + (await localForage.getItem( + COLLECTION_FILES_TABLE, + )) || []; + await localForage.setItem( + COLLECTION_FILES_TABLE, + dedupeCollectionFiles([ + { collectionLocalID: collectionUID, files }, + ...collectionFiles, + ]), + ); +}; + +export const getLocalCollections = async (collectionKey: string) => { + const localCollections = + (await localForage.getItem(COLLECTIONS_TABLE)) || []; + const collection = + localCollections.find( + (localSavedPublicCollection) => + localSavedPublicCollection.key === collectionKey, + ) || null; + return collection; +}; + +const saveCollection = async (collection: Collection) => { + const collections = + (await localForage.getItem(COLLECTIONS_TABLE)) ?? []; + await localForage.setItem( + COLLECTIONS_TABLE, + dedupeCollections([collection, ...collections]), + ); +}; + +const dedupeCollections = (collections: Collection[]) => { + const keySet = new Set([]); + return collections.filter((collection) => { + if (!keySet.has(collection.key)) { + keySet.add(collection.key); + return true; + } else { + return false; + } + }); +}; + +const dedupeCollectionFiles = (collectionFiles: SavedCollectionFiles[]) => { + const keySet = new Set([]); + return collectionFiles.filter(({ collectionLocalID: collectionUID }) => { + if (!keySet.has(collectionUID)) { + keySet.add(collectionUID); + return true; + } else { + return false; + } + }); +}; + +async function getSyncTime(collectionUID: string): Promise { + const lastSyncKey = getLastSyncKey(collectionUID); + const lastSyncTime = await localForage.getItem(lastSyncKey); + return lastSyncTime ?? 0; +} + +const updateSyncTime = async (collectionUID: string, time: number) => + await localForage.setItem(getLastSyncKey(collectionUID), time); + +export const syncPublicFiles = async ( + token: string, + collection: Collection, + setPublicFiles: (files: EnteFile[]) => void, +) => { + try { + let files: EnteFile[] = []; + const sortAsc = collection?.pubMagicMetadata?.data.asc ?? false; + const collectionUID = String(collection.id); + const localFiles = await getLocalFiles(collectionUID); + files = [...files, ...localFiles]; + try { + const lastSyncTime = await getSyncTime(collectionUID); + if (collection.updationTime === lastSyncTime) { + return sortFiles(files, sortAsc); + } + const fetchedFiles = await fetchFiles( + token, + collection, + lastSyncTime, + files, + setPublicFiles, + ); + + files = [...files, ...fetchedFiles]; + const latestVersionFiles = new Map(); + files.forEach((file) => { + const uid = `${file.collectionID}-${file.id}`; + if ( + !latestVersionFiles.has(uid) || + latestVersionFiles.get(uid).updationTime < file.updationTime + ) { + latestVersionFiles.set(uid, file); + } + }); + files = []; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const [_, file] of latestVersionFiles) { + if (file.isDeleted) { + continue; + } + files.push(file); + } + await savecollectionFiles(collectionUID, files); + await updateSyncTime(collectionUID, collection.updationTime); + setPublicFiles([...sortFiles(mergeMetadata(files), sortAsc)]); + } catch (e) { + const parsedError = parseSharingErrorCodes(e); + logError(e, "failed to sync shared collection files"); + if (parsedError.message === CustomError.TOKEN_EXPIRED) { + throw e; + } + } + return [...sortFiles(mergeMetadata(files), sortAsc)]; + } catch (e) { + logError(e, "failed to get local or sync shared collection files"); + throw e; + } +}; + +const fetchFiles = async ( + castToken: string, + collection: Collection, + sinceTime: number, + files: EnteFile[], + setPublicFiles: (files: EnteFile[]) => void, +): Promise => { + try { + let decryptedFiles: EnteFile[] = []; + let time = sinceTime; + let resp; + const sortAsc = collection?.pubMagicMetadata?.data.asc ?? false; + do { + if (!castToken) { + break; + } + resp = await HTTPService.get( + `${ENDPOINT}/cast/diff`, + { + sinceTime: time, + }, + { + "Cache-Control": "no-cache", + "X-Cast-Access-Token": castToken, + }, + ); + decryptedFiles = [ + ...decryptedFiles, + ...(await Promise.all( + resp.data.diff.map(async (file: EncryptedEnteFile) => { + if (!file.isDeleted) { + return await decryptFile(file, collection.key); + } else { + return file; + } + }) as Promise[], + )), + ]; + + if (resp.data.diff.length) { + time = resp.data.diff.slice(-1)[0].updationTime; + } + setPublicFiles( + sortFiles( + mergeMetadata( + [...(files || []), ...decryptedFiles].filter( + (item) => !item.isDeleted, + ), + ), + sortAsc, + ), + ); + } while (resp.data.hasMore); + return decryptedFiles; + } catch (e) { + logError(e, "Get cast files failed"); + throw e; + } +}; + +export const getCastCollection = async ( + castToken: string, + collectionKey: string, +): Promise => { + try { + const resp = await HTTPService.get(`${ENDPOINT}/cast/info`, null, { + "Cache-Control": "no-cache", + "X-Cast-Access-Token": castToken, + }); + const fetchedCollection = resp.data.collection; + + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + const collectionName = (fetchedCollection.name = + fetchedCollection.name || + (await cryptoWorker.decryptToUTF8( + fetchedCollection.encryptedName, + fetchedCollection.nameDecryptionNonce, + collectionKey, + ))); + + let collectionPublicMagicMetadata: CollectionPublicMagicMetadata; + if (fetchedCollection.pubMagicMetadata?.data) { + collectionPublicMagicMetadata = { + ...fetchedCollection.pubMagicMetadata, + data: await cryptoWorker.decryptMetadata( + fetchedCollection.pubMagicMetadata.data, + fetchedCollection.pubMagicMetadata.header, + collectionKey, + ), + }; + } + + const collection = { + ...fetchedCollection, + name: collectionName, + key: collectionKey, + pubMagicMetadata: collectionPublicMagicMetadata, + }; + await saveCollection(collection); + return collection; + } catch (e) { + logError(e, "failed to get cast collection"); + throw e; + } +}; + +export const removeCollection = async ( + collectionUID: string, + collectionKey: string, +) => { + const collections = + (await localForage.getItem(COLLECTIONS_TABLE)) || []; + await localForage.setItem( + COLLECTIONS_TABLE, + collections.filter((collection) => collection.key !== collectionKey), + ); + await removeCollectionFiles(collectionUID); +}; + +export const removeCollectionFiles = async (collectionUID: string) => { + await localForage.removeItem(getLastSyncKey(collectionUID)); + const collectionFiles = + (await localForage.getItem( + COLLECTION_FILES_TABLE, + )) ?? []; + await localForage.setItem( + COLLECTION_FILES_TABLE, + collectionFiles.filter( + (collectionFiles) => + collectionFiles.collectionLocalID !== collectionUID, + ), + ); +}; + +export const storeCastData = (payloadObj: Object) => { + // iterate through all the keys in the payload object and set them in localStorage. + for (const key in payloadObj) { + window.localStorage.setItem(key, payloadObj[key]); + } +}; diff --git a/web/apps/cast/src/services/castDownloadManager.ts b/web/apps/cast/src/services/castDownloadManager.ts new file mode 100644 index 000000000..b56aec928 --- /dev/null +++ b/web/apps/cast/src/services/castDownloadManager.ts @@ -0,0 +1,273 @@ +import { EnteFile } from "types/file"; +import { + createTypedObjectURL, + generateStreamFromArrayBuffer, + getRenderableFileURL, +} from "utils/file"; + +import { CustomError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getCastFileURL, getCastThumbnailURL } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { CACHES } from "constants/cache"; +import { FILE_TYPE } from "constants/file"; +import { LimitedCache } from "types/cache"; +import ComlinkCryptoWorker from "utils/comlink/ComlinkCryptoWorker"; +import { CacheStorageService } from "./cache/cacheStorageService"; + +class CastDownloadManager { + private fileObjectURLPromise = new Map< + string, + Promise<{ original: string[]; converted: string[] }> + >(); + private thumbnailObjectURLPromise = new Map>(); + + private fileDownloadProgress = new Map(); + + private progressUpdater: (value: Map) => void; + + setProgressUpdater(progressUpdater: (value: Map) => void) { + this.progressUpdater = progressUpdater; + } + + private async getThumbnailCache() { + try { + const thumbnailCache = await CacheStorageService.open( + CACHES.THUMBS, + ); + return thumbnailCache; + } catch (e) { + return null; + // ignore + } + } + + public async getCachedThumbnail( + file: EnteFile, + thumbnailCache?: LimitedCache, + ) { + try { + if (!thumbnailCache) { + thumbnailCache = await this.getThumbnailCache(); + } + const cacheResp: Response = await thumbnailCache?.match( + file.id.toString(), + ); + + if (cacheResp) { + return URL.createObjectURL(await cacheResp.blob()); + } + return null; + } catch (e) { + logError(e, "failed to get cached thumbnail"); + throw e; + } + } + + public async getThumbnail(file: EnteFile, castToken: string) { + try { + if (!this.thumbnailObjectURLPromise.has(file.id)) { + const downloadPromise = async () => { + const thumbnailCache = await this.getThumbnailCache(); + const cachedThumb = await this.getCachedThumbnail( + file, + thumbnailCache, + ); + if (cachedThumb) { + return cachedThumb; + } + + const thumb = await this.downloadThumb(castToken, file); + const thumbBlob = new Blob([thumb]); + try { + await thumbnailCache?.put( + file.id.toString(), + new Response(thumbBlob), + ); + } catch (e) { + // TODO: handle storage full exception. + } + return URL.createObjectURL(thumbBlob); + }; + this.thumbnailObjectURLPromise.set(file.id, downloadPromise()); + } + + return await this.thumbnailObjectURLPromise.get(file.id); + } catch (e) { + this.thumbnailObjectURLPromise.delete(file.id); + logError(e, "get castDownloadManager preview Failed"); + throw e; + } + } + + private downloadThumb = async (castToken: string, file: EnteFile) => { + const resp = await HTTPService.get( + getCastThumbnailURL(file.id), + null, + { + "X-Cast-Access-Token": castToken, + }, + { responseType: "arraybuffer" }, + ); + if (typeof resp.data === "undefined") { + throw Error(CustomError.REQUEST_FAILED); + } + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const decrypted = await cryptoWorker.decryptThumbnail( + new Uint8Array(resp.data), + await cryptoWorker.fromB64(file.thumbnail.decryptionHeader), + file.key, + ); + return decrypted; + }; + + getFile = async (file: EnteFile, castToken: string, forPreview = false) => { + const fileKey = forPreview ? `${file.id}_preview` : `${file.id}`; + try { + const getFilePromise = async () => { + const fileStream = await this.downloadFile(castToken, file); + const fileBlob = await new Response(fileStream).blob(); + if (forPreview) { + return await getRenderableFileURL(file, fileBlob); + } else { + const fileURL = await createTypedObjectURL( + fileBlob, + file.metadata.title, + ); + return { converted: [fileURL], original: [fileURL] }; + } + }; + + if (!this.fileObjectURLPromise.get(fileKey)) { + this.fileObjectURLPromise.set(fileKey, getFilePromise()); + } + const fileURLs = await this.fileObjectURLPromise.get(fileKey); + return fileURLs; + } catch (e) { + this.fileObjectURLPromise.delete(fileKey); + logError(e, "castDownloadManager failed to get file"); + throw e; + } + }; + + public async getCachedOriginalFile(file: EnteFile) { + return await this.fileObjectURLPromise.get(file.id.toString()); + } + + async downloadFile(castToken: string, file: EnteFile) { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const onDownloadProgress = this.trackDownloadProgress(file.id); + + if ( + file.metadata.fileType === FILE_TYPE.IMAGE || + file.metadata.fileType === FILE_TYPE.LIVE_PHOTO + ) { + const resp = await HTTPService.get( + getCastFileURL(file.id), + null, + { + "X-Cast-Access-Token": castToken, + }, + { responseType: "arraybuffer" }, + ); + if (typeof resp.data === "undefined") { + throw Error(CustomError.REQUEST_FAILED); + } + const decrypted = await cryptoWorker.decryptFile( + new Uint8Array(resp.data), + await cryptoWorker.fromB64(file.file.decryptionHeader), + file.key, + ); + return generateStreamFromArrayBuffer(decrypted); + } + const resp = await fetch(getCastFileURL(file.id), { + headers: { + "X-Cast-Access-Token": castToken, + }, + }); + const reader = resp.body.getReader(); + + const contentLength = +resp.headers.get("Content-Length"); + let downloadedBytes = 0; + + const stream = new ReadableStream({ + async start(controller) { + const decryptionHeader = await cryptoWorker.fromB64( + file.file.decryptionHeader, + ); + const fileKey = await cryptoWorker.fromB64(file.key); + const { pullState, decryptionChunkSize } = + await cryptoWorker.initChunkDecryption( + decryptionHeader, + fileKey, + ); + let data = new Uint8Array(); + // The following function handles each data chunk + function push() { + // "done" is a Boolean and value a "Uint8Array" + reader.read().then(async ({ done, value }) => { + // Is there more data to read? + if (!done) { + downloadedBytes += value.byteLength; + onDownloadProgress({ + loaded: downloadedBytes, + total: contentLength, + }); + const buffer = new Uint8Array( + data.byteLength + value.byteLength, + ); + buffer.set(new Uint8Array(data), 0); + buffer.set(new Uint8Array(value), data.byteLength); + if (buffer.length > decryptionChunkSize) { + const fileData = buffer.slice( + 0, + decryptionChunkSize, + ); + const { decryptedData } = + await cryptoWorker.decryptFileChunk( + fileData, + pullState, + ); + controller.enqueue(decryptedData); + data = buffer.slice(decryptionChunkSize); + } else { + data = buffer; + } + push(); + } else { + if (data) { + const { decryptedData } = + await cryptoWorker.decryptFileChunk( + data, + pullState, + ); + controller.enqueue(decryptedData); + data = null; + } + controller.close(); + } + }); + } + + push(); + }, + }); + return stream; + } + + trackDownloadProgress = (fileID: number) => { + return (event: { loaded: number; total: number }) => { + if (event.loaded === event.total) { + this.fileDownloadProgress.delete(fileID); + } else { + this.fileDownloadProgress.set( + fileID, + Math.round((event.loaded * 100) / event.total), + ); + } + this.progressUpdater(new Map(this.fileDownloadProgress)); + }; + }; +} + +export default new CastDownloadManager(); diff --git a/web/apps/cast/src/services/events.ts b/web/apps/cast/src/services/events.ts new file mode 100644 index 000000000..32306fc64 --- /dev/null +++ b/web/apps/cast/src/services/events.ts @@ -0,0 +1,12 @@ +import { EventEmitter } from "eventemitter3"; + +// When registering event handlers, +// handle errors to avoid unhandled rejection or propagation to emit call + +export enum Events { + LOGOUT = "logout", + FILE_UPLOADED = "fileUploaded", + LOCAL_FILES_UPDATED = "localFilesUpdated", +} + +export const eventBus = new EventEmitter(); diff --git a/web/apps/cast/src/services/ffmpeg/ffmpegFactory.ts b/web/apps/cast/src/services/ffmpeg/ffmpegFactory.ts new file mode 100644 index 000000000..b3c716d99 --- /dev/null +++ b/web/apps/cast/src/services/ffmpeg/ffmpegFactory.ts @@ -0,0 +1,29 @@ +// import isElectron from 'is-electron'; +// import { ElectronFFmpeg } from 'services/electron/ffmpeg'; +import { ElectronFile } from "types/upload"; +import ComlinkFFmpegWorker from "utils/comlink/ComlinkFFmpegWorker"; + +export interface IFFmpeg { + run: ( + cmd: string[], + inputFile: File | ElectronFile, + outputFilename: string, + dontTimeout?: boolean, + ) => Promise; +} + +class FFmpegFactory { + private client: IFFmpeg; + async getFFmpegClient() { + if (!this.client) { + // if (isElectron()) { + // this.client = new ElectronFFmpeg(); + // } else { + this.client = await ComlinkFFmpegWorker.getInstance(); + // } + } + return this.client; + } +} + +export default new FFmpegFactory(); diff --git a/web/apps/cast/src/services/ffmpeg/ffmpegService.ts b/web/apps/cast/src/services/ffmpeg/ffmpegService.ts new file mode 100644 index 000000000..85bab9939 --- /dev/null +++ b/web/apps/cast/src/services/ffmpeg/ffmpegService.ts @@ -0,0 +1,30 @@ +import { logError } from "@ente/shared/sentry"; +import { + FFMPEG_PLACEHOLDER, + INPUT_PATH_PLACEHOLDER, + OUTPUT_PATH_PLACEHOLDER, +} from "constants/ffmpeg"; +import { ElectronFile } from "types/upload"; +import ffmpegFactory from "./ffmpegFactory"; + +export async function convertToMP4(file: File | ElectronFile) { + try { + const ffmpegClient = await ffmpegFactory.getFFmpegClient(); + return await ffmpegClient.run( + [ + FFMPEG_PLACEHOLDER, + "-i", + INPUT_PATH_PLACEHOLDER, + "-preset", + "ultrafast", + OUTPUT_PATH_PLACEHOLDER, + ], + file, + "output.mp4", + true, + ); + } catch (e) { + logError(e, "ffmpeg convertToMP4 failed"); + throw e; + } +} diff --git a/web/apps/cast/src/services/heicConversionService.ts b/web/apps/cast/src/services/heicConversionService.ts new file mode 100644 index 000000000..f11a9f4a4 --- /dev/null +++ b/web/apps/cast/src/services/heicConversionService.ts @@ -0,0 +1,14 @@ +import { logError } from "@ente/shared/sentry"; +import WasmHEICConverterService from "./wasmHeicConverter/wasmHEICConverterService"; + +class HeicConversionService { + async convert(heicFileData: Blob): Promise { + try { + return await WasmHEICConverterService.convert(heicFileData); + } catch (e) { + logError(e, "failed to convert heic file"); + throw e; + } + } +} +export default new HeicConversionService(); diff --git a/web/apps/cast/src/services/livePhotoService.ts b/web/apps/cast/src/services/livePhotoService.ts new file mode 100644 index 000000000..4d96e812c --- /dev/null +++ b/web/apps/cast/src/services/livePhotoService.ts @@ -0,0 +1,45 @@ +import JSZip from "jszip"; +import { EnteFile } from "types/file"; +import { + getFileExtensionWithDot, + getFileNameWithoutExtension, +} from "utils/file"; + +class LivePhoto { + image: Uint8Array; + video: Uint8Array; + imageNameTitle: string; + videoNameTitle: string; +} + +export const decodeLivePhoto = async (file: EnteFile, zipBlob: Blob) => { + const originalName = getFileNameWithoutExtension(file.metadata.title); + const zip = await JSZip.loadAsync(zipBlob, { createFolders: true }); + + const livePhoto = new LivePhoto(); + for (const zipFilename in zip.files) { + if (zipFilename.startsWith("image")) { + livePhoto.imageNameTitle = + originalName + getFileExtensionWithDot(zipFilename); + livePhoto.image = await zip.files[zipFilename].async("uint8array"); + } else if (zipFilename.startsWith("video")) { + livePhoto.videoNameTitle = + originalName + getFileExtensionWithDot(zipFilename); + livePhoto.video = await zip.files[zipFilename].async("uint8array"); + } + } + return livePhoto; +}; + +export const encodeLivePhoto = async (livePhoto: LivePhoto) => { + const zip = new JSZip(); + zip.file( + "image" + getFileExtensionWithDot(livePhoto.imageNameTitle), + livePhoto.image, + ); + zip.file( + "video" + getFileExtensionWithDot(livePhoto.videoNameTitle), + livePhoto.video, + ); + return await zip.generateAsync({ type: "uint8array" }); +}; diff --git a/web/apps/cast/src/services/queueProcessor.ts b/web/apps/cast/src/services/queueProcessor.ts new file mode 100644 index 000000000..8e70c4a7f --- /dev/null +++ b/web/apps/cast/src/services/queueProcessor.ts @@ -0,0 +1,86 @@ +import { CustomError } from "@ente/shared/error"; + +interface RequestQueueItem { + request: (canceller?: RequestCanceller) => Promise; + successCallback: (response: any) => void; + failureCallback: (error: Error) => void; + isCanceled: { status: boolean }; + canceller: { exec: () => void }; +} + +export enum PROCESSING_STRATEGY { + FIFO, + LIFO, +} + +export interface RequestCanceller { + exec: () => void; +} + +export interface CancellationStatus { + status: boolean; +} + +export default class QueueProcessor { + private requestQueue: RequestQueueItem[] = []; + + private requestInProcessing = 0; + + constructor( + private maxParallelProcesses: number, + private processingStrategy = PROCESSING_STRATEGY.FIFO, + ) {} + + public queueUpRequest( + request: (canceller?: RequestCanceller) => Promise, + ) { + const isCanceled: CancellationStatus = { status: false }; + const canceller: RequestCanceller = { + exec: () => { + isCanceled.status = true; + }, + }; + + const promise = new Promise((resolve, reject) => { + this.requestQueue.push({ + request, + successCallback: resolve, + failureCallback: reject, + isCanceled, + canceller, + }); + this.pollQueue(); + }); + + return { promise, canceller }; + } + + private async pollQueue() { + if (this.requestInProcessing < this.maxParallelProcesses) { + this.requestInProcessing++; + this.processQueue(); + } + } + + private async processQueue() { + while (this.requestQueue.length > 0) { + const queueItem = + this.processingStrategy === PROCESSING_STRATEGY.LIFO + ? this.requestQueue.pop() + : this.requestQueue.shift(); + let response = null; + + if (queueItem.isCanceled.status) { + queueItem.failureCallback(Error(CustomError.REQUEST_CANCELLED)); + } else { + try { + response = await queueItem.request(queueItem.canceller); + queueItem.successCallback(response); + } catch (e) { + queueItem.failureCallback(e); + } + } + } + this.requestInProcessing--; + } +} diff --git a/web/apps/cast/src/services/readerService.ts b/web/apps/cast/src/services/readerService.ts new file mode 100644 index 000000000..344fd9f20 --- /dev/null +++ b/web/apps/cast/src/services/readerService.ts @@ -0,0 +1,93 @@ +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { ElectronFile } from "types/upload"; + +export async function getUint8ArrayView( + file: Blob | ElectronFile, +): Promise { + try { + return new Uint8Array(await file.arrayBuffer()); + } catch (e) { + logError(e, "reading file blob failed", { + fileSize: convertBytesToHumanReadable(file.size), + }); + throw e; + } +} + +export function getFileStream(file: File, chunkSize: number) { + const fileChunkReader = fileChunkReaderMaker(file, chunkSize); + + const stream = new ReadableStream({ + async pull(controller: ReadableStreamDefaultController) { + const chunk = await fileChunkReader.next(); + if (chunk.done) { + controller.close(); + } else { + controller.enqueue(chunk.value); + } + }, + }); + const chunkCount = Math.ceil(file.size / chunkSize); + return { + stream, + chunkCount, + }; +} + +export async function getElectronFileStream( + file: ElectronFile, + chunkSize: number, +) { + const chunkCount = Math.ceil(file.size / chunkSize); + return { + stream: await file.stream(), + chunkCount, + }; +} + +async function* fileChunkReaderMaker(file: File, chunkSize: number) { + let offset = 0; + while (offset < file.size) { + const blob = file.slice(offset, chunkSize + offset); + const fileChunk = await getUint8ArrayView(blob); + yield fileChunk; + offset += chunkSize; + } + return null; +} + +// depreciated +// eslint-disable-next-line @typescript-eslint/no-unused-vars +async function getUint8ArrayViewOld( + reader: FileReader, + file: Blob, +): Promise { + return await new Promise((resolve, reject) => { + reader.onabort = () => + reject( + Error( + `file reading was aborted, file size= ${convertBytesToHumanReadable( + file.size, + )}`, + ), + ); + reader.onerror = () => + reject( + Error( + `file reading has failed, file size= ${convertBytesToHumanReadable( + file.size, + )} , reason= ${reader.error}`, + ), + ); + reader.onload = () => { + // Do whatever you want with the file contents + const result = + typeof reader.result === "string" + ? new TextEncoder().encode(reader.result) + : new Uint8Array(reader.result); + resolve(result); + }; + reader.readAsArrayBuffer(file); + }); +} diff --git a/web/apps/cast/src/services/typeDetectionService.ts b/web/apps/cast/src/services/typeDetectionService.ts new file mode 100644 index 000000000..c280baf51 --- /dev/null +++ b/web/apps/cast/src/services/typeDetectionService.ts @@ -0,0 +1,108 @@ +import { CustomError } from "@ente/shared/error"; +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { FILE_TYPE } from "constants/file"; +import { + KNOWN_NON_MEDIA_FORMATS, + WHITELISTED_FILE_FORMATS, +} from "constants/upload"; +import FileType, { FileTypeResult } from "file-type"; +import { ElectronFile, FileTypeInfo } from "types/upload"; +import { getFileExtension } from "utils/file"; +import { getUint8ArrayView } from "./readerService"; + +function getFileSize(file: File | ElectronFile) { + return file.size; +} + +const TYPE_VIDEO = "video"; +const TYPE_IMAGE = "image"; +const CHUNK_SIZE_FOR_TYPE_DETECTION = 4100; + +export async function getFileType( + receivedFile: File | ElectronFile, +): Promise { + try { + let fileType: FILE_TYPE; + let typeResult: FileTypeResult; + + if (receivedFile instanceof File) { + typeResult = await extractFileType(receivedFile); + } else { + typeResult = await extractElectronFileType(receivedFile); + } + + const mimTypeParts: string[] = typeResult.mime?.split("/"); + + if (mimTypeParts?.length !== 2) { + throw Error(CustomError.INVALID_MIME_TYPE(typeResult.mime)); + } + switch (mimTypeParts[0]) { + case TYPE_IMAGE: + fileType = FILE_TYPE.IMAGE; + break; + case TYPE_VIDEO: + fileType = FILE_TYPE.VIDEO; + break; + default: + throw Error(CustomError.NON_MEDIA_FILE); + } + return { + fileType, + exactType: typeResult.ext, + mimeType: typeResult.mime, + }; + } catch (e) { + const fileFormat = getFileExtension(receivedFile.name); + const fileSize = convertBytesToHumanReadable(getFileSize(receivedFile)); + const whiteListedFormat = WHITELISTED_FILE_FORMATS.find( + (a) => a.exactType === fileFormat, + ); + if (whiteListedFormat) { + return whiteListedFormat; + } + if (KNOWN_NON_MEDIA_FORMATS.includes(fileFormat)) { + throw Error(CustomError.UNSUPPORTED_FILE_FORMAT); + } + if (e.message === CustomError.NON_MEDIA_FILE) { + logError(e, "unsupported file format", { + fileFormat, + fileSize, + }); + throw Error(CustomError.UNSUPPORTED_FILE_FORMAT); + } + logError(e, "type detection failed", { + fileFormat, + fileSize, + }); + throw Error(CustomError.TYPE_DETECTION_FAILED(fileFormat)); + } +} + +async function extractFileType(file: File) { + const fileBlobChunk = file.slice(0, CHUNK_SIZE_FOR_TYPE_DETECTION); + const fileDataChunk = await getUint8ArrayView(fileBlobChunk); + return getFileTypeFromBuffer(fileDataChunk); +} + +async function extractElectronFileType(file: ElectronFile) { + const stream = await file.stream(); + const reader = stream.getReader(); + const { value: fileDataChunk } = await reader.read(); + await reader.cancel(); + return getFileTypeFromBuffer(fileDataChunk); +} + +async function getFileTypeFromBuffer(buffer: Uint8Array) { + const result = await FileType.fromBuffer(buffer); + if (!result?.mime) { + let logableInfo = ""; + try { + logableInfo = `result: ${JSON.stringify(result)}`; + } catch (e) { + logableInfo = "failed to stringify result"; + } + throw Error(`mimetype missing from file type result - ${logableInfo}`); + } + return result; +} diff --git a/web/apps/cast/src/services/wasm/ffmpeg.ts b/web/apps/cast/src/services/wasm/ffmpeg.ts new file mode 100644 index 000000000..ce6f871ed --- /dev/null +++ b/web/apps/cast/src/services/wasm/ffmpeg.ts @@ -0,0 +1,116 @@ +import { addLogLine } from "@ente/shared/logging"; +import { promiseWithTimeout } from "@ente/shared/promise"; +import { logError } from "@ente/shared/sentry"; +import { createFFmpeg, FFmpeg } from "ffmpeg-wasm"; +import QueueProcessor from "services/queueProcessor"; +import { getUint8ArrayView } from "services/readerService"; +import { generateTempName } from "utils/temp"; + +const INPUT_PATH_PLACEHOLDER = "INPUT"; +const FFMPEG_PLACEHOLDER = "FFMPEG"; +const OUTPUT_PATH_PLACEHOLDER = "OUTPUT"; + +const FFMPEG_EXECUTION_WAIT_TIME = 30 * 1000; + +export class WasmFFmpeg { + private ffmpeg: FFmpeg; + private ready: Promise = null; + private ffmpegTaskQueue = new QueueProcessor(1); + + constructor() { + this.ffmpeg = createFFmpeg({ + corePath: "/js/ffmpeg/ffmpeg-core.js", + mt: false, + }); + + this.ready = this.init(); + } + + private async init() { + if (!this.ffmpeg.isLoaded()) { + await this.ffmpeg.load(); + } + } + + async run( + cmd: string[], + inputFile: File, + outputFileName: string, + dontTimeout = false, + ) { + const response = this.ffmpegTaskQueue.queueUpRequest(() => { + if (dontTimeout) { + return this.execute(cmd, inputFile, outputFileName); + } else { + return promiseWithTimeout( + this.execute(cmd, inputFile, outputFileName), + FFMPEG_EXECUTION_WAIT_TIME, + ); + } + }); + try { + return await response.promise; + } catch (e) { + logError(e, "ffmpeg run failed"); + throw e; + } + } + + private async execute( + cmd: string[], + inputFile: File, + outputFileName: string, + ) { + let tempInputFilePath: string; + let tempOutputFilePath: string; + try { + await this.ready; + const extension = getFileExtension(inputFile.name); + const tempNameSuffix = extension ? `input.${extension}` : "input"; + tempInputFilePath = `${generateTempName(10, tempNameSuffix)}`; + this.ffmpeg.FS( + "writeFile", + tempInputFilePath, + await getUint8ArrayView(inputFile), + ); + tempOutputFilePath = `${generateTempName(10, outputFileName)}`; + + cmd = cmd.map((cmdPart) => { + if (cmdPart === FFMPEG_PLACEHOLDER) { + return ""; + } else if (cmdPart === INPUT_PATH_PLACEHOLDER) { + return tempInputFilePath; + } else if (cmdPart === OUTPUT_PATH_PLACEHOLDER) { + return tempOutputFilePath; + } else { + return cmdPart; + } + }); + addLogLine(`${cmd}`); + await this.ffmpeg.run(...cmd); + return new File( + [this.ffmpeg.FS("readFile", tempOutputFilePath)], + outputFileName, + ); + } finally { + try { + this.ffmpeg.FS("unlink", tempInputFilePath); + } catch (e) { + logError(e, "unlink input file failed"); + } + try { + this.ffmpeg.FS("unlink", tempOutputFilePath); + } catch (e) { + logError(e, "unlink output file failed"); + } + } + } +} + +function getFileExtension(filename: string) { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return null; + else { + return filename.slice(lastDotPosition + 1); + } +} diff --git a/web/apps/cast/src/services/wasmHeicConverter/wasmHEICConverterClient.ts b/web/apps/cast/src/services/wasmHeicConverter/wasmHEICConverterClient.ts new file mode 100644 index 000000000..03b390fb9 --- /dev/null +++ b/web/apps/cast/src/services/wasmHeicConverter/wasmHEICConverterClient.ts @@ -0,0 +1,13 @@ +import * as HeicConvert from "heic-convert"; +import { getUint8ArrayView } from "services/readerService"; + +export async function convertHEIC( + fileBlob: Blob, + format: string, +): Promise { + const filedata = await getUint8ArrayView(fileBlob); + const result = await HeicConvert({ buffer: filedata, format }); + const convertedFileData = new Uint8Array(result); + const convertedFileBlob = new Blob([convertedFileData]); + return convertedFileBlob; +} diff --git a/web/apps/cast/src/services/wasmHeicConverter/wasmHEICConverterService.ts b/web/apps/cast/src/services/wasmHeicConverter/wasmHEICConverterService.ts new file mode 100644 index 000000000..a49d8e4f8 --- /dev/null +++ b/web/apps/cast/src/services/wasmHeicConverter/wasmHEICConverterService.ts @@ -0,0 +1,114 @@ +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import QueueProcessor from "services/queueProcessor"; +import { getDedicatedConvertWorker } from "utils/comlink/ComlinkConvertWorker"; +import { ComlinkWorker } from "utils/comlink/comlinkWorker"; +import { retryAsyncFunction } from "utils/network"; +import { DedicatedConvertWorker } from "worker/convert.worker"; + +const WORKER_POOL_SIZE = 2; +const MAX_CONVERSION_IN_PARALLEL = 1; +const WAIT_TIME_BEFORE_NEXT_ATTEMPT_IN_MICROSECONDS = [100, 100]; +const WAIT_TIME_IN_MICROSECONDS = 30 * 1000; +const BREATH_TIME_IN_MICROSECONDS = 1000; +const CONVERT_FORMAT = "JPEG"; + +class HEICConverter { + private convertProcessor = new QueueProcessor( + MAX_CONVERSION_IN_PARALLEL, + ); + private workerPool: ComlinkWorker[] = []; + private ready: Promise; + + constructor() { + this.ready = this.init(); + } + private async init() { + this.workerPool = []; + for (let i = 0; i < WORKER_POOL_SIZE; i++) { + this.workerPool.push(getDedicatedConvertWorker()); + } + } + async convert(fileBlob: Blob): Promise { + await this.ready; + const response = this.convertProcessor.queueUpRequest(() => + retryAsyncFunction(async () => { + const convertWorker = this.workerPool.shift(); + const worker = await convertWorker.remote; + try { + const convertedHEIC = await new Promise( + (resolve, reject) => { + const main = async () => { + try { + const timeout = setTimeout(() => { + reject(Error("wait time exceeded")); + }, WAIT_TIME_IN_MICROSECONDS); + const startTime = Date.now(); + const convertedHEIC = + await worker.convertHEIC( + fileBlob, + CONVERT_FORMAT, + ); + addLogLine( + `originalFileSize:${convertBytesToHumanReadable( + fileBlob?.size, + )},convertedFileSize:${convertBytesToHumanReadable( + convertedHEIC?.size, + )}, heic conversion time: ${ + Date.now() - startTime + }ms `, + ); + clearTimeout(timeout); + resolve(convertedHEIC); + } catch (e) { + reject(e); + } + }; + main(); + }, + ); + if (!convertedHEIC || convertedHEIC?.size === 0) { + logError( + Error(`converted heic fileSize is Zero`), + "converted heic fileSize is Zero", + { + originalFileSize: convertBytesToHumanReadable( + fileBlob?.size ?? 0, + ), + convertedFileSize: convertBytesToHumanReadable( + convertedHEIC?.size ?? 0, + ), + }, + ); + } + await new Promise((resolve) => { + setTimeout( + () => resolve(null), + BREATH_TIME_IN_MICROSECONDS, + ); + }); + this.workerPool.push(convertWorker); + return convertedHEIC; + } catch (e) { + logError(e, "heic conversion failed"); + convertWorker.terminate(); + this.workerPool.push(getDedicatedConvertWorker()); + throw e; + } + }, WAIT_TIME_BEFORE_NEXT_ATTEMPT_IN_MICROSECONDS), + ); + try { + return await response.promise; + } catch (e) { + if (e.message === CustomError.REQUEST_CANCELLED) { + // ignore + return null; + } + throw e; + } + } +} + +export default new HEICConverter(); diff --git a/web/apps/cast/src/styles/global.css b/web/apps/cast/src/styles/global.css new file mode 100644 index 000000000..d79f9f302 --- /dev/null +++ b/web/apps/cast/src/styles/global.css @@ -0,0 +1,3 @@ +#__next { + height: 100%; +} diff --git a/web/apps/cast/src/types/cache/index.ts b/web/apps/cast/src/types/cache/index.ts new file mode 100644 index 000000000..2920ece10 --- /dev/null +++ b/web/apps/cast/src/types/cache/index.ts @@ -0,0 +1,20 @@ +export interface LimitedCacheStorage { + open: (cacheName: string) => Promise; + delete: (cacheName: string) => Promise; +} + +export interface LimitedCache { + match: (key: string) => Promise; + put: (key: string, data: Response) => Promise; + delete: (key: string) => Promise; +} + +export interface ProxiedLimitedCacheStorage { + open: (cacheName: string) => Promise; + delete: (cacheName: string) => Promise; +} +export interface ProxiedWorkerLimitedCache { + match: (key: string) => Promise; + put: (key: string, data: ArrayBuffer) => Promise; + delete: (key: string) => Promise; +} diff --git a/web/apps/cast/src/types/cast/index.ts b/web/apps/cast/src/types/cast/index.ts new file mode 100644 index 000000000..f082e433e --- /dev/null +++ b/web/apps/cast/src/types/cast/index.ts @@ -0,0 +1,5 @@ +export interface CastPayload { + collectionID: number; + collectionKey: string; + castToken: string; +} diff --git a/web/apps/cast/src/types/collection/index.ts b/web/apps/cast/src/types/collection/index.ts new file mode 100644 index 000000000..f9ea9ef04 --- /dev/null +++ b/web/apps/cast/src/types/collection/index.ts @@ -0,0 +1,159 @@ +import { CollectionSummaryType, CollectionType } from "constants/collection"; +import { EnteFile } from "types/file"; +import { + EncryptedMagicMetadata, + MagicMetadataCore, + SUB_TYPE, + VISIBILITY_STATE, +} from "types/magicMetadata"; + +export enum COLLECTION_ROLE { + VIEWER = "VIEWER", + OWNER = "OWNER", + COLLABORATOR = "COLLABORATOR", + UNKNOWN = "UNKNOWN", +} + +export interface CollectionUser { + id: number; + email: string; + role: COLLECTION_ROLE; +} + +export interface EncryptedCollection { + id: number; + owner: CollectionUser; + // collection name was unencrypted in the past, so we need to keep it as optional + name?: string; + encryptedKey: string; + keyDecryptionNonce: string; + encryptedName: string; + nameDecryptionNonce: string; + type: CollectionType; + attributes: collectionAttributes; + sharees: CollectionUser[]; + publicURLs?: PublicURL[]; + updationTime: number; + isDeleted: boolean; + magicMetadata: EncryptedMagicMetadata; + pubMagicMetadata: EncryptedMagicMetadata; + sharedMagicMetadata: EncryptedMagicMetadata; +} + +export interface Collection + extends Omit< + EncryptedCollection, + | "encryptedKey" + | "keyDecryptionNonce" + | "encryptedName" + | "nameDecryptionNonce" + | "magicMetadata" + | "pubMagicMetadata" + | "sharedMagicMetadata" + > { + key: string; + name: string; + magicMetadata: CollectionMagicMetadata; + pubMagicMetadata: CollectionPublicMagicMetadata; + sharedMagicMetadata: CollectionShareeMagicMetadata; +} + +// define a method on Collection interface to return the sync key as collection.id-time +// this is used to store the last sync time of a collection in local storage + +export interface PublicURL { + url: string; + deviceLimit: number; + validTill: number; + enableDownload: boolean; + enableCollect: boolean; + passwordEnabled: boolean; + nonce?: string; + opsLimit?: number; + memLimit?: number; +} + +export interface UpdatePublicURL { + collectionID: number; + disablePassword?: boolean; + enableDownload?: boolean; + enableCollect?: boolean; + validTill?: number; + deviceLimit?: number; + passHash?: string; + nonce?: string; + opsLimit?: number; + memLimit?: number; +} + +export interface CreatePublicAccessTokenRequest { + collectionID: number; + validTill?: number; + deviceLimit?: number; +} + +export interface EncryptedFileKey { + id: number; + encryptedKey: string; + keyDecryptionNonce: string; +} + +export interface AddToCollectionRequest { + collectionID: number; + files: EncryptedFileKey[]; +} + +export interface MoveToCollectionRequest { + fromCollectionID: number; + toCollectionID: number; + files: EncryptedFileKey[]; +} + +export interface collectionAttributes { + encryptedPath?: string; + pathDecryptionNonce?: string; +} + +export type CollectionToFileMap = Map; + +export interface RemoveFromCollectionRequest { + collectionID: number; + fileIDs: number[]; +} + +export interface CollectionMagicMetadataProps { + visibility?: VISIBILITY_STATE; + subType?: SUB_TYPE; + order?: number; +} + +export type CollectionMagicMetadata = + MagicMetadataCore; + +export interface CollectionShareeMetadataProps { + visibility?: VISIBILITY_STATE; +} +export type CollectionShareeMagicMetadata = + MagicMetadataCore; + +export interface CollectionPublicMagicMetadataProps { + asc?: boolean; + coverID?: number; +} + +export type CollectionPublicMagicMetadata = + MagicMetadataCore; + +export interface CollectionSummary { + id: number; + name: string; + type: CollectionSummaryType; + coverFile: EnteFile; + latestFile: EnteFile; + fileCount: number; + updationTime: number; + order?: number; +} + +export type CollectionSummaries = Map; +export type CollectionFilesCount = Map; diff --git a/web/apps/cast/src/types/file/index.ts b/web/apps/cast/src/types/file/index.ts new file mode 100644 index 000000000..1813b5416 --- /dev/null +++ b/web/apps/cast/src/types/file/index.ts @@ -0,0 +1,103 @@ +import { + EncryptedMagicMetadata, + MagicMetadataCore, + VISIBILITY_STATE, +} from "types/magicMetadata"; +import { Metadata } from "types/upload"; + +export interface MetadataFileAttributes { + encryptedData: string; + decryptionHeader: string; +} +export interface S3FileAttributes { + objectKey: string; + decryptionHeader: string; +} + +export interface FileInfo { + fileSize: number; + thumbSize: number; +} + +export interface EncryptedEnteFile { + id: number; + collectionID: number; + ownerID: number; + file: S3FileAttributes; + thumbnail: S3FileAttributes; + metadata: MetadataFileAttributes; + info: FileInfo; + magicMetadata: EncryptedMagicMetadata; + pubMagicMetadata: EncryptedMagicMetadata; + encryptedKey: string; + keyDecryptionNonce: string; + isDeleted: boolean; + updationTime: number; +} + +export interface EnteFile + extends Omit< + EncryptedEnteFile, + | "metadata" + | "pubMagicMetadata" + | "magicMetadata" + | "encryptedKey" + | "keyDecryptionNonce" + > { + metadata: Metadata; + magicMetadata: FileMagicMetadata; + pubMagicMetadata: FilePublicMagicMetadata; + isTrashed?: boolean; + key: string; + src?: string; + msrc?: string; + html?: string; + w?: number; + h?: number; + title?: string; + deleteBy?: number; + isSourceLoaded?: boolean; + originalVideoURL?: string; + originalImageURL?: string; + dataIndex?: number; + conversionFailed?: boolean; + isConverted?: boolean; +} + +export interface TrashRequest { + items: TrashRequestItems[]; +} + +export interface TrashRequestItems { + fileID: number; + collectionID: number; +} + +export interface FileWithUpdatedMagicMetadata { + file: EnteFile; + updatedMagicMetadata: FileMagicMetadata; +} + +export interface FileWithUpdatedPublicMagicMetadata { + file: EnteFile; + updatedPublicMagicMetadata: FilePublicMagicMetadata; +} + +export interface FileMagicMetadataProps { + visibility?: VISIBILITY_STATE; + filePaths?: string[]; +} + +export type FileMagicMetadata = MagicMetadataCore; + +export interface FilePublicMagicMetadataProps { + editedTime?: number; + editedName?: string; + caption?: string; + uploaderName?: string; + w?: number; + h?: number; +} + +export type FilePublicMagicMetadata = + MagicMetadataCore; diff --git a/web/apps/cast/src/types/gallery/index.ts b/web/apps/cast/src/types/gallery/index.ts new file mode 100644 index 000000000..0216825c8 --- /dev/null +++ b/web/apps/cast/src/types/gallery/index.ts @@ -0,0 +1,57 @@ +// import { CollectionDownloadProgressAttributes } from 'components/Collections/CollectionDownloadProgress'; +// import { CollectionSelectorAttributes } from 'components/Collections/CollectionSelector'; +// import { TimeStampListItem } from 'components/PhotoList'; +import { User } from "@ente/shared/user/types"; +import { Collection } from "types/collection"; +import { EnteFile } from "types/file"; + +export type SelectedState = { + [k: number]: boolean; + ownCount: number; + count: number; + collectionID: number; +}; +export type SetFiles = React.Dispatch>; +export type SetCollections = React.Dispatch>; +export type SetLoading = React.Dispatch>; +// export type SetCollectionSelectorAttributes = React.Dispatch< +// React.SetStateAction +// >; +// export type SetCollectionDownloadProgressAttributes = React.Dispatch< +// React.SetStateAction +// >; + +export type MergedSourceURL = { + original: string; + converted: string; +}; +export enum UploadTypeSelectorIntent { + normalUpload, + import, + collectPhotos, +} +export type GalleryContextType = { + thumbs: Map; + files: Map; + showPlanSelectorModal: () => void; + setActiveCollectionID: (collectionID: number) => void; + syncWithRemote: (force?: boolean, silent?: boolean) => Promise; + setBlockingLoad: (value: boolean) => void; + setIsInSearchMode: (value: boolean) => void; + // photoListHeader: TimeStampListItem; + openExportModal: () => void; + authenticateUser: (callback: () => void) => void; + user: User; + userIDToEmailMap: Map; + emailList: string[]; + openHiddenSection: (callback?: () => void) => void; + isClipSearchResult: boolean; +}; + +export enum CollectionSelectorIntent { + upload, + add, + move, + restore, + unhide, +} diff --git a/web/apps/cast/src/types/magicMetadata/index.ts b/web/apps/cast/src/types/magicMetadata/index.ts new file mode 100644 index 000000000..cc01eea84 --- /dev/null +++ b/web/apps/cast/src/types/magicMetadata/index.ts @@ -0,0 +1,29 @@ +export interface MagicMetadataCore { + version: number; + count: number; + header: string; + data: T; +} + +export type EncryptedMagicMetadata = MagicMetadataCore; + +export enum VISIBILITY_STATE { + VISIBLE = 0, + ARCHIVED = 1, + HIDDEN = 2, +} + +export enum SUB_TYPE { + DEFAULT = 0, + DEFAULT_HIDDEN = 1, + QUICK_LINK_COLLECTION = 2, +} + +export interface BulkUpdateMagicMetadataRequest { + metadataList: UpdateMagicMetadataRequest[]; +} + +export interface UpdateMagicMetadataRequest { + id: number; + magicMetadata: EncryptedMagicMetadata; +} diff --git a/web/apps/cast/src/types/upload/index.ts b/web/apps/cast/src/types/upload/index.ts new file mode 100644 index 000000000..0d38f6190 --- /dev/null +++ b/web/apps/cast/src/types/upload/index.ts @@ -0,0 +1,170 @@ +import { + B64EncryptionResult, + LocalFileAttributes, +} from "@ente/shared/crypto/types"; +import { FILE_TYPE } from "constants/file"; +import { Collection } from "types/collection"; +import { + FilePublicMagicMetadata, + FilePublicMagicMetadataProps, + MetadataFileAttributes, + S3FileAttributes, +} from "types/file"; +import { EncryptedMagicMetadata } from "types/magicMetadata"; + +export interface DataStream { + stream: ReadableStream; + chunkCount: number; +} + +export function isDataStream(object: any): object is DataStream { + return "stream" in object; +} + +export type Logger = (message: string) => void; + +export interface Metadata { + title: string; + creationTime: number; + modificationTime: number; + latitude: number; + longitude: number; + fileType: FILE_TYPE; + hasStaticThumbnail?: boolean; + hash?: string; + imageHash?: string; + videoHash?: string; + localID?: number; + version?: number; + deviceFolder?: string; +} + +export interface Location { + latitude: number; + longitude: number; +} + +export interface ParsedMetadataJSON { + creationTime: number; + modificationTime: number; + latitude: number; + longitude: number; +} + +export interface MultipartUploadURLs { + objectKey: string; + partURLs: string[]; + completeURL: string; +} + +export interface FileTypeInfo { + fileType: FILE_TYPE; + exactType: string; + mimeType?: string; + imageType?: string; + videoType?: string; +} + +/* + * ElectronFile is a custom interface that is used to represent + * any file on disk as a File-like object in the Electron desktop app. + * + * This was added to support the auto-resuming of failed uploads + * which needed absolute paths to the files which the + * normal File interface does not provide. + */ +export interface ElectronFile { + name: string; + path: string; + size: number; + lastModified: number; + stream: () => Promise>; + blob: () => Promise; + arrayBuffer: () => Promise; +} + +export interface UploadAsset { + isLivePhoto?: boolean; + file?: File | ElectronFile; + livePhotoAssets?: LivePhotoAssets; + isElectron?: boolean; +} +export interface LivePhotoAssets { + image: globalThis.File | ElectronFile; + video: globalThis.File | ElectronFile; +} + +export interface FileWithCollection extends UploadAsset { + localID: number; + collection?: Collection; + collectionID?: number; +} + +export type ParsedMetadataJSONMap = Map; + +export interface UploadURL { + url: string; + objectKey: string; +} + +export interface FileInMemory { + filedata: Uint8Array | DataStream; + thumbnail: Uint8Array; + hasStaticThumbnail: boolean; +} + +export interface FileWithMetadata + extends Omit { + metadata: Metadata; + localID: number; + pubMagicMetadata: FilePublicMagicMetadata; +} + +export interface EncryptedFile { + file: ProcessedFile; + fileKey: B64EncryptionResult; +} +export interface ProcessedFile { + file: LocalFileAttributes; + thumbnail: LocalFileAttributes; + metadata: LocalFileAttributes; + pubMagicMetadata: EncryptedMagicMetadata; + localID: number; +} +export interface BackupedFile { + file: S3FileAttributes; + thumbnail: S3FileAttributes; + metadata: MetadataFileAttributes; + pubMagicMetadata: EncryptedMagicMetadata; +} + +export interface UploadFile extends BackupedFile { + collectionID: number; + encryptedKey: string; + keyDecryptionNonce: string; +} + +export interface ParsedExtractedMetadata { + location: Location; + creationTime: number; + width: number; + height: number; +} + +// This is used to prompt the user the make upload strategy choice +export interface ImportSuggestion { + rootFolderName: string; + hasNestedFolders: boolean; + hasRootLevelFileWithFolder: boolean; +} + +export interface PublicUploadProps { + token: string; + passwordToken: string; + accessedThroughSharedURL: boolean; +} + +export interface ExtractMetadataResult { + metadata: Metadata; + publicMagicMetadata: FilePublicMagicMetadataProps; +} diff --git a/web/apps/cast/src/types/upload/ui.ts b/web/apps/cast/src/types/upload/ui.ts new file mode 100644 index 000000000..bce381213 --- /dev/null +++ b/web/apps/cast/src/types/upload/ui.ts @@ -0,0 +1,43 @@ +import { UPLOAD_RESULT, UPLOAD_STAGES } from "constants/upload"; + +export type FileID = number; +export type FileName = string; + +export type PercentageUploaded = number; +export type UploadFileNames = Map; + +export interface UploadCounter { + finished: number; + total: number; +} + +export interface InProgressUpload { + localFileID: FileID; + progress: PercentageUploaded; +} + +export interface FinishedUpload { + localFileID: FileID; + result: UPLOAD_RESULT; +} + +export type InProgressUploads = Map; + +export type FinishedUploads = Map; + +export type SegregatedFinishedUploads = Map; + +export interface ProgressUpdater { + setPercentComplete: React.Dispatch>; + setUploadCounter: React.Dispatch>; + setUploadStage: React.Dispatch>; + setInProgressUploads: React.Dispatch< + React.SetStateAction + >; + setFinishedUploads: React.Dispatch< + React.SetStateAction + >; + setUploadFilenames: React.Dispatch>; + setHasLivePhotos: React.Dispatch>; + setUploadProgressView: React.Dispatch>; +} diff --git a/web/apps/cast/src/utils/collection/index.ts b/web/apps/cast/src/utils/collection/index.ts new file mode 100644 index 000000000..bd6c2791d --- /dev/null +++ b/web/apps/cast/src/utils/collection/index.ts @@ -0,0 +1,147 @@ +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { User } from "@ente/shared/user/types"; +import { + CollectionSummaryType, + CollectionType, + HIDE_FROM_COLLECTION_BAR_TYPES, + OPTIONS_NOT_HAVING_COLLECTION_TYPES, +} from "constants/collection"; +import { COLLECTION_ROLE, Collection } from "types/collection"; +import { SUB_TYPE, VISIBILITY_STATE } from "types/magicMetadata"; + +export enum COLLECTION_OPS_TYPE { + ADD, + MOVE, + REMOVE, + RESTORE, + UNHIDE, +} + +export function getSelectedCollection( + collectionID: number, + collections: Collection[], +) { + return collections.find((collection) => collection.id === collectionID); +} + +export const shouldShowOptions = (type: CollectionSummaryType) => { + return !OPTIONS_NOT_HAVING_COLLECTION_TYPES.has(type); +}; +export const showEmptyTrashQuickOption = (type: CollectionSummaryType) => { + return type === CollectionSummaryType.trash; +}; +export const showDownloadQuickOption = (type: CollectionSummaryType) => { + return ( + type === CollectionSummaryType.folder || + type === CollectionSummaryType.favorites || + type === CollectionSummaryType.album || + type === CollectionSummaryType.uncategorized || + type === CollectionSummaryType.hiddenItems || + type === CollectionSummaryType.incomingShareViewer || + type === CollectionSummaryType.incomingShareCollaborator || + type === CollectionSummaryType.outgoingShare || + type === CollectionSummaryType.sharedOnlyViaLink || + type === CollectionSummaryType.archived || + type === CollectionSummaryType.pinned + ); +}; +export const showShareQuickOption = (type: CollectionSummaryType) => { + return ( + type === CollectionSummaryType.folder || + type === CollectionSummaryType.album || + type === CollectionSummaryType.outgoingShare || + type === CollectionSummaryType.sharedOnlyViaLink || + type === CollectionSummaryType.archived || + type === CollectionSummaryType.incomingShareViewer || + type === CollectionSummaryType.incomingShareCollaborator || + type === CollectionSummaryType.pinned + ); +}; +export const shouldBeShownOnCollectionBar = (type: CollectionSummaryType) => { + return !HIDE_FROM_COLLECTION_BAR_TYPES.has(type); +}; + +export const getUserOwnedCollections = (collections: Collection[]) => { + const user: User = getData(LS_KEYS.USER); + if (!user?.id) { + throw Error("user missing"); + } + return collections.filter((collection) => collection.owner.id === user.id); +}; + +export const isDefaultHiddenCollection = (collection: Collection) => + collection.magicMetadata?.data.subType === SUB_TYPE.DEFAULT_HIDDEN; + +export const isHiddenCollection = (collection: Collection) => + collection.magicMetadata?.data.visibility === VISIBILITY_STATE.HIDDEN; + +export const isQuickLinkCollection = (collection: Collection) => + collection.magicMetadata?.data.subType === SUB_TYPE.QUICK_LINK_COLLECTION; + +export function isOutgoingShare(collection: Collection, user: User): boolean { + return collection.owner.id === user.id && collection.sharees?.length > 0; +} + +export function isIncomingShare(collection: Collection, user: User) { + return collection.owner.id !== user.id; +} + +export function isIncomingViewerShare(collection: Collection, user: User) { + const sharee = collection.sharees?.find((sharee) => sharee.id === user.id); + return sharee?.role === COLLECTION_ROLE.VIEWER; +} + +export function isIncomingCollabShare(collection: Collection, user: User) { + const sharee = collection.sharees?.find((sharee) => sharee.id === user.id); + return sharee?.role === COLLECTION_ROLE.COLLABORATOR; +} + +export function isSharedOnlyViaLink(collection: Collection) { + return collection.publicURLs?.length && !collection.sharees?.length; +} + +export function isValidMoveTarget( + sourceCollectionID: number, + targetCollection: Collection, + user: User, +) { + return ( + sourceCollectionID !== targetCollection.id && + !isHiddenCollection(targetCollection) && + !isQuickLinkCollection(targetCollection) && + !isIncomingShare(targetCollection, user) + ); +} + +export function isValidReplacementAlbum( + collection: Collection, + user: User, + wantedCollectionName: string, +) { + return ( + collection.name === wantedCollectionName && + (collection.type === CollectionType.album || + collection.type === CollectionType.folder) && + !isHiddenCollection(collection) && + !isQuickLinkCollection(collection) && + !isIncomingShare(collection, user) + ); +} + +export function getCollectionNameMap( + collections: Collection[], +): Map { + return new Map( + collections.map((collection) => [collection.id, collection.name]), + ); +} + +export function getNonHiddenCollections( + collections: Collection[], +): Collection[] { + return collections.filter((collection) => !isHiddenCollection(collection)); +} + +export function getHiddenCollections(collections: Collection[]): Collection[] { + return collections.filter((collection) => isHiddenCollection(collection)); +} diff --git a/web/apps/cast/src/utils/comlink/ComlinkConvertWorker.ts b/web/apps/cast/src/utils/comlink/ComlinkConvertWorker.ts new file mode 100644 index 000000000..dc15136d9 --- /dev/null +++ b/web/apps/cast/src/utils/comlink/ComlinkConvertWorker.ts @@ -0,0 +1,30 @@ +import { runningInBrowser } from "@ente/shared/platform"; +import { Remote } from "comlink"; +import { DedicatedConvertWorker } from "worker/convert.worker"; +import { ComlinkWorker } from "./comlinkWorker"; + +class ComlinkConvertWorker { + private comlinkWorkerInstance: Remote; + + async getInstance() { + if (!this.comlinkWorkerInstance) { + this.comlinkWorkerInstance = + await getDedicatedConvertWorker().remote; + } + return this.comlinkWorkerInstance; + } +} + +export const getDedicatedConvertWorker = () => { + if (runningInBrowser()) { + const cryptoComlinkWorker = new ComlinkWorker< + typeof DedicatedConvertWorker + >( + "ente-convert-worker", + new Worker(new URL("worker/convert.worker.ts", import.meta.url)), + ); + return cryptoComlinkWorker; + } +}; + +export default new ComlinkConvertWorker(); diff --git a/web/apps/cast/src/utils/comlink/ComlinkCryptoWorker.ts b/web/apps/cast/src/utils/comlink/ComlinkCryptoWorker.ts new file mode 100644 index 000000000..8c108317e --- /dev/null +++ b/web/apps/cast/src/utils/comlink/ComlinkCryptoWorker.ts @@ -0,0 +1,25 @@ +import { Remote } from "comlink"; +import { DedicatedCryptoWorker } from "worker/crypto.worker"; +import { ComlinkWorker } from "./comlinkWorker"; + +class ComlinkCryptoWorker { + private comlinkWorkerInstance: Promise>; + + async getInstance() { + if (!this.comlinkWorkerInstance) { + const comlinkWorker = getDedicatedCryptoWorker(); + this.comlinkWorkerInstance = comlinkWorker.remote; + } + return this.comlinkWorkerInstance; + } +} + +export const getDedicatedCryptoWorker = () => { + const cryptoComlinkWorker = new ComlinkWorker( + "ente-crypto-worker", + new Worker(new URL("worker/crypto.worker.ts", import.meta.url)), + ); + return cryptoComlinkWorker; +}; + +export default new ComlinkCryptoWorker(); diff --git a/web/apps/cast/src/utils/comlink/ComlinkFFmpegWorker.ts b/web/apps/cast/src/utils/comlink/ComlinkFFmpegWorker.ts new file mode 100644 index 000000000..77d140bdb --- /dev/null +++ b/web/apps/cast/src/utils/comlink/ComlinkFFmpegWorker.ts @@ -0,0 +1,25 @@ +import { Remote } from "comlink"; +import { DedicatedFFmpegWorker } from "worker/ffmpeg.worker"; +import { ComlinkWorker } from "./comlinkWorker"; + +class ComlinkFFmpegWorker { + private comlinkWorkerInstance: Promise>; + + async getInstance() { + if (!this.comlinkWorkerInstance) { + const comlinkWorker = getDedicatedFFmpegWorker(); + this.comlinkWorkerInstance = comlinkWorker.remote; + } + return this.comlinkWorkerInstance; + } +} + +const getDedicatedFFmpegWorker = () => { + const cryptoComlinkWorker = new ComlinkWorker( + "ente-ffmpeg-worker", + new Worker(new URL("worker/ffmpeg.worker.ts", import.meta.url)), + ); + return cryptoComlinkWorker; +}; + +export default new ComlinkFFmpegWorker(); diff --git a/web/apps/cast/src/utils/comlink/comlinkWorker.ts b/web/apps/cast/src/utils/comlink/comlinkWorker.ts new file mode 100644 index 000000000..9c1aacff6 --- /dev/null +++ b/web/apps/cast/src/utils/comlink/comlinkWorker.ts @@ -0,0 +1,27 @@ +import { addLocalLog } from "@ente/shared/logging"; +import { Remote, wrap } from "comlink"; +// import { WorkerElectronCacheStorageClient } from 'services/workerElectronCache/client'; + +export class ComlinkWorker InstanceType> { + public remote: Promise>>; + private worker: Worker; + private name: string; + + constructor(name: string, worker: Worker) { + this.name = name; + this.worker = worker; + + this.worker.onerror = (errorEvent) => { + console.error("Got error event from worker", errorEvent); + }; + addLocalLog(() => `Initiated ${this.name}`); + const comlink = wrap(this.worker); + this.remote = new comlink() as Promise>>; + // expose(WorkerElectronCacheStorageClient, this.worker); + } + + public terminate() { + this.worker.terminate(); + addLocalLog(() => `Terminated ${this.name}`); + } +} diff --git a/web/apps/cast/src/utils/file/blob.ts b/web/apps/cast/src/utils/file/blob.ts new file mode 100644 index 000000000..cb2e8c7a2 --- /dev/null +++ b/web/apps/cast/src/utils/file/blob.ts @@ -0,0 +1,15 @@ +export const readAsDataURL = (blob) => + new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.onload = () => resolve(fileReader.result as string); + fileReader.onerror = () => reject(fileReader.error); + fileReader.readAsDataURL(blob); + }); + +export const readAsText = (blob) => + new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.onload = () => resolve(fileReader.result as string); + fileReader.onerror = () => reject(fileReader.error); + fileReader.readAsText(blob); + }); diff --git a/web/apps/cast/src/utils/file/index.ts b/web/apps/cast/src/utils/file/index.ts new file mode 100644 index 000000000..63672c0ef --- /dev/null +++ b/web/apps/cast/src/utils/file/index.ts @@ -0,0 +1,575 @@ +import { logError } from "@ente/shared/sentry"; +import { + FILE_TYPE, + RAW_FORMATS, + SUPPORTED_RAW_FORMATS, + TYPE_HEIC, + TYPE_HEIF, +} from "constants/file"; +import CastDownloadManager from "services/castDownloadManager"; +import * as ffmpegService from "services/ffmpeg/ffmpegService"; +import heicConversionService from "services/heicConversionService"; +import { decodeLivePhoto } from "services/livePhotoService"; +import { getFileType } from "services/typeDetectionService"; +import { + EncryptedEnteFile, + EnteFile, + FileMagicMetadata, + FilePublicMagicMetadata, +} from "types/file"; +import { SelectedState } from "types/gallery"; +import { isArchivedFile } from "utils/magicMetadata"; + +import { CustomError } from "@ente/shared/error"; +import { addLocalLog, addLogLine } from "@ente/shared/logging"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { User } from "@ente/shared/user/types"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import isElectron from "is-electron"; +import { FileTypeInfo } from "types/upload"; +import ComlinkCryptoWorker from "utils/comlink/ComlinkCryptoWorker"; +import { isPlaybackPossible } from "utils/photoFrame"; + +const WAIT_TIME_IMAGE_CONVERSION = 30 * 1000; + +export enum FILE_OPS_TYPE { + DOWNLOAD, + FIX_TIME, + ARCHIVE, + UNARCHIVE, + HIDE, + TRASH, + DELETE_PERMANENTLY, +} + +export function groupFilesBasedOnCollectionID(files: EnteFile[]) { + const collectionWiseFiles = new Map(); + for (const file of files) { + if (!collectionWiseFiles.has(file.collectionID)) { + collectionWiseFiles.set(file.collectionID, []); + } + collectionWiseFiles.get(file.collectionID).push(file); + } + return collectionWiseFiles; +} + +function getSelectedFileIds(selectedFiles: SelectedState) { + const filesIDs: number[] = []; + for (const [key, val] of Object.entries(selectedFiles)) { + if (typeof val === "boolean" && val) { + filesIDs.push(Number(key)); + } + } + return new Set(filesIDs); +} +export function getSelectedFiles( + selected: SelectedState, + files: EnteFile[], +): EnteFile[] { + const selectedFilesIDs = getSelectedFileIds(selected); + return files.filter((file) => selectedFilesIDs.has(file.id)); +} + +export function sortFiles(files: EnteFile[], sortAsc = false) { + // sort based on the time of creation time of the file, + // for files with same creation time, sort based on the time of last modification + const factor = sortAsc ? -1 : 1; + return files.sort((a, b) => { + if (a.metadata.creationTime === b.metadata.creationTime) { + return ( + factor * + (b.metadata.modificationTime - a.metadata.modificationTime) + ); + } + return factor * (b.metadata.creationTime - a.metadata.creationTime); + }); +} + +export function sortTrashFiles(files: EnteFile[]) { + return files.sort((a, b) => { + if (a.deleteBy === b.deleteBy) { + if (a.metadata.creationTime === b.metadata.creationTime) { + return ( + b.metadata.modificationTime - a.metadata.modificationTime + ); + } + return b.metadata.creationTime - a.metadata.creationTime; + } + return a.deleteBy - b.deleteBy; + }); +} + +export async function decryptFile( + file: EncryptedEnteFile, + collectionKey: string, +): Promise { + try { + const worker = await ComlinkCryptoWorker.getInstance(); + const { + encryptedKey, + keyDecryptionNonce, + metadata, + magicMetadata, + pubMagicMetadata, + ...restFileProps + } = file; + const fileKey = await worker.decryptB64( + encryptedKey, + keyDecryptionNonce, + collectionKey, + ); + const fileMetadata = await worker.decryptMetadata( + metadata.encryptedData, + metadata.decryptionHeader, + fileKey, + ); + let fileMagicMetadata: FileMagicMetadata; + let filePubMagicMetadata: FilePublicMagicMetadata; + if (magicMetadata?.data) { + fileMagicMetadata = { + ...file.magicMetadata, + data: await worker.decryptMetadata( + magicMetadata.data, + magicMetadata.header, + fileKey, + ), + }; + } + if (pubMagicMetadata?.data) { + filePubMagicMetadata = { + ...pubMagicMetadata, + data: await worker.decryptMetadata( + pubMagicMetadata.data, + pubMagicMetadata.header, + fileKey, + ), + }; + } + return { + ...restFileProps, + key: fileKey, + metadata: fileMetadata, + magicMetadata: fileMagicMetadata, + pubMagicMetadata: filePubMagicMetadata, + }; + } catch (e) { + logError(e, "file decryption failed"); + throw e; + } +} + +export function getFileNameWithoutExtension(filename: string) { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return filename; + else return filename.slice(0, lastDotPosition); +} + +export function getFileExtensionWithDot(filename: string) { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return ""; + else return filename.slice(lastDotPosition); +} + +export function splitFilenameAndExtension(filename: string): [string, string] { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return [filename, null]; + else + return [ + filename.slice(0, lastDotPosition), + filename.slice(lastDotPosition + 1), + ]; +} + +export function getFileExtension(filename: string) { + return splitFilenameAndExtension(filename)[1]?.toLocaleLowerCase(); +} + +export function generateStreamFromArrayBuffer(data: Uint8Array) { + return new ReadableStream({ + async start(controller: ReadableStreamDefaultController) { + controller.enqueue(data); + controller.close(); + }, + }); +} + +export async function getRenderableFileURL(file: EnteFile, fileBlob: Blob) { + switch (file.metadata.fileType) { + case FILE_TYPE.IMAGE: { + const convertedBlob = await getRenderableImage( + file.metadata.title, + fileBlob, + ); + const { originalURL, convertedURL } = getFileObjectURLs( + fileBlob, + convertedBlob, + ); + return { + converted: [convertedURL], + original: [originalURL], + }; + } + case FILE_TYPE.LIVE_PHOTO: { + return await getRenderableLivePhotoURL(file, fileBlob); + } + case FILE_TYPE.VIDEO: { + const convertedBlob = await getPlayableVideo( + file.metadata.title, + fileBlob, + ); + const { originalURL, convertedURL } = getFileObjectURLs( + fileBlob, + convertedBlob, + ); + return { + converted: [convertedURL], + original: [originalURL], + }; + } + default: { + const previewURL = await createTypedObjectURL( + fileBlob, + file.metadata.title, + ); + return { + converted: [previewURL], + original: [previewURL], + }; + } + } +} + +async function getRenderableLivePhotoURL( + file: EnteFile, + fileBlob: Blob, +): Promise<{ original: string[]; converted: string[] }> { + const livePhoto = await decodeLivePhoto(file, fileBlob); + const imageBlob = new Blob([livePhoto.image]); + const videoBlob = new Blob([livePhoto.video]); + const convertedImageBlob = await getRenderableImage( + livePhoto.imageNameTitle, + imageBlob, + ); + const convertedVideoBlob = await getPlayableVideo( + livePhoto.videoNameTitle, + videoBlob, + true, + ); + const { originalURL: originalImageURL, convertedURL: convertedImageURL } = + getFileObjectURLs(imageBlob, convertedImageBlob); + + const { originalURL: originalVideoURL, convertedURL: convertedVideoURL } = + getFileObjectURLs(videoBlob, convertedVideoBlob); + return { + converted: [convertedImageURL, convertedVideoURL], + original: [originalImageURL, originalVideoURL], + }; +} + +export async function getPlayableVideo( + videoNameTitle: string, + videoBlob: Blob, + forceConvert = false, +) { + try { + const isPlayable = await isPlaybackPossible( + URL.createObjectURL(videoBlob), + ); + if (isPlayable && !forceConvert) { + return videoBlob; + } else { + if (!forceConvert && !isElectron()) { + return null; + } + addLogLine( + "video format not supported, converting it name:", + videoNameTitle, + ); + const mp4ConvertedVideo = await ffmpegService.convertToMP4( + new File([videoBlob], videoNameTitle), + ); + addLogLine("video successfully converted", videoNameTitle); + return new Blob([await mp4ConvertedVideo.arrayBuffer()]); + } + } catch (e) { + addLogLine("video conversion failed", videoNameTitle); + logError(e, "video conversion failed"); + return null; + } +} + +export async function getRenderableImage(fileName: string, imageBlob: Blob) { + let fileTypeInfo: FileTypeInfo; + try { + const tempFile = new File([imageBlob], fileName); + fileTypeInfo = await getFileType(tempFile); + addLocalLog(() => `file type info: ${JSON.stringify(fileTypeInfo)}`); + const { exactType } = fileTypeInfo; + let convertedImageBlob: Blob; + if (isRawFile(exactType)) { + try { + if (!isSupportedRawFormat(exactType)) { + throw Error(CustomError.UNSUPPORTED_RAW_FORMAT); + } + + if (!isElectron()) { + throw Error(CustomError.NOT_AVAILABLE_ON_WEB); + } + addLogLine( + `RawConverter called for ${fileName}-${convertBytesToHumanReadable( + imageBlob.size, + )}`, + ); + // convertedImageBlob = await imageProcessor.convertToJPEG( + // imageBlob, + // fileName + // ); + addLogLine(`${fileName} successfully converted`); + } catch (e) { + try { + if (!isFileHEIC(exactType)) { + throw e; + } + addLogLine( + `HEICConverter called for ${fileName}-${convertBytesToHumanReadable( + imageBlob.size, + )}`, + ); + convertedImageBlob = + await heicConversionService.convert(imageBlob); + addLogLine(`${fileName} successfully converted`); + } catch (e) { + throw Error(CustomError.NON_PREVIEWABLE_FILE); + } + } + return convertedImageBlob; + } else { + return imageBlob; + } + } catch (e) { + logError(e, "get Renderable Image failed", { fileTypeInfo }); + return null; + } +} + +export function isFileHEIC(exactType: string) { + return ( + exactType.toLowerCase().endsWith(TYPE_HEIC) || + exactType.toLowerCase().endsWith(TYPE_HEIF) + ); +} + +export function isRawFile(exactType: string) { + return RAW_FORMATS.includes(exactType.toLowerCase()); +} + +export function isRawFileFromFileName(fileName: string) { + for (const rawFormat of RAW_FORMATS) { + if (fileName.toLowerCase().endsWith(rawFormat)) { + return true; + } + } + return false; +} + +export function isSupportedRawFormat(exactType: string) { + return SUPPORTED_RAW_FORMATS.includes(exactType.toLowerCase()); +} + +export function mergeMetadata(files: EnteFile[]): EnteFile[] { + return files.map((file) => { + if (file.pubMagicMetadata?.data.editedTime) { + file.metadata.creationTime = file.pubMagicMetadata.data.editedTime; + } + if (file.pubMagicMetadata?.data.editedName) { + file.metadata.title = file.pubMagicMetadata.data.editedName; + } + + return file; + }); +} + +export async function getFileFromURL(fileURL: string) { + const fileBlob = await (await fetch(fileURL)).blob(); + const fileFile = new File([fileBlob], "temp"); + return fileFile; +} + +export function getUniqueFiles(files: EnteFile[]) { + const idSet = new Set(); + const uniqueFiles = files.filter((file) => { + if (!idSet.has(file.id)) { + idSet.add(file.id); + return true; + } else { + return false; + } + }); + + return uniqueFiles; +} + +export const isImageOrVideo = (fileType: FILE_TYPE) => + [FILE_TYPE.IMAGE, FILE_TYPE.VIDEO].includes(fileType); + +export const getArchivedFiles = (files: EnteFile[]) => { + return files.filter(isArchivedFile).map((file) => file.id); +}; + +export const createTypedObjectURL = async (blob: Blob, fileName: string) => { + const type = await getFileType(new File([blob], fileName)); + return URL.createObjectURL(new Blob([blob], { type: type.mimeType })); +}; + +export const getUserOwnedFiles = (files: EnteFile[]) => { + const user: User = getData(LS_KEYS.USER); + if (!user?.id) { + throw Error("user missing"); + } + return files.filter((file) => file.ownerID === user.id); +}; + +// doesn't work on firefox +export const copyFileToClipboard = async (fileUrl: string) => { + const canvas = document.createElement("canvas"); + const canvasCTX = canvas.getContext("2d"); + const image = new Image(); + + const blobPromise = new Promise((resolve, reject) => { + let timeout: NodeJS.Timeout = null; + try { + image.setAttribute("src", fileUrl); + image.onload = () => { + canvas.width = image.width; + canvas.height = image.height; + canvasCTX.drawImage(image, 0, 0, image.width, image.height); + canvas.toBlob( + (blob) => { + resolve(blob); + }, + "image/png", + 1, + ); + + clearTimeout(timeout); + }; + } catch (e) { + void logError(e, "failed to copy to clipboard"); + reject(e); + } finally { + clearTimeout(timeout); + } + timeout = setTimeout( + () => reject(Error(CustomError.WAIT_TIME_EXCEEDED)), + WAIT_TIME_IMAGE_CONVERSION, + ); + }); + + const { ClipboardItem } = window; + + await navigator.clipboard + .write([new ClipboardItem({ "image/png": blobPromise })]) + .catch((e) => logError(e, "failed to copy to clipboard")); +}; + +export function getLatestVersionFiles(files: EnteFile[]) { + const latestVersionFiles = new Map(); + files.forEach((file) => { + const uid = `${file.collectionID}-${file.id}`; + if ( + !latestVersionFiles.has(uid) || + latestVersionFiles.get(uid).updationTime < file.updationTime + ) { + latestVersionFiles.set(uid, file); + } + }); + return Array.from(latestVersionFiles.values()).filter( + (file) => !file.isDeleted, + ); +} + +export function getPersonalFiles(files: EnteFile[], user: User) { + if (!user?.id) { + throw Error("user missing"); + } + return files.filter((file) => file.ownerID === user.id); +} + +export function getIDBasedSortedFiles(files: EnteFile[]) { + return files.sort((a, b) => a.id - b.id); +} + +export function constructFileToCollectionMap(files: EnteFile[]) { + const fileToCollectionsMap = new Map(); + (files ?? []).forEach((file) => { + if (!fileToCollectionsMap.get(file.id)) { + fileToCollectionsMap.set(file.id, []); + } + fileToCollectionsMap.get(file.id).push(file.collectionID); + }); + return fileToCollectionsMap; +} + +export const shouldShowAvatar = (file: EnteFile, user: User) => { + if (!file || !user) { + return false; + } + // is Shared file + else if (file.ownerID !== user.id) { + return true; + } + // is public collected file + else if ( + file.ownerID === user.id && + file.pubMagicMetadata?.data?.uploaderName + ) { + return true; + } else { + return false; + } +}; + +export const getPreviewableImage = async ( + file: EnteFile, + castToken: string, +): Promise => { + try { + let fileBlob: Blob; + const fileURL = + await CastDownloadManager.getCachedOriginalFile(file)[0]; + if (!fileURL) { + fileBlob = await new Response( + await CastDownloadManager.downloadFile(castToken, file), + ).blob(); + } else { + fileBlob = await (await fetch(fileURL)).blob(); + } + if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + const livePhoto = await decodeLivePhoto(file, fileBlob); + fileBlob = new Blob([livePhoto.image]); + } + const convertedBlob = await getRenderableImage( + file.metadata.title, + fileBlob, + ); + fileBlob = convertedBlob; + const fileType = await getFileType( + new File([fileBlob], file.metadata.title), + ); + + fileBlob = new Blob([fileBlob], { type: fileType.mimeType }); + return fileBlob; + } catch (e) { + logError(e, "failed to download file"); + } +}; + +const getFileObjectURLs = (originalBlob: Blob, convertedBlob: Blob) => { + const originalURL = URL.createObjectURL(originalBlob); + const convertedURL = convertedBlob + ? convertedBlob === originalBlob + ? originalURL + : URL.createObjectURL(convertedBlob) + : null; + return { originalURL, convertedURL }; +}; diff --git a/web/apps/cast/src/utils/file/livePhoto.ts b/web/apps/cast/src/utils/file/livePhoto.ts new file mode 100644 index 000000000..7d687217c --- /dev/null +++ b/web/apps/cast/src/utils/file/livePhoto.ts @@ -0,0 +1,42 @@ +import { FILE_TYPE } from "constants/file"; +import { getFileExtension } from "utils/file"; + +const IMAGE_EXTENSIONS = [ + "heic", + "heif", + "jpeg", + "jpg", + "png", + "gif", + "bmp", + "tiff", + "webp", +]; + +const VIDEO_EXTENSIONS = [ + "mov", + "mp4", + "m4v", + "avi", + "wmv", + "flv", + "mkv", + "webm", + "3gp", + "3g2", + "avi", + "ogv", + "mpg", + "mp", +]; + +export function getFileTypeFromExtensionForLivePhotoClustering( + filename: string, +) { + const extension = getFileExtension(filename)?.toLowerCase(); + if (IMAGE_EXTENSIONS.includes(extension)) { + return FILE_TYPE.IMAGE; + } else if (VIDEO_EXTENSIONS.includes(extension)) { + return FILE_TYPE.VIDEO; + } +} diff --git a/web/apps/cast/src/utils/magicMetadata/index.ts b/web/apps/cast/src/utils/magicMetadata/index.ts new file mode 100644 index 000000000..7beb45772 --- /dev/null +++ b/web/apps/cast/src/utils/magicMetadata/index.ts @@ -0,0 +1,97 @@ +import { Collection } from "types/collection"; +import { EnteFile } from "types/file"; +import { MagicMetadataCore, VISIBILITY_STATE } from "types/magicMetadata"; +import ComlinkCryptoWorker from "utils/comlink/ComlinkCryptoWorker"; + +export function isArchivedFile(item: EnteFile): boolean { + if (!item || !item.magicMetadata || !item.magicMetadata.data) { + return false; + } + return item.magicMetadata.data.visibility === VISIBILITY_STATE.ARCHIVED; +} + +export function isArchivedCollection(item: Collection): boolean { + if (!item) { + return false; + } + + if (item.magicMetadata && item.magicMetadata.data) { + return item.magicMetadata.data.visibility === VISIBILITY_STATE.ARCHIVED; + } + + if (item.sharedMagicMetadata && item.sharedMagicMetadata.data) { + return ( + item.sharedMagicMetadata.data.visibility === + VISIBILITY_STATE.ARCHIVED + ); + } + return false; +} + +export function isPinnedCollection(item: Collection) { + if ( + !item || + !item.magicMetadata || + !item.magicMetadata.data || + typeof item.magicMetadata.data === "string" || + typeof item.magicMetadata.data.order === "undefined" + ) { + return false; + } + return item.magicMetadata.data.order !== 0; +} + +export async function updateMagicMetadata( + magicMetadataUpdates: T, + originalMagicMetadata?: MagicMetadataCore, + decryptionKey?: string, +): Promise> { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + if (!originalMagicMetadata) { + originalMagicMetadata = getNewMagicMetadata(); + } + + if (typeof originalMagicMetadata?.data === "string") { + originalMagicMetadata.data = await cryptoWorker.decryptMetadata( + originalMagicMetadata.data, + originalMagicMetadata.header, + decryptionKey, + ); + } + // copies the existing magic metadata properties of the files and updates the visibility value + // The expected behavior while updating magic metadata is to let the existing property as it is and update/add the property you want + const magicMetadataProps: T = { + ...originalMagicMetadata.data, + ...magicMetadataUpdates, + }; + + const nonEmptyMagicMetadataProps = + getNonEmptyMagicMetadataProps(magicMetadataProps); + + const magicMetadata = { + ...originalMagicMetadata, + data: nonEmptyMagicMetadataProps, + count: Object.keys(nonEmptyMagicMetadataProps).length, + }; + + return magicMetadata; +} + +export const getNewMagicMetadata = (): MagicMetadataCore => { + return { + version: 1, + data: null, + header: null, + count: 0, + }; +}; + +export const getNonEmptyMagicMetadataProps = (magicMetadataProps: T): T => { + return Object.fromEntries( + Object.entries(magicMetadataProps).filter( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + ([_, v]) => v !== null && v !== undefined, + ), + ) as T; +}; diff --git a/web/apps/cast/src/utils/network/index.ts b/web/apps/cast/src/utils/network/index.ts new file mode 100644 index 000000000..f7bac98ec --- /dev/null +++ b/web/apps/cast/src/utils/network/index.ts @@ -0,0 +1,28 @@ +import { sleep } from "@ente/shared/sleep"; + +const waitTimeBeforeNextAttemptInMilliSeconds = [2000, 5000, 10000]; + +export async function retryAsyncFunction( + request: (abort?: () => void) => Promise, + waitTimeBeforeNextTry?: number[], +): Promise { + if (!waitTimeBeforeNextTry) { + waitTimeBeforeNextTry = waitTimeBeforeNextAttemptInMilliSeconds; + } + + for ( + let attemptNumber = 0; + attemptNumber <= waitTimeBeforeNextTry.length; + attemptNumber++ + ) { + try { + const resp = await request(); + return resp; + } catch (e) { + if (attemptNumber === waitTimeBeforeNextTry.length) { + throw e; + } + await sleep(waitTimeBeforeNextTry[attemptNumber]); + } + } +} diff --git a/web/apps/cast/src/utils/photoFrame/index.ts b/web/apps/cast/src/utils/photoFrame/index.ts new file mode 100644 index 000000000..0cb6fc201 --- /dev/null +++ b/web/apps/cast/src/utils/photoFrame/index.ts @@ -0,0 +1,148 @@ +import { logError } from "@ente/shared/sentry"; +import { FILE_TYPE } from "constants/file"; +import { EnteFile } from "types/file"; +import { MergedSourceURL } from "types/gallery"; + +const WAIT_FOR_VIDEO_PLAYBACK = 1 * 1000; + +export async function isPlaybackPossible(url: string): Promise { + return await new Promise((resolve) => { + const t = setTimeout(() => { + resolve(false); + }, WAIT_FOR_VIDEO_PLAYBACK); + + const video = document.createElement("video"); + video.addEventListener("canplay", function () { + clearTimeout(t); + video.remove(); // Clean up the video element + // also check for duration > 0 to make sure it is not a broken video + if (video.duration > 0) { + resolve(true); + } else { + resolve(false); + } + }); + video.addEventListener("error", function () { + clearTimeout(t); + video.remove(); + resolve(false); + }); + + video.src = url; + }); +} + +export async function playVideo(livePhotoVideo, livePhotoImage) { + const videoPlaying = !livePhotoVideo.paused; + if (videoPlaying) return; + livePhotoVideo.style.opacity = 1; + livePhotoImage.style.opacity = 0; + livePhotoVideo.load(); + livePhotoVideo.play().catch(() => { + pauseVideo(livePhotoVideo, livePhotoImage); + }); +} + +export async function pauseVideo(livePhotoVideo, livePhotoImage) { + const videoPlaying = !livePhotoVideo.paused; + if (!videoPlaying) return; + livePhotoVideo.pause(); + livePhotoVideo.style.opacity = 0; + livePhotoImage.style.opacity = 1; +} + +export function updateFileMsrcProps(file: EnteFile, url: string) { + file.msrc = url; + file.isSourceLoaded = false; + file.conversionFailed = false; + file.isConverted = false; + if (file.metadata.fileType === FILE_TYPE.IMAGE) { + file.src = url; + } else { + file.html = ` +
+ +
+ `; + } +} + +export async function updateFileSrcProps( + file: EnteFile, + mergedURL: MergedSourceURL, +) { + const urls = { + original: mergedURL.original.split(","), + converted: mergedURL.converted.split(","), + }; + let originalImageURL; + let originalVideoURL; + let convertedImageURL; + let convertedVideoURL; + let originalURL; + let isConverted; + let conversionFailed; + if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + [originalImageURL, originalVideoURL] = urls.original; + [convertedImageURL, convertedVideoURL] = urls.converted; + isConverted = + originalVideoURL !== convertedVideoURL || + originalImageURL !== convertedImageURL; + conversionFailed = !convertedVideoURL || !convertedImageURL; + } else if (file.metadata.fileType === FILE_TYPE.VIDEO) { + [originalVideoURL] = urls.original; + [convertedVideoURL] = urls.converted; + isConverted = originalVideoURL !== convertedVideoURL; + conversionFailed = !convertedVideoURL; + } else if (file.metadata.fileType === FILE_TYPE.IMAGE) { + [originalImageURL] = urls.original; + [convertedImageURL] = urls.converted; + isConverted = originalImageURL !== convertedImageURL; + conversionFailed = !convertedImageURL; + } else { + [originalURL] = urls.original; + isConverted = false; + conversionFailed = false; + } + + const isPlayable = !isConverted || (isConverted && !conversionFailed); + + file.w = window.innerWidth; + file.h = window.innerHeight; + file.isSourceLoaded = true; + file.originalImageURL = originalImageURL; + file.originalVideoURL = originalVideoURL; + file.isConverted = isConverted; + file.conversionFailed = conversionFailed; + + if (!isPlayable) { + return; + } + + if (file.metadata.fileType === FILE_TYPE.VIDEO) { + file.html = ` + + `; + } else if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + file.html = ` +
+ + +
+ `; + } else if (file.metadata.fileType === FILE_TYPE.IMAGE) { + file.src = convertedImageURL; + } else { + logError( + Error(`unknown file type - ${file.metadata.fileType}`), + "Unknown file type", + ); + file.src = originalURL; + } +} diff --git a/web/apps/cast/src/utils/temp/index.ts b/web/apps/cast/src/utils/temp/index.ts new file mode 100644 index 000000000..984f4abb0 --- /dev/null +++ b/web/apps/cast/src/utils/temp/index.ts @@ -0,0 +1,14 @@ +const CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + +export function generateTempName(length: number, suffix: string) { + let tempName = ""; + + const charactersLength = CHARACTERS.length; + for (let i = 0; i < length; i++) { + tempName += CHARACTERS.charAt( + Math.floor(Math.random() * charactersLength), + ); + } + return `${tempName}-${suffix}`; +} diff --git a/web/apps/cast/src/utils/time/format.ts b/web/apps/cast/src/utils/time/format.ts new file mode 100644 index 000000000..0e2dc68b5 --- /dev/null +++ b/web/apps/cast/src/utils/time/format.ts @@ -0,0 +1,78 @@ +import i18n, { t } from "i18next"; + +const dateTimeFullFormatter1 = new Intl.DateTimeFormat(i18n.language, { + weekday: "short", + month: "short", + day: "numeric", +}); + +const dateTimeFullFormatter2 = new Intl.DateTimeFormat(i18n.language, { + year: "numeric", +}); +const dateTimeShortFormatter = new Intl.DateTimeFormat(i18n.language, { + month: "short", + day: "numeric", + year: "numeric", + hour: "2-digit", + minute: "2-digit", +}); + +const timeFormatter = new Intl.DateTimeFormat(i18n.language, { + timeStyle: "short", +}); + +export function formatDateFull(date: number | Date) { + return [dateTimeFullFormatter1, dateTimeFullFormatter2] + .map((f) => f.format(date)) + .join(" "); +} + +export function formatDate(date: number | Date) { + const withinYear = + new Date().getFullYear() === new Date(date).getFullYear(); + const dateTimeFormat2 = !withinYear ? dateTimeFullFormatter2 : null; + return [dateTimeFullFormatter1, dateTimeFormat2] + .filter((f) => !!f) + .map((f) => f.format(date)) + .join(" "); +} + +export function formatDateTimeShort(date: number | Date) { + return dateTimeShortFormatter.format(date); +} + +export function formatTime(date: number | Date) { + return timeFormatter.format(date).toUpperCase(); +} + +export function formatDateTimeFull(dateTime: number | Date): string { + return [formatDateFull(dateTime), t("at"), formatTime(dateTime)].join(" "); +} + +export function formatDateTime(dateTime: number | Date): string { + return [formatDate(dateTime), t("at"), formatTime(dateTime)].join(" "); +} + +export function formatDateRelative(date: number) { + const units = { + year: 24 * 60 * 60 * 1000 * 365, + month: (24 * 60 * 60 * 1000 * 365) / 12, + day: 24 * 60 * 60 * 1000, + hour: 60 * 60 * 1000, + minute: 60 * 1000, + second: 1000, + }; + const relativeDateFormat = new Intl.RelativeTimeFormat(i18n.language, { + localeMatcher: "best fit", + numeric: "always", + style: "long", + }); + const elapsed = date - Date.now(); // "Math.abs" accounts for both "past" & "future" scenarios + + for (const u in units) + if (Math.abs(elapsed) > units[u] || u === "second") + return relativeDateFormat.format( + Math.round(elapsed / units[u]), + u as Intl.RelativeTimeFormatUnit, + ); +} diff --git a/web/apps/cast/src/utils/time/index.ts b/web/apps/cast/src/utils/time/index.ts new file mode 100644 index 000000000..592d2c7af --- /dev/null +++ b/web/apps/cast/src/utils/time/index.ts @@ -0,0 +1,136 @@ +export interface TimeDelta { + hours?: number; + days?: number; + months?: number; + years?: number; +} + +interface DateComponent { + year: T; + month: T; + day: T; + hour: T; + minute: T; + second: T; +} + +export function validateAndGetCreationUnixTimeInMicroSeconds(dateTime: Date) { + if (!dateTime || isNaN(dateTime.getTime())) { + return null; + } + const unixTime = dateTime.getTime() * 1000; + //ignoring dateTimeString = "0000:00:00 00:00:00" + if (unixTime === Date.UTC(0, 0, 0, 0, 0, 0, 0) || unixTime === 0) { + return null; + } else if (unixTime > Date.now() * 1000) { + return null; + } else { + return unixTime; + } +} + +/* +generates data component for date in format YYYYMMDD-HHMMSS + */ +export function parseDateFromFusedDateString(dateTime: string) { + const dateComponent: DateComponent = convertDateComponentToNumber({ + year: dateTime.slice(0, 4), + month: dateTime.slice(4, 6), + day: dateTime.slice(6, 8), + hour: dateTime.slice(9, 11), + minute: dateTime.slice(11, 13), + second: dateTime.slice(13, 15), + }); + return validateAndGetDateFromComponents(dateComponent); +} + +/* sample date format = 2018-08-19 12:34:45 + the date has six symbol separated number values + which we would extract and use to form the date + */ +export function tryToParseDateTime(dateTime: string): Date { + const dateComponent = getDateComponentsFromSymbolJoinedString(dateTime); + if (dateComponent.year?.length === 8 && dateComponent.month?.length === 6) { + // the filename has size 8 consecutive and then 6 consecutive digits + // high possibility that the it is a date in format YYYYMMDD-HHMMSS + const possibleDateTime = dateComponent.year + "-" + dateComponent.month; + return parseDateFromFusedDateString(possibleDateTime); + } + return validateAndGetDateFromComponents( + convertDateComponentToNumber(dateComponent), + ); +} + +function getDateComponentsFromSymbolJoinedString( + dateTime: string, +): DateComponent { + const [year, month, day, hour, minute, second] = + dateTime.match(/\d+/g) ?? []; + + return { year, month, day, hour, minute, second }; +} + +function validateAndGetDateFromComponents( + dateComponent: DateComponent, +) { + let date = getDateFromComponents(dateComponent); + if (hasTimeValues(dateComponent) && !isTimePartValid(date, dateComponent)) { + // if the date has time values but they are not valid + // then we remove the time values and try to validate the date + date = getDateFromComponents(removeTimeValues(dateComponent)); + } + if (!isDatePartValid(date, dateComponent)) { + return null; + } + return date; +} + +function isTimePartValid(date: Date, dateComponent: DateComponent) { + return ( + date.getHours() === dateComponent.hour && + date.getMinutes() === dateComponent.minute && + date.getSeconds() === dateComponent.second + ); +} + +function isDatePartValid(date: Date, dateComponent: DateComponent) { + return ( + date.getFullYear() === dateComponent.year && + date.getMonth() === dateComponent.month && + date.getDate() === dateComponent.day + ); +} + +function convertDateComponentToNumber( + dateComponent: DateComponent, +): DateComponent { + return { + year: Number(dateComponent.year), + // https://stackoverflow.com/questions/2552483/why-does-the-month-argument-range-from-0-to-11-in-javascripts-date-constructor + month: Number(dateComponent.month) - 1, + day: Number(dateComponent.day), + hour: Number(dateComponent.hour), + minute: Number(dateComponent.minute), + second: Number(dateComponent.second), + }; +} + +function getDateFromComponents(dateComponent: DateComponent) { + const { year, month, day, hour, minute, second } = dateComponent; + if (hasTimeValues(dateComponent)) { + return new Date(year, month, day, hour, minute, second); + } else { + return new Date(year, month, day); + } +} + +function hasTimeValues(dateComponent: DateComponent) { + const { hour, minute, second } = dateComponent; + return !isNaN(hour) && !isNaN(minute) && !isNaN(second); +} + +function removeTimeValues( + dateComponent: DateComponent, +): DateComponent { + return { ...dateComponent, hour: 0, minute: 0, second: 0 }; +} diff --git a/web/apps/cast/src/worker/convert.worker.ts b/web/apps/cast/src/worker/convert.worker.ts new file mode 100644 index 000000000..a805752ac --- /dev/null +++ b/web/apps/cast/src/worker/convert.worker.ts @@ -0,0 +1,10 @@ +import * as Comlink from "comlink"; +import { convertHEIC } from "services/wasmHeicConverter/wasmHEICConverterClient"; + +export class DedicatedConvertWorker { + async convertHEIC(fileBlob: Blob, format: string) { + return convertHEIC(fileBlob, format); + } +} + +Comlink.expose(DedicatedConvertWorker, self); diff --git a/web/apps/cast/src/worker/crypto.worker.ts b/web/apps/cast/src/worker/crypto.worker.ts new file mode 100644 index 000000000..ac1d52a0d --- /dev/null +++ b/web/apps/cast/src/worker/crypto.worker.ts @@ -0,0 +1,215 @@ +import * as libsodium from "@ente/shared/crypto/internal/libsodium"; +import * as Comlink from "comlink"; +import { StateAddress } from "libsodium-wrappers"; + +const textDecoder = new TextDecoder(); +const textEncoder = new TextEncoder(); +export class DedicatedCryptoWorker { + async decryptMetadata( + encryptedMetadata: string, + header: string, + key: string, + ) { + const encodedMetadata = await libsodium.decryptChaChaOneShot( + await libsodium.fromB64(encryptedMetadata), + await libsodium.fromB64(header), + key, + ); + return JSON.parse(textDecoder.decode(encodedMetadata)); + } + + async decryptThumbnail( + fileData: Uint8Array, + header: Uint8Array, + key: string, + ) { + return libsodium.decryptChaChaOneShot(fileData, header, key); + } + + async decryptEmbedding( + encryptedEmbedding: string, + header: string, + key: string, + ) { + const encodedEmbedding = await libsodium.decryptChaChaOneShot( + await libsodium.fromB64(encryptedEmbedding), + await libsodium.fromB64(header), + key, + ); + return Float32Array.from( + JSON.parse(textDecoder.decode(encodedEmbedding)), + ); + } + + async decryptFile(fileData: Uint8Array, header: Uint8Array, key: string) { + return libsodium.decryptChaCha(fileData, header, key); + } + + async encryptMetadata(metadata: Object, key: string) { + const encodedMetadata = textEncoder.encode(JSON.stringify(metadata)); + + const { file: encryptedMetadata } = + await libsodium.encryptChaChaOneShot(encodedMetadata, key); + const { encryptedData, ...other } = encryptedMetadata; + return { + file: { + encryptedData: await libsodium.toB64(encryptedData), + ...other, + }, + key, + }; + } + + async encryptThumbnail(fileData: Uint8Array, key: string) { + return libsodium.encryptChaChaOneShot(fileData, key); + } + + async encryptEmbedding(embedding: Float32Array, key: string) { + const encodedEmbedding = textEncoder.encode( + JSON.stringify(Array.from(embedding)), + ); + const { file: encryptEmbedding } = await libsodium.encryptChaChaOneShot( + encodedEmbedding, + key, + ); + const { encryptedData, ...other } = encryptEmbedding; + return { + file: { + encryptedData: await libsodium.toB64(encryptedData), + ...other, + }, + key, + }; + } + + async encryptFile(fileData: Uint8Array) { + return libsodium.encryptChaCha(fileData); + } + + async encryptFileChunk( + data: Uint8Array, + pushState: StateAddress, + isFinalChunk: boolean, + ) { + return libsodium.encryptFileChunk(data, pushState, isFinalChunk); + } + + async initChunkEncryption() { + return libsodium.initChunkEncryption(); + } + + async initChunkDecryption(header: Uint8Array, key: Uint8Array) { + return libsodium.initChunkDecryption(header, key); + } + + async decryptFileChunk(fileData: Uint8Array, pullState: StateAddress) { + return libsodium.decryptFileChunk(fileData, pullState); + } + + async initChunkHashing() { + return libsodium.initChunkHashing(); + } + + async hashFileChunk(hashState: StateAddress, chunk: Uint8Array) { + return libsodium.hashFileChunk(hashState, chunk); + } + + async completeChunkHashing(hashState: StateAddress) { + return libsodium.completeChunkHashing(hashState); + } + + async deriveKey( + passphrase: string, + salt: string, + opsLimit: number, + memLimit: number, + ) { + return libsodium.deriveKey(passphrase, salt, opsLimit, memLimit); + } + + async deriveSensitiveKey(passphrase: string, salt: string) { + return libsodium.deriveSensitiveKey(passphrase, salt); + } + + async deriveInteractiveKey(passphrase: string, salt: string) { + return libsodium.deriveInteractiveKey(passphrase, salt); + } + + async decryptB64(data: string, nonce: string, key: string) { + return libsodium.decryptB64(data, nonce, key); + } + + async decryptToUTF8(data: string, nonce: string, key: string) { + return libsodium.decryptToUTF8(data, nonce, key); + } + + async encryptToB64(data: string, key: string) { + return libsodium.encryptToB64(data, key); + } + + async generateKeyAndEncryptToB64(data: string) { + return libsodium.generateKeyAndEncryptToB64(data); + } + + async encryptUTF8(data: string, key: string) { + return libsodium.encryptUTF8(data, key); + } + + async generateEncryptionKey() { + return libsodium.generateEncryptionKey(); + } + + async generateSaltToDeriveKey() { + return libsodium.generateSaltToDeriveKey(); + } + + async generateKeyPair() { + return libsodium.generateKeyPair(); + } + + async boxSealOpen(input: string, publicKey: string, secretKey: string) { + return libsodium.boxSealOpen(input, publicKey, secretKey); + } + + async boxSeal(input: string, publicKey: string) { + return libsodium.boxSeal(input, publicKey); + } + + async generateSubKey( + key: string, + subKeyLength: number, + subKeyID: number, + context: string, + ) { + return libsodium.generateSubKey(key, subKeyLength, subKeyID, context); + } + + async fromUTF8(string: string) { + return libsodium.fromUTF8(string); + } + async toUTF8(data: string) { + return libsodium.toUTF8(data); + } + + async toB64(data: Uint8Array) { + return libsodium.toB64(data); + } + + async toURLSafeB64(data: Uint8Array) { + return libsodium.toURLSafeB64(data); + } + + async fromB64(string: string) { + return libsodium.fromB64(string); + } + + async toHex(string: string) { + return libsodium.toHex(string); + } + + async fromHex(string: string) { + return libsodium.fromHex(string); + } +} + +Comlink.expose(DedicatedCryptoWorker, self); diff --git a/web/apps/cast/src/worker/ffmpeg.worker.ts b/web/apps/cast/src/worker/ffmpeg.worker.ts new file mode 100644 index 000000000..d3f503abb --- /dev/null +++ b/web/apps/cast/src/worker/ffmpeg.worker.ts @@ -0,0 +1,15 @@ +import * as Comlink from "comlink"; +import { WasmFFmpeg } from "services/wasm/ffmpeg"; + +export class DedicatedFFmpegWorker { + wasmFFmpeg: WasmFFmpeg; + constructor() { + this.wasmFFmpeg = new WasmFFmpeg(); + } + + run(cmd, inputFile, outputFileName, dontTimeout) { + return this.wasmFFmpeg.run(cmd, inputFile, outputFileName, dontTimeout); + } +} + +Comlink.expose(DedicatedFFmpegWorker, self); diff --git a/web/apps/cast/tsconfig.json b/web/apps/cast/tsconfig.json new file mode 100644 index 000000000..cbdd32f74 --- /dev/null +++ b/web/apps/cast/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./src", + "downlevelIteration": true, + "jsx": "preserve", + "jsxImportSource": "@emotion/react", + "lib": ["dom", "dom.iterable", "esnext", "webworker"], + "noImplicitAny": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "strictNullChecks": false, + "target": "es5", + "useUnknownInCatchVariables": false + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.js", + "../../packages/shared/themes/mui-theme.d.ts", + "../../packages/accounts/**/*.tsx" + ], + "exclude": ["node_modules", "out", ".next", "thirdparty"] +} diff --git a/web/apps/photos/.env.development b/web/apps/photos/.env.development new file mode 100644 index 000000000..0c5a6eacd --- /dev/null +++ b/web/apps/photos/.env.development @@ -0,0 +1,86 @@ +# Sample configuration file +# +# All variables are commented out by default. Copy paste this into a new file +# called `.env.local` (or create a new file with that name) and add the +# environment variables you want to apply during development. `.env.local` is +# gitignored, so you can freely customize it for your local setup. +# +# `.env.local` is picked up by Next.js when NODE_ENV is 'development' (it is +# 'production' by default, but gets set to 'development' when we run `next dev`) +# +# Alternatively, these variables can be provided as environment variables, say: +# +# NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 NEXT_PUBLIC_ENTE_DIRECT_UPLOAD=true yarn dev:photos +# +# Variables prefixed with NEXT_PUBLIC_ are made available when Next.js runs our +# code in the browser (Behind the scenes, Next.js just hardcodes occurrences of +# `process.env.NEXT_PUBLIC_FOO` with the value of the `NEXT_PUBLIC_FOO` env var +# when the bundle is built). See +# https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables +# +# A development build behaves differently in some aspects: +# +# - Logs go to the browser console (in addition to the log file) +# - There is some additional logging +# - Sentry is not initialized +# - ... (search for isDevBuild to see all impacts) +# +# Note that even in development build, the app still connects to the production +# APIs by default (can be customized using the env vars below). This is usually +# a good default, for example a customer cloning this repository want to build +# and run the client from source but still use their actual Ente account. + +# The Ente API endpoint +# +# NEXT_PUBLIC_ENTE_ENDPOINT = http://localhost:3000 + +# The Ente API endpoint for accounts related functionality +# +# NEXT_PUBLIC_ENTE_ACCOUNTS_ENDPOINT = http://localhost:3001 + +# The Ente API endpoint for payments related functionality +# +# NEXT_PUBLIC_ENTE_PAYMENT_ENDPOINT = http://localhost:3001 + +# The URL for the shared albums deployment +# +# The shared albums are served from the photos app code, and "albums.ente.io" is +# a CNAME alias to the main photo app itself. When the main index page loads, it +# checks to see if the host is "albums.ente.io", and if so, redirects to +# /shared-albums. +# +# This environment variable allows us to check for a host other than +# "albums.ente.io". By setting this to localhost:3002 and running the photos app +# on port 3002 (using `yarn dev:albums`), we can connect to it and emulate the +# production behaviour. +# +# Enhancement: Consider splitting this into a separate app/ in this repository. +# That can also reduce bundle sizes and make it load faster. +# +# NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT = http://localhost:3002 + +# The URL of the family plans web app deployment +# +# Currently the source code for the family plan related pages is in a separate +# repository (https://github.com/ente-io/families). The mobile app also uses +# these pages. +# +# Enhancement: Consider moving that into the app/ folder in this repository. +# +# NEXT_PUBLIC_ENTE_FAMILY_PORTAL_ENDPOINT = http://localhost:3003 + +# Set this to "true" to disable the upload of files via Cloudflare Workers. +# +# These workers were introduced as a way of make file uploads faster: +# https://ente.io/blog/tech/making-uploads-faster/ +# +# By default, that's the route we take. However, during development it can be +# convenient to turn this flag on to directly upload to the S3-compatible URLs +# returned by the ente API. +# +# NEXT_PUBLIC_ENTE_DIRECT_UPLOAD = true + +# The path of the JSON file which contains the expected results of our +# integration tests. See `upload.test.ts` for more details. +# +# NEXT_PUBLIC_ENTE_TEST_EXPECTED_JSON_PATH = /path/to/dataset/expected.json diff --git a/web/apps/photos/.env.localhost b/web/apps/photos/.env.localhost new file mode 100644 index 000000000..ef1bf679d --- /dev/null +++ b/web/apps/photos/.env.localhost @@ -0,0 +1,21 @@ +# Develop against a server running on localhost +# +# Copy this file to `.env`. Then if you run a local instance of the web client +# with `yarn dev:photos`, it will connect to a locally running instance of the +# server. Not everything will work, you might need to set other env vars (see +# `.env.development`), but it should give you a usable baseline setup. +# +# Equivalent CLI command using environment variables would be +# +# NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 NEXT_PUBLIC_ENTE_DIRECT_UPLOAD=true yarn dev:photos +# + +NEXT_PUBLIC_ENTE_ENDPOINT = http://localhost:8080 +NEXT_PUBLIC_ENTE_DIRECT_UPLOAD = true + +# If you wish to preview how the shared albums work, you can use `yarn +# dev:albums`. The equivalent CLI command using env vars would be +# +# NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002 NEXT_PUBLIC_ENTE_DIRECT_UPLOAD=true yarn dev:albums + +NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT = http://localhost:3002 diff --git a/web/apps/photos/.eslintrc.js b/web/apps/photos/.eslintrc.js new file mode 100644 index 000000000..fdec1a6b9 --- /dev/null +++ b/web/apps/photos/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + // When root is set to true, ESLint will stop looking for configuration files in parent directories. + // This is required here to ensure desktop picks the right eslint config, where this app is + // packaged as a submodule. + root: true, + extends: ["@ente/eslint-config"], + parser: "@typescript-eslint/parser", + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.json", + }, + ignorePatterns: [".eslintrc.js", "out", "thirdparty", "public"], +}; diff --git a/web/apps/photos/next.config.js b/web/apps/photos/next.config.js new file mode 100644 index 000000000..eea88bf93 --- /dev/null +++ b/web/apps/photos/next.config.js @@ -0,0 +1,3 @@ +const nextConfigBase = require("@/next/next.config.base.js"); + +module.exports = nextConfigBase; diff --git a/web/apps/photos/package.json b/web/apps/photos/package.json new file mode 100644 index 000000000..1a088c99d --- /dev/null +++ b/web/apps/photos/package.json @@ -0,0 +1,80 @@ +{ + "name": "photos", + "version": "0.0.0", + "private": true, + "dependencies": { + "@/next": "*", + "@date-io/date-fns": "^2.14.0", + "@ente/accounts": "*", + "@ente/eslint-config": "*", + "@ente/shared": "*", + "@mui/x-date-pickers": "^5.0.0-alpha.6", + "@stripe/stripe-js": "^1.13.2", + "@tensorflow-models/coco-ssd": "^2.2.2", + "@tensorflow/tfjs-backend-cpu": "^4.10.0", + "@tensorflow/tfjs-backend-webgl": "^4.9.0", + "@tensorflow/tfjs-converter": "^4.10.0", + "@tensorflow/tfjs-core": "^4.10.0", + "@tensorflow/tfjs-tflite": "0.0.1-alpha.7", + "@zip.js/zip.js": "2.4.2", + "bip39": "^3.0.4", + "blazeface-back": "^0.0.9", + "bootstrap": "^4.5.2", + "bs58": "^5.0.0", + "chrono-node": "^2.2.6", + "comlink": "^4.3.0", + "debounce": "^2.0.0", + "density-clustering": "^1.3.0", + "eventemitter3": "^4.0.7", + "exifr": "^7.1.3", + "fast-srp-hap": "^2.0.4", + "ffmpeg-wasm": "file:./thirdparty/ffmpeg-wasm", + "file-type": "^16.5.4", + "formik": "^2.1.5", + "hdbscan": "0.0.1-alpha.5", + "heic-convert": "^2.0.0", + "idb": "^7.1.1", + "jszip": "3.10.1", + "leaflet": "^1.9.4", + "leaflet-defaulticon-compatibility": "^0.1.1", + "localforage": "^1.9.0", + "memoize-one": "^6.0.0", + "ml-matrix": "^6.10.4", + "otpauth": "^9.0.2", + "p-debounce": "^4.0.0", + "p-queue": "^7.1.0", + "photoswipe": "file:./thirdparty/photoswipe", + "piexifjs": "^1.0.6", + "react-bootstrap": "^1.3.0", + "react-datepicker": "^4.16.0", + "react-dropzone": "^11.2.4", + "react-otp-input": "^2.3.1", + "react-select": "^4.3.1", + "react-top-loading-bar": "^2.0.1", + "react-virtualized-auto-sizer": "^1.0.2", + "react-window": "^1.8.6", + "sanitize-filename": "^1.6.3", + "similarity-transformation": "^0.0.1", + "transformation-matrix": "^2.15.0", + "uuid": "^9.0.0", + "vscode-uri": "^3.0.7", + "xml-js": "^1.6.11", + "zxcvbn": "^4.4.2" + }, + "devDependencies": { + "@ente/eslint-config": "*", + "@next/bundle-analyzer": "^14.1", + "@types/bs58": "^4.0.1", + "@types/leaflet": "^1.9.3", + "@types/photoswipe": "^4.1.1", + "@types/react-collapse": "^5.0.1", + "@types/react-datepicker": "^4.15.0", + "@types/react-select": "^4.0.15", + "@types/react-virtualized-auto-sizer": "^1.0.1", + "@types/react-window": "^1.8.2", + "@types/react-window-infinite-loader": "^1.0.3", + "@types/uuid": "^9.0.2", + "@types/wicg-file-system-access": "^2020.9.5", + "@types/zxcvbn": "^4.4.1" + } +} diff --git a/web/apps/photos/public/.well-known/apple-app-site-association b/web/apps/photos/public/.well-known/apple-app-site-association new file mode 100644 index 000000000..e05abb216 --- /dev/null +++ b/web/apps/photos/public/.well-known/apple-app-site-association @@ -0,0 +1,9 @@ +{ + "webcredentials": { + "apps": [ + "6Z68YJY9Q2.io.ente.frame", + "2BUSYC7FN9.io.ente.frame", + "2BUSYC7FN9.io.ente.auth" + ] + } +} diff --git a/web/apps/photos/public/.well-known/assetlinks.json b/web/apps/photos/public/.well-known/assetlinks.json new file mode 100644 index 000000000..6ef89baad --- /dev/null +++ b/web/apps/photos/public/.well-known/assetlinks.json @@ -0,0 +1,56 @@ +[ + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "photos-web", + "site": "https://web.ente.io" + } + }, + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "auth-web", + "site": "https://auth.ente.io" + } + }, + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "android_app", + "package_name": "io.ente.photos.independent", + "sha256_cert_fingerprints": [ + "35:ED:56:81:B7:0B:B3:BD:35:D9:0D:85:6A:F5:69:4C:50:4D:EF:46:AA:D8:3F:77:7B:1C:67:5C:F4:51:35:0B" + ] + } + }, + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "android_app", + "package_name": "io.ente.photos", + "sha256_cert_fingerprints": [ + "35:ED:56:81:B7:0B:B3:BD:35:D9:0D:85:6A:F5:69:4C:50:4D:EF:46:AA:D8:3F:77:7B:1C:67:5C:F4:51:35:0B" + ] + } + }, + { + "relation": [ + "delegate_permission/common.get_login_creds" + ], + "target": { + "namespace": "android_app", + "package_name": "io.ente.auth", + "sha256_cert_fingerprints": [ + "DD:CE:AA:D6:88:F0:05:D3:40:68:94:BA:00:FC:E3:FF:82:54:13:0A:10:2B:B2:52:E6:3C:D8:EA:A9:72:B2:EF" + ] + } + } +] diff --git a/web/apps/photos/public/_headers b/web/apps/photos/public/_headers new file mode 100644 index 000000000..72dc5bb5c --- /dev/null +++ b/web/apps/photos/public/_headers @@ -0,0 +1,10 @@ +/* + Cache-Control: no-store, must-revalidate + Strict-Transport-Security: max-age=63072000 + X-Content-Type-Options: nosniff + X-Download-Options: noopen + X-Frame-Options: deny + X-XSS-Protection: 1; mode=block + Referrer-Policy: same-origin + Content-Security-Policy-Report-Only: default-src 'self'; img-src 'self' blob: data:; media-src 'self' blob:; style-src 'self' 'unsafe-inline'; font-src 'self'; script-src 'self' 'unsafe-eval' blob:; manifest-src 'self'; child-src 'self' blob:; object-src 'none'; connect-src 'self' https://*.ente.io data: blob: https://ente-prod-eu.s3.eu-central-003.backblazeb2.com https://ente-prod-v3.s3.eu-central-2.wasabisys.com/ ; base-uri 'self'; frame-ancestors 'none'; form-action 'none'; report-uri https://csp-reporter.ente.io; report-to https://csp-reporter.ente.io; + diff --git a/web/apps/photos/public/fonts/OFL.txt b/web/apps/photos/public/fonts/OFL.txt new file mode 100644 index 000000000..ad214842c --- /dev/null +++ b/web/apps/photos/public/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/web/apps/photos/public/fonts/inter-v11-latin-500.woff b/web/apps/photos/public/fonts/inter-v11-latin-500.woff new file mode 100644 index 000000000..a5b7c7a2a Binary files /dev/null and b/web/apps/photos/public/fonts/inter-v11-latin-500.woff differ diff --git a/web/apps/photos/public/fonts/inter-v11-latin-500.woff2 b/web/apps/photos/public/fonts/inter-v11-latin-500.woff2 new file mode 100644 index 000000000..0e3db59fe Binary files /dev/null and b/web/apps/photos/public/fonts/inter-v11-latin-500.woff2 differ diff --git a/web/apps/photos/public/fonts/inter-v11-latin-600.woff b/web/apps/photos/public/fonts/inter-v11-latin-600.woff new file mode 100644 index 000000000..03c1df0b8 Binary files /dev/null and b/web/apps/photos/public/fonts/inter-v11-latin-600.woff differ diff --git a/web/apps/photos/public/fonts/inter-v11-latin-600.woff2 b/web/apps/photos/public/fonts/inter-v11-latin-600.woff2 new file mode 100644 index 000000000..3eef889ee Binary files /dev/null and b/web/apps/photos/public/fonts/inter-v11-latin-600.woff2 differ diff --git a/web/apps/photos/public/fonts/inter-v11-latin-800.woff b/web/apps/photos/public/fonts/inter-v11-latin-800.woff new file mode 100644 index 000000000..feb91cc1d Binary files /dev/null and b/web/apps/photos/public/fonts/inter-v11-latin-800.woff differ diff --git a/web/apps/photos/public/fonts/inter-v11-latin-800.woff2 b/web/apps/photos/public/fonts/inter-v11-latin-800.woff2 new file mode 100644 index 000000000..595bcec65 Binary files /dev/null and b/web/apps/photos/public/fonts/inter-v11-latin-800.woff2 differ diff --git a/web/apps/photos/public/images/delete-account/1x.png b/web/apps/photos/public/images/delete-account/1x.png new file mode 100644 index 000000000..b8288cee8 Binary files /dev/null and b/web/apps/photos/public/images/delete-account/1x.png differ diff --git a/web/apps/photos/public/images/delete-account/2x.png b/web/apps/photos/public/images/delete-account/2x.png new file mode 100644 index 000000000..31c9014bc Binary files /dev/null and b/web/apps/photos/public/images/delete-account/2x.png differ diff --git a/web/apps/photos/public/images/delete-account/3x.png b/web/apps/photos/public/images/delete-account/3x.png new file mode 100644 index 000000000..7be1e70de Binary files /dev/null and b/web/apps/photos/public/images/delete-account/3x.png differ diff --git a/web/apps/photos/public/images/empty-state/ente_duck.png b/web/apps/photos/public/images/empty-state/ente_duck.png new file mode 100644 index 000000000..a8ea4c8a5 Binary files /dev/null and b/web/apps/photos/public/images/empty-state/ente_duck.png differ diff --git a/web/apps/photos/public/images/empty-state/ente_duck@2x.png b/web/apps/photos/public/images/empty-state/ente_duck@2x.png new file mode 100644 index 000000000..991252998 Binary files /dev/null and b/web/apps/photos/public/images/empty-state/ente_duck@2x.png differ diff --git a/web/apps/photos/public/images/empty-state/ente_duck@3x.png b/web/apps/photos/public/images/empty-state/ente_duck@3x.png new file mode 100644 index 000000000..dbcde186a Binary files /dev/null and b/web/apps/photos/public/images/empty-state/ente_duck@3x.png differ diff --git a/web/apps/photos/public/images/ente.svg b/web/apps/photos/public/images/ente.svg new file mode 100644 index 000000000..33bd74256 --- /dev/null +++ b/web/apps/photos/public/images/ente.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/apps/photos/public/images/ente/192.png b/web/apps/photos/public/images/ente/192.png new file mode 100644 index 000000000..28ec8a021 Binary files /dev/null and b/web/apps/photos/public/images/ente/192.png differ diff --git a/web/apps/photos/public/images/ente/256.png b/web/apps/photos/public/images/ente/256.png new file mode 100644 index 000000000..4e3b2a692 Binary files /dev/null and b/web/apps/photos/public/images/ente/256.png differ diff --git a/web/apps/photos/public/images/ente/512.png b/web/apps/photos/public/images/ente/512.png new file mode 100644 index 000000000..dd45f4cd5 Binary files /dev/null and b/web/apps/photos/public/images/ente/512.png differ diff --git a/web/apps/photos/public/images/family-plan/1x.png b/web/apps/photos/public/images/family-plan/1x.png new file mode 100644 index 000000000..050c61862 Binary files /dev/null and b/web/apps/photos/public/images/family-plan/1x.png differ diff --git a/web/apps/photos/public/images/family-plan/2x.png b/web/apps/photos/public/images/family-plan/2x.png new file mode 100644 index 000000000..faf3df971 Binary files /dev/null and b/web/apps/photos/public/images/family-plan/2x.png differ diff --git a/web/apps/photos/public/images/family-plan/3x.png b/web/apps/photos/public/images/family-plan/3x.png new file mode 100644 index 000000000..0949dbf0e Binary files /dev/null and b/web/apps/photos/public/images/family-plan/3x.png differ diff --git a/web/apps/photos/public/images/favicon.png b/web/apps/photos/public/images/favicon.png new file mode 100644 index 000000000..fcb8d1054 Binary files /dev/null and b/web/apps/photos/public/images/favicon.png differ diff --git a/web/apps/photos/public/images/gallery-locked/1x.png b/web/apps/photos/public/images/gallery-locked/1x.png new file mode 100644 index 000000000..8c5918bbe Binary files /dev/null and b/web/apps/photos/public/images/gallery-locked/1x.png differ diff --git a/web/apps/photos/public/images/gallery-locked/2x.png b/web/apps/photos/public/images/gallery-locked/2x.png new file mode 100644 index 000000000..2d0924ca7 Binary files /dev/null and b/web/apps/photos/public/images/gallery-locked/2x.png differ diff --git a/web/apps/photos/public/images/gallery-locked/3x.png b/web/apps/photos/public/images/gallery-locked/3x.png new file mode 100644 index 000000000..e8d0645c3 Binary files /dev/null and b/web/apps/photos/public/images/gallery-locked/3x.png differ diff --git a/web/apps/photos/public/images/onboarding-lock/1x.png b/web/apps/photos/public/images/onboarding-lock/1x.png new file mode 100644 index 000000000..c5f2db2be Binary files /dev/null and b/web/apps/photos/public/images/onboarding-lock/1x.png differ diff --git a/web/apps/photos/public/images/onboarding-lock/2x.png b/web/apps/photos/public/images/onboarding-lock/2x.png new file mode 100644 index 000000000..241517bbb Binary files /dev/null and b/web/apps/photos/public/images/onboarding-lock/2x.png differ diff --git a/web/apps/photos/public/images/onboarding-lock/3x.png b/web/apps/photos/public/images/onboarding-lock/3x.png new file mode 100644 index 000000000..a15af44b0 Binary files /dev/null and b/web/apps/photos/public/images/onboarding-lock/3x.png differ diff --git a/web/apps/photos/public/images/onboarding-safe/1x.png b/web/apps/photos/public/images/onboarding-safe/1x.png new file mode 100644 index 000000000..d8174de79 Binary files /dev/null and b/web/apps/photos/public/images/onboarding-safe/1x.png differ diff --git a/web/apps/photos/public/images/onboarding-safe/2x.png b/web/apps/photos/public/images/onboarding-safe/2x.png new file mode 100644 index 000000000..06f85e0ba Binary files /dev/null and b/web/apps/photos/public/images/onboarding-safe/2x.png differ diff --git a/web/apps/photos/public/images/onboarding-safe/3x.png b/web/apps/photos/public/images/onboarding-safe/3x.png new file mode 100644 index 000000000..350675112 Binary files /dev/null and b/web/apps/photos/public/images/onboarding-safe/3x.png differ diff --git a/web/apps/photos/public/images/onboarding-sync/1x.png b/web/apps/photos/public/images/onboarding-sync/1x.png new file mode 100644 index 000000000..04764a0d3 Binary files /dev/null and b/web/apps/photos/public/images/onboarding-sync/1x.png differ diff --git a/web/apps/photos/public/images/onboarding-sync/2x.png b/web/apps/photos/public/images/onboarding-sync/2x.png new file mode 100644 index 000000000..fd733e44d Binary files /dev/null and b/web/apps/photos/public/images/onboarding-sync/2x.png differ diff --git a/web/apps/photos/public/images/onboarding-sync/3x.png b/web/apps/photos/public/images/onboarding-sync/3x.png new file mode 100644 index 000000000..b7177ec4a Binary files /dev/null and b/web/apps/photos/public/images/onboarding-sync/3x.png differ diff --git a/web/apps/photos/public/images/subscription-card-background/1x.png b/web/apps/photos/public/images/subscription-card-background/1x.png new file mode 100644 index 000000000..724b8beb1 Binary files /dev/null and b/web/apps/photos/public/images/subscription-card-background/1x.png differ diff --git a/web/apps/photos/public/images/subscription-card-background/2x.png b/web/apps/photos/public/images/subscription-card-background/2x.png new file mode 100644 index 000000000..26be3d8fc Binary files /dev/null and b/web/apps/photos/public/images/subscription-card-background/2x.png differ diff --git a/web/apps/photos/public/images/subscription-card-background/3x.png b/web/apps/photos/public/images/subscription-card-background/3x.png new file mode 100644 index 000000000..8dfb56cd9 Binary files /dev/null and b/web/apps/photos/public/images/subscription-card-background/3x.png differ diff --git a/web/apps/photos/public/js/ffmpeg/ffmpeg-core.js b/web/apps/photos/public/js/ffmpeg/ffmpeg-core.js new file mode 100644 index 000000000..f06ffde63 --- /dev/null +++ b/web/apps/photos/public/js/ffmpeg/ffmpeg-core.js @@ -0,0 +1,169 @@ + +var createFFmpegCore = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(createFFmpegCore) { + createFFmpegCore = createFFmpegCore || {}; + + +var e;e||(e=typeof createFFmpegCore !== 'undefined' ? createFFmpegCore : {});var aa,ba;e.ready=new Promise(function(a,b){aa=a;ba=b});e.quit=function(a){if(e.onExit)e.onExit(a);throw new ca(a);};e.exit=da;ea=k=function(){};var fa={},l;for(l in e)e.hasOwnProperty(l)&&(fa[l]=e[l]);var ha=[],ia="./this.program";function ja(a,b){throw b;}var ka=!1,v=!1,x=!1,la=!1;ka="object"===typeof window;v="function"===typeof importScripts;x="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node; +la=!ka&&!x&&!v;var y="",ma,na,oa,pa,qa; +if(x)y=v?require("path").dirname(y)+"/":__dirname+"/",ma=function(a,b){pa||(pa=require("fs"));qa||(qa=require("path"));a=qa.normalize(a);return pa.readFileSync(a,b?null:"utf8")},oa=function(a){a=ma(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a},1>>0);return r}},g=va(a),h=[];a=0;if(d)for(var n=0;n>>=0;var d=b+c;for(c=b;a[c>>>0]&&!(c>=d);)++c;if(16>>0,c>>>0));for(d="";b>>0];if(f&128){var g=a[b++>>>0]&63;if(192==(f&224))d+=String.fromCharCode((f&31)<<6|g);else{var h=a[b++>>>0]&63;f=224==(f&240)?(f&15)<<12|g<<6|h:(f&7)<<18|g<<12|h<<6|a[b++>>>0]&63;65536>f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d} +function H(a){return(a>>>=0)?za(D,a,void 0):""} +function C(a,b,c,d){c>>>=0;if(!(0=h){var n=a.charCodeAt(++g);h=65536+((h&1023)<<10)|n&1023}if(127>=h){if(c>=d)break;b[c++>>>0]=h}else{if(2047>=h){if(c+1>=d)break;b[c++>>>0]=192|h>>6}else{if(65535>=h){if(c+2>=d)break;b[c++>>>0]=224|h>>12}else{if(c+3>=d)break;b[c++>>>0]=240|h>>18;b[c++>>>0]=128|h>>12&63}b[c++>>>0]=128|h>>6&63}b[c++>>>0]=128|h&63}}b[c>>>0]=0;return c-f} +function Aa(a){for(var b=0,c=0;c=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}function Ba(a){var b=Aa(a)+1,c=Ca(b);c&&C(a,E,c,b);return c}function Da(a){var b=Aa(a)+1,c=xa(b);C(a,E,c,b);return c}function K(a,b,c){for(var d=0;d>0>>>0]=a.charCodeAt(d);c||(E[b>>0>>>0]=0)}var Ea,E,D,L,Fa,M,Ga,Ha; +function Ia(){var a=ta.buffer;Ea=a;e.HEAP8=E=new Int8Array(a);e.HEAP16=L=new Int16Array(a);e.HEAP32=M=new Int32Array(a);e.HEAPU8=D=new Uint8Array(a);e.HEAPU16=Fa=new Uint16Array(a);e.HEAPU32=new Uint32Array(a);e.HEAPF32=Ga=new Float32Array(a);e.HEAPF64=Ha=new Float64Array(a)}var O,Ja=[],Ka=[],La=[],Ma=[];function Na(){var a=e.preRun.shift();Ja.unshift(a)}var Qa=0,Ra=null,Sa=null;function Ta(){Qa++;e.monitorRunDependencies&&e.monitorRunDependencies(Qa)} +function Ua(){Qa--;e.monitorRunDependencies&&e.monitorRunDependencies(Qa);if(0==Qa&&(null!==Ra&&(clearInterval(Ra),Ra=null),Sa)){var a=Sa;Sa=null;a()}}e.preloadedImages={};e.preloadedAudios={};function B(a){if(e.onAbort)e.onAbort(a);k(a);ua=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ba(a);throw a;}function Va(){return P.startsWith("data:application/octet-stream;base64,")}var P;P="ffmpeg-core.wasm"; +if(!Va()){var Wa=P;P=e.locateFile?e.locateFile(Wa,y):y+Wa}function Xa(){var a=P;try{if(a==P&&sa)return new Uint8Array(sa);if(oa)return oa(a);throw"both async and sync fetching of the wasm failed";}catch(b){B(b)}} +function Ya(){if(!sa&&(ka||v)){if("function"===typeof fetch&&!P.startsWith("file://"))return fetch(P,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+P+"'";return a.arrayBuffer()}).catch(function(){return Xa()});if(na)return new Promise(function(a,b){na(P,function(c){a(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return Xa()})}var Q,R; +function Za(a){for(;0>2>>>0]=28,-1;M[b>>2>>>0]=a/1E3|0;M[b+4>>2>>>0]=a%1E3*1E6|0;return 0} +function eb(a,b){a=new Date(1E3*M[a>>2>>>0]);M[b>>2>>>0]=a.getUTCSeconds();M[b+4>>2>>>0]=a.getUTCMinutes();M[b+8>>2>>>0]=a.getUTCHours();M[b+12>>2>>>0]=a.getUTCDate();M[b+16>>2>>>0]=a.getUTCMonth();M[b+20>>2>>>0]=a.getUTCFullYear()-1900;M[b+24>>2>>>0]=a.getUTCDay();M[b+36>>2>>>0]=0;M[b+32>>2>>>0]=0;M[b+28>>2>>>0]=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0;eb.Hc||(eb.Hc=Ba("GMT"));M[b+40>>2>>>0]=eb.Hc;return b} +function fb(){function a(h){return(h=h.toTimeString().match(/\(([A-Za-z ]+)\)$/))?h[1]:"GMT"}if(!gb){gb=!0;var b=(new Date).getFullYear(),c=new Date(b,0,1),d=new Date(b,6,1);b=c.getTimezoneOffset();var f=d.getTimezoneOffset(),g=Math.max(b,f);M[hb()>>2>>>0]=60*g;M[ib()>>2>>>0]=Number(b!=f);c=a(c);d=a(d);c=Ba(c);d=Ba(d);f>2>>>0]=c,M[jb()+4>>2>>>0]=d):(M[jb()>>2>>>0]=d,M[jb()+4>>2>>>0]=c)}}var gb; +function kb(a,b){fb();a=new Date(1E3*M[a>>2>>>0]);M[b>>2>>>0]=a.getSeconds();M[b+4>>2>>>0]=a.getMinutes();M[b+8>>2>>>0]=a.getHours();M[b+12>>2>>>0]=a.getDate();M[b+16>>2>>>0]=a.getMonth();M[b+20>>2>>>0]=a.getFullYear()-1900;M[b+24>>2>>>0]=a.getDay();var c=new Date(a.getFullYear(),0,1);M[b+28>>2>>>0]=(a.getTime()-c.getTime())/864E5|0;M[b+36>>2>>>0]=-(60*a.getTimezoneOffset());var d=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();c=c.getTimezoneOffset();a=(d!=c&&a.getTimezoneOffset()==Math.min(c, +d))|0;M[b+32>>2>>>0]=a;a=M[jb()+(a?4:0)>>2>>>0];M[b+40>>2>>>0]=a;return b}function lb(a,b){for(var c=0,d=a.length-1;0<=d;d--){var f=a[d];"."===f?a.splice(d,1):".."===f?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function mb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=lb(a.split("/").filter(function(d){return!!d}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a} +function nb(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function S(a){if("/"===a)return"/";a=mb(a);a=a.replace(/\/$/,"");var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function pb(a,b){return mb(a+"/"+b)} +function qb(){if("object"===typeof crypto&&"function"===typeof crypto.getRandomValues){var a=new Uint8Array(1);return function(){crypto.getRandomValues(a);return a[0]}}if(x)try{var b=require("crypto");return function(){return b.randomBytes(1)[0]}}catch(c){}return function(){B("randomDevice")}} +function rb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:T.cwd();if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=lb(a.split("/").filter(function(d){return!!d}),!b).join("/");return(b?"/":"")+a||"."} +function sb(a,b){function c(h){for(var n=0;np?[]:h.slice(n,p-n+1)}a=rb(a).substr(1);b=rb(b).substr(1);a=c(a.split("/"));b=c(b.split("/"));for(var d=Math.min(a.length,b.length),f=d,g=0;g>>=0;var c=a.cb? +a.cb.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)>>>0),0!=c&&(b=Math.max(b,256)),c=a.cb,a.cb=new Uint8Array(b),0>>=0;if(a.fb!=b)if(0==b)a.cb=null,a.fb=0;else{var c=a.cb;a.cb=new Uint8Array(b);c&&a.cb.set(c.subarray(0,Math.min(b,a.fb)));a.fb=b}},$a:{ub:function(a){var b={};b.dev=T.Ub(a.mode)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;T.ib(a.mode)?b.size=4096:T.isFile(a.mode)?b.size=a.fb:T.Db(a.mode)?b.size= +a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.od=4096;b.blocks=Math.ceil(b.size/b.od);return b},lb:function(a,b){void 0!==b.mode&&(a.mode=b.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&U.Rd(a,b.size)},lookup:function(){throw T.tc[44];},yb:function(a,b,c,d){return U.createNode(a,b,c,d)},rename:function(a,b,c){if(T.ib(a.mode)){try{var d=T.vb(b,c)}catch(g){}if(d)for(var f in d.cb)throw new T.Za(55);}delete a.parent.cb[a.name]; +a.parent.timestamp=Date.now();a.name=c;b.cb[c]=a;b.timestamp=a.parent.timestamp;a.parent=b},unlink:function(a,b){delete a.cb[b];a.timestamp=Date.now()},rmdir:function(a,b){var c=T.vb(a,b),d;for(d in c.cb)throw new T.Za(55);delete a.cb[b];a.timestamp=Date.now()},readdir:function(a){var b=[".",".."],c;for(c in a.cb)a.cb.hasOwnProperty(c)&&b.push(c);return b},symlink:function(a,b,c){a=U.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(!T.Db(a.mode))throw new T.Za(28);return a.link}}, +ab:{read:function(a,b,c,d,f){var g=a.node.cb;if(f>=a.node.fb)return 0;a=Math.min(a.node.fb-f,d);if(8b)throw new T.Za(28);return b},Sb:function(a,b,c){U.Qc(a.node,b+c);a.node.fb=Math.max(a.node.fb,b+c)},Kb:function(a,b,c,d,f,g){if(0!==b)throw new T.Za(28);if(!T.isFile(a.node.mode))throw new T.Za(43);a=a.node.cb;if(g&2||a.buffer!==Ea){if(0>>0]=0;c=b;if(!c)throw new T.Za(48);c>>>=0;E.set(a,c>>>0)}else d=!1,c=a.byteOffset;return{Qd:c,oc:d}},Lb:function(a,b,c,d,f){if(!T.isFile(a.node.mode))throw new T.Za(43);if(f&2)return 0;U.ab.write(a,b,0,d,c,!1);return 0}}},T={root:null,Xb:[],Oc:{},streams:[],Kd:1,wb:null,Nc:"/",wc:!1,Yc:!0,kb:{},ed:{$c:{kd:1,ld:2}},Za:null,tc:{},yd:null,ic:0,eb:function(a,b){a=rb(T.cwd(),a);b=b||{};if(!a)return{path:"",node:null};var c={sc:!0,Dc:0},d; +for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8>>0)%T.wb.length},Wc:function(a){var b=T.vc(a.parent.id,a.name);a.Gb=T.wb[b];T.wb[b]=a},Xc:function(a){var b=T.vc(a.parent.id,a.name);if(T.wb[b]===a)T.wb[b]=a.Gb;else for(b=T.wb[b];b;){if(b.Gb===a){b.Gb=a.Gb;break}b=b.Gb}},vb:function(a,b){var c=T.Hd(a);if(c)throw new T.Za(c,a);for(c=T.wb[T.vc(a.id,b)];c;c=c.Gb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return T.lookup(a, +b)},createNode:function(a,b,c,d){a=new T.hd(a,b,c,d);T.Wc(a);return a},rc:function(a){T.Xc(a)},cc:function(a){return a===a.parent},Eb:function(a){return!!a.Wb},isFile:function(a){return 32768===(a&61440)},ib:function(a){return 16384===(a&61440)},Db:function(a){return 40960===(a&61440)},Ub:function(a){return 8192===(a&61440)},Dd:function(a){return 24576===(a&61440)},isFIFO:function(a){return 4096===(a&61440)},isSocket:function(a){return 49152===(a&49152)},zd:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}, +Jd:function(a){var b=T.zd[a];if("undefined"===typeof b)throw Error("Unknown file open mode: "+a);return b},Rc:function(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b},Bb:function(a,b){if(T.Yc)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0},Hd:function(a){var b=T.Bb(a,"x");return b?b:a.$a.lookup?0:2},Ac:function(a,b){try{return T.vb(a,b),20}catch(c){}return T.Bb(a,"wx")},dc:function(a,b,c){try{var d= +T.vb(a,b)}catch(f){return f.bb}if(a=T.Bb(a,"wx"))return a;if(c){if(!T.ib(d.mode))return 54;if(T.cc(d)||T.Ab(d)===T.cwd())return 10}else if(T.ib(d.mode))return 31;return 0},Id:function(a,b){return a?T.Db(a.mode)?32:T.ib(a.mode)&&("r"!==T.Rc(b)||b&512)?31:T.Bb(a,T.Rc(b)):44},jd:4096,Ld:function(a,b){b=b||T.jd;for(a=a||0;a<=b;a++)if(!T.streams[a])return a;throw new T.Za(33);},tb:function(a){return T.streams[a]},Mc:function(a,b,c){T.mc||(T.mc=function(){},T.mc.prototype={object:{get:function(){return this.node}, +set:function(g){this.node=g}}});var d=new T.mc,f;for(f in a)d[f]=a[f];a=d;b=T.Ld(b,c);a.fd=b;return T.streams[b]=a},rd:function(a){T.streams[a]=null},qd:{open:function(a){a.ab=T.Ad(a.node.rdev).ab;a.ab.open&&a.ab.open(a)},pb:function(){throw new T.Za(70);}},zc:function(a){return a>>8},je:function(a){return a&255},Fb:function(a,b){return a<<8|b},Ec:function(a,b){T.Oc[a]={ab:b}},Ad:function(a){return T.Oc[a]},Tc:function(a){var b=[];for(a=[a];a.length;){var c=a.pop();b.push(c);a.push.apply(a,c.Xb)}return b}, +dd:function(a,b){function c(h){T.ic--;return b(h)}function d(h){if(h){if(!d.xd)return d.xd=!0,c(h)}else++g>=f.length&&c(null)}"function"===typeof a&&(b=a,a=!1);T.ic++;1b)throw new T.Za(28);a="string"===typeof a?T.eb(a,{sb:!0}).node:a;if(!a.$a.lb)throw new T.Za(63);if(T.ib(a.mode))throw new T.Za(31); +if(!T.isFile(a.mode))throw new T.Za(28);var c=T.Bb(a,"w");if(c)throw new T.Za(c);a.$a.lb(a,{size:b,timestamp:Date.now()})},ee:function(a,b){a=T.tb(a);if(!a)throw new T.Za(8);if(0===(a.flags&2097155))throw new T.Za(28);T.truncate(a.node,b)},qe:function(a,b,c){a=T.eb(a,{sb:!0}).node;a.$a.lb(a,{timestamp:Math.max(b,c)})},open:function(a,b,c,d,f){if(""===a)throw new T.Za(44);b="string"===typeof b?T.Jd(b):b;c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=mb(a); +try{g=T.eb(a,{sb:!(b&131072)}).node}catch(n){}}var h=!1;if(b&64)if(g){if(b&128)throw new T.Za(20);}else g=T.yb(a,c,0),h=!0;if(!g)throw new T.Za(44);T.Ub(g.mode)&&(b&=-513);if(b&65536&&!T.ib(g.mode))throw new T.Za(54);if(!h&&(c=T.Id(g,b)))throw new T.Za(c);b&512&&T.truncate(g,0);b&=-131713;d=T.Mc({node:g,path:T.Ab(g),flags:b,seekable:!0,position:0,ab:g.ab,Yd:[],error:!1},d,f);d.ab.open&&d.ab.open(d);!e.logReadFiles||b&1||(T.Cc||(T.Cc={}),a in T.Cc||(T.Cc[a]=1,k("FS.trackingDelegate error on read file: "+ +a)));try{T.kb.onOpenFile&&(f=0,1!==(b&2097155)&&(f|=T.ed.$c.kd),0!==(b&2097155)&&(f|=T.ed.$c.ld),T.kb.onOpenFile(a,f))}catch(n){k("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+n.message)}return d},close:function(a){if(T.Vb(a))throw new T.Za(8);a.Cb&&(a.Cb=null);try{a.ab.close&&a.ab.close(a)}catch(b){throw b;}finally{T.rd(a.fd)}a.fd=null},Vb:function(a){return null===a.fd},pb:function(a,b,c){if(T.Vb(a))throw new T.Za(8);if(!a.seekable||!a.ab.pb)throw new T.Za(70);if(0!=c&& +1!=c&&2!=c)throw new T.Za(28);a.position=a.ab.pb(a,b,c);a.Yd=[];return a.position},read:function(a,b,c,d,f){c>>>=0;if(0>d||0>f)throw new T.Za(28);if(T.Vb(a))throw new T.Za(8);if(1===(a.flags&2097155))throw new T.Za(8);if(T.ib(a.node.mode))throw new T.Za(31);if(!a.ab.read)throw new T.Za(28);var g="undefined"!==typeof f;if(!g)f=a.position;else if(!a.seekable)throw new T.Za(70);b=a.ab.read(a,b,c,d,f);g||(a.position+=b);return b},write:function(a,b,c,d,f,g){c>>>=0;if(0>d||0>f)throw new T.Za(28);if(T.Vb(a))throw new T.Za(8); +if(0===(a.flags&2097155))throw new T.Za(8);if(T.ib(a.node.mode))throw new T.Za(31);if(!a.ab.write)throw new T.Za(28);a.seekable&&a.flags&1024&&T.pb(a,0,2);var h="undefined"!==typeof f;if(!h)f=a.position;else if(!a.seekable)throw new T.Za(70);b=a.ab.write(a,b,c,d,f,g);h||(a.position+=b);try{if(a.path&&T.kb.onWriteToFile)T.kb.onWriteToFile(a.path)}catch(n){k("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+n.message)}return b},Sb:function(a,b,c){if(T.Vb(a))throw new T.Za(8); +if(0>b||0>=c)throw new T.Za(28);if(0===(a.flags&2097155))throw new T.Za(8);if(!T.isFile(a.node.mode)&&!T.ib(a.node.mode))throw new T.Za(43);if(!a.ab.Sb)throw new T.Za(138);a.ab.Sb(a,b,c)},Kb:function(a,b,c,d,f,g){b>>>=0;if(0!==(f&2)&&0===(g&2)&&2!==(a.flags&2097155))throw new T.Za(2);if(1===(a.flags&2097155))throw new T.Za(2);if(!a.ab.Kb)throw new T.Za(43);return a.ab.Kb(a,b,c,d,f,g)},Lb:function(a,b,c,d,f){return a&&a.ab.Lb?a.ab.Lb(a,b,c>>>0,d,f):0},le:function(){return 0},Jb:function(a,b,c){if(!a.ab.Jb)throw new T.Za(59); +return a.ab.Jb(a,b,c)},readFile:function(a,b){b=b||{};b.flags=b.flags||0;b.encoding=b.encoding||"binary";if("utf8"!==b.encoding&&"binary"!==b.encoding)throw Error('Invalid encoding type "'+b.encoding+'"');var c,d=T.open(a,b.flags);a=T.stat(a).size;var f=new Uint8Array(a);T.read(d,f,0,a,0);"utf8"===b.encoding?c=za(f,0):"binary"===b.encoding&&(c=f);T.close(d);return c},writeFile:function(a,b,c){c=c||{};c.flags=c.flags||577;a=T.open(a,c.flags,c.mode);if("string"===typeof b){var d=new Uint8Array(Aa(b)+ +1);b=C(b,d,0,d.length);T.write(a,d,0,b,void 0,c.pd)}else if(ArrayBuffer.isView(b))T.write(a,b,0,b.byteLength,void 0,c.pd);else throw Error("Unsupported data type");T.close(a)},cwd:function(){return T.Nc},chdir:function(a){a=T.eb(a,{sb:!0});if(null===a.node)throw new T.Za(44);if(!T.ib(a.node.mode))throw new T.Za(54);var b=T.Bb(a.node,"x");if(b)throw new T.Za(b);T.Nc=a.path},td:function(){T.mkdir("/tmp");T.mkdir("/home");T.mkdir("/home/web_user")},sd:function(){T.mkdir("/dev");T.Ec(T.Fb(1,3),{read:function(){return 0}, +write:function(b,c,d,f){return f}});T.ec("/dev/null",T.Fb(1,3));ub(T.Fb(5,0),xb);ub(T.Fb(6,0),yb);T.ec("/dev/tty",T.Fb(5,0));T.ec("/dev/tty1",T.Fb(6,0));var a=qb();T.zb("/dev","random",a);T.zb("/dev","urandom",a);T.mkdir("/dev/shm");T.mkdir("/dev/shm/tmp")},vd:function(){T.mkdir("/proc");var a=T.mkdir("/proc/self");T.mkdir("/proc/self/fd");T.gb({gb:function(){var b=T.createNode(a,"fd",16895,73);b.$a={lookup:function(c,d){var f=T.tb(+d);if(!f)throw new T.Za(8);c={parent:null,gb:{Zc:"fake"},$a:{readlink:function(){return f.path}}}; +return c.parent=c}};return b}},{},"/proc/self/fd")},wd:function(){e.stdin?T.zb("/dev","stdin",e.stdin):T.symlink("/dev/tty","/dev/stdin");e.stdout?T.zb("/dev","stdout",null,e.stdout):T.symlink("/dev/tty","/dev/stdout");e.stderr?T.zb("/dev","stderr",null,e.stderr):T.symlink("/dev/tty1","/dev/stderr");T.open("/dev/stdin",0);T.open("/dev/stdout",1);T.open("/dev/stderr",1)},Pc:function(){T.Za||(T.Za=function(a,b){this.node=b;this.Sd=function(c){this.bb=c};this.Sd(a);this.message="FS error"},T.Za.prototype= +Error(),T.Za.prototype.constructor=T.Za,[44].forEach(function(a){T.tc[a]=new T.Za(a);T.tc[a].stack=""}))},Td:function(){T.Pc();T.wb=Array(4096);T.gb(U,{},"/");T.td();T.sd();T.vd();T.yd={MEMFS:U}},Tb:function(a,b,c){T.Tb.wc=!0;T.Pc();e.stdin=a||e.stdin;e.stdout=b||e.stdout;e.stderr=c||e.stderr;T.wd()},quit:function(){T.Tb.wc=!1;var a=e._fflush;a&&a(0);for(a=0;athis.length-1||0>q)){var r=q%this.chunkSize;return this.Vc(q/this.chunkSize|0)[r]}};g.prototype.gd=function(q){this.Vc=q};g.prototype.Jc=function(){var q=new XMLHttpRequest;q.open("HEAD",c,!1);q.send(null);if(!(200<=q.status&&300>q.status||304===q.status))throw Error("Couldn't load "+c+". Status: "+q.status);var r=Number(q.getResponseHeader("Content-length")),w,z=(w=q.getResponseHeader("Accept-Ranges"))&&"bytes"===w;q=(w=q.getResponseHeader("Content-Encoding"))&& +"gzip"===w;var m=1048576;z||(m=r);var t=this;t.gd(function(u){var F=u*m,J=(u+1)*m-1;J=Math.min(J,r-1);if("undefined"===typeof t.Ib[u]){var db=t.Ib;if(F>J)throw Error("invalid range ("+F+", "+J+") or no bytes requested!");if(J>r-1)throw Error("only "+r+" bytes available! programmer error!");var A=new XMLHttpRequest;A.open("GET",c,!1);r!==m&&A.setRequestHeader("Range","bytes="+F+"-"+J);"undefined"!=typeof Uint8Array&&(A.responseType="arraybuffer");A.overrideMimeType&&A.overrideMimeType("text/plain; charset=x-user-defined"); +A.send(null);if(!(200<=A.status&&300>A.status||304===A.status))throw Error("Couldn't load "+c+". Status: "+A.status);F=void 0!==A.response?new Uint8Array(A.response||[]):wb(A.responseText||"",!0);db[u]=F}if("undefined"===typeof t.Ib[u])throw Error("doXHR failed!");return t.Ib[u]});if(q||!r)m=r=1,m=r=this.Vc(0).length,ea("LazyFiles on gzip forces download of the whole file when length is accessed");this.nd=r;this.md=m;this.yc=!0};if("undefined"!==typeof XMLHttpRequest){if(!v)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; +var h=new g;Object.defineProperties(h,{length:{get:function(){this.yc||this.Jc();return this.nd}},chunkSize:{get:function(){this.yc||this.Jc();return this.md}}});h={xc:!1,cb:h}}else h={xc:!1,url:c};var n=T.ud(a,b,h,d,f);h.cb?n.cb=h.cb:h.url&&(n.cb=null,n.url=h.url);Object.defineProperties(n,{fb:{get:function(){return this.cb.length}}});var p={};Object.keys(n.ab).forEach(function(q){var r=n.ab[q];p[q]=function(){T.Sc(n);return r.apply(null,arguments)}});p.read=function(q,r,w,z,m){T.Sc(n);q=q.node.cb; +if(m>=q.length)return 0;z=Math.min(q.length-m,z);if(q.slice)for(var t=0;t>2>>>0]=d.dev;M[c+4>>2>>>0]=0;M[c+8>>2>>>0]=d.ino;M[c+12>>2>>>0]=d.mode;M[c+16>>2>>>0]=d.nlink;M[c+20>>2>>>0]=d.uid;M[c+24>>2>>>0]=d.gid;M[c+28>>2>>>0]=d.rdev;M[c+32>>2>>>0]=0;R=[d.size>>>0,(Q=d.size,1<=+Math.abs(Q)?0>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[c+40>>2>>>0]=R[0];M[c+44>>2>>>0]=R[1];M[c+48>>2>>>0]=4096;M[c+52>>2>>>0]= +d.blocks;M[c+56>>2>>>0]=d.atime.getTime()/1E3|0;M[c+60>>2>>>0]=0;M[c+64>>2>>>0]=d.mtime.getTime()/1E3|0;M[c+68>>2>>>0]=0;M[c+72>>2>>>0]=d.ctime.getTime()/1E3|0;M[c+76>>2>>>0]=0;R=[d.ino>>>0,(Q=d.ino,1<=+Math.abs(Q)?0>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[c+80>>2>>>0]=R[0];M[c+84>>2>>>0]=R[1];return 0}var Cb=void 0;function Db(){Cb+=4;return M[Cb-4>>2>>>0]}function V(a){a=T.tb(a);if(!a)throw new T.Za(8);return a} +var W={gb:function(){e.websocket=e.websocket&&"object"===typeof e.websocket?e.websocket:{};e.websocket.nc={};e.websocket.on=function(a,b){"function"===typeof b&&(this.nc[a]=b);return this};e.websocket.emit=function(a,b){"function"===typeof this.nc[a]&&this.nc[a].call(this,b)};return T.createNode(null,"/",16895,0)},createSocket:function(a,b,c){b&=-526337;c&&assert(1==b==(6==c));a={family:a,type:b,protocol:c,jb:null,error:null,Yb:{},pending:[],Ob:[],qb:W.mb};b=W.fc();c=T.createNode(W.root,b,49152,0); +c.Pb=a;b=T.Mc({path:b,node:c,flags:2,seekable:!1,ab:W.ab});a.stream=b;return a},Bd:function(a){return(a=T.tb(a))&&T.isSocket(a.node.mode)?a.node.Pb:null},ab:{Nb:function(a){a=a.node.Pb;return a.qb.Nb(a)},Jb:function(a,b,c){a=a.node.Pb;return a.qb.Jb(a,b,c)},read:function(a,b,c,d){a=a.node.Pb;d=a.qb.ad(a,d);if(!d)return 0;b.set(d.buffer,c);return d.buffer.length},write:function(a,b,c,d){a=a.node.Pb;return a.qb.cd(a,b,c,d)},close:function(a){a=a.node.Pb;a.qb.close(a)}},fc:function(){W.fc.current||(W.fc.current= +0);return"socket["+W.fc.current++ +"]"},mb:{$b:function(a,b,c){if("object"===typeof b){var d=b;c=b=null}if(d)if(d._socket)b=d._socket.remoteAddress,c=d._socket.remotePort;else{c=/ws[s]?:\/\/([^:]+):(\d+)/.exec(d.url);if(!c)throw Error("WebSocket URL must be in the format ws(s)://address:port");b=c[1];c=parseInt(c[2],10)}else try{var f=e.websocket&&"object"===typeof e.websocket,g="ws:#".replace("#","//");f&&"string"===typeof e.websocket.url&&(g=e.websocket.url);if("ws://"===g||"wss://"===g){var h= +b.split("/");g=g+h[0]+":"+c+"/"+h.slice(1).join("/")}h="binary";f&&"string"===typeof e.websocket.subprotocol&&(h=e.websocket.subprotocol);var n=void 0;"null"!==h&&(h=h.replace(/^ +| +$/g,"").split(/ *, */),n=x?{protocol:h.toString()}:h);f&&null===e.websocket.subprotocol&&(n=void 0);d=new (x?require("ws"):WebSocket)(g,n);d.binaryType="arraybuffer"}catch(p){throw new T.Za(23);}b={hb:b,port:c,socket:d,ac:[]};W.mb.Ic(a,b);W.mb.Cd(a,b);2===a.type&&"undefined"!==typeof a.Hb&&b.ac.push(new Uint8Array([255, +255,255,255,112,111,114,116,(a.Hb&65280)>>8,a.Hb&255]));return b},bc:function(a,b,c){return a.Yb[b+":"+c]},Ic:function(a,b){a.Yb[b.hb+":"+b.port]=b},bd:function(a,b){delete a.Yb[b.hb+":"+b.port]},Cd:function(a,b){function c(){e.websocket.emit("open",a.stream.fd);try{for(var g=b.ac.shift();g;)b.socket.send(g),g=b.ac.shift()}catch(h){b.socket.close()}}function d(g){if("string"===typeof g)g=(new TextEncoder).encode(g);else{assert(void 0!==g.byteLength);if(0==g.byteLength)return;g=new Uint8Array(g)}var h= +f;f=!1;h&&10===g.length&&255===g[0]&&255===g[1]&&255===g[2]&&255===g[3]&&112===g[4]&&111===g[5]&&114===g[6]&&116===g[7]?(g=g[8]<<8|g[9],W.mb.bd(a,b),b.port=g,W.mb.Ic(a,b)):(a.Ob.push({hb:b.hb,port:b.port,data:g}),e.websocket.emit("message",a.stream.fd))}var f=!0;x?(b.socket.on("open",c),b.socket.on("message",function(g,h){h.$d&&d((new Uint8Array(g)).buffer)}),b.socket.on("close",function(){e.websocket.emit("close",a.stream.fd)}),b.socket.on("error",function(){a.error=14;e.websocket.emit("error",[a.stream.fd, +a.error,"ECONNREFUSED: Connection refused"])})):(b.socket.onopen=c,b.socket.onclose=function(){e.websocket.emit("close",a.stream.fd)},b.socket.onmessage=function(g){d(g.data)},b.socket.onerror=function(){a.error=14;e.websocket.emit("error",[a.stream.fd,a.error,"ECONNREFUSED: Connection refused"])})},Nb:function(a){if(1===a.type&&a.jb)return a.pending.length?65:0;var b=0,c=1===a.type?W.mb.bc(a,a.ob,a.rb):null;if(a.Ob.length||!c||c&&c.socket.readyState===c.socket.CLOSING||c&&c.socket.readyState===c.socket.CLOSED)b|= +65;if(!c||c&&c.socket.readyState===c.socket.OPEN)b|=4;if(c&&c.socket.readyState===c.socket.CLOSING||c&&c.socket.readyState===c.socket.CLOSED)b|=16;return b},Jb:function(a,b,c){switch(b){case 21531:return b=0,a.Ob.length&&(b=a.Ob[0].data.length),M[c>>2>>>0]=b,0;default:return 28}},close:function(a){if(a.jb){try{a.jb.close()}catch(f){}a.jb=null}for(var b=Object.keys(a.Yb),c=0;cb;b++){var c=Number(a[b]);if(isNaN(c))return null;a[b]=c}return(a[0]|a[1]<<8|a[2]<<16|a[3]<<24)>>>0} +function Fb(a){var b,c,d=[];if(!/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i.test(a))return null;if("::"===a)return[0,0,0,0,0,0,0,0];a=a.startsWith("::")?a.replace("::","Z:"):a.replace("::",":Z:");0>2>>>0]=16);L[a>>1>>>0]=b;M[a+4>>2>>>0]=c;L[a+2>>1>>>0]=Gb(d);R=[0,(Q=0,1<=+Math.abs(Q)?0>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[a+8>>2>>>0]=R[0];M[a+12>>2>>>0]=R[1];break;case 10:c=Fb(c);f&&(M[f>>2>>>0]=28);M[a>>2>>>0]=b;M[a+8>>2>>>0]=c[0];M[a+12>>2>>>0]=c[1];M[a+16>>2>>>0]=c[2];M[a+20>>2>>>0]=c[3];L[a+2>>1>>>0]=Gb(d);M[a+4>>2>>>0]=0;M[a+24>>2>>>0]=0;break;default:return 5}return 0} +var Ib=1,Jb={},Kb={};function Lb(a){var b=Eb(a);if(null!==b)return a;b=Fb(a);if(null!==b)return a;Jb[a]?b=Jb[a]:(b=Ib++,assert(65535>b,"exceeded max address mappings of 65535"),b="172.29."+(b&255)+"."+(b&65280),Kb[b]=a,Jb[a]=b);return b}function Mb(a){return(a&255)+"."+(a>>8&255)+"."+(a>>16&255)+"."+(a>>24&255)} +function Nb(a){var b="",c,d=0,f=0,g=0,h=0;a=[a[0]&65535,a[0]>>16,a[1]&65535,a[1]>>16,a[2]&65535,a[2]>>16,a[3]&65535,a[3]>>16];var n=!0;for(c=0;5>c;c++)if(0!==a[c]){n=!1;break}if(n){c=Mb(a[6]|a[7]<<16);if(-1===a[5])return"::ffff:"+c;if(0===a[5])return"0.0.0.0"===c&&(c=""),"0.0.0.1"===c&&(c="1"),"::"+c}for(c=0;8>c;c++)0===a[c]&&(1d&&(d=h,g=c-d+1);for(c=0;8>c;c++)1=g&&cc?":":"");return b} +function Pb(a,b){var c=L[a>>1>>>0],d=Ob(Fa[a+2>>1>>>0]);switch(c){case 2:if(16!==b)return{bb:28};a=M[a+4>>2>>>0];a=Mb(a);break;case 10:if(28!==b)return{bb:28};a=[M[a+8>>2>>>0],M[a+12>>2>>>0],M[a+16>>2>>>0],M[a+20>>2>>>0]];a=Nb(a);break;default:return{bb:5}}return{family:c,hb:a,port:d}}function Qb(a,b,c){if(c&&0===a)return null;a=Pb(a,b);if(a.bb)throw new T.Za(a.bb);b=a.hb;a.hb=(Kb[b]?Kb[b]:null)||a.hb;return a} +function Rb(){void 0===Rb.start&&(Rb.start=Date.now());return 1E3*(Date.now()-Rb.start)|0}var Sb={};function Tb(){if(!Ub){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ia||"./this.program"},b;for(b in Sb)void 0===Sb[b]?delete a[b]:a[b]=Sb[b];var c=[];for(b in a)c.push(b+"="+a[b]);Ub=c}return Ub}var Ub,Y={}; +function Vb(a){Vb.buffer||(Vb.buffer=Ca(256),Y["0"]="Success",Y["-1"]="Invalid value for 'ai_flags' field",Y["-2"]="NAME or SERVICE is unknown",Y["-3"]="Temporary failure in name resolution",Y["-4"]="Non-recoverable failure in name res",Y["-6"]="'ai_family' not supported",Y["-7"]="'ai_socktype' not supported",Y["-8"]="SERVICE not supported for 'ai_socktype'",Y["-10"]="Memory allocation failure",Y["-11"]="System error returned in 'errno'",Y["-12"]="Argument buffer overflow");var b="Unknown error"; +a in Y&&(255d-a.getDate())b-=d-a.getDate()+1,a.setDate(1),11>c?a.setMonth(c+1):(a.setMonth(0),a.setFullYear(a.getFullYear()+1));else{a.setDate(a.getDate()+b);break}}return a}function ac(a,b,c,d){a||(a=this);this.parent=a;this.gb=a.gb;this.Wb=null;this.id=T.Kd++;this.name=b;this.mode=c;this.$a={};this.ab={};this.rdev=d} +Object.defineProperties(ac.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}},Ed:{get:function(){return T.ib(this.mode)}},xc:{get:function(){return T.Ub(this.mode)}}});T.hd=ac;T.Td();var zb;function wb(a,b){var c=Array(Aa(a)+1);a=C(a,c,0,c.length);b&&(c.length=a);return c} +var vc={b:function(a,b,c,d){B("Assertion failed: "+H(a)+", at: "+[b?H(b):"unknown filename",c,d?H(d):"unknown function"])},la:function(a,b){return bb(a,b)},ca:function(a,b){return eb(a,b)},ba:function(a,b){return kb(a,b)},na:function(a,b,c,d){try{for(var f=0,g=b?M[b>>2>>>0]:0,h=b?M[b+4>>2>>>0]:0,n=c?M[c>>2>>>0]:0,p=c?M[c+4>>2>>>0]:0,q=d?M[d>>2>>>0]:0,r=d?M[d+4>>2>>>0]:0,w=0,z=0,m=0,t=0,u=0,F=0,J=(b?M[b>>2>>>0]:0)|(c?M[c>>2>>>0]:0)|(d?M[d>>2>>>0]:0),db=(b?M[b+4>>2>>>0]:0)|(c?M[c+4>>2>>>0]:0)|(d?M[d+ +4>>2>>>0]:0),A=0;AA?J&N:db&N){var Oa=T.tb(A);if(!Oa)throw new T.Za(8);var Pa=5;Oa.ab.Nb&&(Pa=Oa.ab.Nb(Oa));Pa&1&&(32>A?g&N:h&N)&&(32>A?w|=N:z|=N,f++);Pa&4&&(32>A?n&N:p&N)&&(32>A?m|=N:t|=N,f++);Pa&2&&(32>A?q&N:r&N)&&(32>A?u|=N:F|=N,f++)}}b&&(M[b>>2>>>0]=w,M[b+4>>2>>>0]=z);c&&(M[c>>2>>>0]=m,M[c+4>>2>>>0]=t);d&&(M[d>>2>>>0]=u,M[d+4>>2>>>0]=F);return f}catch(ob){return"undefined"!==typeof T&&ob instanceof T.Za||B(ob),-ob.bb}},S:function(a,b,c){try{var d=X(a),f=d.qb.accept(d); +b&&Hb(b,f.family,Lb(f.ob),f.rb,c);return f.stream.fd}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),-g.bb}},pa:function(a,b){try{a=H(a);if(b&-8)var c=-28;else{var d;(d=T.eb(a,{sb:!0}).node)?(a="",b&4&&(a+="r"),b&2&&(a+="w"),b&1&&(a+="x"),c=a&&T.Bb(d,a)?-2:0):c=-44}return c}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),-f.bb}},V:function(a,b,c){try{var d=X(a),f=Qb(b,c);d.qb.bind(d,f.hb,f.port);return 0}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g), +-g.bb}},U:function(a,b,c){try{var d=X(a),f=Qb(b,c);d.qb.connect(d,f.hb,f.port);return 0}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),-g.bb}},l:function(a,b,c){Cb=c;try{var d=V(a);switch(b){case 0:var f=Db();return 0>f?-28:T.open(d.path,d.flags,0,f).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return f=Db(),d.flags|=f,0;case 12:return f=Db(),L[f+0>>1>>>0]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return M[cb()>>2>>>0]=28,-1;default:return-28}}catch(g){return"undefined"!== +typeof T&&g instanceof T.Za||B(g),-g.bb}},va:function(a,b){try{var c=V(a);return Bb(T.stat,c.path,b)}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),-d.bb}},ga:function(a,b,c){try{var d=V(a);d.Cb||(d.Cb=T.readdir(d.path));a=0;for(var f=T.pb(d,0,1),g=Math.floor(f/280);g>>0,(Q=n,1<=+Math.abs(Q)?0>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[b+a>>2>>>0]=R[0];M[b+a+4>>2>>>0]=R[1];R=[280*(g+1)>>>0,(Q=280*(g+1),1<=+Math.abs(Q)?0>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[b+a+8>>2>>>0]=R[0];M[b+a+12>>2>>>0]=R[1];L[b+a+16>>1>>>0]=280;E[b+a+18>>0>>>0]=p;C(h,D,b+a+19,256);a+=280;g+=1}T.pb(d,280*g,0);return a}catch(r){return"undefined"!==typeof T&&r instanceof T.Za||B(r),-r.bb}},Q:function(a,b,c){try{var d=X(a); +if(!d.ob)return-53;Hb(b,d.family,Lb(d.ob),d.rb,c);return 0}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),-f.bb}},ja:function(a,b){try{return bc(b,0,136),M[b>>2>>>0]=1,M[b+4>>2>>>0]=2,M[b+8>>2>>>0]=3,M[b+12>>2>>>0]=4,0}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},R:function(a,b,c){try{k("__sys_getsockname "+a);var d=X(a);Hb(b,d.family,Lb(d.hc||"0.0.0.0"),d.Hb,c);return 0}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),-f.bb}},N:function(a,b, +c,d,f){try{var g=X(a);return 1===b&&4===c?(M[d>>2>>>0]=g.error,M[f>>2>>>0]=4,g.error=null,0):-50}catch(h){return"undefined"!==typeof T&&h instanceof T.Za||B(h),-h.bb}},B:function(a,b,c){Cb=c;try{var d=V(a);switch(b){case 21509:case 21505:return d.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return d.tty?0:-59;case 21519:if(!d.tty)return-59;var f=Db();return M[f>>2>>>0]=0;case 21520:return d.tty?-28:-59;case 21531:return f=Db(),T.Jb(d,b,f);case 21523:return d.tty?0:-59; +case 21524:return d.tty?0:-59;default:B("bad ioctl syscall "+b)}}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),-g.bb}},T:function(a,b){try{var c=X(a);c.qb.listen(c,b);return 0}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),-d.bb}},wa:function(a,b){try{return a=H(a),Bb(T.lstat,a,b)}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},xa:function(a,b){try{return a=H(a),a=mb(a),"/"===a[a.length-1]&&(a=a.substr(0,a.length-1)),T.mkdir(a,b,0),0}catch(c){return"undefined"!== +typeof T&&c instanceof T.Za||B(c),-c.bb}},ea:function(a,b,c,d,f,g){try{a:{g<<=12;var h=!1;if(0!==(d&16)&&0!==a%65536)var n=-28;else{if(0!==(d&32)){var p=cc(65536,b);if(!p){n=-48;break a}bc(p,0,b);h=!0}else{var q=T.tb(f);if(!q){n=-8;break a}var r=T.Kb(q,a,b,g,c,d);p=r.Qd;h=r.oc}p>>>=0;Ab[p]={Gd:p,Fd:b,oc:h,fd:f,Pd:c,flags:d,offset:g};n=p}}return n}catch(w){return"undefined"!==typeof T&&w instanceof T.Za||B(w),-w.bb}},fa:function(){return 0},da:function(a,b){try{a>>>=0;if(-1===(a|0)||0===b)var c=-28; +else{var d=Ab[a];if(d&&b===d.Fd){var f=T.tb(d.fd);if(f&&d.Pd&2){var g=d.flags,h=d.offset,n=D.slice(a,a+b);T.Lb(f,n,h,b,g)}Ab[a]=null;d.oc&&dc(d.Gd)}c=0}return c}catch(p){return"undefined"!==typeof T&&p instanceof T.Za||B(p),-p.bb}},sa:function(){return-63},D:function(a,b,c){Cb=c;try{var d=H(a),f=c?Db():0;return T.open(d,b,f).fd}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),-g.bb}},ma:function(a,b){try{for(var c=0,d=0;d>1>>>0],h=32,n=T.tb(M[f>>2>>>0]);n&& +(h=5,n.ab.Nb&&(h=n.ab.Nb(n)));(h&=g|24)&&c++;L[f+6>>1>>>0]=h}return c}catch(p){return"undefined"!==typeof T&&p instanceof T.Za||B(p),-p.bb}},ia:function(a,b,c,d){try{return d&&(M[d>>2>>>0]=-1,M[d+4>>2>>>0]=-1,M[d+8>>2>>>0]=-1,M[d+12>>2>>>0]=-1),0}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),-f.bb}},O:function(a,b,c,d,f,g){try{var h=X(a),n=h.qb.ad(h,c);if(!n)return 0;f&&Hb(f,h.family,Lb(n.hb),n.port,g);D.set(n.buffer,b>>>0);return n.buffer.byteLength}catch(p){return"undefined"!== +typeof T&&p instanceof T.Za||B(p),-p.bb}},ua:function(a,b){try{return a=H(a),b=H(b),T.rename(a,b),0}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},qa:function(a){try{return a=H(a),T.rmdir(a),0}catch(b){return"undefined"!==typeof T&&b instanceof T.Za||B(b),-b.bb}},P:function(a,b,c,d,f,g){try{var h=X(a),n=Qb(f,g,!0);return n?h.qb.cd(h,E,b,c,n.hb,n.port):T.write(h.stream,E,b,c)}catch(p){return"undefined"!==typeof T&&p instanceof T.Za||B(p),-p.bb}},ha:function(){return 0},M:function(){return-50}, +W:function(a){try{return X(a),-52}catch(b){return"undefined"!==typeof T&&b instanceof T.Za||B(b),-b.bb}},z:function(a,b,c){try{return W.createSocket(a,b,c).stream.fd}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),-d.bb}},E:function(a,b){try{return a=H(a),Bb(T.stat,a,b)}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},ka:function(a){try{if(!a)return-21;var b={__size__:390,domainname:325,machine:260,nodename:65,release:130,sysname:0,version:195};K("Emscripten", +a+b.sysname);K("emscripten",a+b.nodename);K("1.0",a+b.release);K("#1",a+b.version);K("wasm32",a+b.machine);return 0}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},ra:function(a){try{return a=H(a),T.unlink(a),0}catch(b){return"undefined"!==typeof T&&b instanceof T.Za||B(b),-b.bb}},Z:function(){throw"longjmp";},a:function(){B()},ta:Rb,ya:bb,H:function(){B("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}, +Aa:function(){B("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},oa:function(){return 4294901760},X:function(a,b,c){D.copyWithin(a>>>0,b>>>0,b+c>>>0)},Y:function(a){var b=D.length;a>>>=0;if(4294901760=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0>>16);Ia();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1}, +aa:function(a){for(var b=ab();ab()-b>2>>>0]=g;K(d,g);c+=d.length+1});return 0}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),d.bb}},$:function(a,b){try{var c=Tb();M[a>>2>>>0]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});M[b>>2>>>0]=d;return 0}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),f.bb}},s:function(a){da(a)},t:function(a){try{var b=V(a);T.close(b);return 0}catch(c){return"undefined"!== +typeof T&&c instanceof T.Za||B(c),c.bb}},A:function(a,b){try{var c=V(a);E[b>>0>>>0]=c.tty?2:T.ib(c.mode)?3:T.Db(c.mode)?7:4;return 0}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),d.bb}},C:function(a,b,c,d){try{a:{for(var f=V(a),g=a=0;g>2>>>0],n=T.read(f,E,M[b+8*g>>2>>>0],h,void 0);if(0>n){var p=-1;break a}a+=n;if(n>2>>>0]=p;return 0}catch(q){return"undefined"!==typeof T&&q instanceof T.Za||B(q),q.bb}},I:function(a,b,c,d,f){try{var g=V(a); +a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;T.pb(g,a,d);R=[g.position>>>0,(Q=g.position,1<=+Math.abs(Q)?0>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[f>>2>>>0]=R[0];M[f+4>>2>>>0]=R[1];g.Cb&&0===a&&0===d&&(g.Cb=null);return 0}catch(h){return"undefined"!==typeof T&&h instanceof T.Za||B(h),h.bb}},v:function(a,b,c,d){try{a:{for(var f=V(a),g=a=0;g>2>>>0],M[b+(8*g+4)>>2>>>0], +void 0);if(0>h){var n=-1;break a}a+=h}n=a}M[d>>2>>>0]=n;return 0}catch(p){return"undefined"!==typeof T&&p instanceof T.Za||B(p),p.bb}},q:Vb,c:function(){return ra},o:function(a,b,c,d){function f(w,z,m,t,u,F){var J=10===w?28:16;u=10===w?Nb(u):Mb(u);J=Ca(J);u=Hb(J,w,u,F);assert(!u);u=Ca(32);M[u+4>>2>>>0]=w;M[u+8>>2>>>0]=z;M[u+12>>2>>>0]=m;M[u+24>>2>>>0]=t;M[u+20>>2>>>0]=J;M[u+16>>2>>>0]=10===w?28:16;M[u+28>>2>>>0]=0;return u}var g=0,h=0,n=0,p=0,q=0,r=0;c&&(n=M[c>>2>>>0],p=M[c+4>>2>>>0],q=M[c+8>>2>>> +0],r=M[c+12>>2>>>0]);q&&!r&&(r=2===q?17:6);!q&&r&&(q=17===r?2:1);0===r&&(r=6);0===q&&(q=1);if(!a&&!b)return-2;if(n&-1088||0!==c&&M[c>>2>>>0]&2&&!a)return-1;if(n&32)return-2;if(0!==q&&1!==q&&2!==q)return-7;if(0!==p&&2!==p&&10!==p)return-6;if(b&&(b=H(b),h=parseInt(b,10),isNaN(h)))return n&1024?-2:-8;if(!a)return 0===p&&(p=2),0===(n&1)&&(2===p?g=ec(2130706433):g=[0,0,0,1]),a=f(p,q,r,null,g,h),M[d>>2>>>0]=a,0;a=H(a);g=Eb(a);if(null!==g)if(0===p||2===p)p=2;else if(10===p&&n&8)g=[0,0,ec(65535),g],p=10; +else return-2;else if(g=Fb(a),null!==g)if(0===p||10===p)p=10;else return-2;if(null!=g)return a=f(p,q,r,a,g,h),M[d>>2>>>0]=a,0;if(n&4)return-2;a=Lb(a);g=Eb(a);0===p?p=2:10===p&&(g=[0,0,ec(65535),g]);a=f(p,q,r,null,g,h);M[d>>2>>>0]=a;return 0},n:function(a,b,c,d,f,g,h){b=Pb(a,b);if(b.bb)return-6;a=b.port;var n=b.hb;b=!1;if(c&&d){var p;if(h&1||!(p=Kb[n]?Kb[n]:null)){if(h&8)return-2}else n=p;c=C(n,D,c,d);c+1>=d&&(b=!0)}f&&g&&(c=C(""+a,D,f,g),c+1>=g&&(b=!0));return b?-12:0},g:function(a){var b=Date.now(); +M[a>>2>>>0]=b/1E3|0;M[a+4>>2>>>0]=b%1E3*1E3|0;return 0},j:eb,Ca:fc,Ba:hc,e:ic,u:jc,x:kc,F:lc,w:mc,K:nc,J:oc,m:pc,p:qc,f:rc,za:sc,G:tc,L:uc,i:kb,y:function(a){fb();var b=new Date(M[a+20>>2>>>0]+1900,M[a+16>>2>>>0],M[a+12>>2>>>0],M[a+8>>2>>>0],M[a+4>>2>>>0],M[a>>2>>>0],0),c=M[a+32>>2>>>0],d=b.getTimezoneOffset(),f=new Date(b.getFullYear(),0,1),g=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),h=f.getTimezoneOffset(),n=Math.min(h,g);0>c?M[a+32>>2>>>0]=Number(g!=h&&n==d):0>2>>>0]=b.getDay();M[a+28>>2>>>0]=(b.getTime()-f.getTime())/864E5|0;M[a>>2>>>0]=b.getSeconds();M[a+4>>2>>>0]=b.getMinutes();M[a+8>>2>>>0]=b.getHours();M[a+12>>2>>>0]=b.getDate();M[a+16>>2>>>0]=b.getMonth();return b.getTime()/1E3|0},d:function(a){ra=a},r:function(){return 0},h:function(a,b,c,d){function f(m,t,u){for(m="number"===typeof m?m.toString():m||"";m.length +J?-1:0=h(u,m)?0>=h(t,m)?m.getFullYear()+1:m.getFullYear():m.getFullYear()-1}var q=M[d+40>>2>>>0];d={Wd:M[d>>2>>>0],Vd:M[d+4>>2>>>0],jc:M[d+8>>2>>>0],Zb:M[d+12>>2>>>0],Qb:M[d+16>>2>>>0],nb:M[d+20>>2>>>0],kc:M[d+24>>2>>>0],lc:M[d+28>>2>>>0],oe:M[d+32>>2>>>0],Ud:M[d+36>>2>>>0],Xd:q?H(q):""};c=H(c);q={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S", +"%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var r in q)c=c.replace(new RegExp(r,"g"),q[r]);var w="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),z="January February March April May June July August September October November December".split(" ");q={"%a":function(m){return w[m.kc].substring(0, +3)},"%A":function(m){return w[m.kc]},"%b":function(m){return z[m.Qb].substring(0,3)},"%B":function(m){return z[m.Qb]},"%C":function(m){return g((m.nb+1900)/100|0,2)},"%d":function(m){return g(m.Zb,2)},"%e":function(m){return f(m.Zb,2," ")},"%g":function(m){return p(m).toString().substring(2)},"%G":function(m){return p(m)},"%H":function(m){return g(m.jc,2)},"%I":function(m){m=m.jc;0==m?m=12:12m.jc?"AM":"PM"},"%S":function(m){return g(m.Wd,2)},"%t":function(){return"\t"},"%u":function(m){return m.kc||7},"%U":function(m){var t=new Date(m.nb+1900,0,1),u=0===t.getDay()?t:$b(t,7-t.getDay());m=new Date(m.nb+1900,m.Qb,m.Zb);return 0>h(u,m)?g(Math.ceil((31-u.getDate()+(Xb(Wb(m.getFullYear())?Yb:Zb,m.getMonth()-1)-31)+m.getDate())/7),2):0===h(u,t)?"01":"00"},"%V":function(m){var t=new Date(m.nb+ +1901,0,4),u=n(new Date(m.nb+1900,0,4));t=n(t);var F=$b(new Date(m.nb+1900,0,1),m.lc);return 0>h(F,u)?"53":0>=h(t,F)?"01":g(Math.ceil((u.getFullYear()h(u,m)?g(Math.ceil((31-u.getDate()+(Xb(Wb(m.getFullYear())?Yb:Zb,m.getMonth()-1)-31)+m.getDate())/7),2):0===h(u,t)?"01":"00"}, +"%y":function(m){return(m.nb+1900).toString().substring(2)},"%Y":function(m){return m.nb+1900},"%z":function(m){m=m.Ud;var t=0<=m;m=Math.abs(m)/60;return(t?"+":"-")+String("0000"+(m/60*100+m%60)).slice(-4)},"%Z":function(m){return m.Xd},"%%":function(){return"%"}};for(r in q)c.includes(r)&&(c=c.replace(new RegExp(r,"g"),q[r](d)));r=wb(c,!1);if(r.length>b)return 0;E.set(r,a>>>0);return r.length-1},k:function(a){var b=Date.now()/1E3|0;a&&(M[a>>2>>>0]=b);return b}}; +(function(){function a(f){e.asm=f.exports;ta=e.asm.Da;Ia();O=e.asm.Ia;Ka.unshift(e.asm.Ea);Ua()}function b(f){a(f.instance)}function c(f){return Ya().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){k("failed to asynchronously prepare wasm: "+g);B(g)})}var d={a:vc};Ta();if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return k("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return sa||"function"!==typeof WebAssembly.instantiateStreaming|| +Va()||P.startsWith("file://")||"function"!==typeof fetch?c(b):fetch(P,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){k("wasm streaming compile failed: "+g);k("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})();e.___wasm_call_ctors=function(){return(e.___wasm_call_ctors=e.asm.Ea).apply(null,arguments)}; +var dc=e._free=function(){return(dc=e._free=e.asm.Fa).apply(null,arguments)},bc=e._memset=function(){return(bc=e._memset=e.asm.Ga).apply(null,arguments)},Ca=e._malloc=function(){return(Ca=e._malloc=e.asm.Ha).apply(null,arguments)},cb=e.___errno_location=function(){return(cb=e.___errno_location=e.asm.Ja).apply(null,arguments)},cc=e._memalign=function(){return(cc=e._memalign=e.asm.Ka).apply(null,arguments)},Ob=e._ntohs=function(){return(Ob=e._ntohs=e.asm.La).apply(null,arguments)},Gb=e._htons=function(){return(Gb= +e._htons=e.asm.Ma).apply(null,arguments)};e._main=function(){return(e._main=e.asm.Na).apply(null,arguments)}; +var ec=e._htonl=function(){return(ec=e._htonl=e.asm.Oa).apply(null,arguments)},jb=e.__get_tzname=function(){return(jb=e.__get_tzname=e.asm.Pa).apply(null,arguments)},ib=e.__get_daylight=function(){return(ib=e.__get_daylight=e.asm.Qa).apply(null,arguments)},hb=e.__get_timezone=function(){return(hb=e.__get_timezone=e.asm.Ra).apply(null,arguments)},G=e.stackSave=function(){return(G=e.stackSave=e.asm.Sa).apply(null,arguments)},I=e.stackRestore=function(){return(I=e.stackRestore=e.asm.Ta).apply(null,arguments)}, +xa=e.stackAlloc=function(){return(xa=e.stackAlloc=e.asm.Ua).apply(null,arguments)},Z=e._setThrew=function(){return(Z=e._setThrew=e.asm.Va).apply(null,arguments)},wc=e.dynCall_vijjjid=function(){return(wc=e.dynCall_vijjjid=e.asm.Wa).apply(null,arguments)},xc=e.dynCall_iiiijj=function(){return(xc=e.dynCall_iiiijj=e.asm.Xa).apply(null,arguments)},yc=e.dynCall_iij=function(){return(yc=e.dynCall_iij=e.asm.Ya).apply(null,arguments)};e._ff_h264_cabac_tables=2553548; +function ic(a,b,c){var d=G();try{return O.get(a)(b,c)}catch(f){I(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function pc(a,b){var c=G();try{O.get(a)(b)}catch(d){I(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function rc(a,b,c,d,f){var g=G();try{O.get(a)(b,c,d,f)}catch(h){I(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function qc(a,b,c){var d=G();try{O.get(a)(b,c)}catch(f){I(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}} +function kc(a,b,c,d,f){var g=G();try{return O.get(a)(b,c,d,f)}catch(h){I(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function mc(a,b,c,d,f,g,h,n,p){var q=G();try{return O.get(a)(b,c,d,f,g,h,n,p)}catch(r){I(q);if(r!==r+0&&"longjmp"!==r)throw r;Z(1,0)}}function fc(a){var b=G();try{return O.get(a)()}catch(c){I(b);if(c!==c+0&&"longjmp"!==c)throw c;Z(1,0)}}function hc(a,b){var c=G();try{return O.get(a)(b)}catch(d){I(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}} +function jc(a,b,c,d){var f=G();try{return O.get(a)(b,c,d)}catch(g){I(f);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}function tc(a,b,c,d,f,g,h,n,p){var q=G();try{O.get(a)(b,c,d,f,g,h,n,p)}catch(r){I(q);if(r!==r+0&&"longjmp"!==r)throw r;Z(1,0)}}function lc(a,b,c,d,f,g){var h=G();try{return O.get(a)(b,c,d,f,g)}catch(n){I(h);if(n!==n+0&&"longjmp"!==n)throw n;Z(1,0)}}function sc(a,b,c,d,f,g,h){var n=G();try{O.get(a)(b,c,d,f,g,h)}catch(p){I(n);if(p!==p+0&&"longjmp"!==p)throw p;Z(1,0)}} +function uc(a,b,c,d,f,g,h,n,p,q){var r=G();try{wc(a,b,c,d,f,g,h,n,p,q)}catch(w){I(r);if(w!==w+0&&"longjmp"!==w)throw w;Z(1,0)}}function nc(a,b,c,d,f,g,h,n){var p=G();try{return xc(a,b,c,d,f,g,h,n)}catch(q){I(p);if(q!==q+0&&"longjmp"!==q)throw q;Z(1,0)}}function oc(a,b,c,d){var f=G();try{return yc(a,b,c,d)}catch(g){I(f);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}e.ccall=wa; +e.cwrap=function(a,b,c,d){c=c||[];var f=c.every(function(g){return"number"===g});return"string"!==b&&f&&!d?va(a):function(){return wa(a,b,c,arguments,d)}}; +e.setValue=function(a,b,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":E[a>>0>>>0]=b;break;case "i8":E[a>>0>>>0]=b;break;case "i16":L[a>>1>>>0]=b;break;case "i32":M[a>>2>>>0]=b;break;case "i64":R=[b>>>0,(Q=b,1<=+Math.abs(Q)?0>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[a>>2>>>0]=R[0];M[a+4>>2>>>0]=R[1];break;case "float":Ga[a>>2>>>0]=b;break;case "double":Ha[a>>3>>>0]=b;break;default:B("invalid type for setValue: "+ +c)}};e.writeAsciiToMemory=K;e.FS=T;var zc;function ca(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Sa=function Ac(){zc||Bc();zc||(Sa=Ac)}; +function Bc(a){function b(){if(!zc&&(zc=!0,e.calledRun=!0,!ua)){e.noFSInit||T.Tb.wc||T.Tb();T.Yc=!1;W.root=T.gb(W,{},null);Za(Ka);Za(La);aa(e);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(Cc){var c=a,d=e._main;c=c||[];var f=c.length+1,g=xa(4*(f+1));M[g>>>2]=Da(ia);for(var h=1;h>2)+h>>>0]=Da(c[h-1]);M[(g>>2)+f>>>0]=0;try{var n=d(f,g);da(n,!0)}catch(p){p instanceof ca||"unwind"==p||((c=p)&&"object"===typeof p&&p.stack&&(c=[p,p.stack]),k("exception thrown: "+c),ja(1,p))}finally{}}if(e.postRun)for("function"== +typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;)c=e.postRun.shift(),Ma.unshift(c);Za(Ma)}}a=a||ha;if(!(01){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}readBinary=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end>_emscripten_get_heap_size()){abort()}HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=Number(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":1868,"maximum":1868+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5993952,DYNAMICTOP_PTR=750912;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||268435456;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPreMain(cb){__ATMAIN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAABkhDlAWABfwBgAX8Bf2ACf38AYAJ/fwF/YAN/f38Bf2ADf39/AGAEf39/fwBgBH9/f38Bf2AFf39/f38AYAV/f39/fwF/YAZ/f39/f38Bf2AGf39/f39/AGAHf39/f39/fwBgAAF/YAd/f39/f39/AX9gCX9/f39/f39/fwBgCH9/f39/f39/AX9gAABgAn9+AX9gCH9/f39/f39/AGACf38BfWACf30AYAF/AX1gAXwBfGAMf39/f39/f39/f39/AGAEf35/fwF+YAl/f39/f39/f38Bf2ABfwF8YAp/f39/f39/f39/AGADf31/AX9gAn9/AX5gAX0BfWACf38BfGADf399AGACf3wAYAF/AX5gAn9+AX5gA39+fwF+YAN/f38BfGACf34AYAp/f39/f39/f39/AX9gA39/fQF/YAN/f38BfWALf39/f39/f39/f38AYAV/f35/fwBgBX9+fn5+AGAFf319fX8AYAN/fX0Bf2AFf399f38AYAN/fX8AYAR/f39/AX5gAn19AX1gAn98AXxgAnx8AXxgBH9/fX0AYAN/f3wAYAN/fn8AYAR/fX9/AGADf319AGAFf39/f34Bf2AFf39/f3wBf2AEf399fwF/YAJ/fQF9YAJ8fwF8YAd/f399f39/AGAGf39/fX1/AGAFf399fX8AYAR/fn5/AGAEf319fQBgA398fABgC39/f39/f39/f39/AX9gDH9/f39/f39/f39/fwF/YAR/fX9/AX9gAn98AX9gA398fwF/YAF9AX9gAn1/AX9gD39/f39/f39/f39/f39/fwBgCn9/f39/f31/f38AYAZ/f39/f30AYAZ/f39/fX0AYAV/f399fQBgBH9/f3wAYAV/f398fwBgBX9/f3x8AGAEf399fwBgBH9+f38AYAZ/fX9/f38AYAh/fX9/f39/fwBgBX99fX9/AGAHf39/f39+fgF/YAZ/f39/fn4Bf2AGf39/f31/AX9gBn9/fX9/fwF/YAh/f31/f39/fwF/YAZ/f319fX8Bf2AEf398fAF/YAN/fn8Bf2ACf30Bf2AFf319fX8Bf2AFf3x/f38Bf2AGf3x/f39/AX9gAn5/AX9gBH5+fn4Bf2ADfX9/AX9gA319fwF/YAN9fX0Bf2ABfAF/YAABfmAEf39/fgF+YAp/f39/fX9/f39/AX1gB39/f3x/fHwBfWACfX8BfWABfAF9YAV/f39/fwF8YAZ/f39/f38BfGADf3x8AXxgA3x8fwF8YA5/f39/f39/f39/f39/fwBgEH9/f39/f39/f39/f39/f38AYAp/f39/f39/f31/AGALf39/f39/f399f38AYAx/f39/f39/f31/f38AYAd/f39/f399AGAMf39/f39/fX9/f39/AGAKf39/f39/fHx8fwBgCX9/f39/fX9/fwBgCX9/f39/fX1/fwBgDH9/f39/fX19f39/fwBgCX9/f39/fH9/fwBgBX9/f399AGAGf39/f31/AGAIf39/f31/f38AYAl/f39/fX9/f38AYAt/f39/fX19fX1/fwBgCn9/f399fX19fX0AYAR/f399AGAFf39/fX8AYAZ/f399fX0AYAp/f399fX1/f39/AGAHf39/fHx8fwBgA39/fgBgB39/fn9/f38AYAd/f31/f39/AGAHf399fX9/fwBgBX9/fX19AGAEf398fABgB39/fHx8f38AYAp/f3x8fHx8fHx8AGAHf35/f39/fgBgA39+fgBgBX9+fn9/AGAHf35+f39/fwBgB399f39/f38AYAR/fX1/AGAGf319f39/AGAHf319fX9/fwBgBn99fX19fwBgBH98f38AYAV/fH9/fwBgBH98fH8AYAR/fHx8AGAFf3x8fH8AYAl/fHx8fHx8fHwAYAJ+fwBgAn1/AGAFfX19f38AYAJ8fwBgDn9/f39/f39/f39/f39/AX9gDX9/f39/f39/fX1/f34Bf2AIf39/f39/fX8Bf2ALf39/f39/fX19fX8Bf2ALf39/f39/fH9/f38Bf2AIf39/f31/f30Bf2AIf39/f31/fX8Bf2AGf39/f319AX9gBH9/f30Bf2AGf39/fX9/AX9gCn9/f31/f39/f38Bf2AGf39/fX1/AX9gBH9/f3wBf2ADf39+AX9gBn9/fn9+fwF/YAV/f31/fwF/YAx/f31/f39/f39/f38Bf2ALf399f399f39/f38Bf2AHf399fX9/fwF/YAh/f319f39/fwF/YAl/f319f319fX8Bf2AFf399fX0Bf2AEf398fwF/YAR/fn9/AX9gBX9+f39/AX9gBn9+fn9/fwF/YAh/fn5/f39/fwF/YAV/fX9/fwF/YAR/fH9/AX9gA35/fwF/YAZ+f39+f38Bf2ACfn4Bf2AHfX9/fX9/fwF/YAJ8fwF/YAJ8fAF/YAN8fH8Bf2AFfHx/f38Bf2ADf35+AX5gBX9/f39/AX1gBn9/f39/fwF9YAd/f39/f39/AX1gC39/f399f39/f39/AX1gDH9/f399fX9/f39/fwF9YAN/f30BfWAIf399fX9/f38BfWACf3wBfWACfn4BfWADfX9/AX1gBH1/f38BfWAEfX1/fQF9YAR/f39/AXxgC39/f39/f31/f39/AXxgCn9/f39/fX9/f38BfGAFf39/fHwBfGALf39/fHx/f39/f38BfGAGf398f39/AXxgBn9/fHx/fwF8YAN/fH8BfGACfn4BfGABfQF8YAN8fHwBfAL7AjwBYQFhAA0BYQFiAAQBYQFjAAABYQFkAAYBYQFlAAIBYQFmAAcBYQFnAAMBYQFoAAQBYQFpAAIBYQFqAAUBYQFrAAYBYQFsAAcBYQFtAAkBYQFuAB8BYQFvAAgBYQFwAAoBYQFxABEBYQFyAAABYQFzAAsBYQF0AAEBYQF1ABcBYQF2AAQBYQF3AAcBYQF4AAQBYQF5AAEBYQF6AAQBYQFBAAABYQFCAAUBYQFDAFIBYQFEABwBYQFFAAEBYQFGAA0BYQFHAAkBYQFIAAQBYQFJAAEBYQFKAAkBYQFLAAMBYQFMAAMBYQFNAAMBYQFOAAMBYQFPAAMBYQFQAAQBYQFRAAMBYQFSAAMBYQFTAAEBYQFUAAcBYQFVAAQBYQFWAAMBYQFXAAMBYQFYAAMBYQFZAAoBYQFaAAcBYQFfAAEBYQEkACABYQJhYQABAWECYmEAAQFhAmNhAAEBYQJkYQACAWEGbWVtb3J5AgCAIAFhBXRhYmxlAXAAzA4Dij2jPAQCAQADAQMAAQEBCAEGAwEBAAEBAQALAwCfAQMBBA0EAQECAQEBAwEDAQEABAEBAgEBAQEDAQEDAwEFAAoDAAIDAwICAQcBAAMFAQEBAQMBBy8EAwEAAgQDAwEDAgMBBAIDAwMMAwMCAQADAQIIBAMBAwEPAAMFAwQCBgQAAAMCAgMFAwEDAgM0Ai0AAQMCAgEBBQEBAwMHBQECAQEBBQEEAhsBAgIFAgADAQMCAwEEAQIBAQEBAgEBBQECAQICAQMAAwADAwMHBA0HAwMABAECSwICAgQDCTQDBQEBawcBAwECAQMBAgEDAzUBAgECAwIFAwUCBwIBAgABBQABAgEAAwMDBQEEAAIDAgAFAwMBAQEBAAsDAQcBAwABCAEBBAQDFQEFBAECFwQDAQcAAwMDAQADAQICEQUBAQQDAwMDAQMEAwMCAQIBAwIDAAABAwMCAQIDBQMDAgQDACIBAwMDAAIEBQYEAAMAAQMBAQMCAAENLQUAAAIBAgICAQMCAgIBAAECEQMJBgECAAAFAWkDBQMBBQEDIkMNBAADAwEBBAEBAwEAAgEDAgYDAAUUAgFJAwEIAQIDBAgCAQEBAQUAAwAGAgIEAQICAwQCBQEVAwMEBQECAwMCAAIEBwADAwUBAwcCBAEDAwECBQQAAQMDAAEBAQUCBAMBBAEDAQYGAgEAAQAEBwYBAwQDAwIBAAMDAgAVAAEBAAACAT4BAQYDAQEAAQsCAAADBAEBAwABCQEBAAQFAgEBAQgBAQMABBEBAwIFAgQEJwYBAwEBOgECBQEJAQEDAQEAAQIDFQICBQIDAUsDBAMFBwMCAQEFAwECAgEDBAADAnFxlgECBAMFBAAAAQAEBAAEAQEDAQMCBQACAgEBAQEAAwEEAQMAAQABAwUSAQQDBAMCCQkHAgEFAQEtAQECAQIFAQEADQEBAQMBAQIJAQscFwMGAA4FBAQDAwICAAEEHwW2AR4SAQIKAgMDAQEBAQQDAQIKAj8DBAMDARAQCgYABAUEAwAABAIEAQACAgMJBQECAwIDAwIBBQcBBAIBAiADBwECAQQBAnoGAQAGAQEJAwIDAQNRAgAAAAEGDQ0NBQICBgMECgMBAgMCAQICAgIBBgEGAxdnBgIAAAQAAgoAAAc2LwEBBgICCQIDAQQEAQEAAQIDCAABEAMFBQEBAAEDAQAFBQEBAQMBAQEBAwUFBAMAAgQDAQQDAgUCBQABAwUUAwEAAwMKAQYFBBYDAQEAAwQDAQEBAgMDCwIBAQMEAwMBBAINBAQBAwQFAwsBAQIABAUVOgEFAwsBCgQBAwMCAQYBAwAHBAQBAgQEAwEDFALVAQABAxsBAYABAAUDIgIDoAEDAQMFBgECAwIDAxUFAAUEDQADAwQEAQEBAQEBA7wBBQQACocBAQ0CAQIBFgKGAQAAAwEBAQEAAgEBAAQBBAMCAgIDAgADAgEBAwADAgUDAwMoASgBYgECAzUXF+IBQwJmCAMAAwUEBQQBAwICAwMDAwEGIAEGAQMDAgMCBgIFAwEDAgQAAwAHAAMCAQEArgEBA9IBAgMDBAQCAAQIAAEDAAEUBAUAAwMDAQJoAQEGBgMANAICBqIBBQUFBQQEAFwBCAYCAAAFAQABAsIBAwoGAhIBAAICAwUDAgIDAwEEAwMCBAIDAB0CAwB0AQUBAAIoAgUBBAcBCwIBAQIBAwECAwADAQABAgMCAgEDAwEBAQEBAQMCAAAFAwUBAQEfdTUDBAcAAgEDAQQJBwEDAAUFBAAHCiAAAgUCBQIIAwENCAUFAgABAwEBAAE9BAUJAgUQEQEEAQPTAQcWAwMCAwkAAgEDAgcHAgMCAQQBAwgBMAEJAwMEBAMJAgUBAAACAAIUAAAHAQcBAQMCCAUGCFAAAwMXAgABAQcCASQBAQADAQECAQAFBAMDAQECBgEAAgUCAgIBGwICASECJgMHARQEAAACAAAHAwcABwUCAgJFAQMFAQUDAQIWBgMbAQABCQMBAAEAAQMCAwQDBgIDAwIDCgMBAQoEAAAANQIIEQACBAEHAQUDAQIAAgEAFAECAwIBAQIMBAwDDgEDDgIBAQEAAQMXHx8tAQIMAgdhYQEAEQIAAAEABAYFAgEBAwECAAcFBQEBAQQCAAEFBgMCBwYBBQEAAgUAAwMDCwUBBAEDAQMBBQMDAwABBAMEAQUHAQQFAAEBBwQBCQEpBAgBAwQAAQMCBgEBAQECBAQAAAIBAQEDPgEDAgwKAwYFBQIEAgABAgABAQMBAQQCBgEDAwIFAgcEBAXbAXkMAQIDCAkABwAFBF4FAAABAQECFgMDBj/kASAFAwECAAUFAQNOAQABAQABDAULAgAFAgYEAxcGAgEFAQEBEgIjAwAFDQECtQESAQIBAQBoFhwDBwACAQADBRUBAQMBBgMDAwQDAAIBIAQDAgEBAwICAgABAQAJCgEBAQICAwcCAwYFBQECRQMEAAAAAAIDAQIAAgIGAQACDQEEAQEBAgABAQEDJgIBAwECCQMLBQUbBQIAAAAMvQEAAAIAAwEBAAMBAwMBBQEBAAQDAAUBAQADAwMABAEBAQgKDhoECwUGBQECAAMBAAIBAwMBAQcCAQMCAgAEAwMDAQEBAQMIBQUBAQQJARoAAAIDGhUERwgERwgCMgECAgADAAAAAQMByQECAQMDA20gBggEBAQOCQEFAQEBAAUCCgQEBgQCAgMAKAcDAwQEAwAFAgkCCAYGBBoEBQMCAAEDBgAAAAUCBAMDAQEEAhQBBwMDCwMDAgMBAQYBAQQBAwAJBAUDBgMDAgMDBwcBAwcGAgsICQEJBQEFAwIQAQIBBQMBAgEQAQICAQICAgQDWFgDAwEEAXAaAwRACgbjAX4CAgUDFgEBAhWzAW4HAQIBBQIFAwEDAAACAAAABAwBAAUEBAMOAQYGBhACAQIBiQE6AgICugEHBQELXAQAAQMBBQAAAgoGBQUCBAIFAwIFAgAEAwMCAgEDAgMBAQACAQEABQXfAVREAwMDAwADAwICAwEBAQsHAgICfQICAaQBAAYFAQQDAwIGBAIBAgIAAQEJBTQAAQEACwEKAgIAABcDAgADzQHBAQABACsCAgUBAgACAQPAAQEBAQFIAQFMEAIUFEsEAwIDAQEGBikEfAACAAgEBQYBAAAFAAEFAwgCAg8BBAEAAAICAwMAAwQCAjcDAAQEAwQEAwcEIgcCAgMFAgYEBQIGBAEABwMGBgcCAAIFAAYFAQQEPkkOAAIEBQUBBQUAAQYDAAMCBAACAgACAgI0G6EBIycBBSYDAA4aAQIIAQUABQAHAwAEAwELAAADA5EBWQMFamAIAAUCAwgGCAEBAAEDAgAKAwEDAwUBBAQEAgAFCwIDAgECAggCAAIIAgQFBQICAQECAgEBAwMBAQEAAgUCAwEBAQMDAr8BAgEBHy0DBgEDBQEDAQIBBAMEBAQHAQICBAMDAgACBQoHBwMEAwMCAwMHBAcBAgMDBwMGAQIDBAEEAwMOAQEAAgQIEwQCBQUTAgACAwQAAgUAAw0AAQEBAQEBCRABAgMAAQECAAABAgUCBARNHARNHAEDAQEAAkYCAwEBBQJGAgACAgsICwsICwsBAAwEAQwKBAYmKjIHCgcyBwMFMgEHAQIAAQMBAwcAAwAAAQUFAQICPAkAAQEBAwECAAEqAQEGLAACBGwfcB8CF3VMAwnWARZnAAMDBQUBBI0BBB4GQy1tBQQGAT8DBAMjIwYDBAMCAwQFBQUAAAYABAQBAwMQBAMDAQEDAQMDAQECBwQBAQABAQLLAQADBAEDAQMEAwMBBQYHBAQEAQMACQMAAgsGAgECAgUCAgIBBQgGCAAPNwAABQUFBQUFBQUFBQUFBQUFBQUCBQUCBQIEBAQDBQECAgQFBQcHAgAFBgAHAAAAAgEAAQEABQABAAAFCAEDAAMBAAUGBgYABQAHAbABDQAAAQcEAw0BBAQOBQMABAMLAQsLCwNMAgEFAwMEDgEEAgICDgoBAQEEBAQBBQUBAgECBQUBAgQJAAAFAAIBAgICAgIBBAMBAQ4KAwoAAwkAAwEBAgkGAwYCAwMOAgIDaQADAQUBAQICBAQEBwMBAzEBBQgpAQACAQkFAwQDAgEJAAcNBAUBBwMCAwABAQMAAwkAAQICAQMDBQ4BAgMKAQIBCAsBBwIDAAABBAAAAQAEAwIBAQQBA9oBAggDAAEDuAEEGhQUAAIDAgYCBAI5AAcBAwkKAAMKBAICAwACkAEACwQGDAwDAgMBAQICAVATAAEBBQIKCgoKBQgFAgUCCQIAAQIDAAcHAwUCAAAAAgMBAwICAQMBAAMAAgICAAAOBAEDBVMIDgQBCAICEAULAwExDAsCAQIAA8gBAgILBAJqAA5XAQEFITMDAgQVBQDXAQACBAEFBQsIEwQLCQkoKAkDBAICAFW3ATABBgIHAgMMBAIBRgMHAgMCA9ABAgMFBQADDgXPAQUCAwYDCAYJBQMHAwQCAwMDAwMBAQMFAgEKAAUCAgAMCwwJBQYFAQECBgUAAAEWAgMUAQICAwICAgMAAQIBBwYFA90BIABEAgMFAwoKCQcFpwE/CAIDAgACAgEIAAMFAQQAAAEBAwEDBAEEqQEyAgECSgOLAQUCBAgDAAELBQUFAwECAowBBZMBCQYBAgoCBgkAAgMIAQECAgECAAMECAYCAQMKAwAFAAMDAQEGBAMCAgIGARcCAAEXFxcDAgsCAgYFBQgAAgQGAQQAAwYBAQMCBAIElwE4BQMnmAEAAQIKAwMBAwICAwECBAIFAAEDAgQJAgEJAcYBAQIDAQICAQUCAQABAAADTgYBAQUBBQEDAA0NBgVCBhYBAQEEAgoTAgIEGgABCAgFAAADAAMDCCveAQQIDgMAAAIBgwGEARQAAgMDAAADCgMFBAICAgUCAQIAAQICAwACAAEAAQIABQEAAAEBAgACAAIEAgcAAgMAAwEEAgQDAwMEAwACAgIFAgUIAAAAAQABBAMHCwkVAQIGBQIDAgADGwAAFgMEBQAAAgMCAgYDCQMBAgICAAAAAAACAgEBAQMKAAIDAgIGAz0CAwMCAQIHIQYCawUBAAADAAIAAAADAgACAAANAAIDDQAFBTUNAAAFAg0CAA0OAg0GAQ0ADQ0BAwUNAgF0GycBAwACAwIAAAIDlQEDAQHhAQED4AECShYbcgUCBAAABQIMBQABAgQFAAUBAgICAgIAAwUCCAoEACoCBQEFAgEAAgEBBwEBBgAFAAIDAQIAAgABBgIAAQIDAgAAAgACAg0BAAMFCgUCAgICA7EBuQEDEwICAgQCAQYAAwQCEwMCAwICAwMLBAsCAAABAgADAAcCAAUCBgQAAgAFCQgFAwACAwIABQIIBAUFCAQDAwQAAAIECQcCBAICAAECAwUACwEBCwMDAQMBAQECAgACBwEQAQ4CCQgCAAEBAwENAgAEAQEGBwIDAgABDQoJAgcEA1IcCwgGBQIBAMcBFzMzBgQDAwsLAQsICAgGAwYGAQQBAAABEQABAQIHBAICBAICAgQEAgIEAgIEBAICBAQDAgICAwMEAgQCBAQBBAICCgICCgMDAwIEAgIOAgMCAwIEAgICAwMDAwMDAwMDAwICBAICBAIEAwMCBAQCBwICBAMCAgICBwIHAgoKBAICBwIHAgQCBwICAgMCAwQDAQIHAgQEBQECBAIHAgQEAgcHAgkJBAIDBAIDAgMCAwICBAQEAwQDAwAEBAMEAQEBAQEAAQICAwMAAwMDAQQCARYBAgMEAwIEAgIAFgMEDgMCAQMDAwQDAQEBAQQBAwMBAAEFAAQBBxEDBQUFBQUBAgICAgEEBAIDAgUAAAIBAAIHAQMDAAEAAQABAAEAAQABAAEBAAEAEQEAEQEAAREBABEBABEBAAERAQICAgICAgEBAAAECQoQAQoQBAkKEAoQAQcJAQEJChAJEAAJCQQHBAMEAwAJBAcEAwQDBwcHBAACAAYNAAAAEREREQYGCwsKWgpaBBYFDhwOBAUOARwOAAQJCw4EDggICAsGCAgICAgIBhAKCgoKCggICAsGCAgICAgIBhAKCgoKCgICCVs8Owk7FgkJCVsBPDsJOwkJAwIKCQoJCgkKCQoJCQoJCgkKCgoJCgkKCQoJCgkICQoJCgkKAAoEBgkEBQYJCQcEBA0EAwQCAwQCAwEBAgMBAQIRABEAAA4RAgAAAAEBAwMIAwUHAgIDAwMDBAEEAAQBBAAEBAQeMzMfAhUBDQ0NEQQlAw0BAQMDAwMDBAUCBgUHFAQEAgQEAwwLAwJlxQFmAA0lAiUCAQQEJQIBBCUDAQACAwMNAgQDBgUCBgEBAwAFAAIDAAQDBAMDAwMDBgAEBAEHAwAHAQMBBAQGAwMHAQEBAQUFBQQBAQQEBAUHBwcDAgEDBQUFBQcEBwQFBwcFBQUFBQMFBwcFBQUBAQUEBAQEAQMBBwAAAQMHAwMBBxYHAwEDAwECAwMAAAQFBAEDAQcABwEDBQMHAwcBAwEHAAEDBwMFBwUFBwIFBQcFBQcFBQUHBQUFBwQEAQcHAAABBwcDAwPKAQQAAAEBAQYHAAEAAQABAQABAQEHAQAAAQIFAwEDAQcAAQMHBQQEAwcYGBgYGBgYBwcPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PBwcEAwADBAOcAQwBAAEHAwcDAQcHAwMBBwEAAAEDBwUEBAMGBwMHAwcDAQADBQMEBAQEBQEAAwMHBwcHBwcBAwUCAgUABgYTBgMFBQijAQUCBgIiAAUTAAICBAIFBQACAAIAAgUHBwICAgYCBQUFBggFBVQPCAUFHJQBBQgAAgICAgICBgIFBggYBAgAAgIABQYFBQICBwcJBwcDAwMDAwMDAwQAABMBAQQKCgAJCQAHAgcMCQMDBQcCAwYGBgACAAADAwcDBgAGBgYGAAIAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQMFBQACAAIABgYGBgYADAAMDAwCAgAMBgwGAAAAAAMAAAAAAAYGAAYAAgADAQMBAwAAAgMDAwMDAwAAAwMDAwMAAAAACAgICAgACAgABQYGAQEBAQEBAQEBAQADAAAAAQAAAAAAAQICAAEAAgQEAQEBAAEDBQYGBgYGBggADAAMAgAAAAAAAQUAAAACAAAAAAAAAAAAAAAAAAQAAAAFAgYCAAADAwMCAgkDCAUDAwMDAwMAABYCAAMDAwMDAgAMDAAACAgICAAICAAEBAIABgAFBAEEqwGFAQMEAwkDAAEBAwAEAwIDAg09BwcECgIEAQEEBAQDAwEQEAUDBAQIAR0BAQQEBAMFBAwHBwAEAwoDAQgFAwMMEwwTEwsLCxMTAQEBLy8vL2MNDQ0DBAEBAAEBAA0NDQEDKysrdwwMHAgQAQEEAwMBBAMBBBADAAMBAgEAAQUDNgEAAAAFBAUDAAMCBQIBAAEEAQExAQQBBAECFQIBAAMBAQACCgEDAQAEAQYCBQgCBQABNgkDCgAAAgADAgUFAQMAAQEAAAEDAQMBBwMBAwQEAAAAAAAAAAMEAAAECQgECQMFBQEBAAECAQADAQAAAQNeAQQFBQMDAQIDAAABAgEhAgAAAAEFBAUFBAIIAwMCAQgDCA0FKT0BKQEBAAICBQMJDQEMEwEHBwgFBwcQBAMHAQUDAQEAAwAAAQgFBQAJCQ0CAgIFBwMFBgUDBSYAAAEDCgMDAQ92DwBgBwEAAgMAAgABAQIeI2wAAwMBAQEGLAQCAAAAAQMAAwMABAEBAwkBAwMaAR4DCQEDAQMCAQUJCRACAQEBEw8OEAEQAwAEAQcEAwQCAAEAAAADAgAGBABTBb4BZAcBBQgEC10GAAAADhQEBAEJAAICBAACBgA5Ah0CAwAGBQECBAIAAQoqA68B1AEDCAIFFLIBQAwDXwIJAgUJAxRRAQAEAgACAxMMBQMDBAMCAkgCAwEDAAAABZkBCAMCKQEHAQMCAQMAAAAIBQfZAQQAAAgAAwQDBVUFAAAAQgMAAAARAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAADAQAAAAAAAAAAAAAAAAADqAEDAAUOCwICBgMFAAACBQMFAgMDAgJFAgMCBQDOAQUC0QEDDgRuAgUFAgYFFQUwAAAAAAAAAAAAAAAAAAICAQIYAgcJCQkEAggEBgIBAgUHAgAJDgAABQAAAwMEBAMHAAEAAAMDAQEDAQECBgMFAQAEAgYGAgUDAAADAQMEBQQDAAIAAAIABgAABQIAAgAFAAYCAgIDAgYAAAEAAAAAAwAAAAgDAwgEBAMDtAEACAMFAwUBAAACNwAKAAKBASMOCQADAxMAAAMEAwQFBgIFBQoCBQICAisCBQUFxAECAgwDBgIABgAAAgEFDHICAAAAAAACAgIAAQUCAgACAgPcAXgACwIITwcCAgIEBk8MwwEJCqoBe4IBCSEhAAAAAAAAAAAAAAAAABEEBwIhAjEHSEQBAgMAXQUIVyEDpQEAXzkxMAAUAyoqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEGADkaCgwMDwMEBAQCBAsABgcCCwYDBgUGAAMAAAAABAoDAjABAAAAAgQBAgEDAQICBQQEAAAAAAAAAAAAAAAAAgMCAgYDABQAAAAICwYDBQUAAQMADwgAAAICAwMCAgUACgQIBwUFBwUGAgEBBQUDAwIFDAsCAQEIAAICAwMDAQABAAIDAAADCwkFAgICAwUFAgAAzAEAAAAAAgAAAQVHBgYArAEAAAAAAAACAAIAmgEAAgUNAgICAgcDAgIDAAIAAQAAPgUCAAICAQAAAQAAAQcCAAYEBwcABwADAAIHAAMEAQAABgIHCwIHBwMDBQACAAUBIgMDBwIFAwIBIAIASgIGAwEAAAcQAAAAAAAAAAAGBQEDAwMABAMDAwUCAgMDAAIFAgAFAAUCBQECCQsCAgEDBB0FAgkLAgUCAAkLAwEFAgACAgIBAgIGAAgEAAICAgYBAgIHAwQFBQACAAICAkAAAwMDBAAAAgEBCAICAAABAQMMAq0BjwECBQIEAgYFEwABAgYCBi4AAwMDAwACAQMCAgAEHQICAgIAFQkCAAsFAgcHBQICAgUICAQFQUEFAAYGBQUCAgEDHQACAAkLAwUDAAABAAIJBgYBBgYODAMGBAcAAQEAAQIGLgwICwgJBQYGBQUCCwMDAAAEHQIFAAsGBQAGAgUCCQkCCwMDAwMGAgAGLgYGBgYGAQkCAgICAQIACwMDAAAEHQIFAAAFAgIAAC4AAgUCCQsDAwMFGRISJFYZAAM4AwYEAwQsBY4BAgsHBAO7AQMYGAUAAAECAwgDAgMDBQAFAAAMcwECQQkCBAMBAhISJFYZAycSOAEZAAMDAwMABQEHAQoBAQoCAAYBAgMAAwUDAwMFBQoBCQoACgMDBQACAwAFAAIDAgIDABcqAAABAwMDAAACAAAANjoBAQMFBQYFBQBCCAKmAQYFBQUAAAAAAAAAAAAAAAAA2AECGhoFBgYFBQUFAAILBggABQICBQYDAgIHAwgACBEFAQUBBQMBBAEAAgIDBQAAAQMLAgACAAAAAAcFDgMEAwUOFQcLAwACAgwKAggCAwUFAgUDAQEBBQANAAEBAQQDAAULAQEDAQMDGwQCAgMCAgIAAwUCAgILAyMAAgEIAwMFAwMCAgIABAIEAAAAAwICAgMBAQAHAgMDAAAbHgMBBQABAAECAQUABQMDBwMDBQAAAAABAAMDBRooBQUBAgQDAAICBwAGAQEBBgAABQJjAgICAAQEBG8AAAACbwAAAAUHAgMDACkAAAAAAAAAAAABAgECAQEEAgABCQEAAgEEBQMCAAAAngECAwADAgMDAAAEBAACCQECAgIABggCBAAEBAQDAAQEAAQNAgIEnQECAGICBQUAAAAABAyKAQACAgMJCQUFBQAGAAAUDAIFBgYHCAACAAYABAEBAwUAAgMjAwMAAAIDAwIAAwEDAQEVAQkBAQEBBQMDAwMAAwMDBgIEAQIAAwMCAAMAAAMFAgMDAw0DAwMeCQICAQeSAQFJGwUDAAADAgYGAwUBAwMBAgMHAAAAAAUABQAEAwMBBgEsAAAAAQEBAQUDBgoCAQUDBgUDAAACfwMDAgYCAxMBBAIBAgMBAg4VAgICAwkCAQcDAgMAAgADA5sBBgMBAQEAAQAGWYgBAgAQAgAAAAIFAgYMAwIJBQgFCAYLAgMBAAELAwEFBAwLAAQAAgoCAgAEAgAAAAEDAAIAAAEAAwIHCAECAAIKCwUCAAIAHAACAAEAAxAAAQEFAwEWAgICAAACBQQCBQgGAgYDAgICABEGCQF/AUHA6u0CCweFD8ECAmVhANw8AmZhAIYCAmdhAIYCAmhhAKgdAmlhAMkbAmphAO0ZAmthAKANAmxhAPMFAm1hALEVAm5hAKEGAm9hAOQIAnBhAIYCAnFhAIYCAnJhAK88AnNhAMMeAnRhAKQeAnVhAJUeAnZhAPIdAndhAN0dAnhhAMAdAnlhAKcdAnphAJQdAkFhAP0cAkJhAOUcAkNhANUcAkRhAL8cAkVhAKgcAkZhAJYcAkdhAPIbAkhhAOAbAklhAMgbAkphALIbAkthAJ8bAkxhAIQbAk1hAKg0Ak5hAOkzAk9hALszAlBhAKAzAlFhAPYyAlJhALIyAlNhAOUxAlRhAKAxAlVhAO0wAlZhAKowAldhAPovAlhhAK8vAllhAOYuAlphAKUuAl9hAO8tAiRhALUtAmFiAPksAmJiANAsAmNiAKQsAmRiAOQIAmViAIYCAmZiAIYCAmdiAMMeAmhiAKQeAmliAJUeAmpiAPIdAmtiAN0dAmxiAMAdAm1iAKcdAm5iAJQdAm9iAP0cAnBiAOUcAnFiANUcAnJiAL8cAnNiAKgcAnRiAJYcAnViAPIbAnZiAOAbAndiAMgbAnhiALIbAnliAJ8bAnpiAIQbAkFiAOQIAkJiAIYCAkNiAPYrAkRiAMUXAkViAIIrAkZiAMIqAkdiAJkXAkhiAP8HAkliAPMFAkpiAP4HAktiAKEGAkxiAOsMAk1iAIYCAk5iANcnAk9iAKgdAlBiAMkbAlFiAO0ZAlJiAKANAlNiAPMFAlRiALEVAlViAKEGAlZiAOQIAldiAIYCAlhiAIYCAlliAJcnAlpiAMUXAl9iAMMmAiRiAO4lAmFjAJkXAmJjAIYCAmNjAKslAmRjANIkAmVjANwVAmZjAIQkAmdjAIYCAmhjAIYCAmljAP8HAmpjAPMFAmtjANQjAmxjAJYjAm1jAIYCAm5jAP8HAm9jAPMFAnBjAP4HAnFjAKEGAnJjAIYCAnNjAP8HAnRjAPMFAnVjAP4HAnZjAKEGAndjAIYCAnhjAP8HAnljAPMFAnpjAP4HAkFjAKEGAkJjAOsMAkNjAIYCAkRjAP8HAkVjAPMFAkZjAP4HAkdjAKEGAkhjAOsMAkljANwVAkpjANkiAktjAJAiAkxjAOMhAk1jAKkhAk5jANAgAk9jAI8gAlBjAPgfAlFjAIYCAlJjAIYCAlNjAOQIAlRjAIYCAlVjAPQfAlZjAPMfAldjAO8fAlhjAOsfAlljAOcfAlpjAOMfAl9jAN8fAiRjANgfAmFkANIfAmJkAM8fAmNkAM4fAmRkAMofAmVkAMYfAmZkAMMfAmdkAL8fAmhkALkfAmlkALEfAmpkAK4fAmtkAKgfAmxkAKMfAm1kAJ4fAm5kANs8Am9kANU8AnBkANE8AnFkAMk8AnJkAMc8AnNkAME8AnRkALs8AnVkALg8AnZkALQ8AndkALI8AnhkAK48AnlkAKk8AnpkAKQ8AkFkAJ48AkJkAJo8AkNkAJc8AkRkAJA8AkVkAIs8AkZkAIM8AkdkAPc7AkhkAPA7AklkAOw7AkpkAOg7AktkAOM7AkxkAOE7Ak1kAN07Ak5kANc7Ak9kANU7AlBkAM87AlFkAM07AlJkAMk7AlNkAMM7AlRkAL47AlVkALo7AlZkALc7AldkALA7AlhkAKs7AllkAKo7AlpkAKg7Al9kAKM7AiRkAKE7AmFlAJ07AmJlAJo7AmNlAJY7AmRlAJM7AmVlAI87AmZlAIw7AmdlAOQIAmhlAIQ7AmllAO06AmplAOI6AmtlAN06AmxlAIYCAm1lAP8HAm5lAPMFAm9lAP4HAnBlAKEGAnFlAOsMAnJlAIYCAnNlAO4GAnRlAO0GAnVlAOwGAnZlANUI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aiABNgIAIARBCUkNACADIAE2AgggAyABNgIEIAJBeGogATYCACACQXRqIAE2AgAgBEEZSQ0AIAMgATYCGCADIAE2AhQgAyABNgIQIAMgATYCDCACQXBqIAE2AgAgAkFsaiABNgIAIAJBaGogATYCACACQWRqIAE2AgAgBCADQQRxQRhyIgRrIgJBIEkNACABrSIFQiCGIAWEIQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQWBqIgJBH0sNAAsLIAALCgAgACgCCCgCBAtkAQF/IwBBEGsiASQAIAEgADYCCAJAIAEoAghFBEAgAQJ/QQVB4PMsKAIATgRAQYz5BkHQgyJBfxA6DAELQX8LNgIMDAELIAEgASgCCCgCEDYCDAsgASgCDCEAIAFBEGokACAACzgBAX8gARDJAiICBEAgACACEOMUIAAoAgAgACgCBGogASgCACACEIsEGiAAIAAoAgQgAmo2AgQLCyMAIABB//8BQf//ARCLARogAEEEakGBgH5BgYB+EIsBGiAAC2QBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCEUEQCABAn9BBUHg8ywoAgBOBEBBjPkGQYCDIkF/EDoMAQtBfws2AgwMAQsgASABKAIIKAIINgIMCyABKAIMIQAgAUEQaiQAIAALEgAgAEIANwIAIABBBBCxDiAAC2EBAX8gACgCABBNBH9BAAUCQCAAKAIIIgEEQCAAQQE6ABYgACABNgIEIAEoAgAhAQwBCyAAKAIMIQEgAC0AFUUNACAAIAE2AhALIAAgATYCCCAAIAEoAgA2AgwgASgCBAsLDQAgACgCCCABQShsagseAQF/IABB0ABqIgEgAUEIaigCABClECABEN0WIAALCwAgAEEANgEAIAALTgAgAEIANwIEIAAgATYCACAAQgA3AgwgAEIANwIUIABBHGoQaRogAEIANwIwIABCADcCJCAAQQA6ACwgAEE4ahBJGiAAQdAAahDmDCAACwwAIAAgARC5DhogAAuQAQEDfyAAIQECQAJAIABBA3FFDQAgAC0AAEUEQEEADwsDQCABQQFqIgFBA3FFDQEgAS0AAA0ACwwBCwNAIAEiAkEEaiEBIAIoAgAiA0F/cyADQf/9+3dqcUGAgYKEeHFFDQALIANB/wFxRQRAIAIgAGsPCwNAIAItAAEhAyACQQFqIgEhAiADDQALCyABIABrC3EBAX8jAEEQayIDJAAgAyABNgIMIAAoAgwEQCADIAAoAgRBf2o2AgggAyADQQxqIAAgA0EIahCxASIBNgIMIAAoAgwgASAAKAIAa0ECdGoiASABKAIAIAJqNgIAIAAgACgCCCACajYCCAsgA0EQaiQACwwAIAAgACgCFBCqDQsrACAAIAIgAyAEEKsNIAAgBTYCFCAAIAE2AhAgACABNgIMIAUgABBfGiAAC1oCAX8BfgJAAn9BACAARQ0AGiAArSABrX4iA6ciAiAAIAFyQYCABEkNABpBfyACIANCIIinGwsiAhBcIgBFDQAgAEF8ai0AAEEDcUUNACAAQQAgAhBlGgsgAAsGACAAED0LdAEEfwJAIAFFDQAgAS0AAEUNACAAEOwEIAEQciEDIAAgACgCACgCBCIEIANBAWoiAmoQiQohBSAAKAIAIQAgBEEBTgRAIAQgBWpBf2ogASACEFgaIAAgACgCBCADajYCBA8LIAUgASACEFgaIAAgAjYCBAsLEAAgACgCCCABQQJ0aigCAAs0AQF/IAFFBEAgAEEBQRAQxQhBADoAACAADwsgACABEHJBAWoiAiACEMUIIAEgAhBYGiAACygBAX8gAEUgAUVyRQRAIAAoAogFIgIEQCAAIAEgAhECAA8LIAEQPQsLQgEBfyAAIAE2AgAgACABKAIANgIEIAAgARC3ByIBNgIIIAEEQCABKAIAIQILIABBADYCECAAIAI2AgwgAEEANgATCxIAIAAQzAMEQCAAKAIADwsgAAvxAQEBfyMAQSBrIgQkACAEIAA2AhggBCABNgIUIAQgAjYCECAEIAM2AgwgBCgCFARAIAQoAhRBADYCAAsgBCgCEARAIAQoAhBBADYCAAsgBCgCDARAIAQoAgxBADYCAAsCQCAEKAIYRQRAIAQCf0EFQeDzLCgCAE4EQEGM+QZBoIMiQQEQOgwBC0EBCzYCHAwBCyAEKAIUBEAgBCgCFCAEKAIYKAIANgIACyAEKAIQBEAgBCgCECAEKAIYKAIENgIACyAEKAIMBEAgBCgCDCAEKAIYKAIINgIACyAEQQA2AhwLIAQoAhwhACAEQSBqJAAgAAsXAQF/IAAgAEE4aiIBIABBPGoQzAcgAQtQAQR/IwBBEGsiASQAIAAuAQAhAiAALgECIQMgAC4BBCEEIAEgAC4BBjYCDCABIAQ2AgggASADNgIEIAEgAjYCAEHK7wogARA7IAFBEGokAAtRAQJ/IAAoAgAiAiABTgRAIAAoAgwoAgAPCyAAKAIMIQMgACgCBCIAQX9qIAFMBEAgAyAAIAJBf3NqQQJ0aigCAA8LIAMgASACa0ECdGooAgALRwEBfyMAQTBrIgMkACABBEAgACABEHgLIAMgAjYCACADQRBqQRVB4owCIAMQ0AEaIANBADoAJSAAIANBEGoQeCADQTBqJAALEgAgAEEBQRAQxQhBADoAACAACwoAIAAoAiBBFGoLFAEBfyAAKAIMIgEEQCABED0LIAALZAEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEGM+QZB5oIiQX8QOgwBC0F/CzYCDAwBCyABIAEoAggoAgQ2AgwLIAEoAgwhACABQRBqJAAgAAsJACAAIAEQ5TALhgEBBH8CQCAAKAIAEJ4CBEAgACgCAEEANgIAIABBADYCBCAAQQA2AgwgACgCCCEBDAELIAAoAgQiAiAAKAIMNgIAIAAgACgCCCIBIAAoAgAiAygCACIERjoAFCABIARHDQAgAyACNgIACyAAIAEgACgCEEY6ABUgAUEANgIAIABBADYCCCABC0IBAX8gASACbCEEIAQCfyADKAJMQX9MBEAgACAEIAMQtw8MAQsgACAEIAMQtw8LIgBGBEAgAkEAIAEbDwsgACABbgsSACAAIAI4AgQgACABOAIAIAALEgAgACACOwECIAAgATsBACAACzQBAn8CQCAAKAIAIgMgACgCBEYNACADLQAAIAFB/wFxRw0AQQEhAiAAIANBAWo2AgALIAILRgEDf0EBIQECQCAAKAIAEE0NACAAKAIIIgIgACgCACgCACIDRg0AQQAhASACDQAgACgCBCADRw0AIAAtABRBAEchAQsgAQsKACAAKAIAEL4KC6oBAQF/IAAoAgAQTQRAIAEgATYCACAAKAIAIAE2AgAgACABNgIEIAAgATYCDCAAIAE2AggPCyABIAAoAgw2AgACQCAAKAIIIgIEQCACIAE2AgAgACACNgIEIAIgACgCACICKAIARw0BIAIgATYCACAAIAE2AggPCyAAKAIEIAE2AgAgAC0AFARAIAAoAgAg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C1EBAX8jAEEQayIEJAAgBCADNgIMQdj2LCgCACIDBEAgASACIAQoAgwgAxEFAAtBgL0tKAIAIgMEQCAAIAEgAiAEKAIMIAMRBgALIARBEGokAAulAQEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjYCECADIAMoAhggAygCFCADKAIQELAJIgA2AgwCQCAARQRAIAMCf0EFQeDzLCgCAE4EQEHOOUH5gCJBABA6DAELQQALNgIcDAELIAMoAgwoAjBBACADKAIMKAIEIAMoAgwoAhBBAnRsEGUaIAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACw4AIABCADcCACAAEIc1C6QCAQV/IwBBMGsiAyQAAkAgACgCBEEBSA0AIAAoAgwiAkUNAEEBIQEgACgCAEEBSA0AIAIgAyAAKAIIELkLIgQgAigCACgCCBECACADENoGIQIgACgCAEECSA0AA0AgACgCDCIFIAQgACgCCCABQTBsahC5CyAFKAIAKAIIEQIAIAIQ2gYaIAFBAWoiASAAKAIASA0ACwsgACgCCCICBEAgAkF8aigCACIBBEAgAiABQTBsaiEBA0AgAUFQaiIBENoGGiABIAJHDQALCyACQXhqED0LIABCADcCACAAQQA2AgggACgCDCIBBEAgASABKAIAKAIEEQAACyAAQQA2AgwgACgCECIBBEAgASABKAIAKAIEEQAACyAAQQA2AhAgA0EwaiQACwkAIAAQfSABagtPAQF/IwBBIGsiAiQAIAJBCGogAUEEahBAIQEgABBpIQAgARBBIAEQPEUEQANAIAAgASgCCBBeEJkBIAEQRBogARA8RQ0ACwsgAkEgaiQAC20BAX8jAEEQayICJAACQCABKAIAIgFFBEAgAEEAQQBBAEEAEJACGgwBCyACQQhqIAEQjQ8gASgCFCIBBEADQCACIAEQjQ8gAkEIaiACEJkBIAEoAhQiAQ0ACwsgACACKQMINwEACyACQRBqJAALvQEBBn8jAEEgayICJAACQCACQRhqIAAQhAciAy0AAEUNACAAIAAoAgBBdGooAgBqKAIEGiACQRBqIAAgACgCAEF0aigCAGoQsgEgAkEQahCECSEEIAJBEGoQjgEgAkEIaiAAEMoEIQUgACAAKAIAQXRqKAIAaiIGEMcIIQcgAiAEIAUoAgAgBiAHIAEQ1hU2AhAgAkEQahBNRQ0AIAAgACgCAEF0aigCAGpBBRCMAwsgAxCvBiACQSBqJAAgAAtHAQF/IAAoAswBIQMCQAJAIAAtAPwCQSBxBEAgA0GABnFBgAZHDQEMAgsgA0GAEHENAQsgACAAKALwAiABIAIQ4gI2AvACCwu5AwEBfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkAgAigCFEUEQCACAn9BBUHg8ywoAgBOBEBBhrIBQYSCIkEAEDoMAQtBAAs2AhwMAQsgAigCFCACKAIYRgRAIAIgAigCGDYCHAwBCyACIAIoAhQQZ0ECdCACKAIUEIYBbDYCECACKAIYRQRAIAIgAigCFBDHBiIANgIYIABFBEAgAgJ/QQVB4PMsKAIATgRAQc45QYSCIkEAEDoMAQtBAAs2AhwMAgsgAiACKAIUEGM2AgwgAiACKAIYEGM2AgggAigCCCACKAIMIAIoAhAQWBogAiACKAIYNgIcDAELIAIoAhggAigCFBDYEEEBRgRAIAICf0EFQeDzLCgCAE4EQEGG4ARBhIIiQQAQOgwBC0EACzYCHAwBCyACKAIYIAIoAhQQxgYgAigCGCACKAIUENkQIAIoAhggAigCFBCJAiACKAIYIAIoAhQQsQIgAigCGCACKAIUEK8JIAIgAigCFBBjNgIMIAIgAigCGBBjNgIIIAIoAgggAigCDCACKAIQEFgaIAIgAigCGDYCHAsgAigCHCEAIAJBIGokACAAC+sBAQZ/IwBBEGsiASQAIABB0ABqIQIgAEEwaiEDIABBHGohBiAAQThqIQUCfwJAA0AgBRA8BEADQCAAIAAoAiQiBEEBajYCJAJAIAQgACgCDEgNACAAIAAoAgQ2AiQgACAAKAIoIgRBf2o2AiggBCAAKAIISg0AIAAQ3QQMBQsgABC9BCAFEDwNAAsLIAAQuwQgBiAAKAIwEEwQzgJFDQAgAC0ALEUNASABIAIgAxDzDDYCACABEPUFNgIIIAEgAUEIahDZBA0ACyAALQAsRQ0AIAEgAiADEPEMCyADKAIACyEAIAFBEGokACAAC18BAX8jAEEQayICJAAgAUF/RgR/QYDCEAUgACgCCCABTARAIAJBpwI2AgQgAkGHvQc2AgBBpJ4sQeGGB0ECQYWiByACEEULIAAoAgAgAUHwAGxqCyEAIAJBEGokACAACwkAIAAgARCUIgsLACAAIAE2AgAgAAvJAgIHfwF8IwBBIGsiAiQAAnwCQCAAKAIMBEAgACgCCCIDDQELIAAoAgC3DAELIAIgA7ciCSABojkDGCACQoCAgICAgID4PzcDECACIAk5AwggAiACQRhqIAJBEGogAkEIahDiCyIBOQMYIAAoAgAhBAJAIAFEAAAAAAAAAABkQQFzDQAgACgCBCIDIARMDQAgAyAEayEHIAAoAgwhCEEAIQMDQAJAIAMiBkEBaiEDIAEgCCAGQQJ0aigCACAFaiIFtyIJZEEBcw0AIAMgB0gNAQsLIAZBAnQiBiAAKAIMaigCACIFQQBMBEAgAkG5ATYCBCACQfaPATYCAEGInixBhBJBAkGX1AAgAhBFIAAoAgwgBmooAgAhBSAAKAIAIQQgAisDGCEBCyADIARqtyAJIAGhIAW3o6EMAQsgBLcLIQEgAkEgaiQAIAEL5wEBAn8gARBNRQRAAkAgACgCABBNBEAgACgCACICIAEoAgAiAzYCACAAIAM2AgQgAhC3ByECIABBAToAFCAAIAI2AgwgAEEANgIIDAELIAAoAgghAyABELcHIQIgAwRAIAAoAggiAyACNgIAIAAoAgAiAigCACADRgRAIAIgASgCADYCAAsgASgCACAAKAIMNgIAIAAgAygCADYCDAwBCyAAKAIEIgMgAjYCACAALQAUBEAgACgCACABKAIANgIAIABBADoAFAsgASgCACAAKAIMNgIAIAAgAygCADYCDAsgAUEANgIACwueCwIFfw9+IwBB4ABrIgUkACACQiCGIAFCIIiEIQ8gBEIvhiADQhGIhCENIARC////////P4MiDkIPhiADQjGIhCEQIAIgBIVCgICAgICAgICAf4MhCiACQv///////z+DIgtCIIghESAOQhGIIRIgBEIwiKdB//8BcSEHAkACfyACQjCIp0H//wFxIglBf2pB/f8BTQRAQQAgB0F/akH+/wFJDQEaCyABUCACQv///////////wCDIgxCgICAgICAwP//AFQgDEKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEKDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQogAyEBDAILIAEgDEKAgICAgIDA//8AhYRQBEAgAiADhFAEQEKAgICAgIDg//8AIQpCACEBDAMLIApCgICAgICAwP//AIQhCkIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQCABIAyEIQJCACEBIAJQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAyEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyAMQv///////z9YBEAgBUHQAGogASALIAEgCyALUCIGG3kgBkEGdK18pyIGQXFqENEDIAUpA1giC0IghiAFKQNQIgFCIIiEIQ8gC0IgiCERQRAgBmshBgsgBiACQv///////z9WDQAaIAVBQGsgAyAOIAMgDiAOUCIIG3kgCEEGdK18pyIIQXFqENEDIAUpA0giAkIPhiAFKQNAIgNCMYiEIRAgAkIvhiADQhGIhCENIAJCEYghEiAGIAhrQRBqCyEGIA1C/////w+DIgIgAUL/////D4MiAX4iEyADQg+GQoCA/v8PgyIDIA9C/////w+DIgx+fCIEQiCGIg4gASADfnwiDSAOVK0gAiAMfiIVIAMgC0L/////D4MiC358IhQgEEL/////D4MiDiABfnwiECAEIBNUrUIghiAEQiCIhHwiEyACIAt+IhYgAyARQoCABIQiD358IgMgDCAOfnwiESABIBJC/////weDQoCAgIAIhCIBfnwiEkIghnwiF3whBCAHIAlqIAZqQYGAf2ohBgJAIAsgDn4iGCACIA9+fCICIBhUrSACIAEgDH58IgwgAlStfCAMIBQgFVStIBAgFFStfHwiAiAMVK18IAEgD358IAEgC34iCyAOIA9+fCIBIAtUrUIghiABQiCIhHwgAiABQiCGfCIBIAJUrXwgASASIBFUrSADIBZUrSARIANUrXx8QiCGIBJCIIiEfCIDIAFUrXwgAyATIBBUrSAXIBNUrXx8IgIgA1StfCIBQoCAgICAgMAAg1BFBEAgBkEBaiEGDAELIA1CP4ghAyABQgGGIAJCP4iEIQEgAkIBhiAEQj+IhCECIA1CAYYhDSADIARCAYaEIQQLIAZB//8BTgRAIApCgICAgICAwP//AIQhCkIAIQEMAQsCfiAGQQBMBEBBASAGayIHQf8ATQRAIAVBMGogDSAEIAZB/wBqIgYQ0QMgBUEgaiACIAEgBhDRAyAFQRBqIA0gBCAHEIsJIAUgAiABIAcQiwkgBSkDMCAFKQM4hEIAUq0gBSkDICAFKQMQhIQhDSAFKQMoIAUpAxiEIQQgBSkDACECIAUpAwgMAgtCACEBDAILIAFC////////P4MgBq1CMIaECyAKhCEKIA1QIARCf1UgBEKAgICAgICAgIB/URtFBEAgCiACQgF8IgEgAlStfCEKDAELIA0gBEKAgICAgICAgIB/hYRQRQRAIAIhAQwBCyAKIAIgAkIBg3wiASACVK18IQoLIAAgATcDACAAIAo3AwggBUHgAGokAAumAwIWfwN+IwBB8ABrIgEkACAAEP8CIQMgAEHQAGoiBBBNIQUgAC0APiEGIAAoAgghByAAIAMQ4gQhCCAAQRBqIgIuAQAhCSAAKAIkIQogAi4BAiELIAAoAhghDCACLgEEIQ0gACADEJUFIQMgACgCKCEOIAAoAgwhDyAALQA/IRAgAi4BBiECIAApAmghFyAAKAI0IREgACgCMCESIAAoAkghEyAALQA9IRQgAC0APCEVIAAoAhwhFiAEEOwBIQQgACkCjAEhGCAAKQKEASEZIAEgCTYCECABIAo2AhQgASALNgIYIAEgDDYCHCABIA02AiAgASADNgIkIAFB1ABBwgAgEBs2AiggASAPNgIsIAEgDjYCMCABIAI2AjQgASAWNgI4IAEgFTYCPCABQUBrIBQ2AgAgASATNgJEIAEgEkHTmR9qLAAANgJIIAEgETYCTCABIBc3A1AgASAENgJYIAEgGTcCXCABIBg3AmQgASAHNgIEIAFB1ABBwgAgBhs2AgggASAINgIMIAFBxQBBICAFGzYCAEG2zwsgARA7IAFB8ABqJAALEAAgACgCBCAAKAIAa0ECdQsUACAAKAIAQX82AgQgABDKAiABagsNACAAIAFBAUEBEIkTCysAIAAgASAAKAIAKAIQEQIAIAAtAAVBAUcEQCAAIAEgACgCACgCFBECAAsLZAEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEGM+QZBlYYiQQAQOgwBC0EACzYCDAwBCyABIAEoAggoAiw2AgwLIAEoAgwhACABQRBqJAAgAAsLACAAQQBBABDQCAsZACAAIAEgAhDbE0ECdEHAwCxqKAIANgEAC2sBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCEUEQCABAn9BBUHg8ywoAgBOBEBBhrIBQfCBIkEAEDoMAQtBAAs2AgwMAQsgASgCCEEBEOkXIAEgASgCCDYCDAsgASgCDCEAIAFBEGokACAACwgAIABB3ABqCwoAIAAoAgggAWoLDQAgACABQQJ0aigCUAsqAQF/IwBBEGsiBCQAIAQgAzYCDCAAIAEgAiADEMsKIQAgBEEQaiQAIAALCwAgACABIAIQWBoLCwAgAEIANwIAIAALIgAgACAALwEAIAEvAQBqOwEAIAAgAC8BAiABLwECajsBAgsLACAAQQA2AgAgAAsYAQF/IAAQ3QMEf0EABSAAEFUgABBObAsLDgAgABCqBCAAEKoEIAALsAcBAX8jAEEgayIDJAAgAyAANgIcIAMgATYCGCADIAI2AhQgAyADKAIcKAKkAzYCECADIAMoAhgtAAA2AgAgAyADKAIAQf8AcUECdEHwviJqKAIANgIIIAMgAygCCDoADyADIAMoAghBCHU2AgggAyADKAIIOgAOIAMgAygCCEEIdTYCCCADKAIQIgAgACgCECADKAIIazYCEAJAAkAgAygCFCADKAIAQQd1RwRAIAMoAhAoAhAgAygCCE4EQCADKAIQIgAgAygCECgCECAAKAIMajYCDCADKAIQIAMoAgg2AhALIAMoAhggAy0ADyADKAIAQYABcXM6AAAMAQsgAygCECgCEEGAgAJODQEgAygCECgCECADKAIISARAIAMoAhAiACADKAIQKAIQIAAoAgxqNgIMIAMoAhAgAygCCDYCEAsgAygCGCADLQAOIAMoAgBBgAFxczoAAAsDQCADKAIQIgAgACgCEEEBdDYCECADKAIQIgAgACgCDEEBdDYCDCADKAIQIgEoAhxBf2ohACABIAA2AhwgAEUEQCADIAMoAhAoAgxBE3U2AgQCQCADKAIEQf8BSgRAIAMoAhAoAiBBAE4EQCADKAIQKAIYBEADQEEAIAMoAhwQ/gIgAygCECIBKAIYQX9qIQAgASAANgIYIAANAAsLIAMoAhAoAiBBAWogAygCHBD+AiADKAIQKAIgQf4BRgRAQQAgAygCHBD+AgsLIAMoAhAiACADKAIQKAIUIAAoAhhqNgIYIAMoAhBBADYCFCADKAIQIAMoAgRB/wFxNgIgDAELAkAgAygCBEH/AUYEQCADKAIQIgAgACgCFEEBajYCFAwBCwJAIAMoAhAoAiBFBEAgAygCECIAIAAoAhhBAWo2AhgMAQsgAygCECgCIEEATgRAIAMoAhAoAhgEQANAQQAgAygCHBD+AiADKAIQIgEoAhhBf2ohACABIAA2AhggAA0ACwsgAygCECgCICADKAIcEP4CCwsgAygCECgCFARAIAMoAhAoAhgEQANAQQAgAygCHBD+AiADKAIQIgEoAhhBf2ohACABIAA2AhggAA0ACwsDQEH/ASADKAIcEP4CQQAgAygCHBD+AiADKAIQIgEoAhRBf2ohACABIAA2AhQgAA0ACwsgAygCECADKAIEQf8BcTYCIAsLIAMoAhAiACAAKAIMQf//H3E2AgwgAygCECIAIAAoAhxBCGo2AhwLIAMoAhAoAhBBgIACSA0ACwsgA0EgaiQAC8sBAQF/IwBBIGsiASQAIAEgADYCGAJAIAEoAhhFBEBBBEHg8ywoAgBOBEBB+MQqKAIAIQAgAUGBuCI2AgAgAEGewQAgARBWGgsgAUEANgIcDAELIAEgASgCGBByNgIUIAEgASgCFEEBakEBEHYiADYCECAARQRAIAECf0EFQeDzLCgCAE4EQEHW/gBBgbgiQQAQOgwBC0EACzYCHAwBCyABKAIQIAEoAhggASgCFBDiCiABIAEoAhA2AhwLIAEoAhwhACABQSBqJAAgAAtFAQF/AkBBxJUtKAIAIABIDQBB9JUtKAIAIAFKDQBBpJYtKAIAIAFIDQBBjJYtKAIAIAJIDQBBvJYtKAIAIAJMIQMLIAMLVgECfyAAKAIAIQIgAQRAIAEQciEDIAJBADYCBCAAIANBAWoiAhCJCiEDIAAoAgAhACADIAEgAhBYGiAAIAI2AgQPCyAAEPkSIABBAUEQEMUIQQA6AAALpwECA38CfCAAKAIMRQRAIAAoAgC3DwsgAEQAAAAAAADgPxDBASEEIAAoAghBAkghAQJ/IAScIgWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CyECAkAgAQ0AIAAgAhCBAQ0AIAIhAQNAIAEiA0F/aiEBIAAgAxCBAUUNAAsDQCACIgFBAWohAiAAIAEQgQFFDQALIAEgA2q3RAAAAAAAAOA/oiEECyAEC5UBAQR/IAAoAkxBAE4Ef0EBBUEACxogACgCAEEBcSIDRQRAIAAoAjQiAQRAIAEgACgCODYCOAsgACgCOCICBEAgAiABNgI0CyAAQdi9LSgCAEYEQEHYvS0gAjYCAAsLIAAQ7AUhASAAIAAoAgwRAQAhAiAAKAJgIgQEQCAEED0LIAEgAnIhASADRQRAIAAQPSABDwsgAQujAQECfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIAIgAigCDCgCGDYCBCACKAIIIQEgAigCBCIDKAIAIQAgAyAAQQFqNgIAIAAgAToAACACKAIEIgEoAgRBf2ohACABIAA2AgQgAEUEQCACKAIMIAIoAgQoAgwRAQBFBEAgAigCDCgCAEEZNgIUIAIoAgwgAigCDCgCACgCABEAAAsLIAJBEGokAAsJACAAIAE2AgwLEgAgAEEKaiABQf8BcSACEOASCzUBAX8jAEEQayICJAAgAiAAKAIANgIMIAAgASgCADYCACABIAJBDGooAgA2AgAgAkEQaiQAC48BAQF/IwBBEGsiASQAIAEgADYCDAJAIAEoAgxFBEBBBEHg8ywoAgBIDQFB+MQqKAIAIQAgAUHe3iE2AgAgAEGB+gIgARBWGgwBCyABIAEoAgwoAgAiADYCCCAARQ0AIAEoAghBfxCqGCABKAIIEJstQQBMBEAgASgCCBA9CyABKAIMQQA2AgALIAFBEGokAAscACAAKAIEIAAgAUEAIAAoAgAoAgwRBABBAnRqC8knAQV/IwBBwAVrIgEkACABIAFBsAVqQbDRKxBIKQIANwPIAiABIAAgAUHIAmoQmgE6AL8FAkAgABDJAkECSQ0AAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCACIDLAAAIgRBtH9qIgVBKEsEQCAEQU9qQQlPDQEgABCqDCECDCALAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAVBAWsOKBISEhISEhIBEhISEhISEhISEhISAxIEBQYCBxIIEhIJCgsMDQ4PEBEACyAAENcUIQIMMAsgABC3CiECDC8LAkAgAEEBEJ4BIgJB8ABHBEAgAkH/AXFBzABHDQEgAEECEJ4BQVBqQQlLDQELIAAQ0BQhAgwvCyAAENUhIQIMLgsgAywAASIEQZ9/aiIFQQNNDQ8CQAJAIARBzgBHBEAgBEHTAEYNASAEQe4ARwRAIARB9ABGDQMgBEH6AEcNMSAAIANBAmo2AgAgASAAEOMBIgI2AvgEIAJFDS4gAEG90SsgAUH4BGoQ4gchAgwxCyAAIANBAmo2AgAgASABQZgFakG20SsQSCkCADcDICAAIAFBIGoQqAIhAgwwCyAAIANBAmo2AgAgASABQZAFakG40SsQSCkCADcDKCAAIAFBKGoQqAIhAgwvCyAAIANBAmo2AgAgASABQYgFakG70SsQSCkCADcDMCAAIAFBMGoQqAIhAgwuCyAAIANBAmo2AgAgASAAEPUBIgI2AvgEIAJFDSogAEG90SsgAUH4BGoQ4gchAgwtCyADLAABIgRBlH9qIgVBA00NDyAEQfYARwRAIARB4wBHDS0gACADQQJqNgIAIAEgABD1ASICNgL4BCACRQ0qIAEgABDjASICNgKEBSACRQ0qIABB8AJqQcfRKyABQfgEaiABQYQFahCpDCECDC0LIAAQ0yEhAgwsCyADLAABIgRBlH9qIgVBCk0NDyAEQZ9/aiIFQQRLBEAgBEHWAEcNLCAAIANBAmo2AgAgASABQdAEakHs0SsQSCkCADcDWCAAIAFB2ABqEKgCIQIMLAsCQAJAAkAgBUEBaw4ELgEuAgALIAAgA0ECajYCACABIAAQ4wEiAjYC+AQgAkUNKiABQQE6AIQFIAAgAUH4BGogAUG/BWogAUGEBWoQzxQhAgwtCyAAIANBAmo2AgAgASAAEPUBIgI2AvgEIAJFDSkgASAAEOMBIgI2AoQFIAJFDSkgAEHwAmpB1tErIAFB+ARqIAFBhAVqEKkMIQIMLAsgACADQQJqNgIAIAEgAUHgBGpB49ErEEgpAgA3A0ggACABQcgAahD5BiECDCsLIAMsAAEiBEGRf2oiBUECSwRAIARBzwBHDSsgACADQQJqNgIAIAEgAUHABGpB8dErEEgpAgA3A2ggACABQegAahCoAiECDCsLAkACQCAFQQFrDgIsAQALIAAgA0ECajYCACABIAFByARqQe/RKxBIKQIANwNgIAAgAUHgAGoQqAIhAgwrCyAAIANBAmo2AgAgASABQbgEakH00SsQSCkCADcDcCAAIAFB8ABqEKgCIQIMKgsgAywAASIEQfQARwRAIARB5QBHDSogACADQQJqNgIAIAEgAUGwBGpB99ErEEgpAgA3A3ggACABQfgAahCoAiECDCoLIAAgA0ECajYCACABIAFBqARqQfrRKxBIKQIANwOAASAAIAFBgAFqEKgCIQIMKQsgAywAASIEQewARwRAIARB+ABHDSkgACADQQJqNgIAIAEgABDjASICNgL4BCACRQ0mIAEgABDjASICNgKEBSACRQ0mIABB8AJqQRAQnAEgAUH4BGooAgAgAUGEBWooAgAQlyEhAgwpCyAAIANBAmo2AgAgAEEIaiIDEMUBIQQDQCAAQcUAEIwBRQRAIAEgABCzCiIFNgL4BCAFRQ0qIAMgAUH4BGoQtwIMAQsLIAFBADYChAUgAUH4BGogACAEEIwEIABB8AJqIAFBhAVqIAFB+ARqEMwhIQIMKAsgAywAASIEQY1/aiIFQQFNDQwgBEHTAEcEQCAEQeUARw0oIAAgA0ECajYCACABIAFBoARqQfzRKxBIKQIANwOIASAAIAFBiAFqEKgCIQIMKAsgACADQQJqNgIAIAEgAUGQBGpBgtIrEEgpAgA3A5gBIAAgAUGYAWoQqAIhAgwnCyADLAABIgRBl39qIgVBBE0NDCAEQbd/aiIEQQNLDSYCQAJAIARBAWsOAygoAQALIAAgA0ECajYCACABIAFB+ANqQYrSKxBIKQIANwOwASAAIAFBsAFqEKgCIQIMJwsgACADQQJqNgIAIAEgAUHoA2pBjdIrEEgpAgA3A8ABIAAgAUHAAWoQqAIhAgwmCyADLAABIgRBn39qIgVBBk0NDCAEQYx/aiIEQQRLDSUCQAJAIARBAWsOBCcnFgEACyAAIANBAmo2AgAgASABQcgDakGW0isQSCkCADcD4AEgACABQeABahD5BiECDCYLIAAgA0ECajYCACABIAAQ4wEiAjYC+AQgAkUNIiAAQfACakGY0isgAUH4BGpBrtErEMgPIQIMJQsgAywAASIEQZJ/aiIFQQRLBEAgBEHSAEcNJSAAIANBAmo2AgAgASABQbADakGo0isQSCkCADcD+AEgACABQfgBahCoAiECDCULAkACQAJAIAVBAWsOBAEnJwIACyAAEKoMIQIMJgsgACADQQJqNgIAIAEgAUHAA2pBo9IrEEgpAgA3A+gBIAAgAUHoAWoQqAIhAgwlCyAAIANBAmo2AgAgASABQbgDakGm0isQSCkCADcD8AEgACABQfABahCoAiECDCQLIAMsAAEiBEGUf2oiBUEISwRAIARBzABHDSQgACADQQJqNgIAIAEgAUGYA2pBsdIrEEgpAgA3A5ACIAAgAUGQAmoQqAIhAgwkCwJAAkACQAJAAkAgBUEBaw4IACgoAigoAwQBCyAAIANBAmo2AgAgASABQagDakGr0isQSCkCADcDgAIgACABQYACahCoAiECDCcLIAAgA0ECajYCACABIAFBoANqQa/SKxBIKQIANwOIAiAAIAFBiAJqEKgCIQIMJgsgACADQQJqNgIAIABB3wAQjAEEQCABIAFBkANqQbTSKxBIKQIANwOYAiAAIAFBmAJqEPkGIQIMJgsgASAAEOMBIgI2AvgEIAJFDSIgACABQfgEakG00isQzhQhAgwlCyAAIANBAmo2AgAgASABQYgDakGv0isQSCkCADcDoAIgACABQaACahD5BiECDCQLIAAgA0ECajYCACABIAAQ4wEiAjYC+AQgAkUNICABIAAQ4wEiAjYChAUgAkUNICAAIAFB+ARqQbfSKyABQYQFahDNFCECDCMLIAMtAAFB9QBHDSIgACADQQJqNgIAIAEgABDjASICNgL4BCACRQ0fIAEgABDjASICNgKEBSACRQ0fIAEgABDjASICNgKEAyACRQ0fIABB8AJqQRQQnAEgAUH4BGooAgAgAUGEBWooAgAgAUGEA2ooAgAQiiEhAgwiCwJAAkAgAywAASIEQc0ARwRAIARB0wBGDQIgBEHzAEYNASAEQe0ARwRAIARB4wBHDSUgACADQQJqNgIAIAEgABD1ASICNgL4BCACRQ0iIAEgABDjASICNgKEBSACRQ0iIABB8AJqQbrSKyABQfgEaiABQYQFahCpDCECDCULIAAgA0ECajYCACABIAFB+AJqQcvSKxBIKQIANwOoAiAAIAFBqAJqEKgCIQIMJAsgACADQQJqNgIAIAEgAUHwAmpBzdIrEEgpAgA3A7ACIAAgAUGwAmoQqAIhAgwjCyAAIANBAmo2AgAgASABQegCakHQ0isQSCkCADcDuAIgACABQbgCahCoAiECDCILIAAgA0ECajYCACABIAFB4AJqQdPSKxBIKQIANwPAAiAAIAFBwAJqEKgCIQIMIQsgAywAASIEQZB/aiIFQQRNDQggBEHQAEcEQCAEQdoARwRAIARB+gBHBEAgBEHjAEcNIyAAIANBAmo2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ACgCCCEBDAELIAAoAgQiAiAAKAIMIgE2AgQgASACNgIAIAAoAggiASAAKAIAIgMoAgBGBEAgAyACNgIAIABBAToAFAwBCyAAQQA6ABQLIAAgASAAKAIQRjoAFSABQgA3AgAgAEEANgIIIAELQAECfyABEOwEIAEoAgAoAgQhAiAAKAIAQQA2AgQgACACEIkKIQMgACgCACEAIAMgARDKAiACEFgaIAAgAjYCBAvUDwEDfyMAQSBrIgIkACACQQA2AhwCQAJAAkAgAgJ/AkACQAJAAkACQAJAAkAgAEEAEJ4BIgFBv39qIgNBOUsNAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIANBAWsOOSIfFyIYICIiIgAiGiIeHCIdIRsnACIiIiIiIiIiIiIFAwQSExEUBgkKIgsMDxAiIgAHCBYBAg0OFRkLIAAgAEECQQEgAUHyAEYiARsgASAAIAEQngFB1gBGGyIBEJ4BQcsARiABaiIBEJ4BQf8BcUG8f2oiA0ECSw0mAkAgA0EBaw4CJygACyAAIAFBAWoQngFB/wFxIgFBkX9qIgNBCUtBASADdEGBBnFFcg0lDCcLIAAgACgCAEEBajYCACAAQbSILBCRASEBDCoLIAAgACgCAEEBajYCACAAQZ/TKxCRASEBDCkLIAAgACgCAEEBajYCACAAQbmILBCRASEBDCgLIAAgACgCAEEBajYCACAAQa/TKxCRASEBDCcLIAAgACgCAEEBajYCACAAQbTTKxCRASEBDCYLIAAgACgCAEEBajYCACAAQcDTKxCRASEBDCULIAAgACgCAEEBajYCACAAQc7TKxCRASEBDCQLIAAgACgCAEEBajYCACAAQdTTKxCRASEBDCMLIAAgACgCAEEBajYCACAAQb6ILBCRASEBDCILIAAgACgCAEEBajYCACAAQcKILBCRASEBDCELIAAgACgCAEEBajYCACAAQc+ILBCRASEBDCALIAAgACgCAEEBajYCACAAQdSILBCRASEBDB8LIAAgACgCAEEBajYCACAAQeKILBCRASEBDB4LIAAgACgCAEEBajYCACAAQfACakHsiCwQrAwhAQwdCyAAIAAoAgBBAWo2AgAgAEHy0ysQkQEhAQwcCyAA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DEGAgAJIBEAgAigCFCIBKAIQQX9qIQAgASAANgIQIABBAEgEQAJAIAIoAhwoArQDBEAgAkEANgIADAELIAIgAigCHBCTFzYCACACKAIAQf8BRgRAA0AgAiACKAIcEJMXNgIAIAIoAgBB/wFGDQALAkAgAigCAEUEQCACQf8BNgIADAELIAIoAhwgAigCADYCtAMgAkEANgIACwsLIAIoAhQgAigCACACKAIUKAIIQQh0cjYCCCACKAIUIgEoAhBBCGohACABIAA2AhAgAEEASARAIAIoAhQiASgCEEEBaiEAIAEgADYCECAARQRAIAIoAhRBgIACNgIMCwsLIAIoAhQiACAAKAIMQQF0NgIMDAELCyACIAIoAhgtAAA2AgQgAiACKAIEQf8AcUECdEHwviJqKAIANgIMIAIgAigCDDoAEyACIAIoAgxBCHU2AgwgAiACKAIMOgASIAIgAigCDEEIdTYCDCACIAIoAhQoAgwgAigCDGs2AgggAigCFCACKAIINgIMIAIgAigCCCACKAIUKAIQdDYCCAJAIAIoAhQoAgggAigCCE4EQCACKAIUIgAgACgCCCACKAIIazYCCAJAIAIoAhQoAgwgAigCDEgEQCACKAIUIAIoAgw2AgwgAigCGCACLQASIAIoAgRBgAFxczoAAAwBCyACKAIUIAIoAgw2AgwgAigCGCACLQATIAIoAgRBgAFxczoAACACIAIoAgRBgAFzNgIECwwBCyACKAIUKAIMQYCAAkgEQAJAIAIoAhQoAgwgAigCDEgEQCACKAIYIAItABMgAigCBEGAAXFzOgAAIAIgAigCBEGAAXM2AgQMAQsgAigCGCACLQASIAIoAgRBgAFxczoAAAsLCyACKAIEQQd1IQAgAkEgaiQAIAALlQMBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhACQCADKAIYRQRAIAMCf0EFQeDzLCgCAE4EQEGJuARBhZUiQQEQOgwBC0EBCzYCHAwBCyADKAIURQRAIAMCf0EFQeDzLCgCAE4EQEG4sAVBhZUiQQEQOgwBC0EBCzYCHAwBCwJAIAMoAhBFBEAgAyADKAIUNgIIDAELAkAgAygCEEEBRgRAIANBACADKAIUELwBNgIIDAELAkAgAygCEEECRgRAIAMgAygCFBDMATYCCAwBCyADAn9BBUHg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AigC1AEgAigC3AEgAigC2AFqajYCzAEgAigC0AEgAigCzAFIBEAgAigCYCACKAJgEPkFGgsgAigCYBCZDQwBCwJAIAIoAuQBQQFGBEAgAiACKAK8ASACKAK4AUEIELQBIgA2AmAgAEUEQEEFQeDzLCgCAEgNA0H4xCooAgAhACACQYCaIjYCECAAQZG5BCACQRBqEFYaDAMLIAIoAmAgAigC6AEQiQIgAigCYCACKALoARCxAiACIAIoAmAQYzYCeCACIAIoAmAQZzYCrAEgAiACKAKoAUEEEHY2AoQBIAJBADYCyAEDQCACKALIASACKAJkEPICTkUEQCACKAKEASACKALIAUECdGoCfyACKALIAUECdCIAIAIoApQBaigCALJDmpmZPpQgAigCkAEgAGooAgCyQwAAAD+UkiACKAKMASAAaigCALJDzcxMPpSSu0QAAAAAAADgP6AiBJlEAAAAAAAA4EFjBEAgBKoMAQtBgICAgHgLNgIAIAIgAigCyAFBAWo2AsgBDAELCyACQQA2AsgBA0AgAigCyAEgAigCuAFIBEAgAiACKAKAASACKALIASACKAKwAWxBAnRqNgJ8IAIgAigCeCACKALIASACKAKsAWxBAnRqNgJ0AkACQCACKAK0AUF/aiIAQQdLDQACQAJAAkACQCAAQQFrDgcCBAEEBAQAAwsgAkEANgLEASACQQA2AqQBA0AgAigCxAFBA2ogAigCvAFORQRAIAIgAigCfCACKAKkAUECdGooAgA2AmwgAiACKAKEASACKAJsQf8BcUECdGooAgAgAigChAEgAigCbEEYdkECdGooAgBBGHQgAigChAEgAigCbEEQdkH/AXFBAnRqKAIAQRB0ciACKAKEASACKAJsQQh2Qf8BcUECdGooAgBBCHRycjYCaCACKAJ0IAIoAqQBQQJ0aiACKAJoNgIAIAIgAigCxAFBBGo2AsQBIAIgAigCpAFBAWo2AqQBDAELCwNAIAIoAsQBIAIoArwBTkUEQCACIAIoAnwgAigCxAFqQQNzLQAANgLgASACIAIoAoQBIAIoAuABQQJ0aigCADYC2AEgAigCdCACKALEAWpBA3MgAigC2AE6AAAgAiACKALEAUEBajYCxAEMAQsLDAQLIAJBADYCxAEgAkEANgKkAQNAIAIoAsQBQQdqIAIoArwBTkUEQCACIAIoAnwgAigCpAFBAnRqKAIANgJsIAIgAigChAEgAigCbEEQdkEPcUECdGooAgAgAigChAEgAigCbEEcdkECdGooAgBBGHQgAigChAEgAigCbEEYdkEPcUECdGooAgBBEHRyIAIoAoQBIAIoAmxBFHZBD3FBAnRqKAIAQQh0cnI2AmggAigCdCACKAKkAUEDdGogAigCaDYCACACIAIoAoQBIAIoAmxBD3FBAnRqKAIAIAIoAoQBIAIoAmxBDHZBD3FBAnRqKAIAQRh0IAIoAoQBIAIoAmxBCHZBD3FBAnRqKAIAQRB0ciACKAKEASACKAJsQQR2QQ9xQQJ0aigCAEEIdHJyNgJoIAIoAnQgAigCpAFBAXRBAWpBAnRqIAIoAmg2AgAgAiACKALEAUEIajYCxAEgAiACKAKkAUEBajYCpAEMAQsLA0AgAigCxAEgAigCvAFORQRAIAIgAigCfCACKALEAUEDdUECdGooAgBBByACKALEAUEHcWtBAnR2QQ9xNgLgASACIAIoAoQBIAIoAuABQQJ0aigCADYC2AEgAigCdCACKALEAWpBA3MgAigC2AE6AAAgAiACKALEAUEBajYCxAEMAQsLDAMLIAJBADYCxAEgAkEANgKkAQNAIAIoAsQBQQ9qIAIoArwBTkUEQCACIAIoAnwgAigCpAFBAnRqKAIANgJsIAIgAigChAEgAigCbEEYdkEDcUECdGooAgAgAigChAEgAigCbEEedkECdGooAgBBGHQgAigChAEgAigCbEEcdkEDcUECdGooAgBBEHRyIAIoAoQBIAIoAmxBGnZBA3FBAnRqKAIAQQh0cnI2AmggAigCdCACKAKkAUEEdGogAigCaDYCACACIAIoAoQBIAIoAmxBEHZBA3FBAnRqKAIAIAIoAoQBIAIoAmxBFnZBA3FBAnRqKAIAQRh0IAIoAoQBIAIoAmxBFHZBA3FBAnRqKAIAQRB0ciACKAKEASACKAJsQRJ2QQNxQQJ0aigCAEEIdHJyNgJoIAIoAnQgAigCpAFBAnRBAWpBAnRqIAIoAmg2AgAgAiACKAKEASACKAJsQQh2QQNxQQJ0aigCACACKAKEASACKAJsQQ52QQNxQQJ0aigCAEEYdCACKAKEASACKAJsQQx2QQNxQQJ0aigCAEEQdHIgAigChAEgAigCbEEKdkEDcUECdGooAgBBCHRycjYCaCACKAJ0IAIoAqQBQQJ0QQJqQQJ0aiACKAJoNgIAIAIgAigChAEgAigCbEEDcUECdGooAgAgAigChAEgAigCbEEGdkEDcUECdGooAgBBGHQgAigChAEgAigCbEEEdkEDcUECdGooAgBBEHRyIAIoAoQBIAIoAmxBAnZBA3FBAnRqKAIAQQh0cnI2AmggAigCdCACKAKkAUECdEEDakECdGogAigCaDYCACACIAIoAsQBQRBqNgLEASACIAIoAqQBQQFqNgKkAQwBCwsDQCACKALEASACKAK8AU5FBEAgAiACKAJ8IAIoAsQBQQR1QQJ0aigCAEEPIAIoAsQBQQ9xa0EBdHZBA3E2AuABIAIgAigChAEgAigC4AFBAnRqKAIANgLYASACKAJ0IAIoAsQBakEDcyACKALYAToAACACIAIoAsQBQQFqNgLEAQwBCwsMAgsgAkEANgLEASACQQA2AqQBA0AgAigCxAFBH2ogAigCvAFORQRAIAIgAigCfCACKAKkAUECdGooAgA2AmwgAkEANgLAAQNAIAIoAsABQQRORQRAIAIgAigChAEgAigCbEEcdkEBcUECdGooAgAgAigChAEgAigCbEEfdkECdGooAgBBGHQgAigChAEgAigCbEEedkEBcUECdGooAgBBEHRyIAIoAoQBIAIoAmxBHXZBAXFBAnRqKAIAQQh0cnI2AmggAigCdCACKAKkAUEDdCACKALAAUEBdGpBAnRqIAIoAmg2AgAgAiACKAKEASACKAJsQRh2QQFxQQJ0aigCACACKAKEASACKAJsQRt2QQFxQQJ0aigCAEEYdCACKAKEASACKAJsQRp2QQFxQQJ0aigCAEEQdHIgAigChAEgAigCbEEZdkEBcUECdGooAgBBCHRycjYCaCACKAJ0IAIoAqQBQQN0IAIoAsABQQF0akEBakECdGogAigCaDYCACACIAIoAmxBCHQ2AmwgAiACKALAAUEBajYCwAEMAQsLIAIgAigCxAFBIGo2AsQBIAIgAigCpAFBAWo2AqQBDAELCwNAIAIoAsQBIAIoArwBTkUEQCACIAIoAnwgAigCxAFBBXVBAnRqKAIAQR8gAigCxAFBH3FrdkEBcTYC4AEgAiACKAKEASACKALgAUECdGooAgA2AtgBIAIoAnQgAigCxAFqQQNzIAIoAtgBOgAAIAIgAigCxAFBAWo2AsQBDAELCwwBCyACQQA2AuwBDAYLIAIgAigCyAFBAWo2AsgBDAELCyACKAKEAQRAIAIoAoQBED0LDAELIAIgAigCvAEgAigCuAFBIBC0ASIANgJgIABFBEBBBUHg8ywoAgBIDQJB+MQqKAIAIQAgAkGAmiI2AiAgAEGRuQQgAkEgahBWGgwCCyACKAJgIAIoAugBELECIAIoAmAgAigC6AEQiQIgAigC5AFBA0YEQCACKAJgQQQQwgQaCyACIAIoAmAQYzYCeCACIAIoAmAQZzYCrAEgAiACKAKoAUEEEHY2AnAgAkEANgLIAQNAIAIoAsgBIAIoAqgBTkUEQAJAIAIoAuQBQQJGBEAgAigClAEgAigCyAFBAnRqKAIAIAIoApABIAIoAsgBQQJ0aigCACACKAKMASACKALIAUECdGooAgAgAigCcCACKALIAUECdGoQvwQaDAELIAIoApQBIAIoAsgBQQJ0aigCACACKAKQASACKALIAUECdGooAgAgAigCjAEgAigCyAFBAnRqKAIAIAIoAogBIAIoAsgBQQJ0aigCACACKAJwIAIoAsgBQQJ0ahDoCgsgAiACKALIAUEBajYCyAEMAQsLIAJBADYCyAEDQCACKALIASACKAK4AU5FBEAgAiACKAKAASACKALIASACKAKwAWxBAnRqNgJ8IAIgAigCeCACKALIASACKAKsAWxBAnRqNgJ0IAJBADYCxAEDQCACKALEASACKAK8AU5FBEACQCACKAK0AUEIRgRAIAIgAigCfCACKALEAWpBA3MtAAA2AuABDAELAkAgAigCtAFBBEYEQCACIAIoAnwgAigCxAFBA3VBAnRqKAIAQQcgAigCxAFBB3FrQQJ0dkEPcTYC4AEMAQsCQCACKAK0AUECRgRAIAIgAigCfCACKALEAUEEdUECdGooAgBBDyACKALEAUEPcWtBAXR2QQNxNgLgAQwBCyACIAIoAnwgAigCxAFBBXVBAnRqKAIAQR8gAigCxAFBH3FrdkEBcTYC4AELCwsCQCACKALgASACKAKoAU4EQEEEQeDzLCgCAEgNAUH4xCooAgAhACACQYCaIjYCMCAAQd/iBCACQTBqEFYaDAELIAIoAnQgAigCxAFBAnRqIAIoAnAgAigC4AFBAnRqKAIANgIACyACIAIoAsQBQQFqNgLEAQwBCwsgAiACKALIAUEBajYCyAEMAQsLIAIoAnAQPQsLIAIoApQBED0gAigCkAEQPSACKAKMARA9IAIoAogBED0gAiACKAJgNgLsAQsgAigC7AEhACACQfABaiQAIAALYwEBfyMAQRBrIgIkACABQX9GBH9BAAUgACABELYDRQRAIAJB7QM2AgQgAkH7jg02AgBBjJ0sQbaDDUECQeXIBiACEEULIAAoAgAgAUHwAGxqLQAgQQBHCyEBIAJBEGokACABCycBAX8jAEEQayICJAAgAiABNgIMIAAgAkEMahCQCCACQRBqJAAgAAsNACAAKAIAEMoLGiAACwkAIABBARCbAwscACAAKAIEIAEQph1BAnRqKAIAIAEQoBxxQQBHCxIAIABCADcCACAAQQQQwh0gAAtoAQJ/IwBBIGsiAiQAIAAgARCOBCAAQQRqIAEQjgQgAiAAKAEAIgE2AhQgAiAAKAEEIgM2AhAgAiABNgIMIAIgAzYCCCACQRhqIAJBDGogAkEIahCcAxogACACKQMYNwEAIAJBIGokAAsMACAAIAEpAkQ3AgALBQAQEAALJAEBfyMAQRBrIgMkACADIAI2AgwgACABIAIQvicgA0EQaiQAC2QBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCEUEQCABAn9BBUHg8ywoAgBOBEBB1toEQfDoIUEAEDoMAQtBAAs2AgwMAQsgASABKAIIKAIMNgIMCyABKAIMIQAgAUEQaiQAIAALFQAgACAAQThqIABBPGoiABDMByAAC1IBAX8jAEEQayIDJAAgAyACNgIIIAMgATYCDCAAIANBDGogA0EIahDIBSAAKAIcIAMoAgwgACgCCCADKAIIbGpBAnRqKAIAIQAgA0EQaiQAIAALDQAgACgCACABQQN0agscACAAKAIEIAAgAUEAIAAoAgAoAgwRBABBA3RqC2wBA38jAEEQayIDJAAgA0EIaiAAQQAQsAYtAAAEQEEGIQIgACAAKAIAQXRqKAIAaigCGBDKCyIEQX8QkANFBEAgASAEEKYFOgAAQQAhAgsgACAAKAIAQXRqKAIAaiACEIwDCyADQRBqJAAgAAs7ACAAQShqEEkaIABBQGsQSRogAEHYAGoQSRogAEHwAGoQSRogAEGIAWoQSRogACABNgIAIAAQwAIgAAsNACAAKAIAENkVGiAACwkAIAAgARC6GAsoAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAhD7FSEAIANBEGokACAAC3EBA38jAEEQayICJAACQAJAQfPEKiABLAAAELUERQRAQYS9LUEcNgIADAELIAEQ+iQhBCACQbYDNgIAIAAgBEGAgAJyIAIQFxDtBSIAQQBIDQEgACABEI4WIgMNASAAEBMaC0EAIQMLIAJBEGokACADC8kBAQJ/IwBBIGsiAiQAIAJBADYCGCACQgA3AxAgAkIANwMIIAIgAkEIajYCBAJAIAAoApgFIgMEQCADKAIAIAFGDQELAkAgACgCkAUiA0UNACACQQA2AhAgAiABNgIIIAJBBGogAyAAKAKUBRCEECIDRQRAIABBADYCmAUMAQsgACADKAIAIgM2ApgFIAMNAQsgACgC9AQhACACIAE2AgAgAEHJwARBo+sEIAIQR0G4kwVBjLkFQasGQcnABBADAAsgAkEgaiQAIAMLowEBAn8jAEEQayICJAAgAiAANgIMIAIgATYCCCACIAIoAggoAhg2AgQgAigCDCEBIAIoAgQiAygCACEAIAMgAEEBajYCACAAIAE6AAAgAigCBCIBKAIEQX9qIQAgASAANgIEIABFBEAgAigCCCACKAIEKAIMEQEARQRAIAIoAggoAgBBGTYCFCACKAIIIAIoAggoAgAoAgARAAALCyACQRBqJAALFQAgAEEQaiIALgEGIAAuAQJqQQJtCzwBAX8jAEGACGsiAiQAIAIgATYC/AcgAkEQaiAAIAEQhRAaIAIgAkEQajYCAEGlGyACEDsgAkGACGokAAsJACAAEMsLIAALCQAgACABEKA5CyMBAX8gACgCACECIAAgATYCACACBEAgAiAAEF4oAgARAAALCwkAIAAgARDbFQs4AQN/QQgQHiICIgMiARDtFCABQYyZLDYCACABQQRqIAAQmCIgA0G8mSw2AgAgAkHcmSxBGBAbAAv5AQEBfyMAQRBrIgEkACABIAA2AgwCQCABKAIMRQRAQQRB4PMsKAIASA0BQfjEKigCACEAIAFBzKkiNgIAIABBy+cDIAEQVhoMAQsgASABKAIMKAIAIgA2AgQgAEUNACABKAIEEL0rIAEoAgQQuytBAEwEQCABKAIEKAIMBEAgAUEANgIIA0AgASgCCCABKAIEKAIESARAIAEo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C8gJAgR/BH4jAEHwAGsiBSQAIARC////////////AIMhCgJAAkAgAUJ/fCILQn9RIAJC////////////AIMiCSALIAFUrXxCf3wiC0L///////+///8AViALQv///////7///wBRG0UEQCADQn98IgtCf1IgCiALIANUrXxCf3wiC0L///////+///8AVCALQv///////7///wBRGw0BCyABUCAJQoCAgICAgMD//wBUIAlCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCkKAgICAgIDA//8AVCAKQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAJQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBhshBEIAIAEgBhshAwwCCyADIApCgICAgICAwP//AIWEUA0BIAEgCYRQBEAgAyAKhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAKhFBFDQAgASEDIAIhBAwBCyADIAEgAyABViAKIAlWIAkgClEbIgcbIQogBCACIAcbIgtC////////P4MhCSACIAQgBxsiAkIwiKdB//8BcSEIIAtCMIinQf//AXEiBkUEQCAFQeAAaiAKIAkgCiAJIAlQIgYbeSAGQQZ0rXynIgZBcWoQ0QMgBSkDaCEJIAUpA2AhCkEQIAZrIQYLIAEgAyAHGyEDIAJC////////P4MhASAIBH4gAQUgBUHQAGogAyABIAMgASABUCIHG3kgB0EGdK18pyIHQXFqENEDQRAgB2shCCAFKQNQIQMgBSkDWAtCA4YgA0I9iIRCgICAgICAgASEIQQgCUIDhiAKQj2IhCEBIAIgC4UhDAJ+IANCA4YiAyAGIAhrIgdFDQAaIAdB/wBLBEBCACEEQgEMAQsgBUFAayADIARBgAEgB2sQ0QMgBUEwaiADIAQgBxCLCSAFKQM4IQQgBSkDMCAFKQNAIAUpA0iEQgBSrYQLIQMgAUKAgICAgICABIQhCSAKQgOGIQICQCAMQn9XBEAgAiADfSIBIAkgBH0gAiADVK19IgOEUARAQgAhA0IAIQQMAwsgA0L/////////A1YNASAFQSBqIAEgAyABIAMgA1AiBxt5IAdBBnStfKdBdGoiBxDRAyAG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NwMAIAEgAhBoCyABKAIEIQYgACgCACAEQQJ0aigCACABEMgBIARBAWohBCAGIAEoAgRGBH8gASAFEI0CIAMFQQALIQMMAQsLIAJBEGokAAsOACAAEKoEIAAQoxUgAAsOACAAQShqIAG7EJECtgskAQF+IAAQixYiAUKAgICACFkEQEGEvS1BPTYCAEF/DwsgAacLCgAgAEFQakEKSQu8CAEDfyAARSABRXJFBEACQCACIAEoArgBcUGAgAFxRQ0AIANBf0YEQCABKAIwQQBKBEADQCAAIAFBgIABIAQQ2AQgBEEBaiIEIAEoAjBIDQALCyAAIAEoAjgQeyABQgA3AzAgAUEANgI4DAELIAEoAjgiBEUNACAEIANBHGwiBWooAgQiBEUNACAAIAQQeyABKAI4IAVqQQA2AgQLAn8gAiABKAK4ASIEcUGAwABxBEAgACABKAJMEHsgAUEANgJMIAEgASgCCEFvcTYCCCABKAK4ASEECyACIARxIgVBgAJxCwRAIAEgASgCCEH//35xNgIICwJAAn8gBUGAAXEEQCAAIAEoAqABEHsgACABKAKsARB7QQAhBCABQQA2AqwBIAFBADYCoAEgASgCsAEiBQRAIAEtALUBBEADQCAAIAUgBEECdCIGaigCABB7IAEoArABIAZqQQA2AgAgASgCsAEhBSAEQQFqIgQgAS0AtQFJDQALCyAAIAUQeyABQQA2ArABCyABIAEoAghB/3dxNgIIIAEoArgBIQQLIAIgBHFBEHELBH8gACABKALEARB7IAAgASgCyAEQeyABQgA3AsQBIAEgASgCCEH/X3E2AgggASgCuAEFIAQLIAJxQSBxRQ0AIANBf0cEQCABKALUASIFRQ0BIAAgBSADQQR0IgRqKAIAEHsgACABKALUASAEaigCCBB7IAEoAtQBIARqIgRBADYCCCAEQQA2AgAMAQsgASgC2AEiBARAIARBAU4EQEEAIQQDQCAAIAFBICAEENgEIARBAWoiBCABKALYAUgNAAsLIAAgASgC1AEQeyABQgA3AtQBCyABIAEoAghB/79/cTYCCAsgACgCtAUiBARAIAAgBBB7IABBADYCtAULAkAgAiABKAK4AXFBgARxRQ0AIANBf0cEQCABKAK8ASIERQ0BIAAgBCADQRRsIgVqKAIIEHsgASgCvAEgBWpBADYCCAwB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AkGg1gAgBEEQahBFC0F/IAJuIANNBEAgBEHDAjYCBCAEQeaRATYCAEGQnixBqOsCQQJBoNYAIAQQRQsgAiADbCIFBEBBACECA0AgACgCBCABIAJqLAAAEJgFIAJBAWoiAiAFRw0ACwsgBEFAayQAIAMLKwEBfyMAQRBrIgIkACACIAE6AA8gACACQQ9qQQEQgRMhACACQRBqJAAgAAuLAgEDfyABEE1FBEACQCAAKAIAEE0EQCAAKAIAIgIgASgCACIDNgIAIAAgAzYCBCACEL4LIQIgAEEBOgAUIAAgAjYCDCAAQQA2AggMAQsgACgCCCEDIAEQvgshAiADBEAgACgCCCIDIAI2AgQgAiADNgIAIAAoAgAiAigCACADRgRAIAIgASgCADYCAAsgASgCACICIAAoAgwiBDYCBCAEIAI2AgAgACADKAIENgIMDAELIAAoAgQiAyACNgIEIAIgAzYCACAALQAUBEAgACgCACABKAIANgIAIABBADoAFAsgASgCACICIAAoAgwiBDYCBCAEIAI2AgAgACADKAIENgIMCyABQQA2AgALCwkAIAAQxTogAAsKACAAQRh0QRh1CxcAIAAgAjYCHCAAIAE2AhQgACABNgIYC2ABAX8jAEEQayICJAAgAUF/RgR/QQAFIAAgARC2A0UEQCACQeAFNgIEIAJBjNMMNgIAQdSdLEGRxwxBAkH6oQggAhBFCyAAKAIAIAFB8ABsaigCbAshASACQRBqJAAgAQsPACAAQQJ0QdCpLGooAgALCQAgACABNgIQC0wBAX8jAEEQayICJAAgAEEUaiIAIAJBCGpB0wAgARCBAhCWDCAAIAJBCGpB0wBBABCBAhCtDyIBQQBOBEAgACABEI8UCyACQRBqJAALCQAgABDRBCAACyQBAX8gAC0ABiICQQJHBEAgAkUPCyAAIAEgACgCACgCBBEDAAtGAQF/IwBBEGsiAyQAIABBFBCcASEAIANBCGogARBIIQEgAigCACECIAMgASkCADcDACAAIAMgAhDvISEAIANBEGokACAACxIAIAAoAgAiAARAIAAQwRUaCwsRACAAIAEoAgAQwRU2AgAgAAsiACAAIAAvAQAgAS8BAGs7AQAgACAALwECIAEvAQJrOwECC0sBAnwgACAAoiIBIACiIgIgASABoqIgAUSnRjuMh83GPqJEdOfK4vkAKr+goiACIAFEsvtuiRARgT+iRHesy1RVVcW/oKIgAKCgtgtPAQF8IAAgAKIiAESBXgz9///fv6JEAAAAAAAA8D+gIAAgAKIiAURCOgXhU1WlP6KgIAAgAaIgAERpUO7gQpP5PqJEJx4P6IfAVr+goqC2C2wBA34gACACQiCIIgMgAUIgiCIEfkIAfCACQv////8PgyICIAFC/////w+DIgF+IgVCIIggAiAEfnwiAkIgiHwgASADfiACQv////8Pg3wiAUIgiHw3AwggACAFQv////8PgyABQiCGhDcDAAuRAQEBfyAAKAIAEE0EQCABIAE2AgAgACgCACABNgIAIAAgATYCBCAAIAE2AgwgACABNgIIDwsgACgCBCABNgIAIAAoAggiAgRAIAEgAjYCACAAIAI2AgwgACABNgIIDwsgASAAKAIMNgIAIAAtABQEQCAAKAIAIAE2AgALIAAtABUEQCAAIAE2AhALIAAgATYCCAsNACAAIAEgAhDcJCAAC64kAQN/IwBBQGoiAiQAIAIgADYCOCACIAE2AjQCQAJAAkAgAigCOEUNACACKAI4KAIcRQ0AIAIoAjRBBUoNACACKAI0QQBODQELIAJBfjYCPAwBCyACIAIoAjgoAhw2AiwCQAJAIAIoAjgoAgxFDQAgAigCOCgCAEUEQCACKAI4KAIEDQELIAIoAiwoAgRBmgVHDQEgAigCNEEERg0BCyACKAI4QdC1KigCADYCGCACQX42AjwMAQsgAigCOCgCEEUEQCACKAI4Qdy1KigCADYCGCACQXs2AjwMAQsgAigCLCACKAI4NgIAIAIgAigCLCgCKDYCMCACKAIsIAIoAjQ2AiggAigCLCgCBEEqRgRAAkAgAigCLCgCGEECRgRAQQBBAEEAEOICIQAgAigCOCAANgIwIAIoAiwoAgghASACKAIsIgMoAhQhACADIABBAWo2AhQgACABakEfOgAAIAIoAiwoAgghASACKAIsIgMoAhQhACADIABBAWo2AhQgACABakGLAToAACACKAIsKAIIIQEgAigCLCIDKAIUIQAgAyAAQQFqNgIUIAAgAWpBCDoAAAJAIAIoAiwoAhxFBEAgAigCLCgCCCEBIAIoAiwiAygCFCEAIAMgAEEBajYCFCAAIAFqQQA6AAAgAigCLCgCCCEBIAIoAiwiAygCFCEA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QQAQOgwBC0EACzYCDAwBCyABIAEoAgQ2AgwLIAEoAgwhACABQRBqJAAgAAukAQEBfyMAQRBrIgEkACABIAA2AgwCQCABKAIMRQRAQQRB4PMsKAIASA0BQfjEKigCACEAIAFBrfYhNgIAIABBh4EDIAEQVhoMAQsgASABKAIMKAIAIgA2AgggAEUNACABKAIIQX8QgBggASgCCBDNLEEATARAIAEoAggoAiAEQCABKAIIKAIgED0LIAEoAggQPQsgASgCDEEANgIACyABQRBqJAAL4QQBAX8jAEHQAGsiAyQAIAMgADYCSCADIAE2AkQgAyACNgJAIAMgAygCSCADKAJEIAMoAkAgA0EIahCYGCIANgJIAkAgAEUEQCADAn9BBUHg8ywoAgBOBEBBpTZB2uwhIAMoAkgQOgwBCyADKAJICzYCTAwBCyADKAJEIANBNGogA0EwakEAEH4aIAMoAkAgA0EoaiADQSxqIANBIGogA0EkahDkCiADKAJIEOwKIANBADYCPANAIAMoAjwgAygCKE5FBEAgA0EANgI4A0AgAygCOCADKAIsSARAIAMgAygCQCgCECADKAI8QQJ0aigCACADKAI4QQJ0aigCADYCHCADKAIcQQFGBEAgAygCSCADKAIkIAMoAjhrIAMoAiAgAygCPGsgAygCNCADKAIwQQggAygCCEEAQQAQrAELIAMgAygCOEEBajYCOAwBCwsgAyADKAI8QQFqNgI8DAELC0Ho8SwoAgBBAUYEQCADKAJAIANBGGogA0EUaiADQRBqIANBDGoQnSsgAygCGEEASgRAIAMoAkhBAEEAIAMoAhggAygCMEEAQQBBAEEAEKwBCyADKAIQQQBKBEAgAygCSCADKAI0IAMoAhBrQQAgAygCECADKAIwQQBBAEEAQQAQrAELIAMoAhRBAEoEQCADKAJIQQBBACADKAI0IAMoAhRBAEEAQQBBABCsAQsgAygCDEEASgRAIAMoAkhBACADKAIwIAMoAgxrIAMoAjQgAygCDEEAQQBBAEEAEKwBCwsgA0EIahBLIAMgAygCSDYCTAsgAygCTCEAIANB0ABqJAAgAAuAAwEBfyMAQUBqIgMkACADIAA2AjggAyABNgI0IAMgAjYCMCADIAMoAjggAygCNCADKAIwIANBCGoQmBgiADYCOAJAIABFBEAgAwJ/QQVB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CwkAIAAgATYCJAujAQEDfyMAQRBrIgEkAAJ/IAAtAFgEQCAAKAIsDAELIAAoAhALIQICfyAALQBYBEAgACgCMAwBCyAAKAIUCyEDIAFCADcDCCAAQfAAaiACIAMgAUEIahC1CCABQgA3AwggAEGQAWogAiADIAFBCGoQtQggAEE4aiAAEIEbIAAtAFkEQCABQgA3AwggAEGwAWogAiADIAFBCGoQtQgLIAFBEGokAAsKACAAQQF0QQFyC1IAIAACfwJAIAItAABFBEAgACACNgIIIABBADoAAAwBCyABLQAwIQEgACACNgIIIAAgAToAACABRQ0AIAJBBGoMAQsgAkHMAGoLEJoONgIEIAALHQBBtJUtKgIAIABdQQFzBH1DAACgwQUgABDGCgsLEAAgAEEAIAEQlQIgAhDZBgsnACAAIAU6ABIgACADOgARIAAgAToAECAAIAQ3AwggACACNwMAIAALEwAgACkDECABKQMAgyAANQIwiAsbACAAKAI4IAGnQQN0aikDACAANQIsiKdBAXELLgAgAEIANwIEIABBAToAACAAQgA3AgwgAEIANwIUIABCADcCHCAAQgA3AiQgAAsLACAAIAFBABDMCwuiAQEEfyMAQRBrIgckAAJAIABFDQAgBCgCDCEGIAIgAWsiCEEBTgRAIAAgASAIEIsKIAhHDQELIAYgAyABayIBa0EAIAYgAUobIgFBAU4EQCAAIAcgASAFEJcdIgUQfSABEIsKIQYgBRBgGiABIAZHDQELIAMgAmsiAUEBTgRAIAAgAiABEIsKIAFHDQELIARBABCKCiAAIQkLIAdBEGokACAJC40BAQN/IAAoAgQiAgRAIAIQPQsgACgCCCICBEAgAhA9CyAAIAEoAgAiAjYCACAAQX8gAkEBaiIDQQJ0IANB/////wNxIANHGxA/IgM2AgQgAEF/IAJBBHQiACACIAJB/////wBxRxsQPyIENgIIIAMgASgCBCACQQJ0QQRqEIsEGiAEIAEoAgggABCLBBoLDQAgACABbyABaiABbws3ACAALAAAIAEsAABrIgBBwQBOBEAgAEGAAXNBGHRBGHUPCyAAQYABcyAAIABBQEgbQRh0QRh1CwkAIAAQ+w4gAAszACAAQfgAahDlAyAAQegAahCFARogAEHcAGoQ6QYgAEHYAGoQrAUaIABB1ABqEN4I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AgwgA0EANgIYIANBADYCDANAAkAgAygCDCADKAI0Tg0AIAMgAygCOCADKAIMai0AADoALwJAIAMsAC9BCkYNACADLAAvQT1GDQEgAygCHCADLQAvQQJ0aigCACEAIAMgAygCGCIBQQFqNgIYIAEgA0EhamogADoAACADKAIYQQRIDQAgA0EhaiADQSVqEKMYIANBADYCFANAIAMoAhRBA05FBEAgAygCFCADQSVqai0AACEAIAMoAighASADIAMoAggiAkEBajYCCCABIAJqIAA6AAAgAyADKAIUQQFqNgIUDAELCyADQQA2AhgLIAMgAygCDEEBajYCDAwBCwsgAygCGEEASgRAIAMgAygCGDYCFANAIAMoAhRBBE5FBEAgAygCFCADQSFqakEAOgAAIAMgAygCFEEBajYCFAwBCwsgA0EhaiADQSVqEKMYIANBADYCFANAIAMoAhQgAygCGEEBa05FBEAgAygCFCADQSVqai0AACEAIAMoAighASADIAMoAggiAkEBajYCCCABIAJqIAA6AAAgAyADKAIUQQFqNgIUDAELCwsgAygCMCADKAIINgIAIAMoAhwQPSADIAMoAig2AjwLIAMoAjwhACADQUBrJAAgAAsSACAAIAEQchD3CiAAIAEQ3wQLEgAgACgCKCIAQQFGIABBBEZyCy0BAX8jAEEQayICJAAgAkEIaiAAQQRqIAEQ7gQgACACKQMINwIEIAJBEGokAAtLAgF/AXwjAEEQayICJAACfEQAAAAAAAAAACAAENUBRQ0AGiACQQhqIAAgARCGBCACQQhqENUBtyAAENUBt6MLIQMgAkEQaiQAIAMLkgIBBn8jAEEQayICJABBf0EBIAEbIQcgAEEwaiEEIABB0ABqIQUgAEE4aiEGAn8CQANAIAYQPARAA0AgACAAKAIUIgNBAWoiATYCFAJAIAMgACgCEEgNACAAQQA2AhQgACAAKAIkIAdqIgM2AiQgA0EATgRAQQAhASADIAAoAgAoAghIDQELIAAQ3QQMBQsgACAAKAIIIAFrIgE2AigCQCABQQBIDQAgASAAKAIAKAIMTg0AIAAQvQQLIAYQPA0ACwsgABC7BCAALQAsRQ0BIAIgBSAEEPoNNgIAIAIQ9QU2AgggAiACQQhqENkEDQALIAAtACxFDQAgAiAFIAQQ+Q0LIAQoAgALIQAg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DiAAQQFqIANBDmoQqAMgA0EQaiQACw8AIAAgACgCACgCJBEBAAsRACAAIAEgASgCACgCIBECAAsRACAAIAEgASgCACgCLBECAAsMACAAQYKGgCA2AAALCAAgABDWARoLLwEBfyMAQRBrIgEkACABQQhqIAAQfSAAEFpBAnRqEMABKAIAIQAgAUEQaiQAIAALjwEBAX8gA0GAEHEEQCAAQSs6AAAgAEEBaiEACyADQYAEcQRAIABBIzoAACAAQQFqIQALA0AgAS0AACIEBEAgACAEOgAAIABBAWohACABQQFqIQEMAQsLIAACf0HvACADQcoAcSIBQcAARg0AGkHYAEH4ACADQYCAAXEbIAFBCEYNABpB5ABB9QAgAhsLOgAACywBAX8jAEEQayIBJAAgAUEIaiAAEH0gABBaahDAASgCACEAIAFBEGokACAACxYAIAAgASACIAMgACgCACgCIBEHABoLVQAgACABNgIEIABBADoAACABIAEoAgBBdGooAgBqEOAIBEAgASABKAIAQXRqKAIAaigCSARAIAEgASgCAEF0aigCAGooAkgQxwwLIABBAToAAAsgAAu5AwMCfwF+AnwgAL0iA0I/iKchAQJAAkACfAJAIAACfwJAAkAgA0IgiKdB/////wdxIgJBq8aYhARPBEAgA0L///////////8Ag0KAgICAgICA+P8AVgRAIAAPCyAARO85+v5CLoZAZEEBc0UEQCAARAAAAAAAAOB/og8LIABE0rx63SsjhsBjQQFzDQEgAERRMC3VEEmHwGNFDQEMBgsgAkHD3Nj+A0kNAyACQbLFwv8DSQ0BCyAARP6CK2VHFfc/oiABQQN0QYDnKmorAwCgIgSZRAAAAAAAAOBBYwRAIASqDAILQYCAgIB4DAELIAFBAXMgAWsLIgG3IgREAADg/kIu5r+ioCIAIAREdjx5Ne856j2iIgWhDAELIAJBgIDA8QNNDQJBACEBIAALIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQQgAUUNACAEIAEQpQYhBAsgBA8LIABEAAAAAAAA8D+gC9sBAgF/An5BASEEAkAg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Sg0BIABBAWoiACAKKAIASA0ACwsCQCADIAsoAgBODQADQCALIAMQPigCACAGSg0BIANBAWoiAyALKAIASA0ACwsCQCACIAEoAgBODQADQCABIAIQPigCACAGSg0BIAJBAWoiAiABKAIASA0ACwsCQCAEIAkoAgBODQADQCAJIAQQPigCACAGSg0BIARBAWoiBCAJKAIASA0ACwsCQCAFIAwoAgBODQADQCAMIAUQPigCACAGSg0BIAVBAWoiBSAMKAIASA0ACwsgByAGNgIAIAggBjYCGCAIIA02AhQgCCAFNgIQIAggADYCACAIIAM2AgggCCAENgIMIAggAjYCBEGd1gggCBA7IAVBAUggDSAAIAVrIAJqIARrIhBrQQRIckVBACANIAQgAiAFamsgA2oiEWtBA0obDQUCQCAPBEAgAEEBTkEAIBBBA0obDQYgDkUNAQsgA0EBSA0AIBFBA0oNBAsgBkH/////B0cNAAsMAQtBACEFQQAhBEEAIQJBACEAA0ACf0H/////ByAAIAooAgBODQAaQf////8HIAogABA+KAIAQf////8HRg0AGiAKIAAQPigCAAshBgJAIAIgCygCAE4NACALIAIQPigCACAGTg0AIAsgAhA+KAIAIQYLAkAgBCABKAIATg0AIAEgBBA+KAIAIAZODQAgASAEED4oAgAhBgsCQCAFIAkoAgBODQAgCSAFED4oAgAgBk4NACAJIAUQPigCACEGCwJAIAMgDCgCAE4NACAMIAMQPigCACAGTg0AIAwgAxA+KAIAIQYLAkAgACAKKAIATg0AA0AgCiAAED4oAgAgBkoNASAAQQFqIgAgCigCAEgNAAsLAkAgAiALKAIATg0AA0AgCyACED4oAgAgBkoNASACQQFqIgIgCygCAEgNAAsLAkAgBCABKAIATg0AA0AgASAEED4oAgAgBkoNASAEQQFqIgQgASgCAEgNAAsLAkAgBSAJKAIATg0AA0AgCSAFED4oAgAgBkoNASAFQQFqIgUgCSgCAEgNAAsLAkAgAyAMKAIATg0AA0AgDCADED4oAgAgBkoNASADQQFqIgMgDCgCAEgNAAsLIAcgBjYCACADQQFIIA0gACADayAEaiAFayIQa0EESHJFQQAgDSAFIAMgBGprIAJqIhFrQQNKGw0EAkAgDwRAIABBAU5BACAQQQROGw0F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aiQACxkAIAAqAgAgASoCBJQgACoCBCABKgIAlJMLjAMBBX8jAEEwayICJAAgAkEsahBvIQUCf0EAIABBBGoiBCABQQRqIgMQzgJFDQAaIAAuARAiBkUEQCADIAQQywMMAQsgAiAAKAIMIgM2AixBACEEAkACQCAGQQFIDQAgAiADNgIYIAIgAzYCKCABIAJBGGoQgw8iBEH//wFHDQBBACEDA0AgAkEgaiAAIAMQywEgBSACQSBqENMBIANBAWoiAyAALgEQTg0CIAIgAigCLCIENgIoIAIgBDYCDCABIAJBDGoQgw8iBEH//wFGDQALCyAEQQBHDAELIAIgASgCDCIDNgIsQf//ASEEAkAgAS4BEEEBSA0AIAIgAzYCFCACIAM2AhwgACACQRRqEIMPIgRB//8BRw0AQQAhAwNAIAJBIGogASADEMsBIAUgAkEgahDTASADQQFqIgMgAS4BEE4EQEH//wEhBAwCCyACIAIoAiwiBDYCHCACIAQ2AhAgACACQRBqEIMPIgRB//8BRg0ACwsgBEUgBEH//wFGcgshAyACQTBqJAAgAwsZACAAEGkaIABBADYCCCAAQQxqENkFGiAAC1EBBH8CQCAAEHIiAUEBSA0AA0AgACABQX9qIgNqIgQtAABBdmoiAkEDSw0BAkAgAkEBaw4CAgIACyAEQQA6AAAgAUEBSiECIAMhASACDQALCwsKACAAIAFqLQBsC10BA38gACgCAEEASgRAA0AgAyACIAEgACADEFEoAgBrIgQgBEEfdSIEaiAEcyABIAAgAhBRKAIAayICIAJBH3UiAmogAnNIGyECIANBAWoiAyAAKAIASA0ACwsgAgs6ACAAIAU2AhAgACABNgIAIAAgBCAEIAMgBCADSBsiAWs2AgwgACADIAFrNgIIIAAgASACajYCBCAACxAAIABCADcCACAAELcfIAALMQEBfyMAQRBrIgQkACAABEAgBCABEEo2AgBBqeEJIAQQOyACIAMQuB8LIARBEGokAAs3AQF/An8gACgCACIDIAEoAgBIBEAgASADNgIAIAAoAgAhAwsgAyACKAIASgsEQCACIAM2AgALC48BAQN/QQEhAwJAIAAoAgAiBCgCGEUNACABKAIAIgUoAhhFDQACQAJAIAJBAksNAAJAAkAgAkEBaw4CAgABCyAAKAIMIAAoAghqIQMM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CyACKAIAC58CAQF/IwBBEGsiASAANgIIAkACQCABKAIIBEAgASgCCCgCHA0BCyABQX42AgwMAQsgASABKAIIKAIcNgIEIAEoAgRBADYCHCABKAIIQQA2AhQgASgCCEEANgIIIAEoAghBADYCGCABKAIIQQE2AjAgASgCBEEANgIAIAEoAgRBADYCBCABKAIEQQA2AgwgASgCBEGAgAI2AhQgASgCBEEANgIgIAEoAgRBADYCKCABKAIEQQA2AiwgASgCBEEANgIwIAEoAgRBADYCOCABKAIEQQA2AjwgASgCBCABKAIEQbAKaiIANgJsIAEoAgQgADYCUCABKAIEIAA2AkwgASgCBEEBNgLANyABKAIEQX82AsQ3IAFBADYCDAsgASgCDAvXDQEBfyMAQSBrIgMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGEEQdjYCDCADIAMoAhhB//8DcTYCGAJAIAMoAhBBAUYEQCADIAMoAhQtAAAgAygCGGo2AhggAygCGEHx/wNPBEAgAyADKAIYQfH/A2s2AhgLIAMgAygCGCADKAIMajYCDCADKAIMQfH/A08EQCADIAMoAgxB8f8DazYCDAsgAyADKAIYIAMoAgxBEHRyNgIcDAELIAMoAhRFBEAgA0EBNgIcDAELIAMoAhBBEEkEQANAIAMgAygCECIAQX9qNgIQIAAEQCADIAMoAhQiAEEBajYCFCADIAAtAAAgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMDAELCyADKAIYQfH/A08EQCADIAMoAhhB8f8DazYCGAsgAyADKAIMQfH/A3A2AgwgAyADKAIYIAMoAgxBEHRyNgIcDAELA0AgAygCEEGwK0lFBEAgAyADKAIQQbArazYCECADQdsCNgIIA0AgAyADKAIULQAAIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAEgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AAiADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQADIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAQgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ABSADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAGIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAcgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ACCADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAJIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAogAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ACyADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAMIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAA0gAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ADiADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAPIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhRBEGo2AhQgAyADKAIIQX9qIgA2AgggAA0ACyADIAMoAhhB8f8DcDYCGCADIAMoAgxB8f8DcDYCDAwBCwsgAygCEARAA0AgAygCEEEQSUUEQCADIAMoAhBBEGs2AhAgAyADKAIULQAAIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAEgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AAiADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQADIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAQgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ABSADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAGIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAcgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ACCADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAJIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAogAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ACyADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAMIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCAD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QQA2AhgMBgsgAigCDEEBNgKAAiACKAIMQQM2AkwgAiACKAIMKAJUNgIEIAIoAgRB0gA2AgAgAigCBEEBNgIIIAIoAgRBATYCDCACKAIEQQA2AhAgAigCBEEANgIUIAIoAgRBADYCGCACIAIoAgwoAlRB2ABqNgIEIAIoAgRBxwA2AgAgAigCBEEBNgIIIAIoAgRBATYCDCACKAIEQQA2AhAgAigCBEEANgIUIAIoAgRBADYCGCACIAIoAgwoAlRBsAFqNgIEIAIoAgRBwgA2AgAgAigCBEEBNgIIIAIoAgRBATYCDCACKAIEQQA2AhAgAigCBEEANgIUIAIoAgRBADYCGAwFCyACKAIMQQE2AvQBIAIoAgxBAzYCTCACIAIoAgwoAlQ2AgQgAigCBEEBNgIAIAIoAgRBAjYCCCACKAIEQQI2AgwgAigCBEEANgIQIAIoAgRBADYCFCACKAIEQQA2AhggAiACKAIMKAJUQdgAajYCBCACKAIEQQI2AgAgAigCBEEBNgIIIAIoAgRBATYCDCACKAIEQQE2AhAgAigCBEEBNgIUIAIoAgRBATYCGCACIAIoAgwoAlRBsAFqNgIEIAIoAgRBAzYCACACKAIEQQE2AgggAigCBEEBNgIMIAIoAgRBATYCECACKAIEQQE2AhQgAigCBEEBNgIYDAQLIAIoAgxBATYCgAIgAigCDEEENgJMIAIgAigCDCgCVDYCBCACKAIEQcMANgIAIAIoAgRBATYCCCACKAIEQQE2AgwgAigCBEEANgIQIAIoAgRBADYCFCACKAIEQQA2AhggAiACKAIMKAJUQdgAajYCBCACKAIEQc0ANgIAIAIoAgRBATYCCCACKAIEQQE2AgwgAigCBEEANgIQIAIoAgRBADYCFCACKAIEQQA2AhggAiACKAIMKAJUQbABajYCBCACKAIEQdkANgIAIAIoAgRBATYCCCACKAIEQQE2AgwgAigCBEEANgIQIAIoAgRBADYCFCACKAIEQQA2AhggAiACKAIMKAJUQYgCajYCBCACKAIEQcsANgIAIAIoAgRBATYCCCACKAIEQQE2AgwgAigCBEEANgIQIAIoAgRBADYCFCACKAIEQQA2AhgMAwsgAigCDEEBNgKAAiACKAIMQQQ2AkwgAiACKAIMKAJUNgIEIAIoAgRBATYCACACKAIEQQI2AgggAigCBEECNgIMIAIoAgRBADYCECACKAIEQQA2AhQgAigCBEEANgIYIAIgAigCDCgCVEHYAGo2AgQgAigCBEECNgIAIAIoAgRBATYCCCACKAIEQQE2AgwgAigCBEEBNgIQIAIoAgRBATYCFCACKAIEQQE2AhggAiACKAIMKAJUQbABajYCBCACKAIEQQM2AgAgAigCBEEBNgIIIAIoAgRBATYCDCACKAIEQQE2AhAgAigCBEEBNgIUIAIoAgRBATYCGCACIAIoAgwoAlRBiAJqNgIEIAIoAgRBBDYCACACKAIEQQI2AgggAigCBEECNgIMIAIoAgRBADYCECACKAIEQQA2AhQgAigCBEEANgIYDAILIAIoAgwgAigCDCgCJDYCTAJAIAIoAgwoAkxBAU4EQCACKAIMKAJMQQpMDQELIAIoAgwoAgBBGzYCFCACKAIMKAIAIAIoAgwoAkw2AhggAigCDCgCAEEKNgIcIAIoAgwgAigCDCgCACgCABEAAAsgAkEANgIAA0AgAigCACACKAIMKAJMTkUEQCACIAIoAgwoAlQgAigCAEHYAGxqNgIEIAIoAgQgAigCADYCACACKAIEQQE2AgggAigCBEEBNgIMIAIoAgRBADYCECACKAIEQQA2AhQgAigCBEEANgIYIAIgAigCAEEBajYCAAwBCwsMAQsgAigCDCgCAEELNgIUIAIoAgwgAigCDCgCACgCABEAAAsgAkEQaiQAC00BAX8jAEEQayIBJAAgASAANgIMIAEoAgwoAgQEQCABKAIMIAEoAgwoAgQoAigRAAALIAEoAgxBADYCBCABKAIMQQA2AhQgAUEQaiQAC9UDAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCFDYCDCADIAMoAhgoAgw2AgggAygCEEUEQCADKAIYKAIgKAIAQSk2AhQgAygCGCgCICADKAIYKAIgKAIAKAIAEQAACyADIAMoAgxBASADKAIQdEEBa3E2AgwgAyADKAIQIAMoAghqNgIIIAMgAygCDEEYIAMoAghrdDYCDCADIAMoAhgoAgggAygCDHI2AgwCQANAIAMoAghBCE4EQCADIAMoAgxBEHVB/wFxNgIEIAMoAgQhASADKAIYIgIoAgAhACACIABBAWo2AgAgACABOgAAIAMoAhgiASgCBEF/aiEA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BCACQQhqELIkIAJBGGpCfxDcBSEBIAAgACgCAEF0aigCAGogA0EEciADIAIpAzAgASkDCFEbEIwDCyACQUBrJAALMgEBfyABQX9MBEBBACAAQQAgAWsQhglrDwsgAUEBdiICQQAgAmsgAEF/ShsgAGogAW0LswMCBX8CfgJAIAG9IgdC////////////AINCgICAgICAgPj/AFgEQCAAvSIIQv///////////wCDQoGAgICAgID4/wBUDQELIAAgAaAPCyAHpyIFIAdCIIinIgJBgIDAgHxqckUEQCAAEO0VDwsgB0I+iKdBAnEiBiAIQj+Ip3IhAwJAAkAgCEIgiKdB/////wdxIgQgCKdyRQRAAkAgA0ECaw4CAgADC0QYLURU+yEJwA8LIAUgAkH/////B3EiAnJFBEBEGC1EVPsh+T8gAKYPCwJAIAJBgIDA/wdGBEAgBEGAgMD/B0cNASADQQN0QYDmKmorAwAPCyAEQYCAwP8HR0EAIAJBgICAIGogBE8bRQRARBgtRFT7Ifk/IACmDwsCfCAGBEBEAAAAAAAAAAAgBEGAgIAgaiACSQ0BGgsgACABo5kQ7RULIQAgA0ECTQRAAkACQCADQQFrDgIAAQULIACaDwtEGC1EVPshCUAgAEQHXBQzJqahvKChDwsgAEQHXBQzJqahvKBEGC1EVPshCcCgDwsgA0EDdEGg5ipqKwMADwtEGC1EVPshCUAhAAsgAAvUAQECfyMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAwPIDSQ0BIABEAAAAAAAAAABBABDHCiEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARD6D0EDcSICQQJNBEACQAJAAkAgAkEBaw4CAQIACyABKwMAIAErAwhBARDHCiEADAMLIAErAwAgASsDCBDICiEADAILIAErAwAgASsDCEEBEMcKmiEADAELIAErAwAgASsDCBDICpohAAsgAUEQaiQAIAAL0AEBAn8jAEEQayIBJAACfCAAvUIgiKdB/////wdxIgJB+8Ok/wNNBEBEAAAAAAAA8D8gAkGewZryA0kNARogAEQAAAAAAAAAABDICgwBCyAAIAChIAJBgIDA/wdPDQAaIAAgARD6D0EDcSICQQJNBEACQAJAAkAgAkEBaw4CAQIACyABKwMAIAErAwgQyAoMAwsgASsDACABKwMIQQEQxwqaDAILIAErAwAgASsDCBDICpoMAQsgASsDACABKwMIQQEQxwoLIQAgAUEQaiQAIAAL2QMCAn8CfiMAQSBrIgIkAAJAIAFC////////////AIMiBUKAgICAgIDA/0N8IAVCgICAgICAwIC8f3xUBEAgAUIEhiAAQjyIhCEEIABC//////////8PgyIAQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQQMAgsgBEKAgICAgICAgEB9IQQgAEKAgICAgICAgAiFQgBSDQEgBEIBgyAEfCEEDAELIABQIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgAUIEhiAAQjyIhEL/////////A4NCgICAgICAgPz/AIQhBAwBC0KAgICAgICA+P8AIQQgBUL///////+//8MAVg0AQgAhBCAFQjCIpyIDQZH3AEkNACACQRBqIAAgAUL///////8/g0KAgICAgIDAAIQiBCADQf+If2oQ0QMgAiAAIARBgfgAIANrEIsJIAIpAwhCBIYgAikDACIAQjyIhCEEIAIpAxAgAikDGIRCAFKtIABC//////////8Pg4QiAEKBgICAgICAgAhaBEAgBEIBfCEEDAELIABCgICAgICAgIAIhUIAUg0AIARCAYMgBHwhBAsgAkEgaiQAIAQgAUKAgICAgICAgIB/g4S/C1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC2cCAX8BfiMAQRBrIgIkACAAAn4gAUUEQEIADAELIAIgAa1CAEHwACABZ0EfcyIBaxDRAyACKQMIQoCAgICAgMAAhSABQf//AGqtQjCGfCEDIAIpAwALNwMAIAAgAzcDCCACQRBqJAALgwECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUF/aiIBIAAgAEIKgCIFQgp+fadBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBf2oiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEEIAMhAiAEDQALCyABC6ADAQN/IwBB0ABrIgUkACAFQThqIAEQQCEBAkAgAEGouQhqIgcoAgxBAUgNAAJAIANBAUcNACAAQfTaCGoiBkG6zQAQ2gEgARBBIAEQPA0AA0AgASgCCC0AsQJFBEAgBiABKAIIKAK4ARB/EKcCIAZBIBCCBAsgARBEGiABEDxFDQALCyAHKAIMQQJOBEAgA0F/aiIAQQJNBEAgBSACNgIQIABBAnRBnKEsaigCACAFQRBqEDsLIAEQQSABEDxFBEADQCABKAIILQCxAkUEQCABKAIIKAK4ARB/EEohACAFIAEoAggoArgBLQA0NgIEIAUgADYCAEHutwIgBRA7CyABEEQaIAEQPEUNAAsLQdDkAkEAEDsMAQsgBEUNACAFIABB9NoIahBKNgIwQYKUAyAFQTBqEDsgARBBIAEQPEUEQANAIAEoAggtALECRQRAIAEoAggoArgBEH8QSiEAIAUgASgCCCgCuAEtADQ2AiQgBSAANgIgQe63AiAFQSBqEDsLIAEQRBogARA8RQ0ACwtB0OQCQQAQOwsgBUHQAGokAAvbTQEDfyMAQeAAayICJAAgAiAANgJYIAIgATYCVAJAAkACQCACKAJYRQ0AIAIoAlgoAhxFDQAgAigCWCgCDEUNACACKAJYKAIADQEgAigCWCgCBEUNAQsgAkF+NgJcDAELIAIgAigCWCgCHDYCUCACKAJQKAIAQQtGBEAgAigCUEEMNgIACyACIAIoAlgoAgw2AkggAiACKAJYKAIQNgJAIAIgAigCWCgCADYCTCACIAIoAlgoAgQ2AkQgAiACKAJQKAI4NgI8IAIgAigCUCgCPDYCOCACIAIoAkQ2AjQgAiACKAJANgIwIAJBADYCEANAAkAgAigCUCgCACIAQR9NBEACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABBAWsOHwECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8ACyACKAJQKAIIRQRAIAIoAlBBDDYCAAwiCwNAIAIoAjhBEEkEQCACKAJERQ0iIAIgAigCREF/ajYCRCACIAIoAkwiAEEBajYCTCACIAIoAjwgAC0AACACKAI4dGo2AjwgAiACKAI4QQhqNgI4DAELCwJAIAIoAlAoAghBAnFFDQAgAigCPEGflgJHDQBBAEEAQQAQ4gIhACACKAJQIAA2AhggAiACKAI8OgAMIAIgAigCPEEIdjoADSACKAJQKAIYIAJBDGpBAhDiAiEAIAIoAlAgADYCGCACQQA2AjwgAkEANgI4IAIoAlBBATYCAAwiCyACKAJQQQA2AhAgAigCUCgCIARAIAIoAlAoAiBBfzYCMAsCQCACKAJQKAIIQQFxBEAgAigCPEH/AXFBCHQgAigCPEEIdmpBH3BFDQELIAIoAlhBiYcBNgIYIAIoAlBBHTYCAAwiCyACKAI8QQ9xQQhHBEAgAigCWEHXxAE2AhggAigCUEEdNgIADCILIAIgAigCPEEEdjYCPCACIAIoAjhBBGs2AjggAiACKAI8QQ9xQQhqNgIUAkAgAigCUCgCJEUEQCACKAJQIAIoAhQ2AiQMAQsgAigCFCACKAJQKAIkSwRAIAIoAlhBwoMCNgIYIAIoAlBBHTYCAAwjCwsgAigCUEEBIAIoAhR0NgIUQQBBAEEAEPMHIQAgAigCUCAANgIYIAIoAlggADYCMCACKAJQQQlBCyACKAI8QYAEcRs2AgAgAkEANgI8IAJBADYCOAwhCwNAIAIoAjhBEEkEQCACKAJERQ0hIAIgAigCREF/ajYCRCACIAIoAkwiAEEBajYCTCACIAIoAjwgAC0AACACKAI4dGo2AjwgAiACKAI4QQhqNgI4DAELCyACKAJQIAIoAjw2AhAgAigCUCgCEEH/AXFBCEcEQCACKAJYQdfEATYCGCACKAJQQR02AgAMIQsgAigCUCgCEEGAwANxBEAgAigCWEHHtgI2AhggAigCUEEdNgIADCELIAIoAlAoAiAEQCACKAJQKAIgIAIoAjxBCHZBAXE2AgALIAIoAlAoAhBBgARxBEAgAiACKAI8OgAMIAIgAigCPEEIdjoADSACKAJQKAIYIAJBDGpBAhDiAiEAIAIoAlAgADYCGAsgAkEANgI8IAJBADYCOCACKAJQQQI2AgALA0AgAigCOEEgSQRAIAIoAkRFDSAgAiACKAJEQX9qNgJEIAIgAigCTCIAQQFqNgJMIAIgAigCPCAALQAAIAIoAjh0ajYCPCACIAIoAjhBCGo2AjgMAQsLIAIoAlAoAiAEQCACKAJQKAIgIAIoAjw2AgQLIAIoAlAoAhBBgARxBEAgAiACKAI8OgAMIAIgAigCPEEIdjoADSACIAIoAjxBEHY6AA4gAiACKAI8QRh2OgAPIAIoAlAoAhggAkEMakEEEOICIQAgAigCUCAANgIYCyACQQA2AjwgAkEANgI4IAIoAlBBAzYCAAsDQCACKAI4QRBJBEAgAigCREUNHyACIAIoAkRBf2o2AkQgAiACKAJMIgBBAWo2AkwgAiACKAI8IAAtAAAgAigCOHRqNgI8IAIgAigCOEEIajYCOAwBCwsgAigCUCgCIARAIAIoAlAoAiAgAigCPEH/AXE2AgggAigCUCgCICACKAI8QQh2NgIMCyACKAJQKAIQQYAEcQRAIAIgAigCPDoADCACIAIoAjxBCHY6AA0gAigCUCgCGCACQQxqQQIQ4gIhACACKAJQIAA2AhgLIAJBADYCPCACQQA2AjggAigCUEEENgIACwJAIAIoAlAoAhBBgAhxBEADQCACKAI4QRBJBEAgAigCREUNICACIAIoAkRBf2o2AkQgAiACKAJMIgBBAWo2AkwgAiACKAI8IAAtAAAgAigCOHRqNgI8IAIgAigCOEEIajYCOAwBCwsgAigCUCACKAI8NgJAIAIoAlAoAiAEQCACKAJQKAIgIAIoAjw2AhQLIAIoAlAoAhBBgARxBEAgAiACKAI8OgAMIAIgAigCPEEIdjoADSACKAJQKAIYIAJBDGpBAhDiAiEAIAIoAlAgADYCGAsgAkEANgI8IAJBADYCOAwBCyACKAJQKAIgBEAgAigCUCgCIEEANgIQCwsgAigCUEEFNgIACyACKAJQKAIQQYAIcQRAIAIgAigCUCgCQDYCLCACKAIsIAIoAkRLBEAgAiACKAJENgIsCyACKAIsBEACQCACKAJQKAIgRQ0AIAIoAlAoAiAoAhBFDQAgAiACKAJQKAIgKAIUIAIoAlAoAkBrNgIUIAIoAlAoAiAoAhAgAigCFGogAigCTAJ/IAIoAhQgAigCLGogAigCUCgCICgCGEsEQCACKAJQKAIgKAIYIAIoAhRrDAELIAIoAiwLEFgaCyACKAJQKAIQQYAEcQRAIAIoAlAoAhggAigCTCACKAIsEOICIQAgAigCUCAANgIYCyACIAIoAkQgAigCLGs2AkQgAiACKAIsIAIoAkxqNgJMIAIoAlAiACAAKAJAIAIoAixrNgJACyACKAJQKAJADRwLIAIoAlBBADYCQCACKAJQQQY2AgALAkAgAigCUCgCEEGAEHEEQCACKAJERQ0cIAJBADYCLANAIAIoAkwhACACIAIoAiwiAUEBajYCLCACIAAgAWotAAA2AhQCQCACKAJQKAIgRQ0AIAIoAlAoAiAoAhxFDQAgAigCUCgCQCACKAJQKAIgKAIgTw0AIAIoAhQhASACKAJQKAIgKAIcIQMgAigCUCIEKAJAIQAgBCAAQQFqNgJAIAAgA2ogAToAAAtBACEAIAIoAhQEfyACKAIsIAIoAkRJBUEAC0EBcQ0ACyACKAJQKAIQQYAEcQRAIAIoAlAoAhggAigCTCACKAIsEOICIQAgAigCUCAANgIYCyACIAIoAkQgAigCLGs2AkQgAiACKAIsIAIoAkxqNgJMIAIoAhQNHAwBCyACKAJQKAIgBEAgAigCUCgCIEEANgIcCwsgAigCUEEANgJAIAIoAlBBBzYCAAsCQCACKAJQKAIQQYAgcQRAIAIoAkRFDRsgAkEANgIsA0AgAigCTCEAIAIgAigCLCIBQQFqNgIsIAIgACABai0AADYCFAJAIAIoAlAoAiBFDQAgAigCUCgCICgCJEUNACACKAJQKAJAIAIoAlAoAiAoAihPDQAgAigCFCEBIAIoAlAoAiAoAiQhAyACKAJQIgQoAkAhACAEIABBAWo2AkAgACADaiABOgAAC0EAIQAgAigCFAR/IAIoAiwgAigCREkFQQALQQFxDQALIAIoAlAoAhBBgARxBEAgAigCUCgCGCACKAJMIAIoAiwQ4gIhACACKAJQIAA2AhgLIAIgAigCRCACKAIsazYCRCACIAIoAiwgAigCTGo2AkwgAigCFA0bDAELIAIoAlAoAiAEQCACKAJQKAIgQQA2AiQLCyACKAJQQQg2AgALIAIoAlAoAhBBgARxBEADQCACKAI4QRBJBEAgAigCREUNGyACIAIoAkRBf2o2AkQgAiACKAJMIgBBAWo2AkwgAiACKAI8IAAtAAAgAigCOHRqNgI8IAIgAigCOEEIajYCOAwBCwsgAigCPCACKAJQKAIYQf//A3FHBEAgAigCWEHN4wI2AhggAigCUEEdNgIADBsLIAJBADYCPCACQQA2AjgLIAIoAlAoAiAEQCACKAJQKAIgIAIoAlAoAhBBCXVBAXE2AiwgAigCUCgCIEEBNgIwC0EAQQBBABDiAiEAIAIoAlAgADYCGCACKAJYIAA2AjAgAigCUEELNgIADBkLA0AgAigCOEEgSQRAIAIoAkRFDRkgAiACKAJEQX9qNgJEIAIgAigCTCIAQQFqNgJMIAIgAigCPCAALQAAIAIoAjh0ajYCPCACIAIoAjhBCGo2AjgMAQsLIAIoAlAgAigCPEEIdkGA/gNxIAIoAjxBGHZqIAIoAjxBgP4DcUEIdGogAigCPEH/AXFBGHRqIgA2AhggAigCWCAANgIwIAJBADYCPCACQQA2AjggAigCUEEKNgIACyACKAJQKAIMRQRAIAIoAlggAigCSDYCDCACKAJYIAIoAkA2AhAgAigCWCACKAJMNgIAIAIoAlggAigCRDYCBCACKAJQIAIoAjw2AjggAigCUCACKAI4NgI8IAJBAjYCXAwZC0EAQQBBABDzByEAIAIoAlAgADYCGCACKAJYIAA2AjAgAigCUEELNgIACyACKAJUQQVGDRUgAigCVEEGRgRADBYLCyACKAJQKAIEBEAgAiACKAI8IAIoAjhBB3F2NgI8IAIgAigCOCACKAI4QQdxazYCOCACKAJQQRo2AgAMFgsDQCACKAI4QQNJBEAgAigCREUNFiACIAIoAkRBf2o2AkQgAiACKAJMIgBBAWo2AkwgAiACKAI8IAAtAAAgAigCOHRqNgI8IAIgAigCOEEIajYCOAwBCwsgAigCUCACKAI8QQFxNgIEIAIgAigCPEEBdjYCPCACIAIoAjhBAWs2AjgCQCACKAI8QQNxIgBBA0sNAAJAAkACQAJAIABBAWsOAwECAwALIAIoAlBBDTYCAAwDCyACKAJQEJMlIAIoAlBBEzYCACACKAJUQQZGBEAgAiACKAI8QQJ2NgI8IAIgAigCOEECazYCOAwYCwwCCyACKAJQQRA2AgAMAQsgAigCWEHVkgM2AhggAigCUEEdNgIACyACIAIoAjxBAnY2AjwgAiACKAI4QQJrNgI4DBULIAIgAigCPCACKAI4QQdxdjYCPCACIAIoAjggAigCOEEHcWs2AjgDQCACKAI4QSBJBEAgAigCREUNFSACIAIoAkRBf2o2AkQgAiACKAJMIgBBAWo2AkwgAiACKAI8IAAtAAAgAigCOHRqNgI8IAIgAigCOEEIajYCOAwBCwsgAigCPEH//wNxIAIoAjxBEHZB//8Dc0cEQCACKAJYQYzDAzYCGCACKAJQQR02AgAMFQsgAigCUCACKAI8Qf//A3E2AkAgAkEANgI8IAJBADYCOCACKAJQQQ42AgAgAigCVEEGRg0TCyACKAJQQQ82AgALIAIgAigCUCgCQDYCLCACKAIsBEAgAigCLCACKAJESwRAIAIgAigCRDYCLAsgAigCLCACKAJASwRAIAIgAigCQDYCLAsgAigCLEUNEiACKAJIIAIoAkwgAigCLBBYGiACIAIoAkQgAigCLGs2AkQgAiACKAIsIAIoAkxqNgJMIAIgAigCQCACKAIsazYCQCACIAIoAiwgAigCSGo2AkggAigCUCIAIAAoAkAgAigCLGs2AkAMEwsgAigCUEELNgIADBILA0AgAigCOEEOSQRAIAIoAkRFDRIgAiACKAJEQX9qNgJEIAIgAigCTCIAQQFqNgJMIAIgAigCPCAALQAAIAIoAjh0ajYCPCACIAIoAjhBCGo2AjgMAQsLIAIoAlAgAigCPEEfcUGBAmo2AmAgAiACKAI8QQV2NgI8IAIgAigCOEEFazYCOCACKAJQIAIoAjxBH3FBAWo2AmQgAiACKAI8QQV2NgI8IAIgAigCOEEFazYCOCACKAJQIAIoAjxBD3FBBGo2AlwgAiACKAI8QQR2NgI8IAIgAigCOEEEazYCOAJAIAIoAlAoAmBBngJNBEAgAigCUCgCZEEeTQ0BCyACKAJYQYDxAzYCGCACKAJQQR02AgAMEgsgAigCUEEANgJoIAIoAlBBETYCAAsDQCACKAJQKAJoIAIoAlAoAlxJBEADQCACKAI4QQNJBEAgAigCREUNEyACIAIoAkRBf2o2AkQgAiACKAJMIgBBAWo2AkwgAiACKAI8IAAtAAAgAigCOHRqNgI8IAIgAigCOEEIajYCOAwBCwsgAigCPEEHcSEBIAIoAlBB8ABqIQMgAigCUCIEKAJoIQAgBCAAQQFqNgJoIABBAXRBoI0qai8BAEEBdCADaiABOwEAIAIgAigCPEEDdjYCPCACIAIoAjhBA2s2AjgMAQsLA0AgAigCUCgCaEETT0UEQCACKAJQQfAAaiEBIAIoAlAiAygCaCEAIAMgAEEBajYCaCAAQQF0QaCNKmovAQBBAXQgAWpBADsBAAwBCwsgAigCUCACKAJQQbAKajYCbCACKAJQIAIoAlAoAmw2AkwgAigCUEEHNgJUIAJBACACKAJQQfAAakETIAIoAlBB7ABqIAIoAlBB1ABqIAIoAlBB8AVqEJEQNgIQIAIoAhAEQCACKAJYQZibBDYCGCACKAJQQR02AgAMEQsgAigCUEEANgJoIAIoAlBBEjYCAAsDQAJAIAIoAlAoAmggAigCUCgCYCACKAJQKAJkak8NAANAAkAgAkEgaiACKAJQKAJMIAIoAjxBASACKAJQKAJUdEEBa3FBAnRqKAEANgEAIAItACEgAigCOE0NACACKAJERQ0SIAIgAigCREF/ajYCRCACIAIoAkwiAEEBajYCTCACIAIoAjwgAC0AACACKAI4dGo2AjwgAiACKAI4QQhqNgI4DAELCwJAIAIvASJBEEgEQANAIAIoAjggAi0AIUkEQCACKAJERQ0UIAIgAigCREF/ajYCRCACIAIoAkwiAEEBajYCTCACIAIoAjwgAC0AACACKAI4dGo2AjwgAiACKAI4QQhqNgI4DAELCyACIAIoAjwgAi0AIXY2AjwgAiACKAI4IAItACFrNgI4IAIvASIhASACKAJQQfAAaiEDIAIoAlAiBCgCaCEAIAQgAEEBajYCaCAAQQF0IANqIAE7AQAMAQsCQCACLwEiQRBGBEADQCACKAI4IAItACFBAmpJBEAgAigCREUNFSACIAIoAkRBf2o2AkQgAiACKAJMIgBBAWo2AkwgAiACKAI8IAAtAAAgAigCOHRqNgI8IAIgAigCOEEIajYCOAwBCwsgAiACKAI8IAItACF2NgI8IAIgAigCOCACLQAhazYCOCACKAJQKAJoRQRAIAIoAlhB1cMENgIYIAIoAlBBHTYCAAwECyACIAIoAlAgAigCUCgCaEEBdGpB7gBqLwEANgIUIAIgAigCPEEDcUEDajYCLCACIAIoAjxBAnY2AjwgAiACKAI4QQJrNgI4DAELAkAgAi8BIkERRgRAA0AgAigCOCACLQAhQQNqSQRAIAIoAkRFDRYgAiACKAJEQX9qNgJEIAIgAigCTCIAQQFqNgJMIAIgAigCPCAALQAAIAIoAjh0ajYCPCACIAIoAjhBCGo2AjgMAQsLIAIgAigCPCACLQAhdjYCPCACIAIoAjggAi0AIWs2AjggAkEANgIUIAIgAigCPEEHcUEDajYCLCACIAIoAjxBA3Y2AjwgAiACKAI4QQNrNgI4DAELA0AgAigCOCACLQAhQQdqSQRAIAIoAkRFDRUgAiACKAJEQX9qNgJEIAIgAigCTCIAQQFqNgJMIAIgAigCPCAALQAAIAIoAjh0ajYCPCACIAIoAjhBCGo2AjgMAQsLIAIgAigCPCACLQAhdjYCPCACIAIoAjggAi0AIWs2AjggAkEANgIUIAIgAigCPEH/AHFBC2o2AiwgAiACKAI8QQd2NgI8IAIgAigCOEEHazYCOAsLIAIoAlAoAmggAigCLGogAigCUCgCYCACKAJQKAJkaksEQCACKAJYQdXDBDYCGCACKAJQQR02AgAMAgsDQCACIAIoAiwiAEF/ajYCLCAABEAgAigCFCEBIAIoAlBB8ABqIQMgAigCUCIEKAJoIQAgBCAAQQFqNgJoIABBAXQgA2ogATsBAAwBCwsLDAELCyACKAJQKAIAQR1GDQ8gAigCUC8B8ARFBEAgAigCWEHj7gQ2AhggAigCUEEdNgIADBALIAIoAlAgAigCUEGwCmo2AmwgAigCUCACKAJQKAJsNgJMIAIoAlBBCTYCVCACQQEgAigCUEHwAGogAigCUCgCYCACKAJQQewAaiACKAJQQdQAaiACKAJQQfAFahCREDYCECACKAIQBEAgAigCWEGVlwU2AhggAigCUEEdNgIADBALIAIoAlAgAigCUCgCbDYCUCACKAJQQQY2AlggAkECIAIoAlBB8ABqIAIoAlAoAmBBAXRqIAIoAlAoAmQgAigCUEHsAGogAigCUEHYAGogAigCUEHwBWoQkRA2AhAgAigCEARAIAIoAlhBur4FNgIYIAIoAlBBHTYCAAwQCyACKAJQQRM2AgAgAigCVEEGRg0OCyACKAJQQRQ2AgALAkAgAigCREEGSQ0AIAIoAkBBggJJDQAgAigCWCACKAJINgIMIAIoAlggAigCQDYCECACKAJYIAIoAkw2AgAgAigCWCACKAJENgIEIAIoAlAgAigCPDYCOCACKAJQIAIoAjg2AjwgAigCWCACKAIwEJElIAIgAigCWCgCDDYCSCACIAIoAlgoAhA2AkAgAiACKAJYKAIANgJMIAIgAigCWCgCBDYCRCACIAIoAlAoAjg2AjwgAiACKAJQKAI8NgI4IAIoAlAoAgBBC0YEQCACKAJQQX82AsQ3CwwOCyACKAJQQQA2AsQ3A0ACQCACQSBqIAIoAlAoAkwgAigCPEEBIAIoAlAoAlR0QQFrcUECdGooAQA2AQAgAi0AISACKAI4TQ0AIAIoAkRFDQ4gAiACKAJEQX9qNgJEIAIgAigCTCIAQQFqNgJMIAIgAigCPCAALQAAIAIoAjh0ajYCPCACIAIoAjhBCGo2AjgMAQsLAkAgAi0AIEUNACACLQAgQfABcQ0AIAJBGGogAkEgaigBADYBAANAAkAgAkEgaiACKAJQKAJMIAIvARogAigCPEEBIAItABkgAi0AGGp0QQFrcSACLQAZdmpBAnRqKAEANgEAIAItABkgAi0AIWogAigCOE0NACACKAJERQ0PIAIgAigCREF/ajYCRCACIAIoAkwiAEEBajYCTCACIAIoAjwgAC0AACACKAI4dGo2AjwgAiACKAI4QQhqNgI4DAELCyACIAIoAjwgAi0AGXY2AjwgAiACKAI4IAItABlrNgI4IAIoAlAiACACLQAZIAAoAsQ3ajYCxDcLIAIgAigCPCACLQAhdjYCPCACIAIoAjggAi0AIWs2AjggAigCUCIAIAItACEgACgCxDdqNgLENyACKAJQIAIvASI2AkAgAi0AIEUEQCACKAJQQRk2AgAMDgsgAi0AIEEgcQRAIAIoAlBBfzYCxDcgAigCUEELNgIADA4LIAItACBBwABxBEAgAigCWEGk4wU2AhggAigCUEEdNgIADA4LIAIoAlAgAi0AIEEPcTYCSCACKAJQQRU2AgALIAIoAlAoAkgEQANAIAIoAjggAigCUCgCSEkEQCACKAJERQ0OIAIgAigCREF/ajYCRCACIAIoAkwiAEEBajYCTCACIAIoAjwgAC0AACACKAI4dGo2AjwgAiACKAI4QQhqNgI4DAELCyACKAJQIgAgACgCQCACKAI8QQEgAigCUCgCSHRBAWtxajYCQCACIAIoAjwgAigCUCgCSHY2AjwgAiACKAI4IAIoAlAoAkhrNgI4IAIoAlAiACACKAJQKAJIIAAoAsQ3ajYCxDcLIAIoAlAgAigCUCgCQDYCyDcgAigCUEEWNgIACwNAAkAgAkEgaiACKAJQKAJQIAIoAjxBASACKAJQKAJYdEEBa3FBAnRqKAEANgEAIAItACEgAigCOE0NACACKAJERQ0MIAIgAigCREF/ajYCRCACIAIoAkwiAEEBajYCTCACIAIoAjwgAC0AACACKAI4dGo2AjwgAiACKAI4QQhqNgI4DAELCyACLQAgQfABcUUEQCACQRhqIAJBIGooAQA2AQADQAJAIAJBIGogAigCUCgCUCACLwEaIAIoAjxBASACLQAZIAItABhqdEEBa3EgAi0AGXZqQQJ0aigBADYBACACLQAZIAItACFqIAIoAjhNDQAgAigCREUNDSACIAIoAkRBf2o2AkQgAiACKAJMIgBBAWo2AkwgAiACKAI8IAAtAAAgAigCOHRqNgI8IAIgAigCOEEIajYCOAwBCwsgAiACKAI8IAItABl2NgI8IAIgAigCOCACLQAZazYCOCACKAJQIgAgAi0AGSAAKALEN2o2AsQ3CyACIAIoAjwgAi0AIXY2AjwgAiACKAI4IAItACFrNgI4IAIoAlAiACACLQAhIAAoAsQ3ajYCxDcgAi0AIEHAAHEEQCACKAJYQaqHBjYCGCACKAJQQR02AgAMDAsgAigCUCACLwEiNgJEIAIoAlAgAi0AIEEPcTYCSCACKAJQQRc2AgALIAIoAlAoAkgEQANAIAIoAjggAigCUCgCSEkEQCACKAJERQ0MIAIgAigCREF/ajYCRCACIAIoAkwiAEEBajYCTCACIAIoAjwgAC0AACACKAI4dGo2AjwgAiACKAI4QQhqNgI4DAELCyACKAJQIgAgACgCRCACKAI8QQEgAigCUCgCSHRBAWtxajYCRCACIAIoAjwgAigCUCgCSHY2AjwgAiACKAI4IAIoAlAoAkhrNgI4IAIoAlAiACACKAJQKAJIIAAoAsQ3ajYCxDcLIAIoAlBBGDYCAAsgAigCQEUNCCACIAIoAjAgAigCQGs2AiwCQCACKAJQKAJEIAIoAixLBEAgAiACKAJQKAJEIAIoAixrNgIsIAIoAiwgAigCUCgCLEsEQCACKAJQKALANwRAIAIoAlhBkKoGNgIYIAIoAlBBHTYCAAwNCwsCQCACKAIsIAIoAlAoAjBLBEAgAiACKAIsIAIoAlAoAjBrNgIsIAIgAigCUCgCNCACKAJQKAIoIAIoAixrajYCKAwBCyACIAIoAlAoAjQgAigCUCgCMCACKAIsa2o2AigLIAIoAiwgAigCUCgCQEsEQCACIAIoAlAoAkA2AiwLDAELIAIgAigCSCACKAJQKAJEazYCKCACIAIoAlAoAkA2AiwLIAIoAiwgAigCQEsEQCACIAIoAkA2AiwLIAIgAigCQCACKAIsazYCQCACKAJQIgAgACgCQCACKAIsazYCQANAIAIgAigCKCIAQQFqNgIoIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIsQX9qIgA2AiwgAA0ACyACKAJQKAJARQRAIAIoAlBBFDYCAAsMCQsgAigCQEUNByACKAJQKAJAIQAgAiACKAJIIgFBAWo2AkggASAAOgAAIAIgAigCQEF/ajYCQCACKAJQQRQ2AgAMCAsgAigCUCgCCARAA0AgAigCOEEgSQRAIAIoAkRFDQkgAiACKAJEQX9qNgJEIAIgAigCTCIAQQFqNgJMIAIgAigCPCAALQAAIAIoAjh0ajYCPCACIAIoAjhBCGo2AjgMAQsLIAIgAigCMCACKAJAazYCMCACKAJYIgAgAigCMCAAKAIUajYCFCACKAJQIgAgAigCMCAAKAIcajYCHCACKAIwBEACfyACKAJQKAIQBEAgAigCUCgCGCACKAJIIAIoAjBrIAIoAjAQ4gIMAQsgAigCUCgCGCACKAJIIAIoAjBrIAIoAjAQ8wcLIQAgAigCUCAANgIYIAIoAlggADYCMAsgAiACKAJANgIwAn8gAigCUCgCEARAIAIoAjwMAQsgAigCPEEIdkGA/gNxIAIoAjxBGHZqIAIoAjxBgP4DcUEIdGogAigCPEH/AXFBGHRqCyACKAJQKAIYRwRAIAIoAlhBvsgGNgIYIAIoAlBBHTYCAAwJCyACQQA2AjwgAkEANgI4CyACKAJQQRs2AgALAkAgAigCUCgCCEUNACACKAJQKAIQRQ0AA0AgAigCOEEgSQRAIAIoAkRFDQggAiACKAJEQX9qNgJEIAIgAigCTCIAQQFqNgJMIAIgAigCPCAALQAAIAIoAjh0ajYCPCACIAIoAjhBCGo2AjgMAQsLIAIoAjwgAigCUCgCHEcEQCACKAJYQfvlBjYCGCACKAJQQR02AgAMCAsgAkEANgI8IAJBADYCOAsgAigCUEEcNgIACyACQQE2AhAMBAsgAkF9NgIQDAMLIAJBfDYCXAwECwsgAkF+NgJcDAILCyACKAJYIAIoAkg2AgwgAigCWCACKAJANgIQIAIoAlggAigCTDYCACACKAJYIAIoAkQ2AgQgAigCUCACKAI8NgI4IAIoAlAgAigCODYCPAJAIAIoAlAoAihFBEAgAigCUCgCAEEaTw0BIAIoAjAgAigCWCgCEEYNAQsgAigCWCACKAIwEJIlBEAgAigCUEEeNgIAIAJBfDYCXAwCCwsgAiACKAI0IAIoAlgoAgRrNgI0IAIgAigCMCACKAJYKAIQazYCMCACKAJYIgAgAigCNCAAKAIIajYCCCACKAJYIgAgAigCMCAAKAIUajYCFCACKAJQIgAgAigCMCAAKAIcajYCHAJAIAIoAlAoAghFDQAgAigCMEUNAAJ/IAIoAlAoAhAEQCACKAJQKAIYIAIoAlgoAgwgAigCMGsgAigCMBDiAgwBCyACKAJQKAIYIAIoAlgoAgwgAigCMGsgAigCMBDzBwshACACKAJQIAA2AhggAigCWCAANgIwC0EBIQAgAigCWCACKAJQKAI8QcAAQQAgAigCUCgCBBtqQYABQQAgAigCUCgCAEELRhtqQYACQQAgAigCUCgCAEETRwR/IAIoAlAoAgBBDkYFQQELQQFxG2o2AiwCQAJAIAIoAjRFBEAgAigCMEUNAQsgAigCVEEERw0BCyACKAIQDQAgAkF7NgIQCyACIAIoAhA2AlwLIAIoAlwhACACQeAAaiQAIAALkgMBAX8jAEEQayIBJAAgASAANgIIAkACQCABKAIIBEAgASgCCCgCHA0BCyABQX42AgwMAQsgASABKAIIKAIcKAIENgIEAkAgASgCBEEqRg0AIAEoAgRBxQBGDQAgASgCBEHJAEYNACABKAIEQdsARg0AIAEoAgRB5wBGDQAgASgCBEHxAEYNACABKAIEQZoFRg0AIAFBfjYCDAwBCyABKAIIKAIcKAIIBEAgASgCCCgCKCABKAIIKAIcKAIIIAEoAggoAiQRAgALIAEoAggoAhwoAkQEQCABKAIIKAIoIAEoAggoAhwoAkQgASgCCCgCJBECAAsgASgCCCgCHCgCQARAIAEoAggoAiggASgCCCgCHCgCQCABKAIIKAIkEQIACyABKAIIKAIcKAI4BEAgASgCCCgCKCABKAIIKAIcKAI4IAEoAggoAiQRAgALIAEoAggoAiggASgCCCgCHCABKAIIKAIkEQIAIAEoAghBADYCHCABQX1BACABKAIEQfEARhs2AgwLIAEoAgwaIAFBEGokAAsJACAAIAEQ4QULFgAgACABKAIANgIAIAAgAi0AADoABAuEAwECfyACIAFrIgNBAUgEQEEADwsgACABQQN1aiECAkACQAJAIAFBB3EiAEUEQEEAIQEMAQsgACADQQggAGsiASACLQAAIAB0Qf4BcUGgmiNqLQAAIgAgASAASRsiACAAIANKGyIBakEISA0BIAJBAWohAiADIAFrIQMLAkAgA0HAAEgNACACQQNxBEADQCADIQAgAi0AACIDQf8BRw0EIABBeGohAyABQQhqIQEgAkEBaiICQQNxDQALIABBKEgNAQsgAyEAA0AgAigCAEF/RwRAIAAhAwwCCyACQQRqIQIgAUEgaiEBIABBP0ohBCAAQWBqIgMhACAEDQALCwJAIANBCEgEQCADIQAMAQsDQCACLQAAIgBB/wFHBEAgASAAQaCaI2otAABqDwsgAkEBaiECIAFBCGohASADQQ9KIQQgA0F4aiIAIQMgBA0ACwsgAEEBSA0AIAEgACACLQAAQaCaI2otAAAiASAAIAFIG2ohAQsgAQ8LIAEgA0GgmiNqLQAAagueCAEHfyAAKALIBCIIKAJAIQUgCCgCRCEDIAFBwBROBEADQCACLwHsBCEHAkAgAyACLwHqBCIETw0AIAcgBCADayIEdiAFciEDIAAoAuAEIAAoAtgETgRAIAAQ8QEaCyAAIAAoAtwEIgVBAWo2AtwEIAUgAzoAACAAIAAoAuAEQQFqIgY2AuAEQQghA0EAIQUgBEEJSQ0AA0AgByAEQXhqIgR2IQMgBiAAKALYBE4EQCAAEPEBGgsgACAAKALcBCIGQQFqNgLcBCAGIAM6AAAgACAAKALgBEEBaiIGNgLgBEEIIQMgBEEISw0ACwsgBEECdEHglyNqKAIAIAdxIAMgBGsiA3QgBXIhBSADRQRAIAAoAuAEIAAoAtgETgRAIAAQ8QEaCyAAIAAoAtwEIgRBAWo2AtwEIAQgBToAACAAIAAoAuAEQQFqNgLgBEEAIQVBCCEDCyABIAIuAe4EayIBQb8USg0ACwsCQCACIAFBwABOBH8gAiABQQZ2QT9qQQZsaiIHLgEEIAFBQHFHDQEgBy8BAiEJAkAgAyAHLwEAIgRPDQAgCSAEIANrIgR2IAVyIQMgACgC4AQgACgC2AROBEAgABDxARoLIAAgACgC3AQiBUEBajYC3AQgBSADOgAAIAAgACgC4ARBAWoiBjYC4ARBCCEDQQAhBSAEQQlJDQADQCAJIARBeGoiBHYhAyAGIAAoAtgETgRAIAAQ8QEaCyAAIAAoAtwEIgZBAWo2AtwEIAYgAzoAACAAIAAoAuAEQQFqIgY2AuAEQQghAyAEQQhLDQALCyAEQQJ0QeCXI2ooAgAgCXEgAyAEayIDdCAFciEFIANFBEAgACgC4AQgACgC2AROBEAgABDxARoLIAAgACgC3AQiBEEBajYC3AQgBCAFOgAAIAAgACgC4ARBAWo2AuAEQQAhBUEIIQMLIAEgBy4BBGsFIAELQQZsaiICLwECIQECQCADIAIvAQAiBE8NACABIAQgA2siBHYgBXIhAiAAKALgBCAAKALYBE4EQCAAEPEBGgsgACAAKALcBCIDQQFqNgLcBCADIAI6AAAgACAAKALgBEEBaiIGNgLgBEEIIQNBACEFIARBCUkNAANAIAEgBEF4aiIEdiECIAYgACgC2AROBEAgABDxARoLIAAgACgC3AQiA0EBajYC3AQgAyACOgAAIAAgACgC4ARBAWoiBjYC4ARBCCEDIARBCEsNAAsLIARBAnRB4JcjaigCACABcSADIARrIgR0IAVyIQYgCCAEBH8gBAUgACgC4AQgACgC2AROBEAgABDxARoLIAAgACgC3AQiAUEBajYC3AQgASAGOgAAIAAgACgC4ARBAWo2AuAEQQAhBkEICzYCRCAIIAY2AkAPC0G9kgxB5YMBQYMFQZCaIxADAAv5AgECfyACIAFrIgNBAUgEQEEADwsgACABQQN1aiECAkACQAJAIAFBB3EiAEUEQEEAIQEMAQsgACADQQggAGsiASACLQAAIAB0Qf4BcUGQmCNqLQAAIgAgASAASRsiACAAIANKGyIBakEISA0BIAJBAWohAiADIAFrIQMLAkAgA0HAAEgNACACQQNxBEADQCADIQAgAi0AACIDDQQgAEF4aiEDIAFBCGohASACQQFqIgJBA3ENAAsgAEEoSA0BCyADIQADQCACKAIABEAgACEDDAILIAJBBGohAiABQSBqIQEgAEE/SiEEIABBYGoiAyEAIAQNAAsLAkAgA0EISARAIAMhAAwBCwNAIAItAAAiAARAIAEgAEGQmCNqLQAAag8LIAJBAWohAiABQQhqIQEgA0EPSiEEIANBeGoiACEDIAQNAAsLIABBAUgNACABIAAgAi0AAEGQmCNqLQAAIgEgACABSBtqIQELIAEPCyABIANBkJgjai0AAGoLGgAgAEENTQRAIABBAnRBiIgjaigCAA8LQQALlwEBA38jAEEgayICJAAgAkEANgIYIAJCADcDECACQgA3AwggAiACQQhqNgIEAkACQCAAKAKYBSIDRQ0AIAMoAgAgAUcNAAwBC0EAIQMgACgCkAUiBEUNACACQQA2AhAgAiABNgIIIAACf0EAIAJBBGogBCAAKAKUBRCEECIARQ0AGiAAKAIACyIDNgKYBQsgAkEgaiQAIAMLAwABC0UBAn8gACgCAEF/aiICIAFKBEADQCAAKAIIIgMgAUECdGogAyABQQFqIgFBAnRqKAIANgIAIAEgAkgNAAsLIAAgAjYCAAsJACAAIAEQ2iQLVgECfwJAIABFIAFFcg0AAn8gACgChAUiAgRAIAAgASACEQMADAELIAEQXAsiAkUEQCAALQDOAUEQcQ0BIABBwMIAEJUBQQAPCyACQQAgARBlIQMLIAMLOwEBfyMAQRBrIgIgADYCDCACIAE2AgggAiACKAIMIAIoAghBAWtqNgIMIAIoAgwgAigCDCACKAIIb2sLcwEBfyABEE4hAiAALgECIAEuAQJKBEAgAS4BAiACIAAuAQJraiECCyAALgEGIAEuAQZIBH8gAC4BBiACIAEuAQZragUgAgtBEHRBEHUiAiABEE5BAm1BEHRBEHVIBH8gAiAAEE5BAm1BEHRBEHVOBUEBCwv6AQEBfyMAQRBrIgEkACABIAA2AgggASABKAIIKALQAzYCBCABKAIIKALMAyIAIAAoAhggASgCBCgCDEEIbWo2AhggASgCBEEANgIMAkAgASgCCCABKAIIKALMAygCCBEBAEUEQCABQQA2AgwMAQsgAUEANgIAA0AgASgCACABKAIIKALQAk5FBEAgASgCBEEUaiABKAIAQQJ0akEANgIAIAEgASgCAEEBajYCAAwBCwsgASgCBEEANgIQIAEoAgQgASgCCCgCmAI2AiggASgCCCgCtANFBEAgASgCBEEANgIkCyABQQE2AgwLIAEoAgwhACABQRBqJAAgAAvZAQEBfyMAQTBrIgQgADYCLCAEIAE2AiggBCACNgIkIAQgAzYCICAEIAQoAiAgBCgCJGs2AgwgBCgCDEEASgRAIARBADYCEANAIAQoAhAgBCgCKE5FBEAgBCAEKAIsIAQoAhBBAnRqKAIAIAQoAiRqNgIcIAQgBCgCHEF/ai0AADoAGyAEIAQoAgw2AhQDQCAEKAIUQQBMRQRAIAQtABshACAEIAQoAhwiAUEBajYCHCABIAA6AAAgBCAEKAIUQX9qNgIUDAELCyAEIAQoAhBBAWo2AhAMAQsLCwvGAQIEfwF8IwBBEGsiAiQAIAIgAC4BAjsBCCACIAEuAQI7AQAgAkEIaiACEJkCLgEAIQMgAiAALgEGOwEIIAIgAS4BBjsBACACQQhqIAIQ+wEuAQAhBAJ8IAAuAQYgAC4BAmsiBUUEQCABLgECIAAuAQIiAEwEQEQAAAAAAADwPyAAIAEuAQZMDQIaC0QAAAAAAAAAAAwBCyACQgA3AwggAiAEIANrtyAFt6M5AwAgAkEIaiACEL0GKwMACyEGIAJBEGokACAGC6QDAQd/IwBBIGsiASQAIABBMGohBCAAQdAAaiEFIABBOGohBgJ/AkADQCAGEDwEQANAIAAgACgCFEEBaiICNgIUIAAoAhghAwJAIAIgACgCECIHSARAIAMhAgwBCyAAQQA2AhQgACADQQFqIgI2AhggA0EDSA0AIAAgB0EBajYCECAHIAAoAgxOBEAgABDdBAwGC0EAIQIgAEEANgIYCyABQQhqIAIQgQ8gAUEIaiAAKAIQIAAoAhRrQRB0QRB1EPQMIAFBEGogACgCGEEBahCBDyABQRhqIAFBEGogAC4BFBCVFyABQQhqIAFBGGoQ0wEgACABLgEIIAAoAgRqNgIkIAAgAS4BCiAAKAIIaiIDNgIoAkAgACgCJCICQQBIIANBAEhyDQAgAiAAKAIAIgIoAghODQAgAyACKAIMTg0AIAAQvQQLIAYQPA0ACwsgABC7BCAALQAsRQ0BIAEgBSAEEPMMNgIIIAEQ9QU2AhggAUEIaiABQRhqENkEDQALIAAtACxFDQAgAUEIaiAFIAQQ8QwLIAQoAgALIQAgAUEgaiQAIAALIAAgAEEDNgIYIABCADcCECAAIAM2AgwgACABIAIQ6QoLZAEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEHJ+QFBq7IiQQEQOgwBC0EBCzYCDAwBCyABIAEoAggoAgQ2AgwLIAEoAgwhACABQRBqJAAgAAt0AQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQCQCACKAIIRQRAIAICf0EFQeDzLCgCAE4EQEHlkgRBxaoiQQAQOgwBC0EACzYCDAwBCyACIAIoAghBAEEAIAIoAgQQwRA2AgwLIAIoAgwhACACQRBqJAAgAAvCBAEBfyMAQTBrIgIkACACIAA2AiggAiABNgIkAkAgAigCJEUEQCACAn9BBUHg8ywoAgBOBEBBsswNQcCjIkEBEDoMAQtBAQs2AiwMAQsgAigCJEEANgIAIAIoAihFBEAgAgJ/QQVB4PMsKAIATgRAQYDVDUHAoyJBARA6DAELQQELNgIsDAELIAJBADYCECACQQA2AhgDQCACKAIYQQhORQRAIAIoAhggAkEcampBADoAACACIAIoAhhBAWo2AhgMAQsLIAJBADYCGANAAkAgAigCGEEITg0AIAIgAigCKBDwASIANgIUIABBf0YEQCACAn9BBUHg8ywoAgBOBEBBouQNQcCjIkEBEDoMAQtBAQs2AiwMAwsCQAJAIAIoAhRBIEYNACACKAIUQQlGDQAgAigCFEEKRg0AIAIoAhRBDUcNAQsgAkEBNgIQIAIoAhggAkEcampBCjoAAAwBCyACKAIUENcEBEAgAigCGCACQRxqaiACKAIUOgAAIAIgAigCGEEBajYCGAwCBSACAn9BBUHg8ywoAgBOBEBB1eoNQcCjIkEBEDoMAQtBAQs2AiwMAwsACwsgAigCEEUEQCACAn9BBUHg8ywoAgBOBEBBwfINQcCjIkEBEDoMAQtBAQs2AiwMAQsgAiACKAIkNgIAIAJBHGpBuN0NIAIQ+wJBAUcEQCACAn9BBUHg8ywoAgBOBEBBv/gNQcCjIkEBEDoMAQtBAQs2AiwMAQsgAkEANgIsCyACKAIsIQAgAkEwaiQAIAALogEBAX8jAEEQayICJAAgAiAANgIIIAIgATYCBAJAIAIoAghFBEAgAgJ/QQVB4PMsKAIATgRAQZatAkHwoCJBARA6DAELQQELNgIMDAELIAIoAgRFBEAgAgJ/QQVB4PMsKAIATgRAQfyyBUHwoCJBARA6DAELQQELNgIMDAELIAIoAgQgAigCCCgCBDYCACACQQA2AgwLIAIoAgwaIAJBEGokAAucBAECfyMAQTBrIgIkACACIAA2AiggAiABNgIkIAJBATYCIAJAIAIoAihFBEAgAgJ/QQVB4PMsKAIATgRAQZatAkGyoCJBABA6DAELQQALNgIsDAELIAIoAiggAkEYahCmCQJAIAIoAiRBAE4EQCACKAIkIAIoAhhMDQELIAICf0EFQeDzLCgCAE4EQEG0kQRBsqAiQQAQOgwBC0EACzYCLAwBCyACIAIoAigoAgwgAigCJEECdGooAgA2AgwgAigCDARAIAIoAigiACAAKAIIQX9qNgIICyACKAIoKAIMIAIoAiRBAnRqQQA2AgAgAiACKAIkIAIoAhhGNgIUIAIoAhQEQCACIAIoAiRBAWs2AhwDQAJAIAIoAhxBAEgNACACKAIoKAIMIAIoAhxBAnRqKAIADQAgAiACKAIcQX9qNgIcDAELCyACKAIoIAIoAhw2AgQLAkAgAigCFA0AIAIoAiBBAkcNACACIAIoAiQ2AhAgAiACKAIkQQFqNgIcA0AgAigCHCACKAIYTARAIAIoAigoAgwgAigCHEECdGooAgAEQCACKAIoKAIMIAIoAhxBAnRqKAIAIQAgAigCKCgCDCEBIAIgAigCECIDQQFqNgIQIANBAnQgAWogADYCAAsgAiACKAIcQQFqNgIcDAELCyACKAIoIAIoAhBBAWs2AgQLIAIgAigCDDYCLAsgAigCLCEAIAJBMGokACAAC6IBAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQCQCACKAIIRQRAIAICf0EFQeDzLCgCAE4EQEGWrQJBgKEiQQEQOgwBC0EBCzYCDAwBCyACKAIERQRAIAICf0EFQeDzLCgCAE4EQEGq2QVBgKEiQQEQOgwBC0EBCzYCDAwBCyACKAIEIAIoAggoAgg2AgAgAkEANgIMCyACKAIMGiACQRBqJAALpwIBAX8jAEEgayIEJAAgBCAANgIYIAQgATYCFCAEIAI2AhAgBCADNgIMIAQoAhAEQCAEKAIQQwAAAAA4AgALIAQoAgwEQCAEKAIMQwAAAAA4AgALAkAgBCgCGEUEQCAEAn9BBUHg8ywoAgBOBEBBwIUDQc6fIkEBEDoMAQtBAQs2AhwMAQsCQCAEKAIUQQBOBEAgBCgCFCAEKAIYKAIASA0BCyAEAn9BBUHg8ywoAgBOBEBBrvwFQc6fIkEBEDoMAQtBAQs2AhwMAQsgBCgCEARAIAQoAhAgBCgCGCgCDCAEKAIUQQJ0aioCADgCAAsgBCgCDARAIAQoAgwgBCgCGCgCECAEKAIUQQJ0aioCADgCAAsgBEEANgIcCyAEKAIcGiAEQSBqJAAL1AUBAX8jAEHQAGsiAiQAIAIgADYCSCACIAE2AkQgAkEANgJAAkAgAigCREUEQCACAn9BBUHg8ywoAgBOBEBBnvILQdaSIkEBEDoMAQtBAQs2AkwMAQsgAigCREEANgIAAkAgAigCSARAIAIoAkgQakEBRg0BCyACAn9BBUHg8ywoAgBOBEBB0McLQdaSIkEBEDoMAQtBAQs2AkwMAQsCQCACKAJARQRAIAIQ5wo2AhgMAQsgAiACKAJANgIYCyACKAJIIAJBOGogAkE0akEAEH4aIAIgAigCSBBnNgIwIAIgAigCSBBjNgIUIAIgAigCOEEFdTYCJCACIAIoAjhBH3E2AiAgAgJ/QQAgAigCIEUNABpBf0EgIAIoAiBrdAs2AjwgAkEANgIcIAJBADYCLANAIAIoAiwgAigCNEgEQCACQQA2AigDQCACKAIoIAIoAiRIBEAgAiACKAIUIAIoAihBAnRqKAIANgIQIAIoAhAEQCACIAIoAhwgAigCGCACKAIQQRh2QQJ0aigCACACKAIYIAIoAhBBEHZB/wFxQQJ0aigCACACKAIYIAIoAhBB/wFxQQJ0aigCACACKAIYIAIoAhBBCHZB/wFxQQJ0aigCAGpqamo2AhwLIAIgAigCKEEBajYCKAwBCwsgAigCIARAIAIgAigCFCACKAIoQQJ0aigCACACKAI8cTYCDCACKAIMBEAgAiACKAIcIAIoAhggAigCDEEYdkECdGooAgAgAigCGCACKAIMQRB2Qf8BcUECdGooAgAgAigCGCACKAIMQf8BcUECdGooAgAgAigCGCACKAIMQQh2Qf8BcUECdGooAgBqampqNgIcCwsgAiACKAIsQQFqNgIsIAIgAigCFCACKAIwQQJ0ajYCFAwBCwsgAigCRCACKAIcNgIAIAIoAkBFBEAgAigCGBA9CyACQQA2AkwLIAIoAkwaIAJB0ABqJAALkAMBAX8jAEEQayIDJAAgAyAANgIIIAMgATYCBCADIAI2AgACQCADKAIERQRAIAMCf0EFQeDzLCgCAE4EQEHO2QpBjpIiIAMoAggQOgwBCyADKAIICzYCDAwBCyADKAIARQRAIAMCf0EFQeDzLCgCAE4EQEHC6gpBjpIiIAMoAggQOgwBCyADKAIICzYCDAwBCyADKAIIIAMoAgBGBEAgAwJ/QQVB4PMsKAIATgRAQaf6CkGOkiIgAygCCBA6DAELIAMoAggLNgIMDAELIAMoAgQQaiADKAIAEGpHBEAgAwJ/QQVB4PMsKAIATgRAQaiMC0GOkiIgAygCCBA6DAELIAMoAggLNgIMDAELIAMgAygCCCADKAIEELwBIgA2AgggAEUEQCADAn9BBUHg8ywoAgBOBEBB6skKQY6SIiADKAIIEDoMAQsgAygCCAs2AgwMAQsgAygCCEEAQQAgAygCCBCpASADKAIIEIYBQQ4gAygCAEEAQQAQrAEgAyADKAIINgIMCyADKAIMGiADQRBqJAALcgEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCCEUEQCACAn9BBUHg8ywoAgBOBEBBjPkGQbOEIkEBEDoMAQtBAQs2AgwMAQsgAigCCCACKAIENgIcIAJBADYCDAsgAigCDCEAIAJBEGokACAAC2QBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCEUEQCABAn9BBUHg8ywoAgBOBEBBjPkGQaiEIkEAEDoMAQtBAAs2AgwMAQsgASABKAIIKAIcNgIMCyABKAIMIQAgAUEQaiQAIAALcgEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCCEUEQCACAn9BBUHg8ywoAgBOBEBBjPkGQZ2EIkEBEDoMAQtBAQs2AgwMAQsgAigCCCACKAIENgIYIAJBADYCDAsgAigCDCEAIAJBEGokACAAC7oBAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQCQCACKAIERQRAIAICf0EFQeDzLCgCAE4EQEGGsgFBiYYiQQEQOgwBC0EBCzYCDAwBCyACKAIIRQRAIAICf0EFQeDzLCgCAE4EQEHmiQVBiYYiQQEQOgwBC0EBCzYCDAwBCyACKAIEIAIoAghGBEAgAkEANgIMDAELIAIoAgggAigCBBDvChDuChogAkEANgIMCyACKAIMGiACQRBqJAAL9AEBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADKAIYIAMoAhQgAygCEBDxFyIANgIIAkAgAEUEQCADAn9BBUHg8ywoAgBOBEBBzjlBkIEiQQAQOgwBC0EACzYCHAwBCyADIAMoAggQZzYCDCADIAMoAhSsIAMoAgysQgKGfqcQ8BciADYCBCAARQRAIANBCGoQSyADAn9BBUHg8ywoAgBOBEBB9fYAQZCBIkEAEDoMAQtBAAs2AhwMAQsgAygCCCADKAIEEO8XIAMoAggQ5RcgAyADKAIINgIcCyADKAIcIQAgA0EgaiQAIAALywEBAX8jAEEQayIBJAAgASAANgIMAkAgASgCDEUEQEEEQeDzLCgCAEgNAUH4xCooAgAhACABQaD9ITYCACAAQeysCyABEFYaDAELIAEgASgCDCgCACIANgIIIABFDQAgASgCCCgCBARAIAEoAggoAgQQPQsgASgCCCgCDARAIAEoAggoAgwQPQsgASgCCCgCFARAIAEoAggoAhQQPQsgASgCCCgCGARAIAEoAggoAhgQPQsgASgCCBA9IAEoAgxBADYCAAsgAUEQaiQAC6sBAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQCQCACKAIIRQRAIAICf0EFQeDzLCgCAE4EQEH6tQRBgfQhQQAQOgwBC0EACzYCDAwBCyACKAIERQRAIAICf0EFQeDzLCgCAE4EQEHQ3gRBgfQhQQAQOgwBC0EACzYCDAwBCyACKAIEIAIoAggoAgQ2AgAgAiACKAIIKAIMNgIMCyACKAIMIQAgAkEQaiQAIAALrAEBAX8jAEEQayIBJAAgASAANgIMAkAgASgCDEUEQEEEQeDzLCgCAEgNAUH4xCooAgAhACABQePzITYCACAAQcuLBCABEFYaDAELIAEgASgCDCgCACIANgIIIABFDQAgASgCCCIAIAAoAghBf2o2AgggASgCCCgCCEEATARAIAEoAggoAgwEQCABKAIIKAIMED0LIAEoAggQPQsgASgCDEEANgIACyABQRBqJAAL+AMBAX8jAEEwayIEJAAgBCAANgIoIAQgATYCJCAEIAI2AiAgBCADNgIcAkAgBCgCJEUEQCAEAn9BBUHg8ywoAgBOBEBBq+0BQfTsISAEKAIoEDoMAQsgBCgCKAs2AiwMAQsgBCgCJBBqQQFHBEAgBAJ/QQVB4PMsKAIATgRAQcjRAkH07CEgBCgCKBA6DAELIAQoAigLNgIsDAELAkAgBCgCIEEBTgRAIAQoAhxBAU4NAQsgBAJ/QQVB4PMsKAIATgRAQazgA0H07CEgBCgCKBA6DAELIAQoAigLNgIsDAELAkAgBCgCIEEBRw0AIAQoAhxBAUcNACAEIAQoAiggBCgCJBC8ATYCLAwBCwJAAkAgBCgCIEEBRwRAIAQoAhxBAUcNAQsgBCAEKAIcIAQoAiAgBCgCHEECbSAEKAIgQQJtEJUENgIUIAQgBCgCKCAEKAIkIAQoAhQQvwU2AiggBEEUahCWBAwBCyAEQQEgBCgCIEEAIAQoAiBBAm0QlQQ2AhAgBCAEKAIcQQEgBCgCHEECbUEAEJUENgIMIARBACAEKAIkIAQoAhAQvwU2AhggBCAEKAIoIAQoAhggBCgCDBC/BTYCKCAEQRhqEEsgBEEQahCWBCAEQQxqEJYECyAEIAQoAig2AiwLIAQoAiwhACAEQTBqJAAgAAuBAQEBfyMAQRBrIgEkACABIAA2AgwCQCABKAIMRQRAQQRB4PMsKAIASA0BQfjEKigCACEAIAFB4OchNgIAIABB6bEEIAEQVhoMAQsgASABKAIMKAIAIgA2AgggAEUNACABKAIIKAIAED0gASgCCBA9IAEoAgxBADYCAAsgAUEQaiQAC4ADAQF/IwBBIGsiAiQAIAIgADYCGCACIAE2AhQCQCACKAIYRQRAIAICf0EFQeDzLCgCAE4EQEGvrgRBvd8hQQAQOgwBC0EACzYCHAwBCyACKAIUQQJGBEAgAigCGCIAIAAoAghBAWo2AgggAiACKAIYNgIcDAELAkAgAigCFEEBRg0AIAIoAhRBA0YNACACAn9BBUHg8ywoAgBOBEBB/NcEQb3fIUEAEDoMAQtBAAs2AhwMAQsgAiACKAIYKAIEEIsFIgA2AgggAEUEQCACAn9BBUHg8ywoAgBOBEBB9YEFQb3fIUEAEDoMAQtBAAs2AhwMAQsgAkEANgIQA0AgAigCECACKAIYKAIATkUEQAJAIAIoAhRBAUYEQCACIAIoAhggAigCEEEBEMMENgIMDAELIAIgAigCGCACKAIQQQIQwwQ2AgwLIAIoAgggAigCDEEAEIoFIAIgAigCEEEBajYCEAwBCwsgAiACKAIINgIcCyACKAIcIQAgAkEgaiQAIAALDAAgACABQQRqEL0KCw0AIAAoAhwgACgCGGwLdQEEfyMAQdAAayICJAACQCAAKAIEIgFFDQAgACgCICIDRQ0AIAJBCGogAyABIAAoAhQoAhggACgCFBC4CSAAKAJAIAAoAkQgACgCSCAAKAJMEOUPIgAhAUHIABA/IAEQkh8hBCAAELIEGgsgAkHQAGokACAEC30BAX8gACgCBCIBBEAgARDpEwsgACgCICIBBEAgARD9ChA9CyAAQQA6ADggAEEANgIgAkAgACgCHCIBRQRAQQQQPyIBEEkaIAAgATYCHAwBCyABEL4PCyAAKAIYIgEEQCABEOwLIAAoAhgiAQRAIAEQXRA9CyAAQQA2AhgLC5UDAQJ/IwBB4ABrIggkAAJ/IAhB2ABqIAEgAhCBAiAHKAK0ARDaBQRAQQAgBygCtAEgASACIAAoAlwoAjAQngoNARoLIAAoAmBBBE4EQCAIIAI2AhQgCCABNgIQIAggA0ECdEHA7CxqKAIANgIYQYjrACAIQRBqEDsLIAhBOGoQhhEhCSABIAJBAEEAIAAtAFggBiAHIAAoAmBBAEcgCRCPEQJAIAVFDQAgCS0AFEUNAANAIAJBAWoiBSAHKAK0ASgCDE4NASAJLQAVDQEgASAFQQBBACAALQBYIAYgByAAKAJgQQBHIAkQjxEgBSECIAktABQNAAsLIAktAAQEQEEAIAAoAmBBBEgNARpBgaYBQQAQO0EADAELIAAgA0EUbGoiBSgCACAAKAJQSARAIAUgCEEoaiAEIAkoAhiyIANBAkYbIgQgCEEgaiABIAIQgQIQsS4QsC4gACgCYARAIAggBLs5AwBBnOUBIAgQOwtBAQwBC0EAIAAoAmBFDQAaQfaeAkEAEDtBAAshACAIQeAAaiQAIAALGAEBfyAAKAIkIgEgACgCICIAIAAgAUobC4oBAgJ/AXwgAEHcAGogAS4BBCABLgEAardEAAAAAAAA4D+itrsQkQIhBCABEE4hA0EBIQICQCAAKgIsu0QfhetRuB7lP6IgA7dmDQAgACoCLLtEAAAAAAAA4D+iIAS2uyIEoCABLgEGt2QNACAAKgIsu0QAAAAAAADgP6IgBKAgAS4BArdjIQILIAILpAkDD38DfQR8IwBB0AFrIgwkACAMQbABaiAAEKEBEEAhECAMQZgBahBJIRUgDEGAAWoQSRogDEH4AGoQaSEZIAxB8ABqEGkhFiAMQegAahBJIQ4gDEHQAGoQSSENIAxBOGogCBBAIRECQEHEqS0oAgBBAnEEQCAAIAEgAiADIAUgDEHOAWogByAIIAkgCiALEN0vIQUgBiAMLgHOAbI4AgAMAQsgB0EAOwEAIBAQWQRAIARDAAAgQZQhBQwBCyAMIAwpAL8BNwCnASAMIAwpA7gBNwOgASAMIAwpA7ABNwOYASAMQTBqIBAQwQIgDCAMKQMwNwN4IBAQQSAFQwAAQECUIRsCfyAFi0MAAABPXQRAIAWoDAELQYCAgIB4CyEXIAVDAAAAP5QhHCAbQwAAAD+UIRsgBbshH0F/IQcDQCAPQRB0QRB1QQFOBEADQCAMQTBqIBUQwQIgD0EQdCEIIA9Bf2ohDyAIQRB1QQFKDQALQQAhDwsDQAJAIAwgDCkDeDcDcCAMQTBqIBAQwQIgDCAMKQMwNwN4IA9BAWohDyAQEDwNACAZLgEAIBYuAQRrsiAEXQ0BCwsgDCAMKQCnATcAjwEgDCAMKQOgATcDiAEgDCAMKQOYATcDgAECfEHEqS0oAgBBA3EEQCAVIA9BEHRBEHUgFyABIAIgA0GwrS0rAwAgACoCLLuitiAMQc4BaiAOIAogCxDdDQwBCyAVIA9BEHRBEHUgFyABIA4QozELISAgCQRAIBYuAQQhCCAWLgEGIRIgDhCaAiEaIAwgIDkDICAMIBI2AhQgDCAINgIQIAwgGkF/ajYCGEGwkw4gDEEQahA7IA0gDhB8IA0QQSANEDxFBEADQCANKAIILQAEBEBBopgOQQAQOwsgDCANKAIIKAIMNgIAQbKdDiAMEDsgDRBEGiANEDxFDQALC0H0yQxBABA7CyANIA4QfCAHQQBOBEAgHiANKAIIKAIMIAdrtyIeIB4gH6NEAAAAAAAA4D+gnCAfoqEiHiAeoqAhHiAUQQFqIRQLIA0QQSANEDxFBEADQCANKAIIKAIMIQcCQAJAIBEQWUUEQCAcIBNBEHRBEHUiCLIiBZIgB0EQdEEQdSISsiIdXUEBcw0BCwJ/IBEQWUUEQCAHQRB0QRB1siEFA0BBCBA/IgggGyATQRB0QRB1spIgBV1BAXMNAhogCCATIBdqIhNBEHRBEHVBABCOAyARIAgQjwEgERBZRQ0ACwtBCBA/CyIIIAdBEHRBEHVBABCOAyARIAgQjwEgByETDAELIAUgHJMgHV1BAXMNACARKAIIIgdBBGogCCASakECbUEQdEEQdRDqASAHLgEEIRMLIA0QRBogDRA8RQ0ACwsgDRCaA0EBIQggDSgCCCgCDCEHQaK0LS0AAARAIA4QmgJBfmpBAm0iCEEBIAhBAUobIQgLIA4QmgIhEiAOEKYHICEgICAIt6KgISEgEkF/aiAIbCAYaiEYIBAQPEUNAAsgBkMAAAAAIB4gFLejn7YgFEEBSBs4AgAgISAYt6OfIARDAAAgQZS7IBhBAU4btiEFCyAOEKYHIAxB0AFqJAAgBQuEAQEBfyMAQRBrIgIkACACIAEuAQA2AgwgAkEANgIIIAIgACgCDBCpAUF/ajYCBCABIAJBDGogAkEIaiACQQRqELEBOwEAIAIgAS4BAjYCDCACQQA2AgggAiAAKAIMEIYBQX9qNgIEIAEgAkEMaiACQQhqIAJBBGoQsQE7AQIgAkEQaiQAC1QBAX8jAEEQayICJAAgAiAAKAIIIAFrIAAoAgBtNgIMIAJBADYCCCACIAAoAgwQhgFBf2o2AgQgAkEMaiACQQhqIAJBBGoQsQEhACACQRBqJAAgAAtUAQF/IwBBEGsiAiQAIAIgASAAKAIEayAAKAIAbTYCDCACQQA2AgggAiAAKAIMEKkBQX9qNgIEIAJBDGogAkEIaiACQQRqELEBIQAgAkEQaiQAIAALLAAgACABIAJBABCMCyICRQRAIAAuARgPCyACIAEuAQYgAS4BAmpBAm0Q0gILLAAgACABIAJBABCNCyICRQRAIAAuARQPCyACIAEuAQYgAS4BAmpBAm0Q0gILVwEBfyAAIAEQkAsgAEEAEM8BIgIEQCACIAEQkAsLIABBARDPASICBEAgAiABEJALCyAAQQIQzwEiAgRAIAIgARCQCwsgAEEDEM8BIgAEQCAAIAEQkAsLC58BAwZ/An0BfCMAQTBrIgEkACAAEEIiAi4BACEDIAIuAQIhBCACLgEEIQUgAi4BBiECIAAqAmAhByAAKgJkIQggACgCBBDMCCEGIAAoAgQQywghACABIAi7OQMYIAEgB7s5AxAgASAGtyIJIAmgIAC3ozkDICABIAI2AgwgASAFNgIIIAEgBDYCBCABIAM2AgBBvPoMIAEQOyABQTBqJAAL8AEBAn8CQCACKAIAIgQoAgAiAwRAIAQgAygCDDYCAAwBC0EQED8Q9wshAwsgAyACLgEEEOoBIANBADoABCADIAIvAQggAEEBSGpBEHRBEHUQ7wEgA0EDQQEgAEEASiIAGzoABiADQQFBfyAAGzoABSABRQRAIAMgAzYCDCADIAM2AgggAw8LAkAgAy4BACABLgEARw0AIAEuAQIgAy4BAiADLAAFakcNACADIAEoAggiADYCCCAAIAM2AgwgAyABNgIMIAEgAzYCCCADDwsgAyABKAIMIgA2AgwgACADNgIIIAMgATYCCCABIAM2AgwgAwuIBwIMfwJ9IwBBkAJrIgUkACAFQQA6AIsCIAUgAhChARCaAiIGNgLsASAFQfAAaiIIEMAFIAYEQCAIIAYQwDEgCCAGEOQZCyAFQeAAaiAGEJQLIQkgBUHQAGogBhCUCyEKIAVBQGsiBxDABSAGBEAgByAGEL8xIAcgBhC+MQsgBUEwaiAGEM4SIQ0gAgJ/IAEqAiQiEYtDAAAAT10EQCARqAwBC0GAgICAeAsgB0EAEPUCIAVBiwJqIAVB7AFqEMsxIQtBoKktKwMAIAu3orZDAAAAQJchEUGypy0tAAAEQCABKgIkIRIgBSARuzkDECAFIAs2AgggBSASuzkDAEG63gsgBRA7CyAFLQCLAiEOIAdBABD1AiEMIAUoAuwBIQYCQCAOBEAgDCAGIAQgAkHcAGogAioCiAEQyjEMAQsgDCAGIAlBABBhIApBABBhIAQgAkHcAGogERDJMQsCQCAGQQJOBEAgB0EAEPUCIAYgBUGMAmogCEEAEKECIAVB8AFqIAJB3ABqIgwgESANQQAQYRDIMSEPIAdBABD1AiAGIAhBABChAiAPIAlBABBhIApBABBhEMcxIRAgB0EAEPUCGiAFIAlBABBhIApBABBhIAMgECAFQYABahDGMSIENgJ8AkAgDg0AIBFDAAAAP5QhEgNAIAwgBUEgaiAFQYABaiAEIAlBABBhIApBABBhIBAgAxCiEyIEEJgGIAQQ6QZB4qctLQAARQ0BIAwgEiAJQQAQYSAFQYABaiAFQfwAahDFMUUNASAFKAJ8IQQMAAALAAsgAiAHQQAQ9QIgBiAIQQAQoQIgBUHwAWogBSgCjAIgDxDEMQwBCyACQYCAgPx7NgIsIAJCADcCNAsgAkHcAGoiAyACKgKIAbsgASgCGEEEahBiLgEAIAEoAhhBBGoQYi4BBBD8OQJAQaKnLS0AAARAIAIgB0EAEPUCIAsgBiADIBEQwzEMAQtBmp0tLQAABEAgB0EAEPUCIQAgASoCJCIRi0MAAABPXQRAIAIgACALIBGoIAYgAxDlGQwCCyACIAAgC0GAgICAeCAGIAMQ5RkMAQsgBUEgaiABKAIYENMGIAAgAiAFQSBqIAIqAogBAn8gASoCJCIRi0MAAABPXQRAIBGoDAELQYCAgIB4CxC9EQsgDRCmBCAHEOgLIAcQuDEgChCmBCAJEKYEIAgQqBIgBUGQAmokAAuvAQIHfwF+IwBBQGoiASQAIAFBKGogAEEEahBxIgIQpwchAyAAKQIIIQggACgCECEEIABBFGoiAC4BACEFIAAuAQIhBiAALgEEIQcgASAALgEGNgIcIAEgBzYCGCABIAY2AhQgASAFNgIQIAEgBDYCDCABIAg3AgQgASADNgIAQYnQBiABEDsgAhBBIAIQPEUEQANAIAIoAggQxAEgAhBkIAIQPEUNAAsLIAFBQGskAAsQACAALgECIAAuAQZqQQJtCz8BAXwCfyABt0Qcx3Ecx3GMP6JEAAAAAAAA4D+gIgKZRAAAAAAAAOBBYwRAIAKqDAELQYCAgIB4CyAAKAJwagsPACAAQRRqELgeIAAQogMLCgAgAEHQAGoQTQtRAgF/AX0jAEEQayICJAAgAUEGTgRAIAJBrQQ2AgQgAkHz3AE2AgBBzJ8sQZv6BEECQc6gASACEEULIAAgAUECdGoqApwBIQMgAkEQaiQAIAMLgAICBX8BfiMAQTBrIgMkACADQRhqIABB0ABqEEAiBxBBQf////8HIQVBgYCAgHghBAJ/IAcQPEUEQANAIAcQZiIGEKUKRQRAQQAgAkUNAxpB2v8DQQAQOyAGEEIQgAFBAAwDCyAGLgE+IAVIBEAgBi4BPiEFCyAGLgFAIARKBEAgBi4BQCEECyAHEGwaIAcQPEUNAAsLAkAgBSABKAIYSgRAIAQgASgCHCIBSCACRQ0CGiAEIAFODQFB+qYEQQAQO0EBDAILQQAgAkUNARoLIAApAhghCCADIAU2AgQgAyAINwMIIAMgBDYCAEHV0AQgAxA7QQALIQAgA0EwaiQAIAALQQEBfyAAIAEQmgggACABNgIAIAFBAU4EQCAAKAIIIQNBACEAA0AgACADaiACLQAAOgAAIABBAWoiACABRw0ACwsLWgEDfyMAQSBrIgEkACABQQhqIABB0ABqEEAiABBZRQRAA0AgABDrASICKAIEIgMEQCADENQCED0LIAIEQCACEPIEED0LIAAQbBogABBZRQ0ACwsgAUEgaiQAC28BAX8jAEEQayICJABBvAEQPyABIAJBCGpBAEEBEIsBENUGIgFBABDvAyABQQEQkwQgAUH4ABA/IAAQ2wsQxAUQtAMgASAALgEAEMoFIAEgAC4BBBDeASABEJIFIAEQ+QMgARDtDSACQRBqJAAgAQsPACAAKAIwIAEoAjAQtjMLdgECfyMAQRBrIgIkAAJAIAAoAhhB/////wdGDQAgASgCGEH/////B0YNACAAIAEQnQghAyACIAAoAhwgACgCGGs2AgwgAiABKAIcIAEoAhhrNgIIIANBA2wgAkEMaiACQQhqEJ8BKAIASiEDCyACQRBqJAAgAwseAQF/QQEhASAAKAIwEO4NBH9BAQUgACgCSEEORgsLEgAgACgCkAEgARDEBEEBEIwGC5YBAwF/AX0CfAJAIAC7IgZEAAAAmpmZ8T+iIgUgARBVt2UNACAFIAIQVbdlDQAgBSABEE63ZQ0AIAUgAhBOt2UNAEEBIQMgASACENwaIgQgAJOLIABDzczMPZRdDQBBipctLQAARSAEIABeQQFzciAGIAagIAS7ZEEBc3JFBEAgBCABIAIQjwKykyAAXQ0BC0EAIQMLIAMLEQAgACgCBCAAKAIAa0GgAW0LEwAgAC8BBCAAEMcda0EQdEEQdQuCAwEFfyMAQdAAayIEJAAgABDpAS4BAiEFIAAQlwEuAQAhBiAEQThqIAEQQCEBIARBGGogBEEwahBJIgcQQCEIIAEQQSABEDxFBEAgBSAGayEGA0AgBCABKAIIIgUQQikBADcDEAJAAkAgACgCJCAEQRBqIAAoAiAQjTQNACACQQBOBEAgACAFIAIQgTQNAQsgBRDdCAwBCwJAIAAoAiQgBEEQahDbCQRAIAQgBSgCBBC9OTYCCCADIAQuARAgBiAELgEWayAEQRBqEFUgBEEQahBOQQ4gBCgCCEEAQQAQrAEgBEEIahBLDAELIARBEGoQ1QEgACgCBCAAKAIEbEgEQCAEQQhqIARBEGogACgCJCAAKAIEEIA0IAQgBCkDCDcDEAsgAyAELgEQIAYgBC4BFmsgBEEQahBVIARBEGoQTkEPQQBBAEEAEKwBCyAFKAIEIgUEQCAFENQCED0LIAggARCIARClAQsgARBEGiABEDxFDQALCyAHEOUDIARB0ABqJAALiAIBBX8jAEEgayIEJAAgBCADEEIpAQA3AxggACAELgEYIAQuARogBEEUaiAEQRBqENUCIAAgBC4BHCAELgEeIARBDGogBEEIahDVAiABRQRAIAQgBCgCFDYCDAsgBCgCECEFAkACQCACRQRAIAQgBTYCCCAFIQIMAQsgBSAEKAIIIgJKDQELIAAoAggiByAFbCEGIAQoAgwhCANAIAQoAhQiASAITARAA0AgACgCHCABIAZqQQJ0akHxACADEMoDIAEgBCgCDCIISCECIAFBAWohASACDQALIAAoAgghByAEKAIIIQILIAYgB2ohBiAFIAJIIQEgBUEBaiEFIAENAAsLIARBIGokAAu7AQEFfyMAQRBrIgIkACAAIAEuAQAgAS4BAiACQQxqIAJBCGoQ1QIgACABLgEEIAEuAQYgAkEEaiACENUCAkAgAigCCCIDIAIoAgAiBEoNACACKAIEIQUDQCACKAIMIgEgBUwEQAJAA0AgACABIAMQ9AIEQCABIAIoAgQiBU4hBCABQQFqIQEgBEUNAQwCCwtBASEGDAMLIAIoAgAhBAsgAyAESCEBIANBAWohAyABDQALCyACQRBqJAAgBgsbACAAQezmLDYCACAAQRRqEG8aIABBGGoQbxoLZAIBfwJ9IABBQGsiAioCACEDIAIqAgQhBCAAQcgAaiIAKgIAIAOTIgNDAAAAAFsEQCAEIAAqAgSSu0QAAAAAAADgP6IPCyABIAIqAgC7oSAAKgIEIAIqAgSTu6IgA7ujIAS7oAsJACAAIAE2AiALiQIBBn8jAEEgayIEJAAgBEEQakEAQRAQmAEhBQJAIAAtAFgEQCAAQSBqIgIoAgxBAUgNASAAQdwAaiEGQQAhAANAQQAhAyACKAIQQQBKBEADQCACIAAQhAIgA2osAAAhByAGIAAQUSsDACAHt6IgBRD6GiADQQFqIgMgAigCEEgNAAsLIABBAWoiACACKAIMSA0ACwwBCyAAKAIQQQBMDQADQEEAIQMgACgCFEEASgRAA0AgACACEPYCIANBA3RqKwMAIAUQ+hogA0EBaiIDIAAoAhRIDQALCyACQQFqIgIgACgCEEgNAAsLIAQgATYCAEGsIiAEEDsgBRCOCiAFEIUBGiAEQSBqJAAL1AECB38BfCAAQZABaiIEKAIQIQUgBCgCFCEGAkAgBUEBSA0AIAFBkAFqIQdBACEBIAZBAU4EQANAQQAhACAEIAEQ9gIhCCAHIAEQ9gIhCQNAAkAgCCAAQQN0IgpqKwMAIAkgCmorAwCiIgtEAAAAAAAAAABjRQRAIAIgCyACKwMAoDkDAAwBCyADIAMrAwAgC6E5AwALIABBAWoiACAGRw0ACyABQQFqIgEgBUcNAAwCAAsACwNAIAQgARD2AhogByABEPYCGiABQQFqIgEgBUcNAAsLC+gCAQN/IwBBIGsiBSQAIAUgAjkDECAFIAE5AxggBSADOQMIAkAgAC0AWSIGRSAEQX9qQb6aDEtyBH8gBgUgBUQAAAAAAADwPyADIAQQ+xqhnyABokQAAAAAAADwPyACIAQQ+xqhozkDGCAALQBZC0UgBEEBSHIgAkQAAAAAAAAAAGRBAXNyRQRAIABBsAFqIgcgAEHwAGoiBCAFQQhqEL40IAUgBSsDGEQAAAAAAADwPyAFKwMQoaI5AwAgBCAFEPwNIABBkAFqIgYgBUEQahD8DSAGIAQQqxIgBSAFKwMYRDqMMOKOeUU+ojkDACAAIAYgByAFEL00DAELIABB8ABqIgYgBUEYahD8DSAAQZABaiIEIAYQqxIgBSsDECICRAAAAAAAAAAAZEEBcwR8IAIFIAAgBBCrEiAFKwMQC0QAAAAAAAAAAGZBAXMNACAEIAVBEGoQ/A0LIABBOGogABCBGyAFQSBqJAAL9AICCH8BfCAAQfAAaiIFKAIQIQYgBSgCFCEAIAEoAhQhAwJAIAZBAUgNACAAQX9qIQcgAEECTgRAA0BBACEAIAUgBBD2AiEIIAEgBBD2AiEJA0BBqLktKAIAIQogCCAAQQN0aiAJIAIgABD2AiADIAoRJgA5AwAgAEEBaiIAIAdHDQALQQAhAEQAAAAAAAAAACELIANBAEoEQANAIAsgCSAAQQN0aisDAKAhCyAAQQFqIgAgA0cNAAsLIAggB0EDdGogCzkDACAEQQFqIgQgBkcNAAsMAQtBACECIANBAU4EQANARAAAAAAAAAAAIQtBACEAIAUgAhD2AiEEIAEgAhD2AiEIA0AgCyAIIABBA3RqKwMAoCELIABBAWoiACADRw0ACyAEIAdBA3RqIAs5AwAgAkEBaiICIAZHDQAMAgALAAsgB0EDdCEAA0AgBSACEPYCIQMgASACEPYCGiAAIANqQgA3AwAgAkEBaiICIAZHDQALCwsSACAAQThqQQBBASABIAIQ/BoLVwECf0HIuS0oAgAiAwRAIAMoAgAhAyAAQSBqIgQoAgwgBCgCECAAQdABakEAEKECIABB3ABqQQAQUSABIAIgAxELAA8LIABBIGogAEHcAGogASACEKotCw8AIABBAUEAIAEgAhD8GgvfAQEDfyMAQRBrIgQkAAJAIAIgBEEPakEBEO0ERQ0AIAAgBCwADyIDQQFxIgU6AFggACADQQJ2QQFxOgBZIANBAE4EQCAAIAEgAhDENCEDDAELAkAgBQRAQQAhAyAAQSBqIgEgAhD+GkUNAiAAQdwAaiACEOw1RQ0CQci5LSgCACICRQ0BIAIgASAAQdABahCxGAwBC0EAIQMgACACEPURRQ0BIAFFDQAgABCNBiAAQZABaiACEPURRQ0BIAAtAFlFDQAgAEGwAWogAhD1EUUNAQtBASEDCyAEQRBqJAAgAwudAQECfyMAQRBrIgMkACADIAAtAFggAC0AWUECdHJBgAFyOgAPAkAgAiADQQ9qQQEQwAdFDQACQCAALQBYBEAgAEEgaiACEMc0RQ0CIABB3ABqIAIQoh4NAQwCCyAAIAIQ9hFFDQEgAUUNACAAQZABaiACEPYRRQ0BIAAtAFlFDQAgAEGwAWogAhD2EUUNAQtBASEECyADQRBqJAAgBAuFAwIIfwJ8IwBBEGsiBCQAIABBIGoiAyAAKAIQIAAoAhRBABDsCSADKAIMIQIgBEIANwMIIABB3ABqIgYgAiAEQQhqEMk2IAMoAhAhBQJAIAMoAgxBAUgNACAFQQFOBEADQEEAIQIgACABEPYCIQcgAyABEIQCIQhEAAAAAAAAAAAhCQNAIAcgAkEDdGorAwCZIgogCSAKIAlkGyEJIAJBAWoiAiAFRw0ACyAGIAEQUSAJRAAAAAAAwF9AoyIJOQMARAAAAAAAAPA/IAkgCUQAAAAAAAAAAGEbIQlBACECA0AgAiAIaiAHIAJBA3RqKwMAIAmjEJYCOgAAIAJBAWoiAiAFRw0ACyABQQFqIgEgAygCDEgNAAwCAAsACwNAIAAgARD2AhogAyABEIQCGiAGIAEQUUIANwMAIAFBAWoiASADKAIMSA0ACwsgBEIANwMIIABBAUEBIARBCGoQtQggAEEBOgBYQci5LSgCACIBBEAgASADIABB0AFqELEYCyAEQRBqJAALmAECA38CfCMAQRBrIgYkACAAQQA6AFggBkIANwMIIAAgASACIAZBCGoQtQggBUUgAUEBSHIgAkEBSHJFBEAgBLshCQNAQQAhCANAIAUgCRCdEiEKIAAgBxD2AiAIQQN0aiAKOQMAIAhBAWoiCCACRw0ACyAHQQFqIgcgAUcNAAsLIAAgAzoAWSAAEI0GIAZBEGokACABIAJsCw0AIABBAWpBAm1Bf2oLVQAgAEEANgIcIAAgBDYCGCAAIAM2AhQgAEEANgIQIABBAToADCAAQQE2AgggACABNgIEIABBqOAsNgIAIABBIGogAhCuARogAEEANgIsIABCADcCJAtwAQN/IAEgAmwiBCADaiIFIAAoAhRKBEAgACgCBCIGBEAgBhA9CyAFED8hBiAAIAU2AhQgACAGNgIECyAAIAI2AhAgACABNgIMIANBAU4EQANAIAAoAgQgBGogAC0ACDoAACAEQQFqIgQgBUgNAAsLCzoAIAAgASkCADcCACAAIAEpAhA3AhAgACABKQIINwIIIABBGGogAUEYahDWGyAAQSRqIAFBJGoQ1hsLEgAgAEEkahCmBCAAQRhqEKYEC0sAIABB0AFqEKgSIABBsAFqELoHGiAAQZABahC6BxogAEHwAGoQugcaIABB3ABqELYHGiAAQThqEKwLGiAAQSBqEL0LGiAAELoHGgvoAwEFfyACKAIAIQMCQAJAIAFBAUcEQCADLQCLAg0CIAFBAkcNASADQQA2AqQCIAMqAqACQwAAAABcDQEgAigCACACKAIEKgIUOAKgAgwBCyADIABBFGogACAAELsHIABBmKQIaigCDCAAQagMai0ACiAAQajECGotAAogAEG4xAhqLQAKIAIoAgQgAigCCBCZChoLQQAhAyACQRBqIgYQpxIgAEH82ghqIgQoAgBBAEgNACABQQFGBEADQCAAIQEgAyAEKAIASARAIAQgAxA+KAIAIQELQbQCED8Q2BsiBSACKAIAEIkeIAYgBRBfGiAFIAFBFGogASAAELsHIAFBmKQIaigCDCABQagMai0ACiABQajECGotAAogAUG4xAhqLQAKIAIoAgQgAigCCBCZChogAyAEKAIASCEBIANBAWohAyABDQAMAgALAAsDQCAAIQEgAyAEKAIASARAIAQgAxA+KAIAIQELQbQCED8Q2BsiBSACKAIAEIkeIAYgBRBfGiABQZikCGoiBygCDEEBRwRA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ASgCHCgCPCABKAIEazYCACABKAIAQYICSwRAIAFBggI2AgALIAEoAhwoAjggASgCBGpBACABKAIAEGUaIAEoAhwgASgCBCABKAIAajYCwC0MAQsgASgCHCgCwC0gASgCBEGCAmpJBEAgASABKAIEQYICaiABKAIcKALALWs2AgAgASgCACABKAIcKAI8IAEoAhwoAsAta0sEQCABIAEoAhwoAjwgASgCHCgCwC1rNgIACyABKAIcKAI4IAEoAhwoAsAtakEAIAEoAgAQZRogASgCHCIAIAEoAgAgACgCwC1qNgLALQsLCyABQSBqJAALgAEBA38jAEEQayICIAA2AgwgAiABNgIIIAIoAghBCHYhASACKAIMKAIIIQMgAigCDCIEKAIUIQAgBCAAQQFqNgIUIAAgA2ogAToAACACKAIIQf8BcSEBIAIoAgwoAgghAyACKAIMIgIoAhQhACACIABBAWo2AhQgACADaiABOgAAC7YCAQF/IwBBEGsiASQAIAEgADYCCAJAAkACQCABKAIIRQ0AIAEoAggoAhxFDQAgASgCCCgCIEUNACABKAIIKAIkDQELIAFBfjYCDAwBCyABKAIIQQA2AhQgASgCCEEANgIIIAEoAghBADYCGCABKAIIQQI2AiwgASABKAIIKAIcNgIEIAEoAgRBADYCFCABKAIEIAEoAgQoAgg2AhAgASgCBCgCGEEASARAIAEoAgRBACABKAIEKAIYazYCGAsgASgCBEEqQfEAIAEoAgQoAhgbNgIEAn8gASgCBCgCGEECRgRAQQBBAEEAEOICDAELQQBBAEEAEPMHCyEAIAEoAgggADYCMCABKAIEQQA2AiggASgCBBCQJSABKAIEEJ0lIAFBADYCDAsgASgCDCEAIAFBEGokACAACw0AIAAoAgAgASgCAEkLHQEBfyAAIAAoAjwiASAAKAJkIgAgACABSxsQphYLdwECfyMAQRBrIgMkAAJ/IAEgACgCZG4iASAALwGKAUECRw0AGiAALwFiIgQgAk0EQCAAKAIAIQEgACgC9AQhACADIAQ2AgQgAyACNgIAIAAgAUGGygAgAxBHQQAMAQsgACgCsAEgAmwgAWoLIQEgA0EQaiQAIAELaQAgACgCCEEBRgRAIAAoAvQEIAAoAgBB1LgIQQAQR0F/DwsgAC0ADUEEcUUEQCAAKAL0BCAAKAIAQZjPCEEAEEdBfw8LIAAgAiADIAQQvCVFBEBBfw8LIAAgACACIAMgBBC9JSABEMglC8ACAQR/IwBBEGsiBiQAAkAgACgCCEEBRgRAIAAoAvQEIAAoAgBB1LgIQQAQR0F/IQQMAQsgAC0ADUEEcQRAIAAoAvQEIAAoAgBB5uYIQQAQR0F/IQQMAQsgACgCtAEiBCABTQRAIAAoAgAhAiAAKAL0BCEAIAYgBDYCBCAGIAE2AgAgACACQeXJACAGEEdBfyEEDAELQQEhBAJAAn8gACgCZCIFIAAoAjwiB0kEQCAFIAdqQX9qIAVuIQQLIARBf2ogASAEcEYLBEAgByAFcCIEDQELIAUhBAsgACAEEKYWIQVBfyEEIAAgARCYEEUNACAAIAIgBSAFIAMgBSADSBsgA0F/RhsiAyABIAAoArABbkH//wNxIAAoAqQEEQcAQQFIDQAgACACIAMgACgCjAURBQAgAyEECyAGQRBqJAAgBAsWAEEBQSAgAEF/amdrdCAAIABBAk8bCw0AIAAoAgAgASgCAEYLVQECfyAAEGIoAgAEQCAAIABBCGoiASgCABClECABQQA2AgAgABDkAiICBEBBACEBA0AgACABEGFBADYCACABQQFqIgEgAkcNAAsLIAAQYkEANgIACwvkAgEHfyMAQRBrIgYkACAGQb7rIi0AADoADCAGQbrrIigAADYCCAJAIAAtAMgBQQRxDQAgAC0AnAUNACABLQAAIghBD3FBCEcgCEHwAXFB8ABLckUEQCACQQJJDQEgACgCrAIiA0H//wBLDQEgACgCqAIiBEH//wBLDQEgAC0AhwMiBSAEIAAtAIoDbGxBD2pBA3YgA2whByAALQCDAwRAIAcgA0EHakEDdkEMQQYgBUEISRtsaiEHCwJAIAdBgAEgCEEEdiIFdCIDSyADQYACSXINAANAIAVBf2ohBSAHIANBAXYiBEsNASADQf8DSyEJIAQhAyAJDQALCyAFQQR0QQhyIgNB+AFxIAhGDQEgASADOgAAIAEgAS0AAUHgAXEiBCAEIANBCHRyQR9wckEfczoAAQwBCyAAQZSlBhCVAQsgACAGQQhqIAEgAhCeAyAAIAAoAsgBQQRyNgLIASAGQRBqJAALBwAgARCSBAufBQEBfyMAQTBrIgMkACADIAA2AiwgAyABNgIoIAMgAjYCJCADIAMoAiwoAgQ2AiAgAygCJEHwk+vcA0sEQCADKAIsQQEQ7gwLIAMgAygCJEEHcTYCECADKAIQQQBLBEAgAyADKAIkQQggAygCEGtqNgIkCwJAIAMoAihBAE4EQCADKAIoQQJIDQELIAMoAiwoAgBBDzYCFCADKAIsKAIAIAMoAig2AhggAygCLCADKAIsKAIAKAIAEQAACyADQQA2AhggAyADKAIgQTRqIAMoAihBAnRqKAIANgIcA0ACQCADKAIcRQ0AIAMoAhwoAgggAygCJE8NACADIAMoAhw2AhggAyADKAIcKAIANgIcDAELCyADKAIcRQRAIAMgAygCJEEQajYCDAJAIAMoAhhFBEAgAyADKAIoQQJ0QZDjImooAgA2AggMAQsgAyADKAIoQQJ0QZjjImooAgA2AggLIAMoAghBgJTr3AMgAygCDGtLBEAgA0GAlOvcAyADKAIMazYCCAsDQAJAIAMgAygCLCADKAIMIAMoAghqEK0QNgIcIAMoAhwNACADIAMoAghBAXY2AgggAygCCEEySQRAIAMoAixBAhDuDAsMAQsLIAMoAiAiACAAKAJMIAMoAgwgAygCCGpqNgJMIAMoAhxBADYCACADKAIcQQA2AgQgAygCHCADKAIkIAMoAghqNgIIAkAgAygCGEUEQCADKAIgQTRqIAMoAihBAnRqIAMoAhw2AgAMAQsgAygCGCADKAIcNgIACwsgAyADKAIcQRBqNgIUIAMgAygCHCgCBCADKAIUajYCFCADKAIcIgAgAygCJCAAKAIEajYCBCADKAIcIgAgACgCCCADKAIkazYCCCADKAIUIQAgA0EwaiQAIAALzAMBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDCgC0AM2AgggASgCDCABKAIMKALMAygCCBEBAEUEQCABKAIMKAIAQRk2AhQgASgCDCABKAIMKAIAKAIAEQAACyABQQA2AgQDQCABKAIEIAEoAgwoAtACTkUEQCABIAEoAgxB1AJqIAEoAgRBAnRqKAIANgIAAkAgASgCDCgC4AEEQCABKAIMKAKYAw0BIAEoAgwoAqADDQELIAEoAghBOGogASgCACgCFEECdGooAgAiAEIANwAAIABCADcAOCAAQgA3ADAgAEIANwAoIABCADcAICAAQgA3ABggAEIANwAQIABCADcACCABKAII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AgEBfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIAIoAgwgAigCCBC5BCACKAIMIAIoAgwoAkxBA2xBCGoQwwMCQCACKAIMKAJEQf//A0wEQCACKAIMKAJAQf//A0wNAQsgAigCDCgCAEEqNgIUIAIoAgwoAgBB//8DNgIYIAIoAgwgAigCDCgCACgCABEAAAsgAigCDCACKAIMKAJIEN0BIAIoAgwgAigCDCgCRBDDAyACKAIMIAIoAgwoAkAQwwMgAigCDCACKAIMKAJMEN0BIAJBADYCBCACIAIoAgwoAlQ2AgADQCACKAIEIAIoAgwoAkxORQRAIAIoAgwgAigCACgCABDdASACKAIMIAIoAgAoAgwgAigCACgCCEEEdGoQ3QEgAigCDCACKAIAKAIQEN0BIAIgAigCBEEBajYCBCACIAIoAgBB2ABqNgIADAELCyACQRBqJAALqAEBAX8jAEEQayIDJAAgAyAANgIMIAMgATYCCCADIAI2AgQCQCADKAIMKAJsBEAgAygCDEHcAGogAygCCEECdGooAgAgAygCBEECdGoiACAAKAIAQQFqNgIADAELIAMgAygCDEE8aiADKAIIQQJ0aigCADYCACADKAIMIAMoAgAgAygCBEECdGooAgAgAygCBCADKAIAQYAIamosAAAQvwYLIANBEGokAAuYAwEBfyMAQSBrIgIkACACIAA2AhwgAiABNgIYIAIgAigCHCgCpAM2AhQgAigCHBCmF0H/ASACKAIcEP4CIAIoAhhB0AFqIAIoAhwQ/gIgAkEANgIQA0AgAigCECACKAIcKAKgAkgEQCACIAIoAhxBpAJqIAIoAhBBAnRqKAIANgIMAkAgAigCHCgC6AINACACKAIcKALwAg0AIAIoAhRBzABqIAIoAgwoAhRBAnRqKAIAIgBCADcAACAAQgA3ADggAEIANwAwIABCADcAKCAAQgA3ACAgAEIANwAYIABCADcAECAAQgA3AAggAigCFEEkaiACKAIQQQJ0akEANgIAIAIoAhRBNGogAigCEEECdGpBADYCAAsgAigCHCgC7AIEQCACKAIUQYwBaiACKAIMKAIYQQJ0aigCAEEAQYACEGUaCyACIAIoAhBBAWo2AhAMAQsLIAIoAhRBADYCDCACKAIUQYCABDYCECACKAIUQQA2AhQgAigCFEEANgIYIAIoAhRBCzYCHCACKAIUQX82AiAgAkEgaiQAC5QCAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQAkAgAygCGEUEQCADAn9BBUHg8ywoAgBOBEBBn7sBQYu4IkEBEDoMAQtBAQs2AhwMAQsCQCADKAIUBEAgAygCEEEBTg0BCyADQQA2AhwMAQsgA0EANgIMA0AgAygCDCADKAIQSAR/IAMoAhQgAygCDGosAABBAEcFQQALQQFxBEAgAygCGCADKAIMaiADKAIUIAMoAgxqLQAAOgAAIAMgAygCDEEBajYCDAwBCwsDQCADKAIMIAMoAhBIBEAgAygCGCADKAIMakEAOgAAIAMgAygCDEEBajYCDAwBCwsgA0EANgIcCyADKAIcGiADQSBqJAALqwIBAX8jAEEwayICJAAgAiAANgIsIAIgATYCKAJAIAIoAixFBEBBBEHg8ywoAgBIDQFB+MQqKAIAIQAgAkGGsiI2AgAgAEHq/QAgAhBWGgwBCyACIAIoAiwoAgAiADYCICAARQ0AAkAgAigCKARAA0AgAigCICgCBEEATEUEQCACIAIoAiAQhw02AiQgAigCJBA9DAELCwwBCyACKAIgKAIEQQBKBEBBBEHg8ywoAgBOBEBB+MQqKAIAIQAgAiACKAIgKAIENgIUIAJBhrIiNgIQIABBhboBIAJBEGoQVhoLCwsgAigCICgCDARAIAIoAiBBDGogAigCKBDjCgsgAigCICgCCARAIAIoAiAoAggQPQsgAigCIBA9IAIoAixBADYCAAsgAkEwaiQAC58CAQF/IwBBIGsiBSQAIAUgADYCGCAFIAE2AhQgBSACNgIQIAUgAzYCDCAFIAQ2AgggBSgCFARAIAUoAhRBADYCAAsgBSgCEARAIAUoAhBBADYCAAsgBSgCDARAIAUoAgxBADYCAAsgBSgCCARAIAUoAghBADYCAAsCQCAFKAIYRQRAIAUCf0EFQeDzLCgCAE4EQEHeiANBsLAiQQEQOgwBC0EBCzYCHAwBCyAFKAIUBEAgBSgCFCAFKAIYKAIANgIACyAFKAIQBEAgBSgCECAFKAIYKAIENgIACyAFKAIMBEAgBSgCDCAFKAIYKAIINgIACyAFKAIIBEAgBSgCCCAFKAIYKAIMNgIACyAFQQA2AhwLIAUoAhwaIAVBIGokAAvsCgEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCBEUEQCACAn9BBUHg8ywoAgBOBEBB5OwJQeCkIkEBEDoMAQtBAQs2AgwMAQsgAigCBEEANgIAIAIoAghFBEAgAgJ/QQVB4PMsKAIATgRAQYqcCkHgpCJBABA6DAELQQALNgIMDAELIAIgAigCCC0AADoAAiACIAIoAggtAAE6AAMgAi8BAhCGBUH//wNxQcKaAUYEQCACKAIEQQE2AgAgAkEANgIMDAELAkAgAi8BAkHNmgFHBEAgAi8BAkHJkgFHDQELIAIoAgRBBDYCACACQQA2AgwMAQsCQAJAIAIoAggtAABB0ABGBEAgAigCCC0AAUE0Rg0BCyACKAIILQAAQdAARw0BIAIoAggtAAFBMUcNAQsgAigCBEELNgIAIAJBADYCDAwBCwJAAkAgAigCCC0AAEHQAEYEQCACKAIILQABQTVGDQELIAIoAggtAABB0ABHDQEgAigCCC0AAUEyRw0BCyACKAIEQQs2AgAgAkEANgIMDAELAkACQCACKAIILQAAQdAARgRAIAIoAggtAAFBNkYNAQsgAigCCC0AAEHQAEcNASACKAIILQABQTNHDQELIAIoAgRBCzYCACACQQA2AgwMAQsCQCACKAIILQAAQdAARw0AIAIoAggtAAFBN0cNACACKAIEQQs2AgAgAkEANgIMDAELAkAgAigCCC0AAEH/AUcNACACKAIILQABQdgBRw0AIAIoAgRBAjYCACACQQA2AgwMAQsCQCACKAIILQAAQYkBRw0AIAIoAggtAAFB0ABHDQAgAigCCC0AAkHOAEcNACACKAIILQADQccARw0AIAIoAggtAARBDUcNACACKAIILQAFQQpHDQAgAigCCC0ABkEaRw0AIAIoAggtAAdBCkcNACACKAIEQQM2AgAgAkEANgIMDAELAkAgAigCCC0AAEHHAEcNACACKAIILQABQckARw0AIAIoAggtAAJBxgBHDQAgAigCCC0AA0E4Rw0AIAIoAggtAARBN0cEQCACKAIILQAEQTlHDQELIAIoAggtAAVB4QBHDQAgAigCBEENNgIAIAJBADYCDAwBCwJAIAIoAghB9aQiQQQQgAUEQCACKAIIQfmkIkEMEIAFDQELIAIoAgRBDjYCACACQQA2AgwMAQsCQCACKAIILQAAQdIARw0AIAIoAggtAAFByQBHDQAgAigCCC0AAkHGAEcNACACKAIILQADQcYARw0AIAIoAggtAAhB1wBHDQAgAigCCC0ACUHFAEcNACACKAIILQAKQcIARw0AIAIoAggtAAtB0ABHDQAgAigCBEEPNgIAIAJBADYCDAwBCwJAIAIoAggtAABBJUcNACACKAIILQABQSFHDQAgAigCCC0AAkHQAEcNACACKAIILQADQdMARw0AIAIoAggtAARBLUcNACACKAIILQAFQcEARw0AIAIoAggtAAZB5ABHDQAgAigCCC0AB0HvAEcNACACKAIILQAIQeIARw0AIAIoAggtAAlB5QBHDQAgAigCBEEMNgIAIAJBADYCDAwBCwJAIAIoAggtAABBJUcNACACKAIILQABQdAARw0AIAIoAggtAAJBxABHDQAgAigCCC0AA0HGAEcNACACKAIILQAEQS1HDQAgAigCCC0ABUExRw0AIAIoAgRBEDYCACACQQA2AgwMAQsCQCACKAIILQAAQfMARw0AIAIoAggtAAFB8ABHDQAgAigCCC0AAkHpAEcNACACKAIILQADQfgARw0AIAIoAgRBEjYCACACQQA2AgwMAQsgAkEBNgIMCyACKAIMIQAgAkEQaiQAIAALoQIBAX8jAEEQayIBJAAgASAANgIIIAEoAghBAEwEQCABQRQ2AggLIAFBAUEUEHYiADYCBAJAIABFBEAgAQJ/QQVB4PMsKAIATgRAQdg7QfeeIkEAEDoMAQtBAAs2AgwMAQsgASgCBEEANgIAIAEoAgQgASgCCDYCBCABKAIEQQEQzxcgASgCCEEEEHYhACABKAIEIAA2AgwgAEUEQCABAn9BBUHg8ywoAgBOBEBBtPkAQfeeIkEAEDoMAQtBAAs2AgwMAQsgASgCCEEEEHYhACABKAIEIAA2AhAgAEUEQCABAn9BBUHg8ywoAgBOBEBB4bQBQfeeIkEAEDoMAQtBAAs2AgwMAQsgASABKAIENgIMCyABKAIMIQAgAUEQaiQAIAAL/wEBAn8jAEEQayIAJAAgAEGAAkEEEHYiATYCAAJAIAFFBEAgAAJ/QQVB4PMsKAIATgRAQfLBDEGwkyJBABA6DAELQQALNgIMDAELIABBADYCBANAIAAoAgRBgAJORQRAIAAgACgCBDoACyAAKAIAIAAoAgRBAnRqIAAtAAtB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CwkAIAAgARD3OQv1AQMDfwF9AXwjAEEQayIFJAAgAEF/IAFBAWoiBEECdCAEQf////8DcSAERxsQPyIENgIEQX8gAUEEdCABQf////8AcSABRxsQPyEGIAAgATYCACAAIAY2AgggBCACKAIANgIAIAFBAU4EQEEAIQEDQCADIAFBGGxqIgQrAwAhCCAEKwMItiEHIAUgBCsDELY4AgwgBSAHOAIIIAUgCDkDACAAKAIIIAFBBHRqIgQgBSkDADcDACAEIAUpAwg3AwggACgCACEEIAFBAWoiAUECdCIGIAAoAgRqIAIgBmooAgA2AgAgASAESA0ACwsgBUEQaiQAIAALJgAgABBvGiAAQQRqEG8aIABCADcCGCAAQgA3AhAgAEIANwIIIAALGQAgACoCACABKgIAlCAAKgIEIAEqAgSUkgs8AQJ/IAAoAgQgACgCDCIEQQF1aiEDIAAoAgghACADIAEgAiAEQQFxBH8gAygCACAAaigCAAUgAAsRBAALNQAgACgCABogACgCACAAEOoGQQN0ahogACgCACAAEIcEQQN0ahogACgCACAAEOoGQQN0ahoLPwEBfyAAKALMASIBBEAgARDiCBA9CyAAKALIARDEOyAAIAAoAsgBEMUeIgE2AswBIAEgACgCGCAAKAIEEKk7C04AIAAQ/AEgACABKAIINgIIIAAgASgCBDYCBCAAIAEoAgA2AgAgACABKAIQNgIQIAAgASgCDDYCDCABQQA2AhAgAUIANwIIIAFCADcCAAtJAQF/IABBADYCuAEgACgCvAEiAQRAIAEQoAIQPQsgAEEANgK8ASAAQcABahCaDyAAKAL8ASIBBEAgARCgAhA9CyAAQQA2AvwBCz4BA38gACgCACIBQQFOBEADQCAAKAIIIAJBAnRqKAIAIgMEQCADED0gACgCACEBCyACQQFqIgIgAUgNAAsLC9kEAwZ/A30BfCMAQfAAayIEJAACQAJAIAAoArgBIgVFDQAgBSoCILsgAyoCILsQgh4hDSADKgIoIAAoArgBKgIokyANtkMAAMC/liIKXUEBcw0AIAIEQCADIARB2ABqEIMBIgFBABDMByABEEohAiADKgIoIQsgACgCuAEqAighDCAEQUBrIAAoArgBKgIouzkDACAEIAogDJK7OQNIIAQgC7s5AzggBCACNgIwQeCbBSAEQTBq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f3zZEsAgALuhELIFDAILIAC7RNIhM3982RLAoBCyBQwBCyAAIACTIAFBgICA/AdPDQAaIAAgAkEIahDvFUEDcSIBQQJNBEACQAJAAkAgAUEBaw4CAQIACyACKwMIELMFDAMLIAIrAwiaELIFDAILIAIrAwgQswWMDAELIAIrAwgQsgULIQAgAkEQaiQAIAALjhECBX8MfiMAQcABayIFJAAgBEL///////8/gyESIAJC////////P4MhDCACIASFQoCAgICAgICAgH+DIREgBEIwiKdB//8BcSEHAkACQAJAIAJCMIinQf//AXEiCUF/akH9/wFNBEAgB0F/akH+/wFJDQELIAFQIAJC////////////AIMiCkKAgICAgIDA//8AVCAKQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIREMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhESADIQEMAgsgASAKQoCAgICAgMD//wCFhFAEQCADIAJCgICAgICAwP//AIWEUARAQgAhAUKAgICAgIDg//8AIREMAwsgEUKAgICAgIDA//8AhCERQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAQgAhAQwCCyABIAqEUA0CIAIgA4RQBEAgEUKAgICAgIDA//8AhCERQgAhAQwCCyAKQv///////z9YBEAgBUGwAWogASAMIAEgDCAMUCIGG3kgBkEGdK18pyIGQXFqENEDQRAgBmshBiAFKQO4ASEMIAUpA7ABIQELIAJC////////P1YNACAFQaABaiADIBIgAyASIBJQIggbeSAIQQZ0rXynIghBcWoQ0QMgBiAIakFwaiEGIAUpA6gBIRIgBSkDoAEhAwsgBUGQAWogEkKAgICAgIDAAIQiFEIPhiADQjGIhCICQoTJ+c6/5ryC9QAgAn0iBBC0BSAFQYABakIAIAUpA5gBfSAEELQFIAVB8ABqIAUpA4gBQgGGIAUpA4ABQj+IhCIEIAIQtAUgBUHgAGogBEIAIAUpA3h9ELQFIAVB0ABqIAUpA2hCAYYgBSkDYEI/iIQiBCACELQFIAVBQGsgBEIAIAUpA1h9ELQFIAVBMGogBSkDSEIBhiAFKQNAQj+IhCIEIAIQtAUgBUEgaiAEQgAgBSkDOH0QtAUgBUEQaiAFKQMoQgGGIAUpAyBCP4iEIgQgAhC0BSAFIARCACAFKQMYfRC0BSAGIAkgB2tqIQYCfkIAIAUpAwhCAYYgBSkDAEI/iIRCf3wiCkL/////D4MiBCACQiCIIg5+IhAgCkIgiCIKIAJC/////w+DIgt+fCICQiCGIg0gBCALfnwiCyANVK0gCiAOfiACIBBUrUIghiACQiCIhHx8IAsgBCADQhGIQv////8PgyIOfiIQIAogA0IPhkKAgP7/D4MiDX58IgJCIIYiDyAEIA1+fCAPVK0gCiAOfiACIBBUrUIghiACQiCIhHx8fCICIAtUrXwgAkIAUq18fSILQv////8PgyIOIAR+IhAgCiAOfiINIAQgC0IgiCIPfnwiC0IghnwiDiAQVK0gCiAPfiALIA1UrUIghiALQiCIhHx8IA5CACACfSICQiCIIgsgBH4iECACQv////8PgyINIAp+fCICQiCGIg8gBCANfnwgD1StIAogC34gAiAQVK1CIIYgAkIgiIR8fHwiAiAOVK18IAJCfnwiECACVK18Qn98IgtC/////w+DIgIgDEIChiABQj6IhEL/////D4MiBH4iDiABQh6IQv////8PgyIKIAtCIIgiC358Ig0gDlStIA0gEEIgiCIOIAxCHohC///v/w+DQoCAEIQiDH58Ig8gDVStfCALIAx+fCACIAx+IhMgBCALfnwiDSATVK1CIIYgDUIgiIR8IA8gDUIghnwiDSAPVK18IA0gCiAOfiITIBBC/////w+DIhAgBH58Ig8gE1StIA8gAiABQgKGQvz///8PgyITfnwiFSAPVK18fCIPIA1UrXwgDyALIBN+IgsgDCAQfnwiDCAEIA5+fCIEIAIgCn58IgJCIIggAiAEVK0gDCALVK0gBCAMVK18fEIghoR8IgwgD1StfCAMIBUgDiATfiIEIAogEH58IgpCIIggCiAEVK1CIIaEfCIEIBVUrSAEIAJCIIZ8IARUrXx8IgQgDFStfCICQv////////8AWARAIAFCMYYgBEL/////D4MiASADQv////8PgyIKfiIMQgBSrX1CACAMfSIQIARCIIgiDCAKfiINIAEgA0IgiCILfnwiDkIghiIPVK19IAJC/////w+DIAp+IAEgEkL/////D4N+fCALIAx+fCAOIA1UrUIghiAOQiCIhHwgBCAUQiCIfiADIAJCIIh+fCACIAt+fCAMIBJ+fEIghnx9IRIgBkF/aiEGIBAgD30MAQsgBEIhiCELIAFCMIYgAkI/hiAEQgGIhCIEQv////8PgyIBIANC/////w+DIgp+IgxCAFKtfUIAIAx9Ig4gASADQiCIIgx+IhAgCyACQh+GhCINQv////8PgyIPIAp+fCILQiCGIhNUrX0gDCAPfiAKIAJCAYgiCkL/////D4N+fCABIBJC/////w+DfnwgCyAQVK1CIIYgC0IgiIR8IAQgFEIgiH4gAyACQiGIfnwgCiAMfnwgDSASfnxCIIZ8fSESIAohAiAOIBN9CyEBIAZBgIABTgRAIBFCgICAgICAwP//AIQhEUIAIQEMAQsgBkH//wBqIQcgBkGBgH9MBEACQCAHDQAgBCABQgGGIANWIBJCAYYgAUI/iIQiASAUViABIBRRG618IgEgBFStIAJC////////P4N8IgJCgICAgICAwACDUA0AIAIgEYQhEQwCC0IAIQEMAQsgBCABQgGGIANaIBJCAYYgAUI/iIQiASAUWiABIBRRG618IgEgBFStIAJC////////P4MgB61CMIaEfCARhCERCyAAIAE3AwAgACARNwMIIAVBwAFqJAAPCyAAQgA3AwAgACARQoCAgICAgOD//wAgAiADhEIAUhs3AwggBUHAAWokAAtBACAAENIBGiAAQQA6AAggAEEKahCEBiAAQQxqEIQGIABBADsBDiAAQRBqEIMBGiAAQRRqEEkaIABBGGoQSRogAAtWAQJ/IAACfyABQR9NBEAgACgCBCECIAAoAgAMAQsgACAAKAIAIgI2AgQgAEEANgIAIAFBYGohAUEACyIDIAF0NgIAIAAgAiABdCADQSAgAWt2cjYCBAvdAgEFfyMAQfABayIHJAAgByADKAIAIgg2AugBIAMoAgQhAyAHIAA2AgAgByADNgLsAUEBIQkCQAJAAkACQEEAIAhBAUYgAxsNACAAIAYgBEECdGooAgBrIgggACACEQMAQQFIDQBBACABayELIAVFIQoDQAJAIAghAyAKRSAEQQJIckUEQCAEQQJ0IAZqQXhqKAIAIQUgACALaiIIIAMgAhEDAEF/Sg0BIAggBWsgAyACEQMAQX9KDQELIAcgCUECdGogAzYCACAHQegBaiAHQegB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IAJBQGsQkAEhBAwFCwJAIANBC0YEQCABKAIIIQMgAiAALwHIA0HNmgFGBH8gAyAAKALQAygCLHYFIAMLIAAoAtQDKAIscTYC1AEgAkHYAWogAkHUAWpBBBDRASACKgLYASEIDAELQwAAgD8hCCAAIAEgAkHYAWoQkgNFDQAgAigC2AEhAyACKALcASIEBEAgAS8BAkEFRgRAIAOzIASzlSEIDAILIAOyIASylSEIDAELIAAoAgAhBCAAKAL0BCEFIAAgAS8BABD9AigCECEHIAIgAzYChAEgAiAHNgKAASAFIARB1f4KIAJBgAFqEEcLIAIgCDgC0AEgAS8BACEBIAYtAA8EQCACQQE2AnAgAiACQdABajYCdCAAIAEgAkHwAGoQkAEhBAwFCyACIAi7OQNgIAAgASACQeAAahCQASEEDAQLIAAgASACQdgBahCSA0UNAyABLwEAIQECfyAGLQAPBEAgAkEBNgKgASACIAJB2AFqNgKkASAAIAEgAkGgAWoQkAEMAQsgAiACKwPYATkDkAEgACABIAJBkAFqEJABC0EARyEEDAMLAkAgASgCBCIDQQRNBEAgAiABKAIINgLYASACQdQBaiACQdgBaiAALQAMQYABcQR/IAJB2AFqEIkHIAEoAgQFIAMLENEBDAELIAAgASACQdQBahCSAw0ADAMLIAJBADoA1QEgAS8BACEBIAYtAA8EQCACQQE2AsABIAIgAkHUAWo2AsQBIAAgASACQcABahCQASEEDAMLIAIgAkHUAWo2ArABIAAgASACQbABahCQASEEDAILIAMgASgCBGpBADoAAAsgAS8BACEEIAYtAA8EQCABKAIEIQEgAiADNgIUIAIgATYCECAAIAQgAkEQahCQASEEIAMQPQwBCyACIAM2AgAgACAEIAIQkAEhBCADED0LIAJB4AFqJAAgBAv/AQECfyMAQRBrIgEkACAAAn8gAUGmATYCDEHQ7SILIAEoAgwQqycgAEEoakEAQdABEMUCIABBfzYCZCAAQoGAhICQgMAANwJcIABBATYCwAEgAEKAgICAEDcDSCAAQQI7AYgBIABBgYAENgJUIABBADYCpAUgAEGoBTYCoAUgAEGpBTYCnAUgAEEANgKYBSAAQaoFNgKMBSAAQQE7AdABIABBgoAINgLMASAAQUBrQgE3AwBB2LktKAIAIgIE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ASgCsAFPRQRAIAFBADYC0AEgASABKAKkATYCoAEDQCABKALQASABKAK0AU9FBEAgASABKAKcASABKALQASABKALUASABKAK0AWxqQQJ0aigCADYCqAEgASABKAKoAUH/AXE2AsgBIAEgASgCqAFBCHZB/wFxNgLEASABIAEoAqgBQRB2Qf8BcTYCwAEgASgCyAEgASgCxAEgASgCwAEgASgCoAEQvwQaIAEgASgCoAFBBGo2AqABIAEgASgC0AFBAWo2AtABDAELCyABIAEoAtQBQQFqNgLUASABIAEoAqQBIAEoAuABQQJ0ajYCpAEMAQsLIAEoApwBED0LIAEoAogCIAFBvAFqIAFBuAFqEL0QRQRAIAEoApQBIAEoArwBEK4JGiABKAKUASABKAK4ARCsCRoLIAEoAogCIQAgASABQfYBajYCICAAQYMCIAFBIGoQ8QIgASABLwH2ARC8EDYC2AEgASgClAEgASgC2AEQxAYaIAEoAogCIQAgASABQegBajYCOCABIAFB7AFqNgI0IAEgAUHwAWo2AjACQCAAQcACIAFBMGoQpwEEQCABLwH8AUEISgRAIAFBlAFqEEsgAQJ/QQVB4PMsKAIATgRAQdjpDEGgtiJBABA6DAELQQALNgKMAgwDCyABIAEvAfwBEP4FIgA2ApABIABFBEAgAUGUAWoQSyABAn9BBUHg8ywoAgBOBEBBxvYMQaC2IkEAEDoMAQtBAAs2AowCDAMLIAFBASABLwH8AXQ2AswBIAFBADYC1AEDQCABKALUASABKALMAU5FBEAgASgCkAEgASgC8AEgASgC1AFBAXRqLwEAQQh1IAEoAuwBIAEoAtQBQQF0ai8BAEEIdSABKALoASABKALUAUEBdGovAQBBCHUQnAQaIAEgASgC1AFBAWo2AtQBDAELCyABKAKUASABKAKQARDFBhoMAQsgASgCiAIhACABIAFB+AFqNgIQIABBhgIgAUEQahCnAUUEQAJAAkACQCABLwH2AUEDRg0AIAEvAfYBQQRGDQAgAS8B9gFBAkYNACABLwH2AUGDgAJHDQELIAFBADsB+AEMAQsgAUEBOwH4AQsLAkACQCABKALkAUEBRgRAIAEvAfgBQQFGDQELIAEoAuQBQQhHDQEgAS8B+AENAQsgASgClAEgASgClAEQ+QUaCwsgASgCiAIhACAB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AhggAyADKAIYIAMoAhhBAXRyNgIYIAMgAygCICADKAIccjYCFCADIAMoAhQgAygCFEEBdHE2AhQgAyADKAIYIAMoAhRyNgIcIAMgAygCHEGq1arVenE2AhwgAyADKAIcIAMoAhxBB3RyNgIgIAMgAygCIEEYdjoATyADIAMoAiBBCHY6AE4gAyADKAJIIAMtAE5qLQAAIAMoAkggAy0AT2otAABBCHRyOwFGIAMoAgQgAygCOEEBdGpBAnMgAy8BRjsBACADIAMoAjhBAWo2AjgMAQsLIAMgAygCQEECajYCQCADIAMoAjxBAWo2AjwMAQsLDAILIANBADYCQCADQQA2AjwDQCADKAJAIAMoAjBBAWtORQRAIAMgAygCECADKAJAIAMoAixsQQJ0ajYCCCADIAMoAgwgAygCPCADKAIobEECdGo2AgQgA0EANgI4A0AgAygCOCADKAIkTkUEQCADIAMoAgggAygCOEECdGooAgA2AiAgAyADKAIIIAMoAixBAnRqIAMoAjhBAnRqKAIANgIcIAMgAygCICADKAIccTYCGCADIAMoAhggAygCGEEBdHI2AhggAyADKAIgIAMoAhxyNgIUIAMgAygCFCADKAIUQQF0cTYCFCADIAMoAhggAygCFHE2AhwgAyADKAIcQarVqtV6cTYCHCADIAMoAhwgAygCHEEHdHI2AiAgAyADKAIgQRh2OgBPIAMgAygCIEEIdjoATiADIAMoAkggAy0ATmotAAAgAygCSCADLQBPai0AAEEIdHI7AUYgAygCBCADKAI4QQF0akECcyADLwFGOwEAIAMgAygCOEEBajYCOAwBCwsgAyADKAJAQQJqNgJAIAMgAygCPEEBajYCPAwBCwsMAQsgA0EANgJAIANBADYCPANAIAMoAkAgAygCMEEBa05FBEAgAyADKAIQIAMoAkAgAygCLGxBAnRqNgIIIAMgAygCDCADKAI8IAMoAihsQQJ0ajYCBCADQQA2AjgDQCADKAI4IAMoAiRORQRAIAMgAygCCCADKAI4QQJ0aigCADYCICADIAMoAgggAygCLEECdGogAygCOEECdGooAgA2AhwgAyADKAIgIAMoAhxxNgIcIAMgAygCHCADKAIcQQF0cTYCHCADIAMoAhxBqtWq1XpxNgIcIAMgAygCHCADKAIcQQd0cjYCICADIAMoAiBBGHY6AE8gAyADKAIgQQh2OgBOIAMgAygCSCADLQBOai0AACADKAJIIAMtAE9qLQAAQQh0cjsBRiADKAIEIAMoAjhBAXRqQQJzIAMvAUY7AQAgAyADKAI4QQFqNgI4DAELCyADIAMoAkBBAmo2AkAgAyADKAI8QQFqNgI8DAELCwsgAygCUEUEQCADKAJIED0LIAMgAygCADYCXAsgAygCXCEAIANB4ABqJAAgAAv0AQAgAEHYA2oQpAIaIABBxANqEKQCGiAAQbADahCkAhogAEGcA2oQpAIaIABBiANqEKQCGiAAQfQCahCkAhogAEHgAmoQpAIaIABBzAJqEKQCGiAAQbgCahCkAhogAEGkAmoQpAIaIABBkAJqEKQCGiAAQfwBahCkAhogAEHoAWoQpAIaIABB1AFqEKQCGiAAQcABahCkAhogAEGsAWoQpAIaIABBmAFqEKQCGiAAQYQBahCkAhogAEHwAGoQpAIaIABB3ABqEKQCGiAAQcgAahCkAhogAEE0ahCkAhogAEEgahCkAhogAEEMahCkAhogABBGGgs2AQF/AkAgAC0AGEUEQAwBCyAAIAAoAgAoAhARAQAhASAAKAIUIgBFDQAgABCoDSABcQ8LIAELSQEBfwJAIAAtABhFBEAMAQsgAEEIaiABENoBIABBfzYCDCAAIAAoAgAoAggRAQAhAiAAKAIUIgBFDQAgACABEKkNIAJxDwsgAgs4AQF/IAEoAgBBAU4EQANAIAAgASACED4oAgBGBEAgASACEJkJDwsgAkEBaiICIAEoAgBIDQALCws3ACAAIAM6AAggACACNgIEIAAgATYCACAAIAFBzd8MEJoJBH9BAQUgAUH56wwQmglBAEcLOgAJCwoAIAAoAgBBAEcLEwAgABDqLSIAQewAahDpBRogAAvEBAEFfyMAQaATayIDJAACQAJAIAAoAhQiAQRAIAEQmQ9FDQELQYSBBUEAEDtBfyEBDAELIAAtADgEQCAAELoJC0EAIQEgACgCHBBNRQ0AIAAoAgQiAQR/IAEFQajbCBA/IgEQnQYaIAAgATYCBCABQQAQ1xIgACgCBAsoAsjGCEUEQEF/IQEgACAAKAIEEPcQIAAoAgAoAggRAwBFDQELIAAoAgQQoDwCQCAAKAIEQdjECGotAApFDQACQCAAKAIMIgFFBEAgACgCLCIBRQ0BQeDbCBA/IgIgARBKELQtIQEgACACNgIMCyAAKAIEIgIgATYCmNsIIAEgAjYCsNsIDAELQaaxDEEAEDsLIAAoAgghAiADQfgDahD+DiEFAkAgAiAAKAIEQYCkCGooAgwQsQ9Fcg0AIAAoAjAQSkHFvQwQlAFFBEAgACgCBCECDAELQajbCBA/IgEQnQYaIAAgATYCCCADQQhqIAAoAhAQjx0hAQJAAkAgACgCLCICRQRAQQAhAkG2ygxBABA7IAAoAggiBEUNASAEIAQoAgAoAgQRAAAMAQsgACgCCCACEEpBAEHFvQxBACABEO4TRQRAIAAoAggiAiAAKAIUKAIcEMgYDAILQcHWDEEAEDsgACgCCCICBEAgAiACKAIAKAIEEQAAC0EAIQILIABBADYCCAsgARCnDQtBACEBIAAoAgQgACgCJCAAKAIcIAIgBRDsH0EASARAQX8hAQwBCyAAKAIEIAAoAhwQnzwLIANBoBNqJAAgAQsMACAAKAIEKALQxggLDAAgACgCBCABEPkQCysAIAEQV0EUaiAAKAIEEENBFGoQnwYiAEUEQEEADwsgAiAALQAKOgAAQQELLwEBfyAAKAIEIgNFBEBBqNsIED8iAxCdBhogACADNgIECyABIAJBAyADEEMQgxMLgAIBBH8jAEEQayIDJAACQCAAKAIEQQFIDQAgACgCDCIBRQ0AIAAoAgBBAUgNAANAIAMgACgCCCACQQxsaiIEKAIINgIIIAMgBCkCADcDACABIAMgASgCACgCCBECACACQQFqIgIgACgCAE4NASAAKAIMIQEMAAALAAsgACgCCCICBEAgAkF8aiIEKAIAIgEEQCACIAFBDGxqIQEDQCACIAFBdGoiAUcNAAsLIAQQPQsgAEIANwIAIABBADYCCCAAKAIMIgEEQCABIAEoAgAoAgQRAAALIABBADYCDCAAKAIQIgEEQCABIAEoAgAoAgQRAAALIABBADYCECADQRBqJAALDgAgAEIANwIAIAAQkS4LtgMCBH8BfSMAQbABayICJAAgAiABNgKgAUHULCACQaABahA7IAAtALUBBEBBuesAQQAQOwsgACgCGCIBBEAgAiABEEo2ApABQaimASACQZABahA7CyAAKgIgIQYgACgCLCEBIAIgACoCHLs5A4ABIAIgATYCeCACIAa7OQNwQb/lASAC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DQALIAFBGGogAy4BACADLgECEIsBGiABIAEoAhg2AkwgAUEYaiAELgEAIAQuAQIQiwEaIAEgASgCGCICNgJIIAEgASgCTCIDNgIUIAEgAjYCECABIAM2AgwgASACNgIIIAFBGGogAUEMaiABQQhqEJwDGiAAIAEpAxg3AgQgAUHQAGokAAsMACAAIAAoAgAQjToLsAIBAn8jAEEgayICJAACQCAAKAIUIgEgACgCIEYEQCAAQdgAaiIBENMCIAEQQQJAIAEQPA0AA0AgASgCCCAAKAIcRg0BIAEoAggtALECRQRAIAAoAgggACgCFEYEQCAAIAAoAhA2AgQLIAAgASgCCDYCEAsgARBEGiABEDxFDQALCyABEDwEQCACQYAMNgIEIAJB5Y4BNgIAQfidLEHGsApBAkH50gAgAhBFCyAAIAEpAgA3AogBIAAgASkADzcAlwEgACABKQIINwKQASABEEQaDAELIAJBCGogAUEUahBAIgEQQSABEDwNAANAIAEoAggtALECRQRAIAAoAgggACgCFEYEQCAAIAAoAhA2AgQLIAAgASgCCDYCEAsgARBEGiABEDxFDQALCyACQSBqJAALJQAgABCvEyAAKAIABEAgABDtHSAAEEIgACgCACAAEM4HENgKCwviAgECfyMAQSBrIgMkACAAQRBqIAFBEGoQ8w4gACABKAIMNgIMIABByABqIAFByABqEPwdIABByAFqIAFByAFqEPwdIAAoAswBIgIEQCACEOIIED0LIAAgASgCzAE2AswBIAFBADYCzAEgAEHMAGoiAhDsCyACIAFBzABqIgIQ3wMgAhD8ASAAQdQBaiABQdQBahDqCyAAQegBaiABQegBahCgOiAAQeAAaiABQeAAahDqCyAAQfQAaiABQfQAahDqCyAAKAK0ASICBEAgAhD7HQsgAEG0AWogAUG0AWoQnzogACABKAK4ATYCuAEgACgCvAEiAgRAIAIQoAIQPQsgACABKAK8ATYCvAEgAUEANgK8ASAAQcABaiICEJoPIANBCGogAhBAIAFBwAFqEMIBIABBgAJqIAFBgAJqEMkdIAEoAsQBIgIEQCAAKALEASACEPEeCyAAIAEQ7A4gA0EgaiQACysBAX8CQCABQQBIDQAgAEH0AGoiACgCACABTA0AIAAgARA+KAIAIQILIAILygEBBH8jAEEw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BEAgAiAAIAEgAigCJBEEAA8LAkAgAiwAS0EASA0AIAEhBANAIAQiA0UNASAAIANBf2oiBGotAABBCkcNAAsgAiAAIAMgAigCJBEEACIEIANJDQEgASADayEBIAAgA2ohACACKAIUIQUgAyEGCyAFIAAgARBYGiACIAIoAhQgAWo2AhQgASAGaiEECyAEC0sBAn8gACgCBCIGQQh1IQcgACgCACIAIAEgAiAGQQFxBH8gAygCACAHaigCAAUgBwsgA2ogBEECIAZBAnEbIAUgACgCACgCFBELAAsgAAJAIAAoAgQgAUcNACAAKAIcQQFGDQAgACACNgIcCwuiAQAgAEEBOgA1AkAgACgCBCACRw0AIABBAToANCAAKAIQIgJFBEAgAEEBNgIkIAAgAzYCGCAAIAE2AhAgA0EBRw0BIAAoAjBBAUcNASAAQQE6ADYPCyABIAJGBEAgACgCGCICQQJGBEAgACADNgIYIAMhAgsgACgCMEEBRyACQQFHcg0BIABBAToANg8LIABBAToANiAAIAAoAiRBAWo2AiQLC10BAX8gACgCECIDRQRAIABBATYCJCAAIAI2AhggACABNgIQDwsCQCABIANGBEAgACgCGEECRw0BIAAgAjYCGA8LIABBAToANiAAQQI2AhggACAAKAIkQQFqNgIkCwspAQF/IABBjJksNgIAIAAoAgRBdGoiAUEIahCEFUF/TARAIAEQPQsgAAsSACAAIAEoAgAgASgCBBCBAhoLCQAgAEEdEJsDCy0BAX8gASgCACECIAAgASgCBCIBQQEgARs2AgQgACACIAJBAWogARs2AgAgAAsQACAAKAIAIAAoAgRBAnRqCyEBAX8gACAAQSxqNgIIIAAgAEEMaiIBNgIEIAAgATYCAAsWACAAIAEoAggiACAAKAIAKAIYEQIACwkAIABBiMcIagslACAAEMkCIAEQyQJGBH8gACgCACAAKAIEIAEoAgAQ2hQFQQALCyEAIABBHUEBQQFBARCmASAAIAE2AgggAEGI3Cs2AgAgAAvCAQECfyMAQTBrIgEkAAJ/IABBABCeAUFQakEJTQRAIAAQqAwMAQsgASABQShqQZzjKxBIKQIANwMQIAAgAUEQahCaAQRAIAAQoiEMAQsgASABQSBqQZ/jKxBIKQIANwMIIAAgAUEIahCaARogASAAQQAQ0xQi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AgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL6ggBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxORQRAAkAgAigCJCACKAIYQQJ0ai8BAARAIAIgAigCGCIBNgIQIAIoAixB3BZqIQMgAigCLCIEKALQKEEBaiEAIAQgADYC0CggAEECdCADaiABNgIAIAIoAhggAigCLEHYKGpqQQA6AAAMAQsgAigCJCACKAIYQQJ0akEAOwECCyACIAIoAhhBAWo2AhgMAQsLA0AgAigCLCgC0ChBAkgEQAJAIAIoAhBBAkgEQCACIAIoAhBBAWoiADYCEAwBC0EAIQALIAIoAixB3BZqIQMgAigCLCIEKALQKEEBaiEBIAQgATYC0CggAUECdCADaiAANgIAIAIgADYCDCACKAIkIAIoAgxBAnRqQQE7AQAgAigCDCACKAIsQdgoampBADoAACACKAIsIgAgACgCqC1Bf2o2AqgtIAIoAiAEQCACKAIsIgAgACgCrC0gAigCICACKAIMQQJ0ai8BAms2AqwtCwwBCwsgAigCKCACKAIQNgIEIAIgAigCLCgC0ChBAm02AhgDQCACKAIYQQFIRQRAIAIoAiwgAigCJCACKAIYEI8QIAIgAigCGEF/ajYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBf2o2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQjxAgAiACKAIsKALgFjYCFCACKAIYIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQX9qIQAgBCAANgLUKCAAQQJ0IANqIAE2AgAgAigCFCEBIAIoAixB3BZqIQMgAigCLCIEKALUKEF/aiEAIAQgADYC1CggAEECdCADaiABNgIAIAIoAiQgAigCDEECdGogAigCJCACKAIYQQJ0ai8BACACKAIkIAIoAhRBAnRqLwEAajsBACACKAIM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AgsgBSAIakEAOgAAIAEgAkYNASAAQcPsAxBbIAAgBRB7DAMLIABByJYEEFsMAgsgACAAKALIBRB7IAAgBTYCyAUgBCAINgIADwsgAEHUvgQQWwsgACADQQFqELoCIgEEQCADBEAgASAAKALIBSADEFgaCyAAIAAoAsgFEHsgACABNgLIBSABIANqQQA6AAALIAQgAzYCAAsfACAABEAgACADNgKIBSAAIAI2AoQFIAAgATYCgAULCx8AIAAEQCAAIAM2AqQBIAAgAjYCoAEgACABNgKoAQsLHgEBfyAARSACQZwBR3IEf0EABSAAIAE2ApwBIAALC7kDAQF/AkAgAEUNAEEBIQkgAkEBTkEAIAEgA3IgBHIgBXIgBnIgB3IgCHJBf0obRQRAIABBxYsDEFtBACEJCwJAIAFB/////wdGIAJB/////wdGciADQf////8HRiAEQf////8HRnJyIAVB/////wdGIAZB/////wdGciAHQf////8HRnJyRQRAIAhB/////wdHDQELIABBrrwDEFtBACEJC0GgjQYgAmsgAUgEQCAAQb/rAxBbQQAhCQtBoI0GIARrIANIBEAgAEGQlgQQW0EAIQkLQaCNBiAGayAFSARAIABBpb4EEFtBACEJC0GgjQYgCGsgB0gEQCAAQe7oBBBbQQAhCQsgCCAEayIBQf//A3EiAiAFIANrIgVBEHYiCGwgAUEQdiIBIAVB//8DcSIFbGogAiAFbCICQRB2aiIFQRB2IAEgCGxqIAcgA2siAUH//wNxIgMgBiAEayIEQRB2IgZsIAFBEHYiASAEQf//A3EiBGxqIAMgBGwiA0EQdmoiBEEQdiABIAZsakcgAkH//wNxIAVBEHRyIANB//8DcSAEQRB0ckdyDQAgAEHXkQUQW0EAIQkLIAkL2gIBAX8jAEEgayIDJAAgAyAANgIcIAMgATYCGCADIAI2AhQgAyADKAIcKAIENgIQIAMoAhRB8JPr3ANLBEAgAygCHEEDEO4MCyADIAMoAhRBB3E2AgggAygCCEEASwRAIAMgAygCFEEIIAMoAghrajYCFAsCQCADKAIYQQBOBEAgAygCGEECSA0BCyADKAIcKAIAQQ82AhQgAygCHCgCACADKAIYNgIYIAMoAhwgAygCHCgCACgCABEAAAsgAyADKAIcIAMoAhRBEGoQrRA2Agwg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AgwoAhwgASgCDCgCOHA2AhAgASgCEEUEQCABIAEoAgwoAjg2AhALIAEoAgwgASgCEDYCSCABIAEoAgwoAiAgASgCDCgCPHA2AhAgASgCEEUEQCABIAEoAgwoAjw2AhALIAEoAgwgASgCEDYCTCABIAEoAgwoAkA2AhQgASgCHCgCvAIgASgCFGpBCkoEQCABKAIcKAIAQQ42AhQgASgCHCABKAIcKAIAKAIAEQAACwNAIAEgASgCFCIAQX9qNgIUIABBAExFBEAgASgCGCECIAEoAhxBwAJqIQMgASgCHCIEKAK8AiEAIAQgAEEBajYCvAIgAEECdCADaiACNgIADAELCyABIAEoAhhBAWo2AhgMAQsLCyABKAIcKALwAUEASgRAIAEgASgCHCgC8AEgASgCHCgCtAJsNgIIIAEoAhwCfyABKAIIQf//A0gEQCABKAIIDAELQf//Aws2AuwBCyABQSBqJAALjAQBAX8jAEEQayIBJAAgASAANgIMAkACQCABKAIMKALMAQRAIAEgASgCDCgChAM2AgQgASABKAIMKALMASABKAIEKAIgQSRsajYCACABKAIMIAEoAgAoAgA2AqACIAFBADYCCANAIAEoAgggASgCACgCAE5FBEAgASgCDEGkAmogASgCCEECdGogASgCDCgCVCABKAIAQQRqIAEoAghBAnRqKAIAQdgAbGo2AgAgASABKAIIQQFqNgIIDAELCyABKAIMKAKIAgRAIAEoAgwgASgCACgCFDYC6AIgASgCDCABKAIAKAIYNgLsAiABKAIMIAEoAgAoAhw2AvACIAEoAgwgASgCACgCIDYC9AIMAwsMAQsgASgCDCgCTEEESgRAIAEoAgwoAgBBGzYCFCABKAIMKAIAIAEoAgwoAkw2AhggASgCDCgCAEEENgIcIAEoAgwgASgCDCgCACgCABEAAAsgASgCDCABKAIMKAJMNgKgAiABQQA2AggDQCABKAIIIAEoAgwoAkxORQRAIAEoAgxBpAJqIAEoAghBAnRqIAEoAgwoAlQgASgCCEHYAGxqNgIAIAEgASgCCEEBajYCCAwBCwsLIAEoAgxBADYC6AIgASgCDCABKAIMKAL4AiABKAIMKAL4AmxBAWs2AuwCIAEoAgxBADYC8AIgASgCDEEANgL0AgsgAUEQaiQAC5UBAQF/IwBBEGsiASAA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AhgMAQsLIAIgAigCHEEBajYCHAwBCwsMBgsgAkEANgIcA0AgAigCHCACKAI4TkUEQCACIAIoAgwgAigCHCACKAIwbEECdGo2AhAgAigCCCACKAIQIAIoAiAQWBogAkEANgIYA0AgAigCGCACKAI8TkUEQCACIAIoAgggAigCPEEBayACKAIYa0EBdGpBAnMvAQA2AhQgAigCECACKAIYQQF0akECcyACKAIUOwEAIAIgAigCGEEBajYCGAwBCwsgAiACKAIcQQFqNgIcDAELCwwFCyACQQA2AhwDQCACKAIcIAIoAjhORQRAIAIgAigCDCACKAIcIAIoAjBsQQJ0ajYCECACKAIIIAIoAhAgAigCIBBYGiACQQA2AhgDQCACKAIYIAIoAjxORQRAIAIgAigCCCACKAI8QQFrIAIoAhhrakEDcy0AADYCFCACKAIQIAIoAhhqQQNzIAIoAhQ6AAAgAiACKAIYQQFqNgIYDAELCyACIAIoAhxBAWo2AhwMAQsLDAQLIAIgAigCPCACKAI0bEEfcTYCLAJAIAIoAiwEQCACQQggAigCLEEEbWs2AigMAQsgAkEANgIoCyACKAIoBEAgAigCDCACKAI4IAIoAjQgAigCMCACKAI4IAIoAigQxBALIAIgAigCPEEBakECbTYCJCACQQA2AhwDQCACKAIcIAIoAjhORQRAIAIgAigCDCACKAIcIAIoAjBsQQJ0ajYCECACKAIIIAIoAhAgAigCIBBYGiACQQA2AhgDQCACKAIYIAIoAiRORQRAIAIgAigCCCACKAIgQQFrIAIoAhhrakEDcy0AADYCFCACKAIQIAIoAhhqQQNzIAIoAkAgAigCFGotAAA6AAAgAiACKAIYQQFqNgIYDAELCyACIAIoAhxBAWo2AhwMAQsLDAMLIAIgAigCPCACKAI0bEEfcTYCLAJAIAIoAiwEQCACQRAgAigCLEECbWs2AigMAQsgAkEANgIoCyACKAIoBEAgAigCDCACKAI4IAIoAjQgAigCMCACKAI4IAIoAigQxBALIAIgAigCPEEDakEEbTYCJCACQQA2AhwDQCACKAIcIAIoAjhORQRAIAIgAigCDCACKAIcIAIoAjBsQQJ0ajYCECACKAIIIAIoAhAgAigCIBBYGiACQQA2AhgDQCACKAIYIAIoAiRORQRAIAIgAigCCCAC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IAEgCyAGIAMQPigCACASQQEgDCADED4QSiACENwcIAYgAxA+KAIAQQJIDQAgDy0ACg0AQQAhB0EAIQUgBiADED4oAgBBAU4EQANAIAIoAkggByALahA+KAIAIQggDisDEEQAAAAAAAAAAGNBAXNFBEAgACAIELw4IAVyIQULIAdBAWoiByAGIAMQPigCAEgNAAsgBUEBcQ0BCyACIAsgBiADED4oAgAQlToiEUUEQCAALQDeAg0BC0EAIQggBiADED4oAgBBAUgNAANAIARBKGoQ7QIhBSAMIAMQPkEgIAUQ1wsgBEEgaiAFQQAQPhBKIAggBiADED4oAgAgERDlEiAFQQAQPiAEQSBqEPQBIARBIGoQRhogBEEgahCDASENQQAhByAFKAIAQQBKBEADQCANIAUgBxA+EKcCIAUoAgBBf2ogB0cEQCANQSAQggQLIAdBAWoiByAFKAIASA0ACwsgACABIAggC2pBASASQQAgDRBKIAIQ3BwgDRBGGiAFEIEDGiAIQQFqIgggBiADED4oAgBIDQALCyAGIAMQPigCACALaiELIANBAWoiAyAJRw0ACwsgCkUNACAKED0LIARBQGskAAuPAQEEfyMAQSBrIgUkACADIAIoAiC3RJqZmZmZmSlAoxCWAjYCACAFQQhqEN0SIQQgACgChBIiByACIAEQXigCAEEAQX8gBCAHKAIAKAIIEQoAGiAEKAIAQQBKBEADQCAAIAQgBhDmASADELUOIAZBAWoiBiAEKAIASA0ACwsgAigCGBogBBCzDiAFQSBqJAALEAAgAEIANwIAIAAQsDggAAsSACAAQShqEKIDIABBFGoQsw4LFAAgACgCCCAAKAIAQSBBwAAQhwcLHwAgACAALwEAIgBBASABdHIgAEF+IAF3cSACGzsBAAsZACAAQQA6AAQgAEH/////BzYCACAAEN4cCxYAIABBFGoQ3RIaIABBKGoQ2AcaIAALKAAgACgCBBogACAAKAIEIAJBf3NxNgIEIAAgACgCBCABIAJxcjYCBAtQAQF/IwBBEGsiAiQAIAJBADYCDCACQT42AgggAiACKQMINwMAIAAgASACENY4IgAQ3DghASAABEAgACAAKAIAKAIEEQAACyACQRBqJAAgAQuMAQECfyMAQUBqIgUkAAJAIANBAUYEQCAAIAEQehoMAQsgBUE4akGV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QSACEDxFBEADQCACKAIIIAAoAhRGBEBBfyECDAQLIAIoAgggASgCFEYEQEEBIQIMBAsgAhBEGiACEDxFDQALCyADQacJNgIUIANB5Y4BNgIQQfidLEG/zQlBAkH50gAgA0EQahBFCyADQcgAaiAAKAIAQQhqEEAiAhBBIAIQPEUEQANAIAIoAgggACgCGEYEQEF/IQIMAwsgAigCCCABKAIYRgRAQQEhAgwDCyACEEQaIAIQPEUNAAsLIANBtQk2AgQgA0HljgE2AgBB+J0sQb/NCUECQfnSACADEEVBACECCyADQeAAaiQAIAILNQAgACgCABogACgCACAAEM4HQQxsahogACgCACAAEJYKQQxsahogACgCACAAEM4HQQxsahoLWgIBfwF+IwBBEGsiAiQAIAEpAgAhA0EQED8hASACIAM3AwggAiADNwMAIAIpAgAhAyABQfjELDYCACABIAM3AgggASAANgIEIAFB0MQsNgIAIAJBEGokACABC44BAQJ/IABBgAJqIgIuAQQgACgCuAEoAhxGBEAgAiABQRB0QRB1EOc5CyAAKAK4ASABQQFqIgIQ9R0gACgCyAEgASABQQJqIgMQwjsgACgCzAEgASADEMQeIAIgAEHUAWoiACgCAEgEQCAAIAIQPigCACEDIAAgARA+IgEgAyABKAIAajYCACAAIAIQkh0LC88EAQV/IwBBMGsiAyQAAkAgACgCuAEoAhxFDQAgACgCtAENACADQa0HNgIEIANB5Y4BNgIAQfidLEGOoghBAkH50gAgAxBFCwJAAkACQCAAKAK4ASgCHEECTgRAQQEhBiACDQEDQCABIAAoArgBIAQQeSAAKAK4ASAGEHkgASgCACgCCBEEACIFQX9HBEAgACgCuAEgBSAEEMYDIAAgBBCxEyADQShqIAAoArgBIAQQnBMgA0EoaiAAKAK0ARDaBUUEQCAAKAK0ASADKAIsIAMoAihrQQFqEPQLCyAFIAAgBBDPByIEEM0IRQRAQcQAED8iBxD4DiAFEI0CIANBEGogBBBAGiADQRBqIAcQtQULQQEhBwsgBiIEQQFqIgYgACgCuAEoAhxIDQALDAILIAENAQwCCwNAAkAgASAAKAK4ASAEIgUQeSAAKAK4ASAGIgQQeSABKAIAKAIIEQQAIgZBf0YNACACIAAoAswBIAUQyQMgACgC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CwsgAgRAIAIgAigCACgCBBEAAAsgBEEQaiQAC1UBA38jAEEQayIBJAAgAUEIahBpGiAAIAEpAwg3AgAgACgCCEEBTgRAIABBDGohAwNAIAAgAyACEFEQmQEgAkEBaiICIAAoAghIDQALCyABQRBqJAALPQEBfyAAIAEoAgAiAzYCACAAIANBdGooAgBqIAEoAgQ2AgAgAEEANgIEIAAgACgCAEF0aigCAGogAhChCgsJACAAELwDED0LlAYBBn8jAEHwCWsiBCQAIARB8AFqEGkaIAMgBCkD8AE3AQAgAkHSlwMQ2gEgACEGAkACQCAALQAAIgdB7wFGBEBB7wEhByAALQABQbsBRw0BIABBA2ogACAALQACQb8BRiIFGyEGIABBA0EAIAUbai0AACEHCyAHDQBBACEFDAELQQAhBQNAAkAgBEHwAWogBWogBzoAACAFQQFqIQggBiIJQQFqIQYgCS0AASIHQSByQSBGIAVB/QdLcg0AIAghBSAHQQlHDQELC0EAIQUgBEHwAWogCGpBADoAACAJLQABIQcgBEH/////BzYC7AEgBEH/////BzYC6AEgBEGAgICAeDYC5AEgBEGAgICAeDYC4AEgAUEANgIAIARB0ABqIARBKGogCUECaiAGIAcbIgkQhQIiBxCHDyEGIAcQYBogBEHIAGogBigCAEF0aigCACAEQdAAamoQqwMQzQMgBEHIAGoQjgEgBiAEQewBahCSAhogBiAEQegBahCSAhogBiAEQeQBahCSAhogBiAEQeABahCSAhogBiABEJICGgJAAkAgBCgC5AEgBCgC7AFOBEAgBCgC4AEgBCgC6AFODQELIAQgADYCAEGMxwMgBBA7DAELAkACQCAEKQPwAULX3smjtoqdOVINACAJQSMQqAQiAEUNACAEQfABaiAAQQFqQf8HELYFIQAgBEEAOgDvCSAAENQHIAAQciIIQQFIDQELA0AgBEEoaiAEQfABaiAFaiIAIAggBWsQhwotAB0iAUEeIAFBHkkbIgFFBEAgACwAACEBIAQgBUEBajYCGCAEIAE2AhQgBCAANgIQQeH2AyAEQRBqEDtBACEFDAMLIAggASAFaiIFSg0ACwsgAiAEQfABahDaASAEKALsASAEKALkAUoEQCAEQewBaiAEQeQBahCkCgsgBCgC6AEiBSAEKALgASIISgRA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QcihCGotAAoQiDwgASgCxAEiAARAIAAQ8BMQPQsgASADNgLEAQsgARDpCyABQYACaiABKALMASgCCEEQdEEQdRDJByACBEAgAhDwBBA9CyALEJoPIARB8ABqJAALmwMBB38jAEEgayIFJAACQCACQQFOBEAgASgCSCgCACACSg0BCyAFQbQBNgIEIAVB+8kBNgIAQcydLEH1wQVBAkGSiwEgBRBFCwJ/QQAgASgCxAEiCEUNABpBuAEQPyAIEPIeCyEJQbQCED8iBiABEMANIQsgASgCSCEHQRgQPyIKEIgMGiAKIAcoAgAgAmsQowQgBygCACACSgRAIAIhCANAIAogByAIED4oAgAQXxogCEEBaiIIIAcoAgBIDQALCyAHIAIQoAEgAUEANgJIIAYoAkgiAgRAIAIQpwoQPQsgBkEANgJIIAEoAkQaIAEQ0QggCxDRCCABIAc2AkggBiAKNgJIIAEQthMgCxC2EyAJBEBBuAEQPyICEJYLGiABIAI2AsQBQbgBED8iAhCWCxogBiACNgLEASAFQRhqIAcQlgMoAgAQuQEgBS4BHCECIAVBEGogBigCSEEAED4oAgAQuQEgCSACIAUuARAgAEHIoQhqLQAKIAEoAsQBIAYoAsQBEIk8CyADIAY2AgAgBCAJNgIAIAVBIGokAAsIACAAQZgSagvkAgAgAEH07Cw2AgAgAEH0oghqEF0aIABB6KIIakEAEPMeIABB2KIIahBPIABBsKIIahBSIABBmKIIahB0IABBgKIIahB0IABB6KEIahB0IABB2KEIahBPIABByKEIahBPIABBuKEIahBPIABBoKEIahB0IABBiKEIahB0IABB+KAIahBPIABB4KAIahB0IABBuKAIahBSIABBkKAIahBSIABB6J8IahBSIABBwJ8IahBSIABBqJ8IahB0IABBgJ8IahBSIABB2J4IahBSIABBsJ4IahBSIABBmJ4IahB0IABBgJ4IahB0IABB8J0IahBPIABB2J0IahB0IABBwJ0IahB0IABBqJ0IahB0IABBkJ0IahB0IABBgJ0IahBPIABB8JwIahBPIABB2JwIahB0IABBsJwIahBSIABBmJwIahB0IABBiJwIahBPIABB+JsIahBPIABB6JsIahBPIAAQzxIaIAAL7AEBAn8jAEEQayIBJAAgAUEIaiAAQQhqIAFB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+QNqvkMAAIC/kiIAIAAgAEMAAAA/lJQiA5O8QYBgcb4iBEMAsLg/lCAAIASTIAOTIAAgAEMAAABAkpUiACADIAAgAJQiACAAIACUIgBD7umRPpRDqqoqP5KUIAAgAEMmnng+lEMTzsw+kpSSkpSSIgBDALC4P5QgACAEkkPUmji5lJKSIAIgAUEXdmqykiEACyAAC6sGAgV/BH4jAEGAAWsiBSQAAkACQAJAIAMgBEIAQgAQhgdFDQAgAyAEEJEgIQcgAkIwiKciCUH//wFxIgZB//8BRg0AIAcNAQsgBUEQaiABIAIgAyAEEMMBIAUgBSkDECICIAUpAxgiASACIAEQzQwgBSkDCCECIAUpAwAhBAwBCyABIAJC////////P4MgBq1CMIaEIgogAyAEQv///////z+DIARCMIinQf//AXEiB61CMIaEIgsQhgdBAEwEQCABIAogAyALEIYHBEAgASEEDAILIAVB8ABqIAEgAkIAQgAQwwEgBSkDeCECIAUpA3AhBAwBCyAGBH4gAQUgBUHgAGogASAKQgBCgICAgICAwLvAABDDASAFKQNoIgpCMIinQYh/aiEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAtCAEKAgICAgIDAu8AAEMMBIAUpA1giC0IwiKdBiH9qIQcgBSkDUCEDCyAKQv///////z+DQoCAgICAgMAAhCIKIAtC////////P4NCgICAgICAwACEIg19IAQgA1StfSIMQn9VIQggBCADfSELIAYgB0oEQANAAn4gCARAIAsgDIRQBEAgBUEgaiABIAJCAEIAEMMBIAUpAyghAiAFKQMgIQQMBQsgC0I/iCEKIAxCAYYMAQsgCkIBhiEKIAQhCyAEQj+ICyEMIAogDIQiCiANfSALQgGGIgQgA1StfSIMQn9VIQggBCADfSELIAZBf2oiBiAHSg0ACyAHIQYLAkAgCEUNACALIgQgDCIKhEIAUg0AIAVBMGogASACQgBCABDDASAFKQM4IQIgBSkDMCEEDAELIApC////////P1gEQANAIARCP4ghASAGQX9qIQYgBEIBhiEEIAEgCkIBhoQiCkKAgICAgIDAAFQNAAsLIAlBgIACcSEHIAZBAEwEQCAFQUBrIAQgCkL///////8/gyAGQfgAaiAHcq1CMIaEQgBCgICAgICAwMM/EMMBIAUp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QcwARw0SIAAgACgCAEECajYCACAAQZDnKxCRASECDBILAkACQAJAAkACQCADQQFrDggAFhYCFhYDBAELIAAgACgCAEECajYCACAAQfrmKxCRASECDBULIAAgACgCAEECajYCACAAQYbnKxCRASECDBQLIAAgACgCAEECajYCACAAQZvnKxCRASECDBMLIAAgACgCAEECajYCACAAQYbnKxCRASECDBILIAAgACgCAEECajYCACAAQabnKxCRASECDBELIABBARCeAUH1AEcNECAAIAAoAgBBAmo2AgAgAEGx5ysQkQEhAgwQCwJAAkAgAEEBEJ4BIgFBzQBHBEAgAUHTAEYNAiABQfMARg0BIAFB7QBHDRIgACAAKAIAQQJqNgIAIABBu+crEJEBIQIMEgsgACAAKAIAQQJqNgIAIABBxecrEJEBIQIMEQsgACAAKAIAQQJqNgIAIABB0OcrEJEBIQIMEAsgACAAKAIAQQJqNgIAIABB2+crEJEBIQIMDwsgAEEBEJ4BQfMARw0OIAAgACgCAEECajYCACAAQefnKxCRASECDA4LIABBARCeAUFQakEJSw0NIAAgACgCAEECajYCACAEIAAQ9ggiATYCGCABRQ0NIAAgBEEYahC9FCECDA0LAkAgA0EBaw4DDQ0MAAsgACAAKAIAQQJqNgIAIABBiOQrEJEBIQIMDAsgA0EBaw4ECwsLCAkLIANBAWsOBAoKCgUGCyADQQFrDgQJCQIBAwsCQAJAAkAgA0EBaw4GCwsLAQsAAgsgACAAKAIAQQJqNgIAIABB/uUrEJEBIQIMCgsgACAAKAIAQQJqNgIAIABBuOYrEJEBIQIMCQsgACAAKAIAQQJqNgIAIABBqeYrEJEBIQIMCAsgACAAKAIAQQJqNgIAIABBnuYrEJEBIQIMBwsgACAAKAIAQQJqNgIAIABB4+QrEJEBIQIMBgsgACAAKAIAQQJqNgIAIABB/uUrEJEBIQIMBQsgACAAKAIAQQJqNgIAIAQgABD2CCIBNgIYIAFFDQQgAEHwAmogBEEYahCdISECDAQLIAAgACgCAEECajYCACAAQdLlKxCRASECDAMLIAAgACgCAEECajYCACAAQePkKxCRASECDAILIAAgACgCAEECajYCACAAQdHkKxCRASECDAELIAAgACgCAEECajYCACAAQZPkKxCRASECCyAEQSBqJAAgAgsfACAAQfACakEUEJwBIAEoAgAgAi0AACADKAIAEIEhC60BAQJ/AkAgACABRg0AIAAsAAAiAkHfAEYEQCAAQQFqIAFGDQEgACwAASICQVBqQQlNBEAgAEECag8LIAJB3wBHDQEgAEECaiECA0AgASACRg0CIAIsAAAiA0FQakEJTQRAIAJBAWohAgwBCwsgAkEBaiAAIANB3wBGGw8LIAJBUGpBCUsNACAAIQIDQCABIAJBAWoiAkYEQCABDwsgAiwAAEFQakEKSQ0ACwsgAAsrACACIAMgAUHwAmogAyACa0ECdSIBQQJ0EJwBIgIQqwwgACACIAEQgQIaC4oJAQV/IwBBoAJrIgEkAAJAIABBzAAQjAFFDQACQCAAQQAQngFBrH9qIgNBJUsNAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIANBAWsOJRMTExMTExMTExMSEwMBAhARDxMEBwgTCQoNDhMTEwUGExMACwwUCyAAIAAoAgBBAWo2AgAgASABQZgCakGf0ysQSCkCADcDACAAIAEQsQQhAgwTCyABIAFBkAJqQafTKxBIKQIANwMQIAAgAUEQahCaAQRAIAFBADYCiAEgACABQYgBahDJFCECDBMLIAEgAUGIAmpBq9MrEEgpAgA3AwggACABQQhqEJoBRQ0SIAFBATYCiAEgACABQYgBahDJFCECDBILIAAgACgCAEEBajYCACABIAFBgAJqQa/TKxBIKQIANwMYIAAgAUEYahCxBCECDBELIAAgACgCAEEBajYCACABIAFB+AFqQbTTKxBIKQIANwMgIAAgAUEgahCxBCECDBALIAAgACgCAEEBajYCACABIAFB8AFqQcDTKxBIKQIANwMoIAAgAUEoahCxBCECDA8LIAAgACgCAEEBajYCACABIAFB6AFqQc7TKxBIKQIANwMwIAAgAUEwahCxBCECDA4LIAAgACgCAEEBajYCACABIAFB4AFqQdTTKxBIKQIANwM4IAAgAUE4ahCxBCECDA0LIAAgACgCAEEBajYCACABIAFB2AFqQePTKxBIKQIANwNAIAAgAUFAaxCxBCECDAwLIAAgACgCAEEBajYCACABIAFB0AFqQeTTKxBIKQIANwNIIAAgAUHIAGoQsQQhAgwLCyAAIAAoAgBBAWo2AgAgASABQcgBakHm0ysQSCkCADcDUCAAIAFB0ABqELEEIQIMCgsgACAAKAIAQQFqNgIAIAEgAUHAAWpB6NMrEEgpAgA3A1ggACABQdgAahCxBCECDAkLIAAgACgCAEEBajYCACABIAFBuAFqQevTKxBIKQIANwNgIAAgAUHgAGoQsQQhAgwICyAAIAAoAgBBAWo2AgAgASABQbABakHu0ysQSCkCADcDaCAAIAFB6ABqELEEIQIMBwsgACAAKAIAQQFqNgIAIAEgAUGoAWpB8tMrEEgpAgA3A3AgACABQfAAahCxBCECDAYLIAAgACgCAEEBajYCACABIAFBoAFqQfvTKxBIKQIANwN4IAAgAUH4AGoQsQQhAgwFCyAAIAAoAgBBAWo2AgAgABDRISECDAQLIAAgACgCAEEBajYCACAAENAhIQIMAwsgACAAKAIAQQFqNgIAIAAQzyEhAgwCCyABIAFBmAFqQbTJKxBIKQIANwOAAQJAIAAgAUGAAWoQmgFFDQAgABDkByICRQ0AIABBxQAQjAENAgtBACECDAELIAEgABD1ASIDNgKUASADRQ0AIAFBiAFqIABBABDmAyABQYgBahCNBCEFIABBxQAQjAEhBCAFRQRAIARFDQEgAEHwAmogAUGUAWogAUGIAWoQxSEhAgwBCyADQQAgBBshAgsgAUGgAmokACACCxIAIAAgACgCACABQQJ0ajYCBAuXAQEDf0EBIQICQCAAQQAQngEiA0EwSCADQTpOQQAgA0G/f2pB/wFxQRlLG3INAEEAIQIDQAJAIABBABCeASIDQTBOBEBBUCEEIANBOkgNAUFJIQQgA0G/f2pB/wFxQRpJDQELIAEgAjYCAEEAIQIMAgsgACAAKAIAQQFqNgIAIAJBJGwgBGogA0H/AXFqIQIMAAALAAsgAgsLACAAIAEgAhD3IQv7AQEDfyMAQUBqIgEkACABQThqENIBIQIgASABQTBqQbSTLBBIKQIANwMQAkAgACABQRBqEJoBBEAgAUEoakG3kywQSBogASABKQMoNwM4DAELIAEgAUEgakG+kywQSCkCADcDCCAAIAFBCGoQmgEEQCABQShqQcGTLBBIGiABIAEpAyg3AzgMAQsgASABQRhqQceTLBBIKQIANwMAIAAgARCaAUUNACABQShqQcqTLBBIGiABIAEpAyg3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IAIQ7wIgBCoCCCEGIAQgAhDvAiADIARBEGogBiAEKgIEjBCKARDuAiABQQJHBUEACyEAQdAAED8gACAEKAIYEPM6CyEAIARBMGokACAACwwAIAAQ9w8aIAAQPQuqAwIGfwF+IwBBIGsiAiQAAkAgAC0ANARAIAAoAjAhAyABRQ0BIABBADoANCAAQX82AjAMAQsgAkEBNgIYIAJBGGogAEEsahCHASgCACIEQQAgBEEAShshBQJAAkACQANAIAMgBUcEQCAAKAIgEPABIgZBf0YNAiACQRhqIANqIAY6AAAgA0EBaiEDDAELCwJAIAAtADUEQCACIAItABg6ABcMAQtBASEFIAJBGGohBgJAAkADQCAAKAIoIgMpAgAhCCAAKAIkIAMgAkEYaiACQRhqIARqIgcgAkEQaiACQRdqIAYgAkEMahDtEEF/aiIDQQJLDQICQAJAIANBAWsOAgMBAAsgACgCKCAINwIAIARBCEYNAiAAKAIgEPABIgNBf0YNAiAHIAM6AAAgBEEBaiEEDAELCyACIAItABg6ABcMAQtBACEFQX8hAwsgBUUNBAsgAQ0BA0AgBEEBSA0DIARBf2oiBCACQRhqaiwAABCrBCAAKAIgELMGQX9HDQALC0F/IQMMAgsgACACLAAXEKsENgIwCyACLAAXEKsEIQMLIAJBIGokACADCwwAIAAQxQoaIAAQPQsRACAAIAAoAgRBgMAAcjYCBAsSACAAEMseIABBzO8qNgIAIAALXwECfyMAQRBrIgMkACAAEOEVIQQgACABNgIgIABBpPcqNgIAIANBCGogBBC3CSADQQhqEO8PIQEgA0EIahCOASAAIAI2AiggACABNgIkIAAgARCcBzoALCADQRBqJAALXwECfyMAQRBrIgMkACAAEMQKIQQgACABNgIgIABBvPYqNgIAIANBCGogBBC3CSADQQhqEPsKIQEgA0EIahCOASAAIAI2AiggACABNgIkIAAgARCcBzoALCADQRBqJAALLAEBfyAAKAIAIgEEQCABENoVQX8QkANFBEAgACgCAEUPCyAAQQA2AgALQQELJwEBfwJAIAAoAgAiAkUNACACIAEQryRBfxCQA0UNACAAQQA2AgALCycBAX8CQCAAKAIAIgJFDQAgAiABEMweQX8QkANFDQAgAEEANgIACwsXACAAIAEgAiADIAQg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QYH/ACAEaxCLCSADKQMIIgBCGYinIQIgAykDACADKQMQIAMpAxiEQgBSrYQiBVAgAEL///8PgyIAQoCAgAhUIABCgICACFEbRQRAIAJBAWohAgwBCyAFIABCgICACIWEQgBSDQAgAkEBcSACaiECCyADQSBqJAAgAiABQiCIp0GAgICAeHFyvgvSAQEGfyMAQRBrIgEkACABQQhqEGkhAwJ/QQAgACgCACIERQ0AGgNAIAEgBBCNDyABIAEpAwA3AwggBUEQdEGAgARqQRB1IQUCfyADEE4gAxBVSgRAIAMQTgwBCyADEFULIgYgAiACQRB0QRB1IAZIGyECIAQoAhQiBA0ACyAFQQVKCyEEIAEgABC5ASABIAEpAwA3AwggAiAEdCECAkAgAy4BAkGAAkwEQCADLgEGQR9KDQELIAJBEHRBEHVBAm0hAgsgAUEQaiQAIAJBEHRBEHWyC9MBAgF/An5BfyEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQCAAIAJUIAEgA1MgASADURsNASAAIAKFIAEgA4WEQgBSDwsgACACViABIANVIAEgA1EbDQAgACAChSABIAOFhEIAUiEECyAEC2YBA38jAEEQayIBJABBACABQQhqECsaIAFBCGpBBHYgAGogASgCDEGBgARscyECA0AgACADaiACQQ9xIAJBAXRBIHFyQcEAajoAACACQQV2IQIgA0EBaiIDQQZHDQALIAFBEGokAAsQACAAIAEgABByQQFqENskC8oBAQN/IwBBIGsiBCQAAkACQCABLAAAIgMEQCABLQABDQELIAAgAxD+DyEDDAELIARBAEEgEGUaIAEtAAAiAgRAA0AgBCACQQN2QRxxaiIDIAMoAgBBASACQR9xdHI2AgAgAS0AASECIAFBAWohASACDQALCyAAIQMgAC0AACICRQ0AIAAhAQNAIAQgAkEDdkEccWooAgAgAkEfcXZBAXEEQCABIQMMAgsgAS0AASECIAFBAWoiAyEBIAINAAsLIARBIGokACADIABrC1cBAn8gACAAEHIiBGoh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KAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEH+fWo2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEF/aiIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C6sDAQF/IwBBIGsiAiQAIAIgADYCGCACIAE2AhQgAkEANgIQIAJBADYCBAJAAkAgAigCGARAIAIoAhgoAhwNAQsgAkF+NgIcDAELIAIgAigCGCgCHDYCDCACKAIUQX9GBEAgAkEGNgIUCwJAAkAgAigCFEEASA0AIAIoAhRBCUoNACACKAIQQQBIDQAgAigCEEEETA0BCyACQX42AhwMAQsgAiACKAIMKAKEAUEMbEGgjCpqKAIINgIIAkAgAigCECACKAIMKAKIAUYEQCACKAIIIAIoAhRBDGxBoIwqaigCCEYNAQsgAigCGCgCCEUNACACIAIoAhhBBRC3BTYC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AigCECgCLDYCEAwBCwsgAigCJEEANgJICyACIAIoAiRBPGogAigCKEECdGooAgA2AhwgAigCJEE8aiACKAIoQQJ0akEANgIAA0AgAigCHARAIAIgAigCHCgCADYCDCACIAIoAhwoAgQgAigCHCgCCGpBEGo2AhggAigCLCACKAIcIAIoAhgQrBAgAigCJCIAIAAoAkwgAigCGGs2AkwgAiACKAIMNgIcDAELCyACIAIoAiRBNGogAigCKEECdGooAgA2AiAgAigCJEE0aiACKAIoQQJ0akEANgIAA0AgAigCIARAIAIgAigCICgCADYCCCACIAIoAiAoAgQgAigCICgCCGpBEGo2AhggAigCLCACKAIgIAIoAhgQrBAgAigCJCIAIAAoAkwgAigCGGs2AkwgAiACKAIINgIgDAELCyACQTBqJAALywQBAX8jAEEwayIBJAAgASAANgIsIAEoAixBADYCBCABQYCU69wDNgIcIAEoAhxBgJTr3ANHBEAgASgCLCgCAEECNgIUIAEoAiwgASgCLCgCACgCABEAAAsgASABKAIsEJIXNgIkIAEgASgCLEHUABCtEDYCKCABKAIoRQRAIAEoAiwQkAcgASgCLCgCAEE4NgIUIAEoAiwoAgBBADYCGCABKAIsIAEoAiwoAgAoAgARAAALIAEoAihBjgU2AgAgASgCKEGNBTYCBCABKAIoQYwFNgIIIAEoAihBiwU2AgwgASgCKEGKBTYCECABKAIoQYkFNgIUIAEoAihBiAU2AhggASgCKEGHBTYCHCABKAIoQYYFNgIgIAEoAihBhQU2AiQgASgCKEGEBTYCKCABKAIoQYCU69wDNgIwIAEoAiggASgCJDYCLCABQQE2AiADQCABKAIgQQBIRQRAIAEoAihBNGogASgCIEECdGpBADYCACABKAIoQTxqIAEoAiBBAnRqQQA2AgAgASABKAIgQX9qNgIgDAELCyABKAIoQQA2AkQgASgCKEEANgJIIAEoAihB1AA2AkwgASgCLCABKAIoNgIEIAFBl8IAEO0HIgA2AhggAARAIAFB+AA6ABcgASgCGCEAIAEgAUEXajYCBCABIAFBJGo2AgAgAEHT/wAgARD7AkEASgRAAkAgASwAF0HtAEcEQCABLAAXQc0ARw0BCyABIAEoAiRB6AdsNgIkCyABKAIoIAEoAiRB6AdsNgIsCwsgAUEwaiQAC0kBAX8jAEEQayIDJAAgAyAANgIMIAMgATYCCCADIAI2AgQgAygCDCgCAEEzNgIUIAMoAgwgAygCDCgCACgCABEAACADQRBqJAALpAQBAX8jAEHQA2siBCQAIAQgADYCzAMgBCABNgLIAyAEIAI2AsQDIAQgAzYCwAMgBCAEKALMAygC4AM2ArwDIAQgBCgCvAMoAhg2ArgDIAQgBCgCyANBAnU2AsgDIAQgBCgCxANBA3U2AsQDIAQgBCgCwANBAnU2AsADIAQgBCgCyANBBXRBBGo2ArQDIAQgBCgCxANBBXRBAmo2ArADIAQgBCgCwANBBXRBBGo2AqwDIAQgBCgCzAMgBCgCtAMgBCgCsAMgBCgCrAMgBEGQAWoiABCwKDYCjAEgBCgCzAMgBCgCtAMgBCgCsAMgBCgCrAMgBCgCjAEgACAEEK8oIAQgBCgCyANBAnQ2AsgDIAQgBCgCxANBA3Q2AsQDIAQgBCgCwANBAnQ2AsADIAQgBDYCnAMgBEEANgKoAwNAIAQoAqgDQQRORQRAIARBADYCpAMDQCAEKAKkA0EITkUEQCAEIAQoArgDIAQoAsgDIAQoAqgDakECdGooAgAgBCgCxAMgBCgCpANqQQZ0aiAEKALAA0EBdGo2ApgDIARBADYCoAMDQCAEKAKgA0EETkUEQCAEIAQoApwDIgBBAWo2ApwDIAAtAABBAWohACAEIAQoApgDIgFBAmo2ApgDIAEgADsBACAEIAQoAqADQQFqNgKgAwwBCwsgBCAEKAKkA0EBajYCpAMMAQsLIAQgBCgCqANBAWo2AqgDDAELCyAEQdADaiQAC4UDAQF/IwBBIGsiASQAIAEgADYCHCABIAEoAhwoAuADNgIYIAEgASgCHEEBQfwPIAEoAhwoAgQoAgARBAA2AhQgASABKAIUQfwHajYCFCABKAIYIAEoAhQ2AiggAUEANgIMIAFBADYCEANAIAEoAhBBEE5FBEAgASgCFCABKAIQQQJ0aiABKAIMNgIAIAEoAhRBACABKAIQa0ECdGpBACABKAIMazYCACABIAEoAhBBAWo2AhAgASABKAIMQQFqNgIMDAELCwNAIAEoAhBBME5FBEAgASgCFCABKAIQQQJ0aiABKAIMNgIAIAEoAhRBACABKAIQa0ECdGpBACABKAIMazYCACABIAEoAhBBAWo2AhAgASABKAIMQQBBASABKAIQQQFxG2o2AgwMAQsLA0AgASgCEEH/AUpFBEAgASgCFCABKAIQQQJ0aiABKAIMNgIAIAEoAhRBACABKAIQa0ECdGpBACABKAIMazYCACABIAEoAhBBAWo2AhAMAQsLIAFBIGokAAtDAQF/IwBBEGsiBCAANgIMIAQgATYCCCAEIAI2AgQgBCADNgIAIAQoAgAgBCgCBEEBdEEBakH/AWxqIAQoAgBBAXRtC5oBAQF/IwBBEGsiASQAIAEgADYCDCABIAEoAgwoAuADNgIIIAEgASgCDCgCcEECakEBdDYCBCABQQA2AgADQCABKAIAIAEoAgwoAnhORQRAIAEoAgxBASABKAIEIAEoAgwoAgQoAgQRBAAhACABKAIIQcQAaiABKAIAQQJ0aiAANgIAIAEgASgCAEEBajYCAAwBCwsgAUEQaiQAC7kEAQN/IwBBMGsiASQAIAEgADYCLCABIAEoAiwoAuADNgIoAkAgASgCLCgCWEEBRgRAIAFB/gM2AgggASgCKEEBNgIcDAELIAFBADYCCCABKAIoQQA2AhwLIAEoAixBASABKAIIQYACaiABKAIsKAJ4IAEoAiwoAgQoAggRBwAhACABKAIoIAA2AhggASABKAIoKAIUNgIQIAFBADYCIANAIAEoAiAgASgCLCgCeEgEQCABIAEoAihBIGogASgCIEECdGooAgA2AhQgASABKAIQIAEoAhRtNgIQIAEoAggEQCABKAIoKAIYIAEoAiBBAnRqIgAgACgCAEH/AWo2AgALIAEgASgCKCgCGCABKAIgQQJ0aigCADYCJCABQQA2AgwgASABKAIsIAEoAiBBACABKAIUQQFrEIsXNgIYIAFBADYCHANAIAEoAhxB/wFKRQRAA0AgASgCHCABKAIYTEUEQCABKAIsIQAgASgCICECIAEgASgCDEEBaiIDNgIMIAEgACACIAMgASgCFEEBaxCLFzYCGAwBCwsgASgCJCABKAIcaiABKAIMIAEoAhBsOgAAIAEgASgCHEEBajYCHAwBCwsgASgCCARAIAFBATYCHANAIAEoAhxB/wFKRQRAIAEoAiQgASgCHGsgASgCJC0AADoAACABKAIkIAEoAhxB/wFqaiABKAIkLQD/AToAACABIAEoAhxBAWo2AhwMAQsL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DCABKAIMKAIAKAIAEQAACwsgASgCCCIAIAAoAgRBf2o2AgQgASgCCCICKAIAIQAgAiAAQQFqNgIAIAAtAAAhACABQRBqJAAgAAuBAwEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMKALcAzYCCCABKAIMQQFBgAggASgCDCgCBCgCABEEACEAIAEoAgggADYCCCABKAIMQQFBgAggASgCDCgCBCgCABEEACEAIAEoAgggADYCDCABKAIMQQFBgAggASgCDCgCBCgCABEEACEAIAEoAgggADYCECABKAIMQQFBgAggASgCDCgCBCgCABEEACEAIAEoAgggADYCFCABQQA2AgQgAUGAfzYCAANAIAEoAgRB/wFKRQRAIAEoAggoAgggASgCBEECdGogASgCAEHpzQVsQYCAAmpBEHU2AgAgASgCCCgCDCABKAIEQQJ0aiABKAIAQaKLB2xBgIACakEQdTYCACABKAIIKAIQIAEoAgRBAnRqIAEoAgBBrpJ9bDYCACABKAIIKAIUIAEoAgRBAnRqIAEoAgBB5s9+bEGAgAJqNgIAIAEgASgCBEEBajYCBCABIAEoAgBBAWo2AgAMAQsLIAFBEGokAAsgACAAEG8iACABLwEAIAJsOwEAIAAgAS8BAiACbDsBAgtoAQF/IwBBEGsiASAANgIMIAEgASgCDCgCzAM2AgggASgCDEEANgLYASABKAIMQQA2ApABIAEoAgxBADYCtAMgASgCCEEANgIMIAEoAghBADYCECABKAIIQQA2AhggASgCCEEANgKkAQu7AwEBfyMAQSBrIgEkACABIAA2AhggASABKAIYKAIYNgIQIAEgASgCECgCADYCDCABIAEoAhAoAgQ2AggCQCABKAIIRQRAIAEoAhggASgCECgCDBEBAEUEQCABQQA2AhwMAgsgASABKAIQKAIANgIMIAEgASgCECgCBDYCCAsgASABKAIIQX9qNgIIIAEgASgCDCIAQQFqNgIMIAEgAC0AAEEIdDYCFCABKAIIRQRAIAEoAhggASgCECgCDBEBAEUEQCABQQA2AhwMAgsgASABKAIQKAIANgIMIAEgASgCECgCBDYCCAsgASABKAIIQX9qNgIIIAEgASgCDCIAQQFqNgIMIAEgAC0AACABKAIUajYCFCABIAEoAhRBAms2AhQgASgCGCgCAEHdADYCFCABKAIYKAIAIAEoAhgoArQDNgIYIAEoAhgoAgAgASgCFDYCHCABKAIYQQEgASgCGCgCACgCBBECACABKAIQIAEoAgw2AgAgASgCECABKAIINgIEIAEoAhRBAEoEQCABKAIYIAEoAhQgASgCGCgCGCgCEBECAAsgAUEBNgIcCyABKAIcIQAgAUEgaiQAIAALawEBfyMAQRBrIgEkACABIAA2AgwgASgCDBDrKSABKAIMEOopIAEoAgwgASgCDCgC0AMoAgARAAAgASgCDCABKAIMKALAAygCABEAACABKAIMKALIAyABKAIMKALAAygCBDYCACABQRBqJAALHgEBfyAABEACfyAAKAIEIgEEQCABED0LIAALED0LC0gBAX8jAEEQayIDJAAgAyAANgIMIAMgATYCCCADIAI2AgQgAyADKAIIEJQqNgIIIAMoAgwgAygCCCADKAIEEJUqIANBEGokAAutAwEBfyMAQSBrIgUkACAFIAA2AhwgBSABNgIYIAUgAjYCFCAFIAM2AhAgBSAENgIMIAUoAhwoAhRB5ABHBEAgBSgCHCgCAEEVNgIUIAUoAhwoAgAgBSgCHCgCFDYCGCAFKAIcIAUoAhwoAgAoAgARAAALAkAgBSgCGEEATgRAIAUoAhhBBEgNAQsgBSgCHCgCAEEgNgIUIAUoAhwoAgAgBSgCGDYCGCAFKAIcIAUoAhwoAgAoAgARAAALIAUgBSgCHEHYAGogBSgCGEECdGo2AgggBSgCCCgCAEUEQCAFKAIcEJwXIQAgBSgCCCAANgIACyAFQQA2AgQDQCAFKAIEQcAASARAIAUgBSgCFCAFKAIEQQJ0aigCACAFKAIQbEEyakHkAG02AgAgBSgCAEEATARAIAVBATYCAAsgBSgCAEH//wFKBEAgBUH//wE2AgALAkAgBSgCDEUNACAFKAIAQf8BTA0AIAVB/wE2AgALIAUoAggoAgAgBSgCBEEBdGogBSgCADsBACAFIAUoAgRBAWo2AgQMAQsLIAUoAggoAgBBADYCgAEgBUEgaiQAC0wBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDEEAQYQBIAEoAgwoAgQoAgARBAA2AgggASgCCEEANgKAASABKAIIIQAgAUEQaiQAIAALwgMBAX8jAEEgayICJAAgAiAANgIcIAIgATYCGCACIAIoAhxB2ABqIAIoAhhBAnRqKAIANgIUIAIoAhRFBEAgAigCHCgCAEE2NgIUIAIoAhwoAgAgAigCGDYCGCACKAIcIAIoAhwoAgAoAgARAAALIAJBADYCECACQQA2AgwDQCACKAIMIAIoAhwoAoADTARAIAIoAhQgAigCHCgC/AIgAigCDEECdGooAgBBAXRqLwEAQf8BSgRAIAJBATYCEAsgAiACKAIMQQFqNgIMDAELCyACKAIUKAKAAUUEQCACKAIcQdsBELkEIAIoAhwCfyACKAIQBEAgAigCHCgCgANBAXRBBWoMAQsgAigCHCgCgANBBGoLEMMDIAIoAhwgAigCGCACKAIQQQR0ahDdASACQQA2AgwDQCACKAIMIAIoAhwoAoADTARAIAIgAigCFCACKAIcKAL8AiACKAIMQQJ0aigCAEEBdGovAQA2AgggAigCEARAIAIoAhwgAigCCEEIdhDdAQsgAigCHCACKAIIQf8BcRDdASACIAIoAgxBAWo2AgwMAQsLIAIoAhRBATYCgAELIAIoAhAhACACQSBqJAAgAAucAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMQQFBICABKAIMKAIEKAIAEQQANgIIIAEoAgwgASgCCDYClAMgASgCCEH7AzYCACABKAIIQfoDNgIEIAEoAghB+QM2AgggASgCCEH4AzYCDCABKAIIQfcDNgIQIAEoAghB9gM2AhQgASgCCEH1AzYCGCABKAIIQQA2AhwgAUEQaiQAC8sFAQJ/IwBB0ABrIgIkACACIAA2AkggAiABNgJEIAIgAigCSCgCkAM2AkAgAkEANgI0A0AgAigCNCACKAJIKAKgAk5FBEAgAiACKAJIQaQCaiACKAI0QQJ0aigCADYCCCACKAJIIAIoAkBBQGsgAigCCCgCBEECdGooAgAgAigCQCgCCCACKAIIKAIMbCACKAIIKAIMQQAgAigCSCgCBCgCIBEJACEAIAJBEGogAigCNEECdGogADYCACACIAIoAjRBAWo2AjQMAQsLIAIgAigCQCgCEDYCKAJAA0AgAigCKCACKAJAKAIUSARAIAIgAigCQCgCDDYCPANAIAIoAjwgAigCSCgCtAJJBEAgAkEANgI4IAJBADYCNANAIAIoAjQgAigCSCgCoAJORQRAIAIgAigCSEGkAmogAigCNEECdGooAgA2AgggAiACKAI8IAIoAggoAjhsNgIkIAJBADYCLANAIAIoAiwgAigCCCgCPE5FBEAgAiACQRBqIAIoAjRBAnRqKAIAIAIoAiwgAigCKGpBAnRqKAIAIAIoAiRBB3RqNgIMIAJBADYCMANAIAIoAjAgAigCCCgCOE5FBEAgAiACKAIMIgBBgAFqNgIMIAIoAkBBGGohASACIAIoAjgiA0EBajYCOCADQQJ0IAFqIAA2AgAgAiACKAIwQQFqNgIwDAELCyACIAIoAixBAWo2AiwMAQsLIAIgAigCNEEBajYCNAwBCwsgAigCSCACKAJAQRhqIAIoAkgoAqQDKAIEEQMABEAgAiACKAI8QQFqNgI8DAIFIAIoAkAgAigCKDYCECACKAJAIAIoAjw2AgwgAkEANgJMDAULAAsLIAIoAkBBADYCDCACIAIoAihBAWo2AigMAQsLIAIoAkAiACAAKAIIQQFqNgIIIAIoAkgQtRAgAkEBNgJMCyACKAJMIQAgAkHQAGokACAAC1wBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCEH/AEEHEIIIRQRAIAFBADYCDAwBCyABKAIIQQA2AgggASgCCEEANgIMIAFBATYCDAsgASgCDCEAIAFBEGokACAACzwBAX8jAEEQayIBJAAgASAANgIMIAEoAgxB/wBBBxC/BiABKAIMQQA2AgwgASgCDEEANgIQIAFBEGokAAv+CgEBfyMAQfAQayIDJAAgAyAANgLsECADIAE2AugQIAMgAjYC5BAgA0HAEGoiAEIANwMAIABBADoAICAAQgA3AxggAEIANwMQIABCADcDCCADQbAIakEAQYQIEGUaIANBADYCEANAIAMoAhBBgQJORQRAIANBIGogAygCEEECdGpBfzYCACADIAMoAhBBAWo2AhAMAQsLIAMoAuQQQQE2AoAIA0AgA0F/NgIcIANBgJTr3AM2AgggA0EANgIQA0AgAygCEEGAAkpFBEACQCADKALkECADKAIQQQJ0aigCAEUNACADKALkECADKAIQQQJ0aigCACADKAIISg0AIAMgAygC5BAgAygCEEECdGooAgA2AgggAyADKAIQNgIcCyADIAMoAhBBAWo2AhAMAQsLIANBfzYCGCADQYCU69wDNgIIIANBADYCEANAIAMoAhBBgAJKRQRAAkAgAygC5BAgAygCEEECdGooAgBFDQAgAygC5BAgAygCEEECdGooAgAgAygCCEoNACADKAIQIAMoAhxGDQAgAyADKALkECADKAIQQQJ0aigCADYCCCADIAMoAhA2AhgLIAMgAygCEEEBajYCEAwBCwsgAygCGEEATgRAIAMoAuQQIAMoAhxBAnRqIgAgAygC5BAgAygCGEECdGooAgAgACgCAGo2AgAgAygC5BAgAygCGEECdGpBADYCACADQbAIaiADKAIcQQJ0aiIAIAAoAgBBAWo2AgADQCADQSBqIAMoAhxBAnRqKAIAQQBIRQRAIAMgA0EgaiADKAIcQQJ0aigCADYCHCADQbAIaiADKAIcQQJ0aiIAIAAoAgBBAWo2AgAMAQsLIANBIGogAygCHEECdGogAygCGDYCACADQbAIaiADKAIYQQJ0aiIAIAAoAgBBAWo2AgADQCADQSBqIAMoAhhBAnRqKAIAQQBIRQRAIAMgA0EgaiADKAIYQQJ0aigCADYCGCADQbAIaiADKAIYQQJ0aiIAIAAoAgBBAWo2AgAMAQsLDAELCyADQQA2AhADQCADKAIQQYACTARAIANBsAhqIAMoAhBBAnRqKAIABEAgA0GwCGogAygCEEECdGooAgBBIEoEQCADKALsECgCAEEoNgIUIAMoAuwQIAMoAuwQKAIAKAIAEQAACyADQbAIaiADKAIQQQJ0aigCACADQcAQamoiACAALQAAQQFqOgAACyADIAMoAhBBAWo2AhAMAQsLIANBIDYCEANAIAMoAhBBEExFBEADQCADKAIQIANBwBBqai0AAEEATEUEQCADIAMoAhBBAms2AgwDQCADKAIMIANBwBBqai0AAEUEQCADIAMoAgxBf2o2AgwMAQsLIAMoAhAgA0HAEGpqIgAgAC0AAEF+ajoAACADKAIQIANqQb8QaiIAIAAtAABBAWo6AAAgAygCDCADQcAQamoiACAALQABQQJqOgABIAMoAgwgA0HAEGpqIgAgAC0AAEF/ajoAAAwBCwsgAyADKAIQQX9qNgIQDAELCwNAIAMoAhAgA0HAEGpqLQAARQRAIAMgAygCEEF/ajYCEAwBCwsgAygCECADQcAQamoiACAALQAAQX9qOgAAIAMoAugQIgAgA0HAEGoiASkCADcCACAAIAEtABA6ABAgACABKQIINwIIIANBADYCFCADQQE2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aiAHKAKwBEEBdGpBADsBACAHQcAIaiAHKAKwBEEBdGpBADsBACAHQcAMaiAHKAKwBEEBdGpBADsBACAHIAcoArAEQQFqNgKwBAwBCwsgBygCkAQQPSAHKAKMBBA9IAcoAogEED0gBygC6BAhACAHQQM2ArACIABBhgIgB0GwAmoQkAEaIAcoAugQIQAgB0EBNgLAAiAAQZUCIAdBwAJqEJABGiAHKALoECEAIAcgBygCtARB//8DcTYC0AIgAEGCAiAHQdACahCQARogBygC6BAhACAHIAdBwARqNgLoAiAHIAdBwAhqNgLkAiAHIAdBwAxqNgLgAiAAQcACIAdB4AJqEJABGgsLCwJAIAcoArQEQRhGDQAgBygCtARBIEYNACAHKALoECEAIAcgBygCtARB//8DcTYCwAEgAEGCAiAHQcABahCQARogBygC6BAhACAHQQE2AtABIABBlQIgB0HQAWoQkAEaCyAHKALoECEAIAdBATYCsAEgAEGcAiAHQbABahCQARoCQCAHKALgEEEERgRAIAcoAugQIQAgB0EBNgIgIABBgwIgB0EgahCQARoMAQsCQCAHKALgEEEIRgRAIAcoAugQIQAgB0EENgIwIABBgwIgB0EwahCQARoMAQsCQCAHKALgEEEHRgRAIAcoAugQIQAgB0EDNgJAIABBgwIgB0FAaxCQARoMAQsCQCAHKALgEEEGRgRAIAcoAugQIQAgB0ECNgJQIABBgwIgB0HQAGoQkAEaDAELAkAgBygC4BBBBUYEQCAHKALoECEAIAdBhYACNgJgIABBgwIgB0HgAGoQkAEaDAELAkAgBygC4BBBCUYEQCAHKALoECEAIAdBBTYCcCAAQYMCIAdB8ABqEJABGgwBCwJAIAcoAuAQQQpGBEAgBygC6BAhACAHQQg2AoABIABBgwIgB0GAAWoQkAEaDAELQQRB4PMsKAIATgRAQfjEKigCACEAIAdBwLYiNgKgASAAQYWXDSAHQaABahBWGgsgBygC6BAhACAHQQE2ApABIABBgwIgB0GQAWoQkAEaCwsLCwsLCyAHKALoECAHKALcECAHKALYECAHKALUECAHKALQEBCJKyAHIAcoAugQEMIDNgKcBCAHIAcoAuQQEGc2AqQEIAcgBygCpARBAnQ2AqAEIAcoApwEIAcoAqAESgRAQfjEKigCACEA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IAMgAygCdEECdDYCeCADIAMoAgwoAgA2AogBDAELAkAgAygCYEEBRgRAIANBCDYCeCADQQI2AnQgA0GA8iw2AogBDAELIANBASADKAJcdDYCdCADIAMoAnRBAnQ2AnggA0EBNgIwIAMgAygCeEEBEHY2AogBIANB/wEgAygCdEEBa202AmwgA0EANgI8IANBADYCcCADIAMoAogBNgIIA0AgAygCPCADKAJ0TkUEQCADKAIIIAMoAnAiADoAAiADKAIIIAA6AAEgAygCCCAAOgAAIAMoAghB/wE6AAMgAyADKAI8QQFqNgI8IAMgAygCbCADKAJwajYCcCADIAMoAghBBGo2AggMAQsLCwsLIAMgAygCeEE2ajYCLCADIAMoAiwgAygCKGo2AhwgAyADKAIcQQEQdjYChAEgAygCmAEgAygChAE2AgAgAygClAEgAygCHDYCACADIAMoAoQBNgIYQcKaARCGBSEAIAMoAhggADsBACADKAIcQf//A3EQhgUhACADKAIYIAA7AQIgAygCHEEQdhCGBSEAIAMoAhggADsBBCADKAIsQf//A3EQhgUhACADKAIYIAA7AQogAygCLEEQdhCGBSEAIAMoAhggADsBDCADIAMoAoQBQQ5qNgIUQSgQugQhACADKAIUIAA2AgAgAygCaBC6BCEAIAMoAhQgADYCBCADKAJkELoEIQAgAygCFCAANgIIQQEQhgUhACADKAIUIAA7AQwgAygCXEH//wNxEIYFIQAgAygCFCAAOwEOIAMoAigQugQhACADKAIUIAA2AhQgAygCWBC6BCEAIAMoAhQgADYCGCADKAJUELoEIQAgAygCFCAANgIcIAMoAnQQugQhACADKAIUIAA2AiAgAygCdBC6BCEAIAMoAhQgADYCJCADKAJ0QQBKBEAgAygChAFBNmogAygCiAEgAygCeBBYGiADKAIwBEAgAygCiAEQPQsLAkAgAygCXEEBRw0AIAMoAgxFDQAgAygCDCgCAC0AAA0AIAMoAhAgAygCEBD5BRoLIAMoAhAQlg0aIAMgAygChAEgAygCLGo2AnwCQCADKAJcQRhHBEAgAyADKAIQEGMgAygCTCADKAJkQQFrbGo2AoABIANBADYCPANAIAMoAjwgAygCZE5FBEAgAygCfCADKAKAASADKAJEEFgaIAMgAygCgAEgAygC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BqdBBHIgBkIgiKcbED8iAyABNgIAIANBBGohAyABBEAgAyABQfAAbGohBCADIQIDQCACQSBqEPEcGiACQfAAaiICIARHDQALCyAAKAIIIgJBAU4EQEEAIQQDQCADIARB8ABsIgJqIAAoAgAgAmoQ5jggBEEBaiIEIAAoAggiAkgNAAsLIAIgAUgEQANAIAMgAkHwAGxqIABBrMosKAIAENEFNgJEIAJBAWoiAiABRw0ACwsgACgCACIFBEAgBUF8aiIEKAIAIgIEQCAFIAJB8ABsaiECA0AgAkGQf2oQ+hwiAiAFRw0ACwsgBBA9CyAAIAE2AgwgACADNgIACwtUACAAQQA2AgAgAEEEahDUARogAEIANwIQIABCADcCCCAAEMEOIABBoMosKAIAEJYGIABBpMosKAIAEJYGIABBAUEBEIcTIABBqMosKAIAEJYGIAALbgAgACABKQIANwIAIAAgASgCMDYCMCAAIAEpAig3AiggACABKQIgNwIgIAAgASkCGDcCGCAAIAEpAhA3AhAgACABKQIINwIIIABBNGogAUE0ahDfAyAAQcgAaiABQcgAahD0ASAAIAEoAkw2AkwLWAAgAEEANgIAIABBADYAAyAAQgA3AgwgAEGA/oN4NgAHIABCADcCFCAAQgA3AhwgAEEANgIwIABCADcCJCAAQcgAakGVywQQ2gEgAEEANgJMIABBADYCLAsbACAAQTRqEGsaIABByABqEIMBGiAAEPAcIAALCgAgACABEMABGgvdAgEFfyAAEF4aAkAgAQRAIAACf0H/////AyABIgRJBEBBpMoDEIUDAAsgBEECdEEEEOMCCxDwBSAAEF4gBDYCAANAIAAgAhBhQQA2AgAgAkEBaiICIARHDQALIABBCGoiASgCACIDRQ0BIAAgAygCBCAEEPkBIgYQYSABNgIAIAMoAgAiAUUNAQNAAkAgBiABKAIEIAQQ+QEiBUYEQCABIQMMAQsCQAJAIAAgBRBhKAIABEAgASECIAEoAgBFDQIgABBMIAFBCGogASgCAEEIahC/Dg0BDAILIAAgBRBhIAM2AgAgASEDIAUhBgwCCwNAIAIoAgAiAigCAEUNASAAEEwgAUEIaiACKAIAQQhqEL8ODQALCyADIAIoAgA2AgAgAiAAIAUQYSgCACgCADYCACAAIAUQYSgCACABNgIACyADKAIAIgENAAsMAQsgAEEAEPAFIAAQXkEANgIACwsIACABEPA4pwsTACAAQcgAahBGGiAAQTRqEF0aC0sBAX8jAEEQayICJAACQCAAKAIEIAAQQigCAEcEQCAAEEIgACgCBCABEPEFIAAgACgCBEEEajYCBAwBCyAAIAEQhx0LIAJBEGokAAsPACAAIAAoAgAoAgA2AgALKQECfyMAQRBrIgEkACABQQhqIgIgABDyHCACKAIAIQAgAUEQaiQAIAALeQEDfyAAQX82AmQgACgCAEEASgRAA0BBACEBIAAgAxDxEiICKAIEQQBKBEADQCACIAEQlwMgACgCZEoEQCAAIAIgARCXAzYCZAsgAUEBaiIBIAIoAgRIDQALCyADQQFqIgMgACgCAEgNAAsLIAAgACgCZEEBajYCZAsMACAAQSBqEPUcIAALCQAgACABEPw4C9wDAgV/BX4jAEGQAWsiASQAAkAgACgCBEEBSA0AIAAoAgwiA0UNAEEBIQQgACgCAEEBSA0AIAEgACgCCCICKAIoIgU2AogBIAEgAikCICIGNwOAASABIAIpAhgiBzcDeCABIAIpAhAiCDcDcCABIAIpAggiCTcDaCABIAIpAgAiCjcDYCADKAIAKAIIIQIgASAFNgJYIAEgBjcDUCABIAc3A0ggAUFAayAINwMAIAEgCTcDOCABIAo3AzAgAyABQTBqIAIRAgAgACgCAEECSA0AA0AgACgCDCEDIAEgACgCCCAEQSxsaiICKAIoIgU2AogBIAEgAikCICIGNwOAASABIAIpAhgiBzcDeCABIAIpAhAiCDcDcCABIAIpAggiCTcDaCABIAIpAgAiCjcDYCADKAIAKAIIIQIgASAFNgIoIAEgBjcDICABIAc3AxggASAINwMQIAEgCTcDCCABIAo3AwAgAyABIAIRAgAgBEEBaiIEIAAoAgBIDQALCyAAKAIIIgIEQCACED0LIABCADcCACAAQQA2AgggACgCDCICBEAgAiACKAIAKAIEEQAACyAAQQA2AgwgACgCECICBEAgAiACKAIAKAIEEQAACyAAQQA2AhAgAUGQAWokAAsQACAAIAI6ACEgACABOgAgCygBAX8jAEEQayIBJAAgAUEIaiAAEPM4EMABKAIAIQAgAUEQaiQAIAALpwQBCn8jAEHQAGsiASQAIAAQgB0gACgCZCEC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ARogAEE0ahCrARogAEHIAGoQqwEaIABB3ABqEKsBGiAAQfAAahCrARogAEGEAWoQqwEaIABBmAFqEKsBGiAAQawBahCrARogAEHAAWoQqwEaIABB1AFqEKsBGiAAQegBahCrARogAEH8AWoQqwEaIABBkAJqEKsBGiAAQaQCahCrARogAEG4AmoQqwEaIABBzAJqEKsBGiAAQeACahCrARogAEH0AmoQqwEaIABBiANqEKsBGiAAQZwDahCrARogAEGwA2oQqwEaIABBxANqEKsBGiAAQdgDahCrARogACACQcMUEIUCIgEQ9hIgARBgGiACQRBqJAAgAAurAgECfyMAQRBrIgEkACAAEIMBGiAAQQA7AQggAEEANgIEIABBDGoQqwEaIABBIGoQqwEaIABBNGoQqwEaIABByABqEKsBGiAAQdwAahCrARogAEHwAGoQqwEaIABBhAFqEKsBGiAAQZgBahCrARogAEGsAWoQqwEaIABBwAFqEKsBGiAAQdQBahCrARogAEHoAWoQqwEaIABB/AFqEKsBGiAAQZACahCrARogAEGkAmoQqwEaIABBuAJqEKsBGiAAQcwCahCrARogAEHgAmoQqwEaIABB9AJqEKsBGiAAQYgDahCrARogAEGcA2oQqwEaIABBsANqEKsBGiAAQcQDahCrARogAEHYA2oQqwEaIAAgAUHDFBCFAiICEPYSIAIQYBogAUEQaiQAIAALNgEBfwJ/IAFFBEAgAEEBQRAQxQgMAQsgACACQQFqIgMgAxDFCCABIAIQWCACagtBADoAACAAC08BAn8gACgCAEF/aiICIAFKBEAgACgCCCEDA0AgAyABQQJ0aiADIAFBAWoiAUECdGooAgA2AgAgASAAKAIAQX9qIgJIDQALCyAAIAI2AgALEAAgACABQQggAhCiBRpBAQsJACAAIAEQ8h8LGQAgACABQSBuQQJ0aigCACABQR9xdkEBcQsmAQF/IwBBEGsiAiQAIAIgATYCDCAAIAEQlDkhACACQRBqJAAgAAsSACAAEKoEIAAgASACEI8iIAALBwAgASAAawsJACAAEMkOED0LngQBB38jAEGgAWsiBSQAIAVBEGogBUEYahCcOSIGKAIAQXRqKAIAIAVBGGpqEKsDEM0DQQJBASABGyIDQQEgA0EBSxshCCAFQRBqEI4BA0AgASED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BigCACAEajYCACACIAVIDQALCyADQRBqJAALCQAgABCjEyAAC+wIAwJ/EX4FfCMAQbAEayICJAAgAkGgBGogACsDMCIWENADIAJBkARqIAAoAgAiAxCRBCACQYAEaiACKQOgBCIIIAIpA6gEIgkgAikDkAQiBSACKQOYBCIGEMMBIAJB0ANqIAArAyAiFxDQAyACQcADaiACKQPQAyIHIAIpA9gDIgQgByAEEMMBIAJBsANqIAIpA4AEIAIpA4gEIAIpA8ADIAIpA8gDEOsFIAJB8ANqIAUgBkIAQoCAgICAgMD6PxDDASACQeADaiACKQPwAyACKQP4AyAFIAYQwwEgAAJ8AkAgA0ECSCABQQFIckUEQCACKQOwAyIMIAIpA7gDIg0gAikD4AMiESACKQPoAyISEIYHQX9KDQELIABCADcDCCAAQgA3AxBEAAAAAAAAAAAgAUEASCADQQFIcg0BGiAAKwMoIAO3owwBCyACQYADaiAAKQNQIAApA1ggBSAGEMMBIAJB4AJqIAggCSAHIAQQwwEgAkHQAmogAikDgAMgAikDiAMgAikD4AIgAikD6AIQ6wUgAkGgA2ogACsDOBDQAyACQfACaiAFIAYgAikDoAMgAikDqAMQwwEgAkGQA2ogACsDKCIYENADIAJBwAJqIAcgBCACKQOQAyITIAIpA5gDIhQQwwEgAkGwAmogAikD8AIgAikD+AIgAikDwAIgAikDyAIQ6wUgAikD2AIhByACKQO4AiEEIAIpA9ACIQogAikDsAIhCwJ+IAFBAkgEQEIADAELQgAgA0EESA0AGiACQZACaiAKIAcgCyAEEMMBIAJB8AFqIAggCSATIBQQwwEgAkHgAWogACkDYCAAKQNoIAUgBhDDASACQdABaiACKQPwASACKQP4ASACKQPgASACKQPoARDrBSACQaABaiAMIA0gAikD0AEgAikD2AEQwwEgAkGQAWogAikDkAIgAikDmAIgAikDoAEgAikDqAEQrAMgAkGgAmogCiAHIAogBxDDASACQcABaiAAKQNwIAApA3ggBSAGEMMBIAJBgAJqIAggCSAIIAkQwwEgAkGwAWogAikDwAEgAikDyAEgAikDgAIgAikDiAIQ6wUgAkGAAWogDCANIAIpA7ABIAIpA7gBEMMBIAJB8ABqIAIpA6ACIAIpA6gCIAIpA4AB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IAAgARDPByECIAAoArgBIAEQeSACEM0IIQILIAILBABBDQuMAQEDfyMAQTBrIgEkACABQShqEIMBIQMgAUEQaiAAQcABahBAIgIQQSACEDxFBEADQCACEKQBRQRAIANB94UHEHgLIAMgAigCCBB/EKcCIAIQRBogAhA8RQ0ACwsgACgCuAEQfxBKIQAgASADEEo2AgQgASAANgIAQbmhByABEDsgAxBGGiABQTBqJAALvQEBAn8jAEEgayIDJAACQCABRQRAIAJFDQEgAi0AAEUNASAAKAK4ASIBRQ0BIAEQfyADQQhqIAIQeiIBENUFIQIgARBGGiACRQ0BCyAAKAK8ASIBBEAgAUHevAIQ7wQLIANBCGogAEHAAWoQQCIAEEEgABA8DQBBACEBA0AgACgCCCEEIAMQgwEiAkH66AIgARCCASAEIAIQShDvBCACEEYaIAAQRBogAUEBaiEBIAAQPEUNAAsLIANBIGokAAucAQEBfyMAQSBrIgMkACADIAI2AhwgAiAAQcwAaiICIAAoAkggAUEBEMUdGiACIANBHGogARCACiAAKAK0ASICBEAgACACIAEQzTo2ArQBIAAoArwBIgIEQCACIAEQ2h0LIAMgAEHAAWoQQCICEEEgAhA8RQRAA0AgAigCCCABENodIAIQRBogAhA8RQ0ACwsgABCEHgsgA0EgaiQACxsAIAEgAKFEAAAAAAAAIECiRAAAAAAAAPi/oAsEAEEMC5YBAQV/IwBBEGsiASQAIABB4ABqIgRBABCgASAAQfQAaiIFQQAQoAEgACgCSCgCACIDQQFOBEADQCABQQhqIAAoAkggAhA+KAIAELkBIAQgAUEIahBVEF8aIAJBAWoiAiADSARAIAEgACgCSCACED4oAgAQuQEgBSABLgEAIAEuAQxrEF8aCyACIANHDQALCyABQRBqJAALNAEBfyAAKAK0ASIBBEAgARD7HSAAKAK0ASIBBEAgASABKAIAKAIEEQAACyAAQQA2ArQBCwusAgEEfyMAQUBqIgMkACABIAAoAswBIgQEfyAEBSADQe8GNgIUIANB5Y4BNgIQQfidLEHV8QdBAkH50gAgA0EQahBFIAAoAswBCygCCEcEQCADQfAGNgIEIANB5Y4BNgIAQfidLEGgighBAkH50gAgAxBFCyAAEOsLIAAQhR5BGBA/IgQgAUEB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EEoEQCADQeUBNgIUIANB3YwBNgIQQeCdLEGa6AJBAkHE0QAgA0EQahBFCyAAIAU7ARAgAyAJKAIANgKMASABQQFOBEBBACEEA0AgA0HwAGogACAEEMsBIAcgA0HwAGoQ0wEgBEEBaiIEIAAuARBIDQALCyAHLgEAIAkuAQBGBEAgBy4BAiAJLgECRg0BCyADQesBNgIEIANB3YwBNgIAQeCdLEGFuwJBAkHE0QAgAxBFCyADQaABaiQAIAALOgEBfyABQQRtIgMgACgCFGoiACAALQAAQQMgASADQQJ0a0EBdCIAdCIBQX9zcSACIAB0IAFxcjoAAAsPACAAIAAoAgAoAggRAAAL/QEBA38jAEEQayIDJAAgAyACNgIIIAMgATYCDCADQQA2AgQgAyADQQxqIANBBGogAEEIaiIEELEBNgIMIANBADYCBCADIANBCGogA0EEaiAEELEBIgE2AgggASADKAIMQQFqIgFKBEAgAEEMaiEAA0AgACABEFEhAiAAIAMoAgwQUSACEJkBIAFBAWoiASADKAIIIgJIDQALIAQgBCgCACACIAMoAgwiAUF/c2oiBWsiAjYCACABQQFqIgEgAkgEQANAIAAgASAFahBRIQIgACABEFEgAikBADcBACABQQFqIgEgBCgCACICSA0ACwsgACACEKABCyADQRBqJAALxgICC38BfiMAQUBqIgEkAEEgED8iBBDTByEGIAQgACgCACICNgIIIARBDGoiCSACENgMIAQoAghBAU4EQANAIAAgBxA+KAIAIQggAUE4ahBpIQogCCgCACIFBEADQCAFKAIQIQIDQAJAIAIQ8QQEQCACKAIQEPEEDQELIAFBNGogAi4BACACLgECEIsBIQMgAUEwahBvIQsgCBBeIAIgCxDQByADIAEuATAQ6gEgAyABLgEyEO8BIAEgASgCNCIDNgIkIAEgAzYCICABIAM2AhQgASADNgIQIAogAUEoaiABQRRqIAFBEGoQnAMQmQELIAIoAgwiAiAFKAIQRw0ACyAFKAIUIgUNAAsLIAEgASkDOCIMNwMYIAEgDDcDCCAJIAFBCGoQjQcgB0EBaiIHIAQoAghIDQALCyAGEMsTIAFBQGskACAGCwkAIAAgARDHHguEAQIDfwF+IwBBEGsiAiQAIAAgASkCADcCACAAIAEoAgg2AgggAEEMaiID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IANBEGogBBCuASIAEK0CIAAQRhogBBBGGiADQdAAaiQACz8BAn8jAEEQayIBJAAgACABQQhqQYPPABB6IgIQrQIgAhBGGiAAIAFB24kBEHoiABCtAiAAEEYaIAFBEGokAAuzAQAgA0EAOgAAIARBADoAACAFQQA6AAACQAJAAkAgAhDnAQRAIAFFDQIgASgCHA0BCyAFQQE6AAAPCyAARQ0AIAAgARCTFARAIANBAToAACAEQQE6AAALIAAgASABKAIcQX9qEHkQmwRFDQEgBUEBOgAADwsgAhCXFARAIANBAToAACAEQQE6AAALIAIgAhDnAUF/ahDGASwAACIAEJIURQRAIAAQkRRFDQELIAVBAToAAAsLBwAgABDzEAvYAQEDfyMAQRBrIgMkAAJAIABB/wBMBEAgA0EIahCDASIBIABBGHRBGHUQggQgARCWFCECIAEQRhoMAQtBASECAkAgAEGfywBMBEAgAEHQfmoiAUEHSwRAIABBosAARw0CDAMLIAFBAWsOBgEBAQEBAQILIABB4LR/aiIBQS9LBEAgAEHmywBGIABBndYARnINAgwBCyABQQJrDi0AAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAABC0EAIQILIANBEGokACACC+YBACADQQA6AAAgBEEAOgAAIAVBADoAAAJAAkACQCACEOcBBEAgAUUNAiABKAIcDQELIAVBAToAAA8LIABFDQAgACABEJMUBEAgA0EBOgAAIARBAToAACAFQQE6AAALIAAgAUEAEHkQ+gMEQCAEQQE6AAALIAAgAUEAEHkQmwRFDQEgBEEBOgAAIAVBAToAAA8LIAIQlxQEQCADQQE6AAAgBEEBOgAACyACQQAQxgEsAAAiABCSFARAIARBAToAAAsgABCRFARAIAVBAToAAAsgAEG/f2pB/wFxQRlLDQAgBEEBOgAACws3AAJAIAAoAgggAUwNAANAIAAoAgAgACgCBCABEHkQ6AJFDQEgAUEBaiIBIAAoAghIDQALCyABC0MBAX8DQAJAIAEgACgCCE4NACAAKAIAIAAoAgQgARCvDyICQe8BSg0AIAFBrwsgAhCoBCICQQBHaiEBIAINAQsLIAELIgAgAEG3f2oiAEEmTQRAQsGAgICACSAArYinQQFxDwtBAAtNAAJAIAAoAgggAUwNAANAIAAoAgAgACgCBCABEHkQxwJFBEAgACgCACAAKAIEIAEQrw8Q3R9FDQILIAFBAWoiASAAKAIISA0ACwsgAQsHACAAEK8NC0MBAn8gAC0AACIBRQRAIAAPCwNAIAFBGHRBGHVBX3FBv39qQRpPBEAgAA8LIAAtAAEhASAAQQFqIgIhACABDQALIAILkAEBBH8gABBKIQEDQAJAIARBAksEQCABIQMMAQsgAS0AAEUEQCABIQMMAQsCQCABEJUUEJUUIgJBrwsQlwwiACACRw0AIAJBv7sHEJcMIgAgAkcNACABIQMgAhDgHyIAIAJrQQFHDQELIARBAWohBCAAIgMgAEHUiQgQlwxB4fAHEJcMIgFHDQELCyADLQAARQvDAQIGfwF+AkAgAUEBSA0AIAAoAgQgAU4NAEF/IAFBBCABQQRKGyIFrUIMfiIIpyAIQiCIpxsQPyIDIAVBDGxqIQIgAyEBA0AgARCIAkEMaiIBIAJHDQALQQAhASAAKAIIIQICQAJAIAAoAgAiBkEASgRAA0AgAyABQQxsIgRqIgcgAiAEaiIEKQIANwIAIAcgBCgCCDYCCCABQQFqIgEgBkcNAAwCAAsACyACRQ0BCyACED0LIAAgBTYCBCAAIAM2AggLCwkAIAAgARCwDQtBAQN/IABBADYCAEEwED8iAUEwaiEDIAEhAgNAIAIQiAJBDGoiAiADRw0ACyAAIAE2AgggAEIANwIMIABBBDYCBAtYAQF/IAAoAgAiAiAAKAIERgRAIAAgACgCBCICQQF0QQQgAhsQ4h8gACgCACECCyAAIAJBAWo2AgAgACgCCCACQQxsaiIAIAEoAgg2AgggACABKQIANwIACzQBAX8gAygCSCABED4oAgAhBCAAIAI2AgQgACAENgIAIAAgAygCtAEgASABEOAFNgIIIAALBwAgABDHGAuMCgMIfwF9A3wjAEGwAWsiCCQAIAhBADYCrAEgCEEBNgKoASAIQaABahBJIQsgCEGYAWoQSSEOIAhBkAFqQQBBABCLARogACgCyMYIRQRAIAhBmAI2AkQgCEGriQE2AkBBrJ0sQZQLQQJB784AIAhBQGsQRQsgAEHgowhqIgktAAoEQCAAQdjGCGogACgCyMYIQfa4AhCuBAsgACgC4MYIIABBmMQIai0ACiAAKALIxgggCEGsAWogCEGoAWogByALIA4QgBogCS0ACgRAIABB2MYIaiAAKALIxghBxuUCEK4ECyAGIAAoAsjGCCAAQdjGCGoiBxCIGjYCACAJLQAKBEAgByAAKALIxghB15UDEK4ECyABELIPRQRAIAsQ0gQLIABBiMcIaiAAKALIxgggAiAFEMENIAhB+ABqIAUQQCECIAUQngJFBEAgCEGxAjYCNCAIQauJATYCMEGsnSxBw8UDQQJB784AIAhBMGoQRQsgCCACKAIIIgkoAhhBBGoQYikBADcDcAJAIAAoAuDGCCIFQcYARw0AQcYAIQUgCSoCJEMAACBBlBCKAiICQbl/akGYEksNACAIIAI2AiBB1/MDIAhBIGoQOyACIQULQQAhBwJAIAkqAiRDAAAAQGBBAXMNACAAQbDFCGohAiAAQajECGohB0GoAhA/IgwCfyAJKgIkIhCLQwAAAE9dBEAgEKgMAQtBgICAgHgLIAhB8ABqIAhB8ABqEF4gBSAHLQAKIAIrAxAgCyAOIAgoAqwBIAgoAqgBENEzIgcgASAGKAIAIAkQzzMgACgCmNsIIgIEQCACIAkgAigCACgCCBEDABoLQQEhDSAIQegAahBJIQICQCAAQfjECGotAAogAUEFRnINAEEAIQ0gAEHoxAhqLQAKRQ0AIAEQsA9FDQAgBygC0AEgAEGIxQhqKwMQIAkgAhCUMSENC0EAIQUgARCxD0UgBEUgA0VyckUEQCAIQdAAahBrIQYCQCAAIANGDQAgAEEUaiADQRRqIg8gBhCaFCAAQfzaCGoiCigCAEEBSA0AA0AgCiAFED4oAgBBFGogDyAGEJoUIAVBAWoiBSAKKAIASA0ACwsgBiACIAQgAxC4FBoCQAJAIAEEQCAEIAQoApQPIgVBAnRqKgIAuyESIABB8MMIaiIKKwMQIhEgEaAhEQJAAkACQCAFBEAgEiAEKgIAu6EiEyARIBMgEWMbIREgBUEBRg0BCyASIAQqAgS7oSITIBEgEyARYxshEUEBIQwgBUECRg0BCyASIAQqAgi7oSITIBEgEyARYxshEUEAIQwgBUEDRg0BCyASIAQqAgy7oSISIBFjQQFzDQAgEiERCyADQRRqIARBmA9qKAIAIgAQ8QchAQJAAkAgACADKAJIRg0AIAAgAygCTEYNACAAIAMoAlBGDQBBzp0EIAEQlAFFDQBBocUEIAEQlAFFDQBB6PAEIAEQlAENAQsgB0EBOgB8IBEgCisDEGNFDQMMAgsgESAKKwMQY0EBcw0CIAwgDUEBc3FBAUcNASAIIBE5AxBB0ZgFIAhBEGoQO0EAIQUMAgsgByAMKAIAKAIEEQAAIAYQXRogAhDuARpBACEHDAMLIAIQ7AEhACAIIAU2AgwgCCAANgIIIAggETkDAEHVvwUgCBA7CyAGEF0aCyACEOcGIAcgCSANIAUQzjMgAhDuARoLIA4Q0gQgCxDSBCAIQbABaiQAIAcL0wYBA38jAEEgayIBJAAgAUEAIAAQ+QUiAzYCHCABIAAQxwYiAjYCGCACEJksIAIgAiADQQQQkQcaIAIgAhD5BRogAUEcahBLIAFBACAAIAIQvgQiAzYCFCADIAFBEGoQmgcgAUEANgIMIAFBFGoQSyACIAJBA0EDEMkGGiABQQAgACACEL4EIgI2AhQgAiABQQhqEJoHIAEgASgCCCIDNgIQIAFBFGoQSyABKAIYIgIgAkEDQQMQyQYaIAFBACAAIAEoAhgQvgQiAjYCFCACIAFBCGoQmgcCQAJAIAEoAggiAiABKAIQTARAIAIgA04NAiABQQxqEEsgAUEAIAEoAhQQvAE2AgwMAQsgASACNgIQCyABQRRqEEsgASgCGCIDIANBA0EDEMkGGiABQQAgACABKAIYEL4EIgM2AhQgAyABQQhqEJoHAkAgASgCCCIDIAEoAhBMBEAgAyACTg0CIAFBDGoQSyABQQAgASgCFBC8ATYCDAwBCyABIAM2AhALIAFBFGoQSyABKAIYIgIgAkEDQQMQyQYaIAFBACAAIAEoAhgQvgQiAjYCFCACIAFBCGoQmgcCQCABKAIIIgIgASgCEEwEQCACIANODQIgAUEMahBLIAFBACABKAIUELwBNgIMDAELIAEgAjYCEAsgAUEUahBLIAEoAhgiAyADQQNBAxDJBhogAUEAIAAgASgCGBC+BCIDNgIUIAMgAUEIahCaBwJAIAEoAggiAyABKAIQTARAIAMgAk4NAiABQQxqEEsgAUEAIAEoAhQQvAE2AgwMAQsgASADNgIQCyABQRRqEEsgASgCGCICIAJBA0EDEMkGGiABQQAgACABKAIYEL4EIgI2AhQgAiABQQhqEJoHAkAgASgCCCICIAEoAhBMBEAgAiADTg0CIAFBDGoQSyABQQAgASgCFBC8ATYCDAwBCyABIAI2AhALIAFBFGoQSyABKAIYIgMgA0EDQQMQyQYaIAFBACAAIAEoAhgQvgQiADYCFCAAIAFBCGoQmgcgASgCCCIAIAEoAhBMBEAgACACTg0BIAFBDGoQSyABQQAgASgCFBC8ATYCDAwBCyABIAA2AhALIAFBFGoQSyABQRhqEEsgASgCDCEAIAFBIGokACAAC8ACAQV/IwBBMGsiByQAIAdBADYCLCAHQQA2AiggB0EgahBJIQkgACABIAIgBSAGIAdBGGoQSSIGIAdBLGogB0EoakEAIABBsMYIai0AChsQ6B8iBQRAIAcgBhBAKAIIIQggBygCKCIKBEAgBygCLCILIAsgChCrCQsgACgCmNsIIgoEQCAFIAo2AqQCCyAFIAEgACgCxNoIIAAoAsjaCCAIIAcoAiwgACgC1MYIIAAoAszGCCAAQdjGCGogCSAEIAMQzTMiCEEATgRAIABB1NoIaiAFKQOYATcCACAAQczaCGoiACAFKQOYATcCACAAIAAqAgSMEIgECyAFIAUoAgAoAgQRAAALIAdBLGoQSyAHQShqEEsgCEEATgRAIAIQvg8gByACEEAgCRDCAQsgBhDgByAJEPUIGiAHQTBqJAAgCAsJACAAIAEQ/RAL3gQBBn8jAEFAaiIFJAAgAEHIxghqIQggACgCyMYIIgcEfyAHBSAFQeUANgIEIAVBq4kBNgIAQaydLEGUC0ECQe/OACAFEEUgCCgCAAsQqQEhCiAAKALIxggQhgEhCQJAIABBgKQIaigCDCIHELIPIAFFcg0AIAEQ5wFBAUgNACAFQSBqIAEQrgEiARBKQS4Q4QciBgRAIAEgBiABEEprEMYBQQA6AAALIAVBOGogARCuASIGIAkgAhDRHhogBhBGGiABEEYaC0EGIQEgAhBNBEAgBUEgaiACEEAhAUHgABA/IgZBxsgBQQBBACAKQRB0QRB1IAlBEHRBEHUQ0gggAC0AwNoIEJsUIAEgBhClASAHIQELIAVBGGoQSSEHIAVBEGoQSSEGAkACQAJAIAEQsQ8gAUF/akEESXJFBEAgARD3BkUNAQsgACABIAIgBiAHQQAgAEGoqAhqLQAKGyADIAQQ6h8hAyABRQ0CIANBAE4NAUF/IQMMAgsgBUEgakMAAIA/QwAAAAAQigEaIAAgBSkDIDcCzNoIIAVBIGpDAACAP0MAAAAAEIoBGiAAIAUpAyA3AtTaCEEAIQMgAUEJRw0AIAgoAgAQ6R8iBEUNACAIEEsgCCAENgIACyACEE0EQEHElS0oAgBFBEBBACEDDAILQQAhA0G5hgJBABA7DAELIABBiMcIaiABIABB1NoIaiAKIAkgACgCyMYIIAAoAtTGCCAAKALMxgggAEGoxAhqLQAKIABBiKUIaigCDEEAR3IgByACIAYQ/C8LIAYQ4AcgBxDlAyAFQUBrJAAgAwuPAQAgAUEANgIAAkAgACgCDCgCFEUNACAAKAIMKAIUKAIERQ0AIAAoAgwoAhQoAgQoAjxFDQAgACgCDCgCFCgCBCgCPCgCBEUNACACIAAoAgwoAhQoAgQoAjwiAC0ACDoAACADIAAtAAk6AAAgBCAAKAIEKAIIIAAoAgQoAgxrNgIAIAEgACgCBCgCADYCAAsLNgEBfyMAQRBrIgIkACACIAJBCGogASoCACABKgIEjBCKASkCADcDACAAIAIQrwQgAkEQaiQACwoAQa3YA0EAEDsLLAECfwJ/QQgQPyIBENQBGiABQQRqEG8aIAEiAgsQ4AQgAiAAKAIENgIEIAELuAMCCH8BfSMAQdAAayIBJAACQCAAKAIMKAIYRQ0AIAAoAgwoAhgoAgRFDQAgACgCDCgCGCgCBCgCBEUNACAAKAIMKAIYKAIEKAIEIQIgAUHIAGoQSSIFIAJBHxDbBSABQThqIAUgAigCDBClEyEEIAFBMGogACgCDCgCGCgCBBDvAiABIAEpAzA3AwAgBCABEKQTIAFBGGogBBBAIgIQnRQQ5gohBiACEEEgAhA8RQRAIABBMGohByAAQSxqIQgDQCABAn8gAigCCCIDQQRqQQAgAxsiAy4BALIgACgCJLKVIAAoAiyykiIJi0MAAABPXQRAIAmoDAELQYCAgIB4CzYCFCABAn8gACgCOCAAKAIwarIgAy4BArIgACgCJLKVkyIJi0MAAABPXQRAIAmoDAELQYCAgIB4CzYCECABIAAoAjQgACgCLGo2AgwgASABQRRqIAggAUEMahCxATYCFCABIAAoAjggACgCMGo2AgwgASABQRBqIAcgAUEMahCxASIDNgIQIAYgASgCFLIgA7IQhQggAhBEGiACEDxFDQALCyAEEJoMGiAFEKwFGgsgAUHQAGokACAGCzYBAX8CQCAAKAIMIAEoAgwQrhMiAg0AQX8hAiAAKAIYIgAgASgCGCIBSA0AIAAgAUchAgsgAgsGAEGaqgMLCgBB3AAQPxCILguUAQEBfyAAIAEoAgQ2AgQgACABKAIINgIIIAAgAS0AIDoAICAAIAEtACE6ACEgACABKAIkNgIkIAAgASgCKDYCKCAAIAEoAiw2AiwgACABKAIwNgIwIAAgASgCNDYCNCAAIAEoAjg2AjggACgCDCICBEAgAhA9CyAAQaABED8gASgCDEGgARBYNgIMIAAgASgCGBCkBgsJACAAEN4HED0LxwIBA38CQCACLQAAIgVBAUYEQCABQQFqIAEgAS0AAEEoRiIDGyEEIAEgA2otAAAiA0FcaiIBQQpLBEAgBCEBDAILQQEgAXRBgQ1xRQRAIAQhAQwCCyAEQQFqIQELIAEtAAAhAwsgA0UEQEEBDwsgAEEUaiEEQQAhAwNAAkACQCAEIAEgBUEYdEEYdRCMCARAIAIsAAAhBUEBIQMMAQsCQCADQQFxRQ0AIAItAABBAUcNACABLQAAIgBBVGpB/wFxQQNJBEBBACEDQQEhBQwCCyABLQABIgRFBEAgAEFbaiIBQQRLDQFBASEAIAFBAWsOAwEBAQMLIABBJUcNACACLQABQQFHIARBKUdyDQAgAS0AAg0AQQEPC0EAIQAMAQtBASEAIAEgBUEYdEEYdWoiAS0AAEUNACACQQFqIgIsAAAhBQwBCwsgAAsHACAAKAIwCzwBAn8gACgCHEEASgRAA0AgACgCBCAAIAEQeRDoAiACaiECIAFBAWoiASAAKAIcSA0ACwsgAkEQdEEQdQv9BwEDfyMAQSBrIgQkACABKAIQIgEoAkRB1QoQ/QEhBQJAAkAgASgCnAJFBEAgASgCuAEoAhwNAQsgAEG4vwhqLQAKDQAgAEGovwhqLQAKDQACQAJAAkACQAJAAkACQCABKAKcAiICQQNGDQAgAEH42ghqLQAABEAgAkEBRw0BIAEoAgQtAAhFDQEgASgCBEELEKMBDQEgASgCBEEKEKMBDQELAkAgASgCBEEDEKMBDQAgASgCBC0ACEUNACABKAIEQQsQowENACABKAIEQQoQowENACAAQfraCGpBADoAAAsgAEH62ghqLQAARQ0BCyADRQ0CIABB+9oIai0AAEUNAQsgAEH42ghqQYGABDYCACABKAIEQQQQowENAiADDQMMBgsgASgCBEEEEKMBGgwCCyABKAIEQQQQowFFDQQLIABB+doIai0AAEUNACADRQ0BCyAAQfraCGpBADoAACAAQfjaCGpBgAI7AQALIANFDQEgAEH72ghqQQE6AAAMAQsgAEH72ghqIAM6AAAgAEH52ghqIAJBAEc6AAAgAEH42ghqQQA6AAACQCAAQYiyCGotAApFDQAgAEH62ghqLQAARQ0AIAEoAgQtAAgNACABKAIEQQkQowEEQCAAQfi7CGotAAoNAQsgASgCuAFBABB5IAVHDQAgAUEAELETCwJAAkAgAkUEQCABKAIEQQkQowFFDQEgAEH4uwhqLQAKRQ0BCyAAQfraCGpBADoAAAwBCyABQYACaiICLgEEQQFOBEAgASgCuAEgAi4BBEF/ahB5IAVGBEAgAEEBOgD62ggMAgsgAEEAOgD62ggMAQsgASgCBC0ACEUNACAAQfraCGpBADoAAAsgASgCuAEoAhwgAUGAAmoiAy4BBEcEQCAEQbEBNgIUIARB6scBNgIQQaSdLEGJzgBBAkGDiQEgBEEQahBFCyAAIAEQohQgACABQfgAENkDGiAAQeC/CGotAAoEQCAEQRhqIAEoArgBEP0DIARBGGoQSiECIAQgACABKAK4ARD+CjYCBCAEIAI2AgBBhYYCIAQQOyAEQRhqEEYaCyABKAIEQQkQowEEQCAAQfi7CGotAAoNAQsCQCAAQZi/CGotAApFDQAgASgCuAEoAhxBAUgNAEEAIQIDQCADIAJBEHRBEHUiBhCwARCnBARAIAMgBhCwARDYBQsgAkEBaiICIAEoArgBKAIcSA0ACwsgAEGIvwhqLQAKRQ0AIAEoArgBKAIcQQFIDQBBACECA0ACQCABKAK4ASACEHkgBUYNACADIAJBEHRBEHUiABCwARCnBEUNACADIAAQsAEQ2AULIAJBAWoiAiABKAK4ASgCHEgNAAsLIARBIGokAAu+AQEEfyMAQSBrIgQkACAEQRhqEGkhBiAEQRBqEGkhBSAEQQhqEGkhBwJ/QQAgAEEEEKMBRQ0AGkEKIANFIAJFIAEgA0dycg0AGkENIAItAAgNABogBCAAEMcBIAQgBCkDADcDGCAEIAIQxwEgBCAEKQMANwMQIAQgA0EEahBiKQEANwMIQQ1BCiAHLgEEIAYuAQRrIAMuASBrQRB0QRB1IAUuAQQgBS4BAGtBEHRBEHVKGwshACAEQSBqJAAgAAvJAQEGfyMAQSBrIgMkACABEMACIAEoAhAEQCAAQei7CGohAgNAIAAgASgCEEH4ABDZAxoCQCACLQAKRQ0AIAQgASgCGEYNACABKAIYIQQLAn8gAi0ACgRAQQEgASgCGCABKAIkRw0BGgsgASgCHEULIQUgACABIAEoAhAoAgQgASgCGCgCBCABKAIcBH8gASgCHCgCBAVBAAsgASgCJAR/IAEoAiQoAgQFQQALEPsfIAUQ+h8gARDKARogASgCEA0ACwsgA0EgaiQACzMBAX8gACgCCCIABEADQCACIAFBAXFyIABBAUp0IQIgAUEBdSEBIABBf2oiAA0ACwsgAgvuBQIKfwJ9IwBBoAFrIgYkAANAIAZBIGpBAEH4ABBlGiAGQQhqEEkhCyAGQQhqIAEgCEECdGoQfCAGQQhqEEECQCAGQQhqEDwNAEGgxQQhA0F/IQlDAACAvyEMQX8hBEEAIQcDQAJAIAsoAggiCigCKCEFAkACQCAAKAIoIgJFDQAgAhBNDQBBACECAkAgACgCKCgCAEEBSA0AA0AgACgCKCACED4oAgAgBUYNASACQQFqIgIgACgCKCgCAEgNAAsLIAIgACgCKCgCAEYNAQsgBkEgaiAFaiICLQAADQAgAkEBOgAAIAAoAiRBFGogCigCBBC+ASECIAoqAiSMIQ0CQCAMQwAAAABdQQFzRQRAQQEhByAKLgEcIQkgBSEEIAIhAyANIQwMAQsgDEMAAIA/kiANXkEBcw0AIAdBAWohBwsgAxByQQFGBEAgAi0AAEFQakH/AXFBCkkNAgsgB0EBSg0DCyALEEQaIAZBCGoQPEUNAQsLIAdBAUcNACAEQQJ0IgMgCEHgA2wiBSAAKAIAamoiAiACKgIQQwAAgD+SOAIQAkAgCUEASA0AIAQgACgCHEcNACAAKAIkENIGIAkQiAMtAARBEHFBBHZFDQAgAyAAKAIAIAVqQRBqIgJqIgMgAyoCAEMAAIC/kjgCACACIAAoAiBBAnRqIgMgAyoCAEMAAIA/kjgCAAsgACgCDCAERgRAIAAoAgAgBWogACgCCEECdGoiAyADKgIQQwAAgD+SOAIQCyAAKAIQIARGBEAgACgCACAFaiAAKAIIQQJ0aiIDIAMqAhBDAACAP5I4AhALIAAoAhggBEYEQCAAKAIAIAVqIAAoAgRBAnRqIgMgAyoCEEMAAIA/kjgCEAsgBCAAKAIURw0AIAAoAgAgBWpBEGoiBCAAKAIEQQJ0aiIFIAUqAgBDMzMzP5I4AgAgBCAAKAIIQQJ0aiIEIAQqAgBDmpmZPpI4AgALIAhBAWoiCEEERw0ACyAGQaABaiQACwYAIAAkAAsQACMAIABrQXBxIgAkACAACwQAIwALEQAgASACIAMgBCAFIAARCQALDwAgASACIAMgBCAAEQcAC6EKAgV/Bn0jAEEgayIFJAAgBUEIaiABEEAhBAJ9QwAAAAAgBUEIahBZDQAaAkACQCAAKAIEIgNFDQAgAxBNDQAgBUEIahBBQwAAAAAgBUEIahA8DQIaA0AgBCgCCCgCKCEGQQAhA0EAIQICQCAAKAIEKAIAQQBMDQADQCAGIAAoAgQgAhA+KAIARwRAIAJBAWoiAiAAKAIEKAIASA0BDAILCyAEKAIIIQMLIAQQRBogBUEIahA8IQIgAw0CIAJFDQALDAELIAQoAgghAwtDAAAAACADRQ0AGiADKgIku0SamZmZmZmpP6JEAAAAAAAA8D+gtiIKQwAAAACSCyEIIAQgAUEEahBAIQQCQCAFQQhqEFkNAAJAAkAgACgCBCIDRQ0AIAMQTQ0AIAVBCGoQQSAFQQhqEDwNAgNAIAQoAggoAighBkEAIQNBACECAkAgACgCBCgCAEEBSA0AA0AgBiAAKAIEIAIQPigCAEcEQCACQQFqIgIgACgCBCgCAEgNAQwCCwsgBCgCCCEDCyAEEEQaIAVBCGoQPCECIAMNAiACRQ0ACwwBCyAEKAIIIQMLIANFDQAgCCADKgIku0SamZmZmZmpP6JEAAAAAAAA8D+gtiIJkiEICyAEIAFBCGoQQCEEAkAgBUEIahBZDQACQAJAIAAoAgQiA0UNACADEE0NACAFQQhqEEEgBUEIahA8DQIDQCAEKAIIKAIoIQZBACEDQQAhAgJAIAAoAgQoAgBBAUgNAANAIAYgACgCBCACED4oAgBHBEAgAkEBaiICIAAoAgQoAgBIDQEMAgsLIAQoAgghAwsgBBBEGiAFQQhqEDwhAiADDQIgAkUNAAsMAQsgBCgCCCEDCyADRQ0AIAggAyoCJLtEmpmZmZmZqT+iRAAAAAAAAPA/oLYiC5IhCAsgBCABQQxqEEAhAQJAIAVBCGoQWQ0AAkACQCAAKAIEIgNFDQAgAxBNDQAgBUEIahBBIAVBCGoQPA0CA0AgASgCCCgCKCEEQQAhA0EAIQICQCAAKAIEKAIAQQFIDQADQCAEIAAoAgQgAhA+KAIARwRAIAJBAWoiAiAAKAIEKAIASA0BDAILCyABKAIIIQMLIAEQRBogBUEIahA8IQIgAw0CIAJFDQALDAELIAEoAgghAwsgA0UNACAIIAMqAiS7RJqZmZmZmak/okQAAAAAAADwP6C2IgySIQgLAkAgCEMAAAAAWw0AIApDAAAAACAKQwAAAABeIgIbIQcgCUMAAAAAXgRAIAkgCSAHIAkgB10bIAdDAAAAAFsbIQdBAkEBIApDAAAAAF4bIQILIAtDAAAAAF5BAXNFBEAgCyALIAcgCyAHXRsgB0MAAAAAWxshByACQQFqIQILIAxDAAAAAF5BAXNFBEAgDCAMIAcgDCAHXRsgB0MAAAAAWxshByACQQFqIQILIAdDAAAAP5QgByACQQFGGyIHIAcgByAHIAiSIAggCkMAAAAAWyIBGyIIkiAIIAlDAAAAAFsiAxsiCJIgCCALQwAAAABbIgIbIgiSIAggDEMAAAAAWyIEGyIIQwAAAABbDQAgByAKIAEbIAiVEMYKIQogACgCACIBIAogASoCAJI4AgAgByAJIAMbIAiVEMYKIQkgACgCACIBIAkgASoCBJI4AgQgByALIAIbIAiVEMYKIQkgACgCACIBIAkgASoCCJI4AgggByAMIAQbIAiVEMYKIQcgACgCACIAIAcgACoCDJI4AgwLIAVBIGokAAsNACABIAIgAyAAEQQACwsAIAEgAiAAEQMACwkAIAEgABEBAAsNACABIAIgAyAAETcACxkAIAEgAiADIAQgBSAGIAcgCCAJIAARDwALEQAgASACIAMgBCAFIAARCAALDwAgASACIAMgBCAAEQYACw0AIAEgAiADIAARBQALCwAgASACIAARAgALCQAgASAAEQAACwcAIAAoAiwLBwAgABERAAtEAgF/AX4gAUL///////8/gyEDAn8gAUIwiKdB//8BcSICQf//AUcEQEEEIAINARpBAkEDIAAgA4RQGw8LIAAgA4RQCwvNAwMDfwF+BXwCQAJAAkACQCAAvSIEQgBZBEAgBEIgiKciAUH//z9LDQELIARC////////////AINQBEBEAAAAAAAA8L8gACAAoqMPCyAEQn9VDQEgACAAoUQAAAAAAAAAAKMPCyABQf//v/8HSw0CQYCAwP8DIQJBgXghAyABQYCAwP8DRwRAIAEhAgwCCyAEpw0BRAAAAAAAAAAADwsgAEQAAAAAAABQQ6K9IgRCIIinIQJBy3chAwsgBEL/////D4MgAkHiviVqIgFB//8/cUGewZr/A2qtQiCGhL9EAAAAAAAA8L+gIgAgACAARAAAAAAAAOA/oqIiBaG9QoCAgIBwg78iBkQAACBlRxX3P6IiByADIAFBFHZqtyIIoCIJIAcgCCAJoaAgACAGoSAFoSAAIABEAAAAAAAAAECgoyIAIAUgACAAoiIFIAWiIgAgACAARJ/GeNAJmsM/okSveI4dxXHMP6CiRAT6l5mZmdk/oKIgBSAAIAAgAEREUj7fEvHCP6JE3gPLlmRGxz+gokRZkyKUJEnSP6CiRJNVVVVVVeU/oKKgoKKgIgBEAAAgZUcV9z+iIAAgBqBEAKLvLvwF5z2ioKCgIQALIAALywMBB38CQCABvCIFQQF0IgJFIAVB/////wdxQYCAgPwHS3JFBEAgALwiB0EXdkH/AXEiA0H/AUcNAQsgACABlCIAIACVDwsgB0EBdCIEIAJLBEAgBUEXdkH/AXEhBgJ/IANFBEBBACEDIAdBCXQiAkEATgRAA0AgA0F/aiEDIAJBAXQiAkF/Sg0ACwsgB0EBIANrdAwBCyAHQf///wNxQYCAgARyCyICAn8gBkUEQEEAIQYgBUEJdCIEQQBOBEADQCAGQX9qIQYgBEEBdCIEQX9KDQALCyAFQQEgBmt0DAELIAVB////A3FBgICABHILIghrIgVBf0ohBCADIAZKBEADQAJAIARBAXFFDQAgBSICDQAgAEMAAAAAlA8LIAJBAXQiAiAIayIFQX9KIQQgA0F/aiIDIAZKDQALIAYhAwsCQCAERQ0AIAUiAg0AIABDAAAAAJQPCwJAIAJB////A0sEQCACIQQMAQsDQCADQX9qIQMgAkGAgIACSSEFIAJBAXQiBCECIAUNAAsLIAdBgICAgHhxIQIgA0EBTgR/IARBgICAfGogA0EXdHIFIARBASADa3YLIAJyvg8LIABDAAAAAJQgACACIARGGwsyACAAvEH/////B3FBgICA/AdNBEAgACAAIAGXIAG8Qf////8HcUGAgID8B0sbDwsgAQukBgMNfwF+An0jAEHgAGsiBCQAIANBoARqQQEQigMgA0GwBGpBABCKAyAEQdgAaiADQbjECGotAAogACgCBBDXEyIKELkBIARB0ABqQwAAgD9DAAAAABCKASEGIARByABqQwAAAABDAACAPxCKARogBEEwahBJIQwgBEEwakEEciILEEkhDSAEQTBqQQhyEEkhDiAEQTBqQQxyEEkhDyAEQdgAahBOIQUgBC4BWCEHIAQuAVwhCCAELgFaGiAELgFeGiAELgFaIQkgBEEoakE4ED8gChCICBDpAiIAKAIAQQAgBkEAIAcgCGqyQwAAAD+UIAmyQwAAAEMgBbKVIhIgEkMAAIBCQQBBABDcCCADIAAoAgAgBEEwahC9CCAEIAQpA0giETcDICAEIBE3AxggBiAEQRhqEK8EIAAQng0hACAEQdgAahBOGiAELgFYGiAELgFcGiAELgFaIQUgBC4BXiEHIARB2ABqEFUhCCAELgFYIQkgAEE4ED8gChCICBDpAiIAKAIAQQAgBkEAIAmyIAUgB2qyQwAAAD+UQwAAAEMgCLKVIhIgEkMAAIBCQQBBABDcCCADIAAoAgAgCxC9CCAEIAQpA0giETcDICAEIBE3AxAgBiAEQRBqEK8EIAAQng0hB0ECIQADQCAEQdgAahBOIQsgBC4BWCEFIAQuAVwhCCAELgFaIQkgBC4BXiEQAn0gAEH9////B3FFBEAgBC4BXrIhEiAFIAhqskMAAAA/lAwBCyAJIBBqskMAAAA/lCESIARB2ABqEFUhCyAELgFcsgshEyAHQTgQPyAKEIgIEOkCIgUoAgBBACAGQQAgEyASQwAAAEMgC7KVIhIgEkMAAIBCQQBBABDcCCADIAUoAgAgBEEwaiAAQQJ0ahC9CCAEIAQpA0giETcDICAEIBE3AwggBiAEQQhqEK8EIAUQng0aIABBAWoiAEEERw0ACyAKEMoGED0gASAMEIQgIAIgDBD+HyABEKYUIQAgAigCACAAEMoUIAIoAgBBnA9qKgIAGiAPEMwFGiAOEMwFGiANEMwFGiAMEMwFGiAEQeAAaiQAC1gAAn8CfyABQQhGBEAgAhBcDAELQRwgAUEDcSABQQJ2aUEBR3INARpBMEFAIAFrIAJJDQEaIAFBECABQRBLGyACEKkUCyIBRQRAQTAPCyAAIAE2AgBBAAsLFgAgAEEITQRAIAEQXA8LIAAgARCpFAuuBwEJfyAAKAIEIgdBA3EhAiAAIAdBeHEiBmohBEHg5i0oAgAhBQJAIAJFBEBBACECIAFBgAJJDQEgBiABQQRqTwRAIAAhAiAGIAFrQbDqLSgCAEEBdE0NAgtBAA8LAkAgBiABTwRAIAYgAWsiAkEQSQ0BIAAgB0EBcSABckECcjYCBCAAIAFqIgEgAkEDcjYCBCAEIAQoAgRBAXI2AgQgASACEKIMDAELQQAhAiAEQejmLSgCAEYEQEHc5i0oAgAgBmoiBSABTQ0CIAAgB0EBcSABckECcjYCBCAAIAFqIgIgBSABayIBQQFyNgIEQdzmLSABNgIAQejmLSACNgIADAELIARB5OYtKAIARgRAQdjmLSgCACAGaiIFIAFJDQICQCAFIAFrIgJBEE8EQCAAIAdBAXEgAXJBAnI2AgQgACABaiIBIAJBAXI2AgQgACAFaiIFIAI2AgAgBSAFKAIEQX5xNgIEDAELIAAgB0EBcSAFckECcjYCBCAAIAVqIgEgASgCBEEBcjYCBEEAIQJBACEBC0Hk5i0gATYCAEHY5i0gAjYCAAwBCyAEKAIEIgNBAnENASADQXhxIAZqIgkgAUkNASAJIAFrIQoCQCADQf8BTQRAIAQoAggiBiADQQN2IgVBA3RB+OYtakcaIAYgBCgCDCIIRgRAQdDmLUHQ5i0oAgBBfiAFd3E2AgAMAgsgBiAINgIMIAggBjYCCAwBCyAEKAIYIQgCQCAEIAQoAgwiA0cEQCAFIAQoAggiAk0EQCACKAIMGgsgAiADNgIMIAMgAjYCCAwBCwJAIARBFGoiAigCACIGDQAgBEEQaiICKAIAIgYNAEEAIQMMAQsDQCACIQUgBiIDQRRqIgIoAgAiBg0AIANBEGohAiADKAIQIgYNAAsgBUEANgIACyAIRQ0AAkAgBCAEKAIcIgVBAnRBgOktaiICKAIARgRAIAIgAzYCACADDQFB1OYtQdTmLSgCAEF+IAV3cTYCAAwCCyAIQRBBFCAIKAIQIARGG2ogAzYCACADRQ0BCyADIAg2AhggBCgCECICBEAgAyACNgIQIAIgAzYCGAsgBCgCFCICRQ0AIAMgAjYCFCACIAM2AhgLIApBD00EQCAAIAdBAXEgCXJBAnI2AgQgACAJaiIBIAEoAgRBAXI2AgQMAQsgACAHQQFxIAFyQQJyNgIEIAAgAWoiAiAKQQNyNgIEIAAgCWoiASABKAIEQQFyNgIEIAIgChCiDAsgACECCyACCxwAIAAgASgCCCAFELAEBEAgASACIAMgBBC6DwsLOQAgACABKAIIIAUQsAQEQCABIAIgAyAEELoPDwsgACgCCCIAIAEgAiADIAQgBSAAKAIAKAIUEQsAC1sBA39BfyECIAAoAgQiAUEBIAAoAgh0IgNIBH8DQAJAIAAgAUEBajYCBCAAIAEQ/R8hAiAAKAIEIQEgAiAAKAIASA0AIAEgA0gNAQsLQX8gAiABIANKGwVBfwsLlwIBBn8gACABKAIIIAUQsAQEQCABIAIgAyAEELoPDwsgAS0ANSEHIAAoAgwhBiABQQA6ADUgAS0ANCEIIAFBADoANCAAQRBqIgkgASACIAMgBCAFELgPIAcgAS0ANSIKciEHIAggAS0ANCILciEIAkAgBkECSA0AIAkgBkEDdGohCSAAQRhqIQYDQCABLQA2DQECQCALBEAgASgCGEEBRg0DIAAtAAhBAnENAQwDCyAKRQ0AIAAtAAhBAXFFDQILIAFBADsBNCAGIAEgAiADIAQgBRC4DyABLQA1IgogB3IhByABLQA0IgsgCHIhCCAGQQhqIgYgCUkNAAsLIAEgB0H/AXFBAEc6ADUgASAIQf8BcUEARzoANAuUAQAgACABKAIIIAQQsAQEQCABIAIgAxC5Dw8LAkAgACABKAIAIAQQsARFDQACQCACIAEoAhBHBEAgASgCFCACRw0BCyADQQFHDQEgAUEBNgIgDwsgASACNgIUIAEgAzYCICABIAEoAihBAWo2AigCQCABKAIkQQFHDQAgASgCGEECRw0AIAFBAToANgsgAUEENgIsCwv1AQAgACABKAIIIAQQsAQEQCABIAIgAxC5Dw8LAkAgACABKAIAIAQQsAQEQAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNAiABQQE2AiAPCyABIAM2AiACQCABKAIsQQRGDQAgAUEAOwE0IAAoAggiACABIAIgAkEBIAQgACgCACgCFBELACABLQA1BEAgAUEDNgIsIAEtADRFDQEMAwsgAUEENgIsCyABIAI2AhQgASABKAIoQQFqNgIoIAEoAiRBAUcNASABKAIYQQJHDQEgAUEBOgA2DwsgACgCCCIAIAEgAiADIAQgACgCACgCGBEIAAsLqAQBBH8gACABKAIIIAQQsAQEQCABIAIgAxC5Dw8LAkAgACABKAIAIAQQsAQEQAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNAiABQQE2AiAPCyABIAM2AiAgASgCLEEERwRAIABBEGoiBSAAKAIMQQN0aiEIIAECfwJAA0ACQCAFIAhPDQAgAUEAOwE0IAUgASACIAJBASAEELgPIAEtADYNAAJAIAEtADVFDQAgAS0ANARAQQEhAyABKAIYQQFGDQRBASEHQQEhBiAALQAIQQJxDQEMBAtBASEHIAYhAyAALQAIQQFxRQ0DCyAFQQhqIQUMAQsLIAYhA0EEIAdFDQEaC0EDCzYCLCADQQFxDQILIAEgAjYCFCABIAEoAihBAWo2AiggASgCJEEBRw0BIAEoAhhBAkcNASABQQE6ADYPCyAAKAIMIQYgAEEQaiIFIAEgAiADIAQQowwgBkECSA0AIAUgBkEDdGohBiAAQRhqIQUCQCAAKAIIIgBBAnFFBEAgASgCJEEBRw0BCwNAIAEtADYNAiAFIAEgAiADIAQQowwgBUEIaiIFIAZJDQALDAELIABBAXFFBEADQCABLQA2DQIgASgCJEEBRg0CIAUgASACIAMgBBCjDCAFQQhqIgUgBkkNAAwCAAsACwNAIAEtADYNASABKAIkQQFGBEAgASgCGEEBRg0CCyAFIAEgAiADIAQQowwgBUEIaiIFIAZJDQALCwtwAQJ/IAAgASgCCEEAELAEBEAgASACIAMQuw8PCyAAKAIMIQQgAEEQaiIFIAEgAiADEKoUAkAgBEECSA0AIAUgBEEDdGohBCAAQRhqIQADQCAAIAEgAiADEKoUIAEtADYNASAAQQhqIgAgBEkNAAsLC0sBAXwgAEEANgIEIAAgATYCACABtxDhAkTvOfr+Qi7mP6ObIgKZRAAAAAAAAOBBYwRAIAAgAqo2AgggAA8LIABBgICAgHg2AgggAAszACAAIAEoAghBABCwBARAIAEgAiADELsPDwsgACgCCCIAIAEgAiADIAAoAgAoAhwRBgALGgAgACABKAIIQQAQsAQEQCABIAIgAxC7DwsLrAIBBH8jAEFAaiIBJAAgACgCACICQXxqKAIAIQMgAkF4aigCACEEIAFBADYCFCABQdyaLDYCECABIAA2AgwgAUGMmyw2AghBACECIAFBGGpBAEEnEGUaIAAgBGohAAJAIANBjJssQQAQsAQEQCABQQE2AjggAyABQQhqIAAgAEEBQQAgAygCACgCFBELACAAQQAgASgCIEEBRhshAgwBCyADIAFBCGogAEEBQQAgAygCACgCGBEIACABKAIsIgBBAUsNACAAQQFrBEAgASgCHEEAIAEoAihBAUYbQQAgASgCJEEBRhtBACABKAIwQQFGGyECDAELIAEoAiBBAUcEQCABKAIwDQEgASgCJEEBRw0BIAEoAihBAUcNAQsgASgCGCECCyABQUBrJAAgAgufAQEBfyMAQUBqIgMkAAJ/QQEgACABQQAQsAQNABpBACABRQ0AGkEAIAEQpCAiAUUNABogA0F/NgIUIAMgADYCECADQQA2AgwgAyABNgIIIANBGGpBAEEnEGUaIANBATYCOCABIANBCGogAigCAEEBIAEoAgAoAhwRBgBBACADKAIgQQFHDQAaIAIgAygCGDYCAEEBCyEAIANBQGskACAACwYAQfyZLAsMACAAELwPGiAAED0LCQAgABC8DxA9CwYAQciYLAsKAEGqmCwQrwwACzMBAX8jAEEQayIBJAAgAUEIaiAAKAIEEMABKAIAQQE6AAAgACgCCEEBOgAAIAFBEGokAAs1AQJ/AkAgACgCCCIALQAAIgJBAUcEfyACQQJxDQEgAEECOgAAQQEFQQALDwtBzJcsEK8MAAs2AQJ/IwBBEGsiASQAIAFBCGogACgCBBDAASgCAC0AAEEBRwRAIAAQrCAhAgsgAUEQaiQAIAILQwICfwF+IwBBEGsiAiQAIAAoAggiAyABIAMoAgAoAhARAgAgAiAAKQIMIgQ3AwAgAiAENwMIIAEgAhBoIAJBEGokAAu/AQAgACABNgIoIAAgAzYCJCAAIAI2AgAgACADQRRqQb7kBRDRBTYCDCAAIAAoAiRBFGpB24gGENEFNgIQIAAgACgCJEEUakGEqwYQ0QU2AhQgACAAKAIkQRRqQf7IBhDRBTYCGCAAIAAoAiRBFGpBnKIsKAIAENEFNgIIIAAgACgCJEEUakGYoiwoAgAQ0QU2AgQgACAAKAIkQRRqQeTmBhDRBTYCHCAAIAAoAiRBFGpBoKIsKAIAENEFNgIgIAALKwAgAEEFQQFBAUEBEKYBIAAgATYCCCAAQbCWLDYCACAAIAIpAgA3AgwgAAuKAQECfyMAQSBrIgIkACAALQAQRQRAIAJBGGogAEEQakEBEPgEIQMgAkEQaiAAIAEQrRQCQCACKAIUIAEQrQVFBEAgAigCFCABEKYGRQ0BCyACIAJBCGpBrtErEEgpAgA3AwAgASACEGgLIAIoAhQiACABIAAoAgAoAhQRAgAgAxD3BAsgAkEgaiQAC9kBAQJ/IwBBQGoiAiQAIAAtABBFBEAgAkE4aiAAQRBqQQEQ+AQhAyACQTBqIAAgARCtFCACKAI0IgAgASAAKAIAKAIQEQIAIAIoAjQgARCtBQRAIAIgAkEoakHUgiwQSCkCADcDECABIAJBEGoQaAsCQCACKAI0IAEQrQVFBEAgAigCNCABEKYGRQ0BCyACIAJBIGpB/NQrEEgpAgA3AwggASACQQhqEGgLIAIgAkEYakGz0StBttErIAIoAjAbEEgpAgA3AwAgASACEGggAxD3BAsgAkFAayQACzIAIABBDCABLQAFQQFBARCmASAAQQA6ABAgACACNgIMIAAgATYCCCAAQcSVLDYCACAAC3wBAn8jAEEQayICJAACQAJAIAAoAggiAy0ABEEKRgR/IAMQrhQNAiAAKAIIBSADCyABEK0FRQRAIAAoAgggARCmBkUNAQsgAiACQQhqQa7RKxBIKQIANwMAIAEgAhBoCyAAKAIIIgAgASAAKAIAKAIUEQIACyACQRBqJAALnAICAn8BfiMAQeAAayICJAAgAgJ/AkACfyAAKAIIIgMtAARBCkYEQCADEK4UDQIgACgCCCEDCyADCyABIAMoAgAoAhARAgAgACgCCCABEK0FBEAgAiACQdgAakHUgiwQSCkCADcDKCABIAJBKGoQaAsCQCAAKAIIIAEQrQVFBEAgACgCCCABEKYGRQ0BCyACIAJB0ABqQfzUKxBIKQIANwMgIAEgAkEgahBoCyACQcgAakHj0SsQSAwBCyAAKAIIIQAgAiACQUBrQayVLBBIKQIANwMYIAEgAkEYahBoIAIgACkCDCIENwMQIAIgBDcDOCABIAJBEGoQaCACQTBqQfrRKxBICykCADcDCCABIAJBCGoQaCACQeAAaiQAC0ACAX8BfiMAQRBrIgIkACACIAApAggiAzcDACACIAM3AwggASACEGggAUEgEOACIAAoAhAgARDIASACQRBqJAALMQEBfiAAQQZBAUEBQQEQpgEgAEHYkyw2AgAgASkCACEDIAAgAjYCECAAIAM3AgggAAtFAQF/IwBBEGsiAyQAIABBFBCcASEAIAMgASkCADcDCCACKAIAIQEgAyADKQMINwMAIAAgAyABELcgIQAgA0EQaiQAIAALXwEBfyMAQRBrIgIkAAJAIAAoAgwgARCtBUUEQCAAKAIMIAEQpgZFDQELIAIgAkEIakGu0SsQSCkCADcDACABIAIQaAsgACgCDCIAIAEgACgCACgCFBECACACQRBqJAALmAEBAn8jAEEwayICJAAgACgCDCIDIAEgAygCACgCEBECACACAn8CQCAAKAIMIAEQrQVFBEAgACgCDCABEKYGRQ0BCyACQShqQfzUKxBIDAELIAJBIGpB1IIsEEgLKQIANwMQIAEgAkEQahBoIAAoAgggARDIASACIAJBGGpBsJMsEEgpAgA3AwggASACQQhqEGggAkEwaiQACysAIABBDSACLQAFQQFBARCmASAAIAI2AgwgACABNgIIIABByJIsNgIAIAALxgEBAn8jAEFAaiICJAAgARC5FEHdAEcEQCACIAJBOGpB1IIsEEgpAgA3AxggASACQRhqEGgLIAIgAkEwakG8kiwQSCkCADcDECABIAJBEGoQaAJAIABBDGoiAxCwFARAIAJBKGogAxC9DyACIAIpAyg3AwggASACQQhqEGgMAQsgAxCyFEUNACADKAIAIAEQyAELIAIgAkEgakG37CsQSCkCADcDACABIAIQaCAAKAIIIgAgASAAKAIAKAIUEQIAIAJBQGskAAsWACAAKAIIIgAgASAAKAIAKAIQEQIACysAIABBDkEAQQBBARCmASAAIAE2AgggAEHckSw2AgAgACACKQIANwIMIAALRgIBfwF+IwBBEGsiAyQAIABBFBCcASEAIAEoAgAhASADIAIpAgAiBDcDACADIAQ3AwggACABIAMQviAhACADQRBqJAAgAAuUAQEBfyMAQTBrIgIkACAAKAIIIAEQyAEgAiACQShqQciRLBBIKQIANwMQIAEgAkEQahBoAkAgAEEMaiIAELIUBEAgACgCACABEMgBDAELIAAQsBRFDQAgAkEgaiAAEL0PIAIgAikDIDcDCCABIAJBCGoQaAsgAiACQRhqQbfsKxBIKQIANwMAIAEgAhBoIAJBMGokAAtpAQF/IwBBMGsiAiQAIAIgAkEoakHQkCwQSCkCADcDECABIAJBEGoQaCACQSBqIABBCGoQvQ8gAiACKQMgNwMIIAEgAkEIahBoIAIgAkEYakG37CsQSCkCADcDACABIAIQaCACQTBqJAALRgEBfyMAQRBrIgMkACAAQRQQnAEhACABKAIAIQEgAyADQQhqIAIoAgAQggspAgA3AwAgACABIAMQsxQhACADQRBqJAAgAAtbAgF/AX4jAEEgayIDJAAgAEEUEJwBIQAgASgCACEBIAMgAikCACIENwMIIAMgBDcDECADIANBGGogA0EIahC/DykCADcDACAAIAEgAxCzFCEAIANBIGokACAAC2kCAX8BfiMAQSBrIgIkACAAQRAQnAEhACACIAEpAgAiAzcDCCACIAM3AxAgAiACQRhqIAJBCGoQvw8pAgA3AwAgAEEaQQFBAUEBEKYBIABB7I8sNgIAIAAgAikCADcCCCACQSBqJAAgAAsWACAAKAIMIgAgASAAKAIAKAIUEQIAC5IBAQJ/IwBBMGsiAiQAAn8gACgCCCIDQQFxBEAgAiACQShqQaiHLBBIKQIANwMQIAEgAkEQahBoIAAoAgghAwsgA0ECcQsEfyACIAJBIGpBr4csEEgpAgA3AwggASACQQhqEGggACgCCAUgAwtBBHEEQCACIAJBGGpBuYcsEEgpAgA3AwAgASACEGgLIAJBMGokAAsfAQF/IAAoAgwiAiABIAIoAgAoAhARAgAgACABEMYgCwwAIAAoAgwgARCmBgsMACAAKAIMIAEQrQULMQAgAEEDIAEtAAUgAS0ABiABLQAHEKYBIAAgATYCDCAAIAI2AgggAEGEjyw2AgAgAAtVAgF/AX4jAEEgayICJAAgACgCCCABEMgBIAIgAkEYakHUgiwQSCkCADcDCCABIAJBCGoQaCACIAApAgwiAzcDACACIAM3AxAgASACEGggAkEgaiQACysAIABBAkEBQQFBARCmASAAIAE2AgggAEGUjiw2AgAgACACKQIANwIMIAALcQIBfwF+IwBBMGsiAiQAIAAoAgggARDIASACIAJBKGpBhtIrEEgpAgA3AxAgASACQRBqEGggAiAAKQIMIgM3AwggAiADNwMgIAEgAkEIahBoIAIgAkEYakH60SsQSCkCADcDACABIAIQaCACQTBqJAALKwAgAEEKQQFBAUEBEKYBIAAgATYCCCAAQaiNLDYCACAAIAIpAgA3AgwgAAtGAgF/AX4jAEEQayIDJAAgAEEUEJwBIQAgASgCACEBIAMgAikCACIENwMAIAMgBDcDCCAAIAEgAxDMICEAIANBEGokACAACwcAIAAoAigLRgIBfwF+IwBBEGsiAyQAIABBFBCcASEAIAEoAgAhASADIAIpAgAiBDcDACADIAQ3AwggACABIAMQziAhACADQRBqJAAgAAvPAgECfyMAQfAAayICJAAgAiACQegAakH81CsQSCkCADcDMCABIAJBMGoQaCAAQQxqIAEQ0wQgAiACQeAAakGu0SsQSCkCADcDKCABIAJBKGoQaCAAKAIIIgMgASADKAIAKAIUEQIAAn8gACgCFCIDQQFxBEAgAiACQdgAakGohywQSCkCADcDICABIAJBIGoQaCAAKAIUIQMLIANBAnELBH8gAiACQdAAakGvhywQSCkCADcDGCABIAJBGGoQaCAAKAIUBSADC0EEcQRAIAIgAkHIAGpBuYcsEEgpAgA3AxAgASACQRBqEGgLIAAtABhBf2oiA0EBTQRAIAICfyADQQFrBEAgAkFAa0HDhywQSAwBCyACQThqQcaHLBBICykCADcDCCABIAJBCGoQaAsgACgCHARAIAFBIBDgAiAAKAIcIAEQyAELIAJB8ABqJAALQQEBfyMAQRBrIgIkACAAKAIIIgAgASAAKAIAKAIQEQIAIAIgAkEIakHUgiwQSCkCADcDACABIAIQaCACQRBqJAALRgEBfiAAQQ9BAEEBQQAQpgEgACABNgIIIABBsIwsNgIAIAIpAgAhBiAAIAU2AhwgACAEOgAYIAAgAzYCFCAAIAY3AgwgAAs+AQF/IwBBEGsiAiQAIAIgAkEIakGgjCwQSCkCADcDACABIAIQaCAAQQhqIAEQ0wQgAUEpEOACIAJBEGokAAtTAQF/IwBBIGsiAiQAIAIgAkEYakGgiywQSCkCADcDCCABIAJBCGoQaCAAKAIIIAEQyAEgAiACQRBqQa7RKxBIKQIANwMAIAEgAhBoIAJBIGokAAtgAQF/IwBBEGsiBiQAIABBIBCcASEAIAEoAgAhASAGIAIpAgA3AwggAygCACECIAQtAAAhAyAFKAIAIQQgBiAGKQMINwMAIAAgASAGIAIgAyAEENQgIQAgBkEQaiQAIAALVAIBfwF+IwBBEGsiAiQAIABBEBCcASEAIAIgASkCACIDNwMAIAIgAzcDCCAAQRFBAUEBQQEQpgEgAEG0iyw2AgAgACACKQIANwIIIAJBEGokACAACzEAIABBDBCcASEAIAEoAgAhASAAQRBBAUEBQQEQpgEgACABNgIIIABBvIosNgIAIAALMAAgAEEMEJwBIgBBCyABKAIAIgEtAAVBAUEBEKYBIAAgATYCCCAAQcyULDYCACAAC3ECAX8BfiMAQTBrIgIkACAAKAIIIAEQyAEgAiACQShqQefdKxBIKQIANwMQIAEgAkEQahBoIAIgACkCDCIDNwMIIAIgAzcDICABIAJBCGoQaCACIAJBGGpBrtErEEgpAgA3AwAgASACEGggAkEwaiQACysAIABBAUEBQQFBARCmASAAIAE2AgggAEHUhyw2AgAgACACKQIANwIMIAALzAIBAn8jAEHwAGsiAiQAIAIgAkHoAGpB/NQrEEgpAgA3AzAgASACQTBqEGggAEEQaiABENMEIAIgAkHgAGpBrtErEEgpAgA3AyggASACQShqEGggACgCCCIDBEAgAyABIAMoAgAoAhQRAgALAn8gACgCHCIDQQFxBEAgAiACQdgAakGohywQSCkCADcDICABIAJBIGoQaCAAKAIcIQMLIANBAnELBH8gAiACQdAAakGvhywQSCkCADcDGCABIAJBGGoQaCAAKAIcBSADC0EEcQRAIAIgAkHIAGpBuYcsEEgpAgA3AxAgASACQRBqEGgLIAAtACBBf2oiA0EBTQRAIAICfyADQQFrBEAgAkFAa0HDhywQSAwBCyACQThqQcaHLBBICykCADcDCCABIAJBCGoQaAsgACgCGCIABEAgACABEMgBCyACQfAAaiQAC18BAn8jAEEQayICJAACQCAAKAIIIgNFDQAgAyABIAMoAgAoAhARAgAgACgCCCABELQKDQAgAiACQQhqQdSCLBBIKQIANwMAIAEgAhBoCyAAKAIMIAEQyAEgAkEQaiQAC00BAX4gAEESQQBBAUEAEKYBIAAgAjYCDCAAIAE2AgggAEHAhiw2AgAgAykCACEHIAAgBjoAICAAIAU2AhwgACAENgIYIAAg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ICEAIANBIGokACAAC1QCAX8BfiMAQRBrIgIkACAAQRAQnAEhACACIAEpAgAiAzcDACACIAM3AwggAEEnQQFBAUEBEKYBIABB5PsrNgIAIAAgAikCADcCCCACQRBqJAAgAAtUAgF/AX4jAEEQayICJAAgAEEQEJwBIQAgAiABKQIAIgM3AwAgAiADNwMIIABBKUEBQQFBARCmASAAQdT9KzYCACAAIAIpAgA3AgggAkEQaiQAIAALewICfwF+IwBBMGsiAiQAIAAoAggiAyABIAMoAgAoAhARAgAgAiACQShqQbT7KxBIKQIANwMQIAEgAkEQahBoIAIgACkCDCIENwMIIAIgBDcDICABIAJBCGoQaCACIAJBGGpBt+wrEEgpAgA3AwAgASACEGggAkEwaiQACzQAIABBCCABLQAFIAEtAAYgAS0ABxCmASAAIAE2AgggAEHU+is2AgAgACACKQIANwIMIAALRgIBfwF+IwBBEGsiAyQAIABBFBCcASEAIAEoAgAhASADIAIpAgAiBDcDACADIAQ3AwggACABIAMQ/iAhACADQRBqJAAgAAtfAQF/IwBBIGsiAiQAIAAtAAwEQCACIAJBGGpB1NErEEgpAgA3AwggASACQQhqEGgLIAJBEGogACgCCCIAIAAoAgAoAhgRAgAgAiACKQMQNwMAIAEgAhBoIAJBIGokAAsvACAAQSVBAUEBQQEQpgEgACADNgIQIAAgAjoADCAAIAE2AgggAEHo+Ss2AgAgAAsXACAAIAEoAghBAnRBnJcsaigCABBIGgugAQEBfyMAQUBqIgIkACAAKAIIIgBBBU0EQCACAn8CQAJAAkACQAJAAkAgAEEBaw4FAQIDBAUACyACQThqQZz3KxBIDAULIAJBMGpBq/crEEgMBAsgAkEoakG99ysQSAwDCyACQSBqQYT4KxBIDAILIAJBGGpBtvgrEEgMAQsgAkEQakHo+CsQSAspAgA3AwggASACQQhqEGgLIAJBQGskAAueAgIFfwJ9IwBB4ABrIgMkACADQcgAahBJIgQgABB8IANBKGogA0FAaxBJIgAQQCEHIAQQQSAEEDxFBEADQAJAIAQoAggiBSgCGCgCBARAIAUoAhgoAgQQowNFDQELIANBEGoQSSEGIANBEGogBUEEahB8IANBEGoQQSADQRBqEDwNAANAIANBCGog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AiACQSBqQbTsKxBIKQIANwMIIAEgAkEIahBoIAAoAgwgARDIASACIAJBGGpBt+wrEEgpAgA3AwAgASACEGggAkEwaiQACygAIABBK0EBQQFBARCmASAAIAI2AgwgACABNgIIIABBzOsrNgIAIAALQwIBfwF+IwBBEGsiAiQAIAAoAgggARDIASACIAApAgwiAzcDACACIAM3AwggASACEGggACgCFCABEMgBIAJBEGokAAs4AQF+IABBLkEBQQFBARCmASAAIAE2AgggAEHk6is2AgAgAikCACEEIAAgAzYCFCAAIAQ3AgwgAAs3AQF/IwBBEGsiAiQAIAIgAkEIakGk0CsQSCkCADcDACABIAIQaCAAKAIIIAEQyAEgAkEQaiQACzcBAX8jAEEQayICJAAgAiACQQhqQeDpKxBIKQIANwMAIAEgAhBoIAAoAgggARDIASACQRBqJAALNwEBfyMAQRBrIgIkACACIAJBCGpB6OgrEEgpAgA3AwAgASACEGggACgCCCABEMgBIAJBEGokAAsxACAAQQwQnAEhACABKAIAIQEgAEETQQFBAUEBEKYBIAAgATYCCCAAQfzoKzYCACAAC0EBAX8jAEEQayICJAAgAiACQQhqQdTRKxBIKQIANwMAIAEgAhBoIAAoAggiACABIAAoAgAoAhARAgAgAkEQaiQACzEAIABBDBCcASEAIAEoAgAhASAAQSZBAUEBQQEQpgEgACABNgIIIABBrOMrNgIAIAALKAAgAEEWQQFBAUEBEKYBIAAgAjYCDCAAIAE2AgggAEG44is2AgAgAAs9AgF/AX4jAEEQayICJAAgAEEQEJwBIQAgAiABKQIAIgM3AwAgAiADNwMIIAAgAhDSFCEAIAJBEGokACAAC1QBAn8jAEEQayIBJAAgAQJ/IABBABCeAUFQakEJTQRAIAAQqAwMAQsgABDHDwsiAjYCDCACBH8gAEHwAmogAUEMahCfIQVBAAshACABQRBqJAAgAAt/AQF/IwBBMGsiAiQAIAAtAAwEQCACIAJBKGpBpNArEEgpAgA3AxAgASACQRBqEGgLIAIgAkEgakH84SsQSCkCADcDCCABIAJBCGoQaCAALQANBEAgAiACQRhqQYPiKxBIKQIANwMAIAEgAhBoCyAAKAIIIAEQyAEgAkEwaiQACy8AIABBNEEBQQFBARCmASAAIAM6AA0gACACOgAMIAAgATYCCCAAQZzhKzYCACAAC3kBAX8jAEEwayICJAAgAiACQShqQfzUKxBIKQIANwMQIAEgAkEQahBoIAAoAgggARDIASACIAJBIGpBkOErEEgpAgA3AwggASACQQhqEGggAEEMaiABENMEIAIgAkEYakGu0SsQSCkCADcDACABIAIQaCACQTBqJAALKwAgAEE3QQFBAUEBEKYBIAAgATYCCCAAQazgKzYCACAAIAIpAgA3AgwgAAtGAgF/AX4jAEEQayIDJAAgAEEUEJwBIQAgASgCACEBIAMgAikCACIENwMAIAMgBDcDCCAAIAEgAxCmISEAIANBEGokACAAC/MBAQZ/IwBBQGoiAyQAIAAoAsjGCCIERQRAIANBoQE2AhQgA0H98gM2AhBBoJ0sQcKYBUECQY/FAyADQRBqEEULIANBADYCPCADQQE2AjggA0EwahBJIQYgA0EoahBJIQcgBBD6BSEIIAQQ+gUhBSAIQcUASgR/IAUFIANBxgA2AgQgAyAFNgIAQZ6/BSADEDtBxgALQQAgBCADQTxqIANBOGpBACAGIAcQgBogAyAEQQAQiBoiBTYCJCAFBEAgBCAEIAUQ8QMaIANBJGoQSwsgABDDDyAAKALIxgggASACEMENIAcQ0gQgBhDSBCADQUBrJAALBwAgACgCJAtdAQF/IwBBIGsiAiQAIAAoAgggARDIASACIAJBGGpB/NQrEEgpAgA3AwggASACQQhqEGggAEEMaiABENMEIAIgAkEQakGu0SsQSCkCADcDACABIAIQaCACQSBqJAALKwAgAEEyQQFBAUEBEKYBIAAgATYCCCAAQcTfKzYCACAAIAIpAgA3AgwgAAurAQICfwF+IwBBQGoiAiQAIAIgACkCCCIENwMYIAIgBDcDOCABIAJBGGoQaCACIAJBMGpBhtIrEEgpAgA3AxAgASACQRBqEGggACgCECIDIAEgAygCACgCEBECACACIAJBKGpBuN8rEEgpAgA3AwggASACQQhqEGggACgCFCIAIAEgACgCACgCEBECACACIAJBIGpBrtErEEgpAgA3AwAgASACEGggAkFAayQACzgBAX4gAEEwQQFBAUEBEKYBIABB3N4rNgIAIAEpAgAhBCAAIAM2AhQgACACNgIQIAAgBDcCCCAAC3ECAX8BfiMAQTBrIgIkACACIAApAggiAzcDECACIAM3AyggASACQRBqEGggAiACQSBqQfzUKxBIKQIANwMIIAEgAkEIahBoIAAoAhAgARDIASACIAJBGGpBrtErEEgpAgA3AwAgASACEGggAkEwaiQACzEBAX4gAEE1QQFBAUEBEKYBIABB9N0rNgIAIAEpAgAhAyAAIAI2AhAgACADNwIIIAALRQEBfyMAQRBrIgMkACAAQRQQnAEhACADIAEpAgA3AwggAigCACEBIAMgAykDCDcDACAAIAMgARCvISEAIANBEGokACAAC6ICAgJ/AX4jAEGAAWsiAiQAIABBDGoiAyACQfgAakH60SsQSBDEDwRAIAIgAkHwAGpB/NQrEEgpAgA3AzggASACQThqEGgLIAIgAkHoAGpB/NQrEEgpAgA3AzAgASACQTBqEGggACgCCCABEMgBIAIgAkHgAGpB5N0rEEgpAgA3AyggASACQShqEGggAiAAKQIMIgQ3AyAgAiAENwNYIAEgAkEgahBoIAIgAkHQAGpB590rEEgpAgA3AxggASACQRhqEGggACgCFCABEMgBIAIgAkHIAGpBrtErEEgpAgA3AxAgASACQRBqEGggAyACQfgAakH60SsQSBDEDwRAIAIgAkFAa0Gu0SsQSCkCADcDCCABIAJBCGoQaAsgAkGAAWokAAs4AQF+IABBKkEBQQFBARCmASAAIAE2AgggAEGE3Ss2AgAgAikCACEEIAAgAzYCFCAAIAQ3AgwgAAtOAQF/IwBBEGsiBCQAIABBGBCcASEAIAEoAgAhASAEIAIpAgA3AwggAygCACECIAQgBCkDCDcDACAAIAEgBCACELIhIQAgBEEQaiQAIAALyQICAn8BfiMAQfAAayICJAAgAiAANgJsIAIgATYCaCABQSgQ4AICQCAALQAYBEAgACgCDCIDBEAgAyABEMgBIAFBIBDgAiACIAApAhAiBDcDMCACIAQ3A2AgASACQTBqEGggAUEgEOACCyACIAJB2ABqQfTbKxBIKQIANwMoIAEgAkEoahBoIAIgACkCECIENwMgIAIgBDcDUCABIAJBIGoQaCABQSAQ4AIgAkHoAGoQwBQMAQsgAkHoAGoQwBQgAUEgEOACIAIgACkCECIENwMYIAIgBDcDSCABIAJBGGoQaCACIAJBQGtB+dsrEEgpAgA3AxAg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ahA7IABBAhCmDCABQQM2AgBBtrgCIAEQOyAAQQMQpgwgAUFAayQAC0IBAX8jAEEQayIDJAAgAEEUEJwBIQAgASgCACEBIAMgA0EIaiACEEgpAgA3AwAgACABIAMQkCEhACADQRBqJAAgAAs9AQF+IwBBEGsiASQAIABBFBCcASEAIAEgAikCACIDNwMAIAEgAzcDCCAAQQAgARC8FCEAIAFBEGokACAAC3YBA38gACABQeADbGpBEGohA0F/IQEDQAJAIAAoApAPIAIQ8QciBEHjxwEQlAFFDQAgBEGAhgIQlAFFDQAgAUF/RwRAIAMgAkECdGoqAgAgAyABQQJ0aioCAF5BAXMNAQsgAiEBCyACQQFqIgJB+ABHDQALIAELRgIBfwF+IwBBEGsiAyQAIABBFBCcASEAIAEoAgAhASADIAIpAgAiBDcDACADIAQ3AwggACABIAMQqyEhACADQRBqJAAgAAuWAQEFfyMAQRBrIgIkAAJ/QQAgABDJAkEhSQ0AGiACQQhqIAAoAgAiASABQSBqEIECIgMoAgAhASADKAIEIQQCQANAIAEgBEYNASABLAAAIQUgAUEBaiEBIAUQwwoNAAtBAAwBCyAAIAAoAgBBIGo2AgBBACAAQcUAEIwBRQ0AGiAAQfACaiADELwhCyEAIAJBEGokACAAC5YBAQV/IwBBEGsiAiQAAn9BACAAEMkCQRFJDQAaIAJBCGogACgCACIBIAFBEGoQgQIiAygCACEBIAMoAgQhBAJAA0AgASAERg0BIAEsAAAhBSABQQFqIQEgBRDDCg0AC0EADAELIAAgACgCAEEQajYCAEEAIABBxQAQjAFFDQAaIABB8AJqIAMQviELIQAgAkEQaiQAIAALlgEBBX8jAEEQayICJAACf0EAIAAQyQJBCUkNABogAkEIaiAAKAIAIgEgAUEIahCBAiIDKAIAIQEgAygCBCEEAkADQCABIARGDQEgASwAACEFIAFBAWohASAFEMMKDQALQQAMAQsgACAAKAIAQQhqNgIAQQAgAEHFABCMAUUNABogAEHwAmogAxDAIQshACACQRBqJAAgAAukAwEFfyMAQfAAayIBJAAgASABQeAAakGw0SsQSCkCADcDICABIAAgAUEgahCaAToAbyABIABBARCeAUHhAEY6AF8gASABQdAAakHw7ysQSCkCADcDGAJAIAAgAUEYahCaAUUEQCABIAFByABqQfPvKxBIKQIANwMQIAAgAUEQahCaAUUNAQsgAEEIaiIEEMUBIQICQANAIABB3wAQjAENASABIAAQ4wEiAzYCQCADBEAgBCABQUBrELcCDAELC0EAIQIMAQsgAUFAayAAIAIQjAQgASAAEPUBIgM2AjxBACECIANFDQAgASABQTBqQfbvKxBIKQIANwMIIAAgAUEIahCaAQRAIAQQxQEhAwNAIABBxQAQjAFFBEAgASAAEOMBIgU2AiggBUUNAyAEIAFBKGoQtwIMAQsLIAFBKGogACADEIwEIAAgAUFAayABQTxqIAFBKGogAUHvAGogAUHfAGoQwxQhAgwBCyAAQcUAEIwBRQ0AIAAgAUFAayABQTxqIAFBKGoQ0gEgAUHvAGogAUHfAGoQwxQhAgsgAUHwAGokACACC4ACAQV/IwBBMGsiASQAIAEgAUEoakGg4CsQSCkCADcDCAJAIAAgAUEIahCaAUUNACABQRhqIABB6AJqQQAQ+AQhAyABIAAQ9QEiBDYCJCADEPcEIARFDQAgAEHfABCMAQRAIABBCGoiAxDFASEEA0AgAEHFABCMAUUEQCABIAAQ4wEiBTYCGCAFRQ0DIAMgAUEYahC3AgwBCwsgAUEYaiAAIAQQjAQgACABQSRqIAFBGGoQxxQhAgwBCyABIAAQ4wEiAjYCFCACRQRAQQAhAgwBCyABQRhqIAAgAUEUaiABQRhqENYUIAAgAUEkaiABQRhqEMcUIQILIAFBMGokACACC7QBAgF/BH0gACAAKgIAIgIgACoCBCIDXSIBNgKUDwJAIAAqAggiBCADIAIgARsiBV5BAXNFBEAgAEECNgKUDyAEIQMMAQsgBCACIAMgARsiAl5BAXMEQCAFIQMgAiEFDAELIAUhAyAEIQULAkAgACoCDCICIANeRQRAIAIgBV5BAXMEQCADIQQgBSECDAILIAMhBAwBCyAAQQM2ApQPIAIhBCADIQILIABBoA9qIAQgApM4AgALgg4BBX8jAEGQBGsiASQAAkAgAEHmABCMAUUNACABAn9BASAAQQAQngEiBEHMAEYNABogBEH/AXEiA0HyAEcEQEEBIANB7ABGDQEaIANB0gBHDQILQQALOgCPBCAAIAAoAgBBAWo2AgAgAUGABGoQ0gEhAyABIAFB+ANqQbDaKxBIKQIANwPwAQJAIAAgAUHwAWoQmgEEQCABQfADakGz0SsQSBoMAQsgASABQegDakGz2isQSCkCADcD6AEgACABQegBahCaAQRAIAFB8ANqQbbRKxBIGgwBCyABIAFB4ANqQbbaKxBIKQIANwPgASAAIAFB4AFqEJoBBEAgAUHwA2pBuNErEEgaDAELIAEgAUHYA2pBudorEEgpAgA3A9gBIAAgAUHYAWoQmgEEQCABQfADakG70SsQSBoMAQsgASABQdADakG82isQSCkCADcD0AEgACABQdABahCaAQRAIAFB8ANqQdLRKxBIGgwBCyABIAFByANqQb/aKxBIKQIANwPIASAAIAFByAFqEJoBBEAgAUHwA2pB5dErEEgaDAELIAEgAUHAA2pBwtorEEgpAgA3A8ABIAAgAUHAAWoQmgEEQCABQfADakHq0SsQSBoMAQsgASABQbgDakHF2isQSCkCADcDuAEgACABQbgBahCaAQRAIAFB8ANqQezRKxBIGgwBCyABIAFBsANqQcjaKxBIKQIANwOwASAAIAFBsAFqEJoBBEAgAUHwA2pB79ErEEgaDAELIAEgAUGoA2pBy9orEEgpAgA3A6gBIAAgAUGoAWoQmgEEQCABQfADakHx0SsQSBoMAQsgASABQaADakHO2isQSCkCADcDoAEgACABQaABahCaAQRAIAFB8ANqQfTRKxBIGgwBCyABIAFBmANqQdHaKxBIKQIANwOYASAAIAFBmAFqEJoBBEAgAUHwA2pB99ErEEgaDAELIAEgAUGQA2pB1NorEEgpAgA3A5ABIAAgAUGQAWoQmgEEQCABQfADakH60SsQSBoMAQsgASABQYgDakHX2isQSCkCADcDiAEgACABQYgBahCaAQRAIAFB8ANqQfzRKxBIGgwBCyABIAFBgANqQdraKxBIKQIANwOAASAAIAFBgAFqEJoBBEAgAUHwA2pB/9ErEEgaDAELIAEgAUH4AmpB3dorEEgpAgA3A3ggACABQfgAahCaAQRAIAFB8ANqQYLSKxBIGgwBCyABIAFB8AJqQeDaKxBIKQIANwNwIAAgAUHwAGoQmgEEQCABQfADakGG0isQSBoMAQsgASABQegCakHj2isQSCkCADcDaCAAIAFB6ABqEJoBBEAgAUHwA2pBiNIrEEgaDAELIAEgAUHgAmpB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QwAAAAAPCyAAKAIIKgIkQwAAoECUQwAAyEKSQwAAAACXQwAAyEKWCwcAIAAoAiALogEBAn8gARC5CiEDIAAQuQohAgJAIAMEQCACRQRAIAAoAgAQPSAAEMEPCyABKAIAIAEoAgQgACgCABCrDCAAIAAoAgAgARDFAUECdGo2AgQMAQsgAgRAIAAgASgCADYCACAAIAEoAgQ2AgQgACABKAIINgIIIAEQwQ8PCyAAIAEQoQggAEEEaiABQQRqEKEIIABBCGogAUEIahChCAsgARDODwtjACAAEOEUIQAgARC5CgRAIAEoAgAgASgCBCAAKAIAEKsMIAAgACgCACABEMUBQQJ0ajYCBCABEM4PIAAPCyAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCABEMEPIAALxwIBBH8jAEEgayIDJAACQCABKAIAIgQtAARBJEcNACADIAQoAggiBDYCHCAEQX5qQQNLDQAgASAAQfACaiADQRxqEIUhNgIACwJAIABBwwAQjAEEQEEAIQQgAEHJABCMASEFIABBABCeASIGQU9qQf8BcUEESw0BIAMgBkH/AXFBUGo2AhggACAAKAIAQQFqNgIAIAIEQCACQQE6AAALAkAgBUUNACAAIAIQqQYNAAwCCyADQQA6ABcgACABIANBF2ogA0EYahDUFCEEDAELQQAhBCAAQQAQngFBxABHDQAgAEEBEJ4BIgVB/wFxQVBqIgZBBUsgBkEDRnINACADIAVB/wFxQVBqNgIQIAAgACgCAEECajYCACACBEAgAkEBOgAACyADQQE6AA8gACABIANBD2ogA0EQahDUFCEECyADQSBqJAAgBAuXAQECfyMAQRBrIgMkACABKAIMKAIQRQRAIANBmgM2AgQgA0GtxwE2AgBBnJ0sQeuUA0ECQeeIASADEEULIAAgASgCDCgCECICNgIAAkACQCACKAK0AUUNACACIAEoAhgQzwciAUUNACABEE0NAEEYED8iAiABEEAaIAAgAjYCBCACEEEMAQsgAEEANgIECyADQRBqJAAgAAtdAQF/IwBBIGsiAiQAIAIgAkEYakGwzisQSCkCADcDCCABIAJBCGoQaCAAKAIIIAEQyAEgAiACQRBqQcnOKxBIKQIANwMAIAEgAhBoIAAoAgwgARDIASACQSBqJAALKAAgAEEVQQFBAUEB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DQACQCAAKAIMIgMgACgCECIGSQRAIARB/////wc2AgwgBCAGIANrNgIIIAQgAiAFazYCBCAEQQxqIARBCGogBEEEahCfARCfASEDIAEgACgCDCADKAIAIgMQ6AUgACADEOwQDAELIAAgACgCACgCKBEBACIDQX9GDQEgASADEKYFOgAAQQEhAwsgASADaiEBIAMgBWohBQwBCwsgBEEQaiQAIAULCQAgABDFChA9CzMBAX8gAgRAIAAhAwNAIAMgASgCADYCACADQQRqIQMgAUEEaiEBIAJBf2oiAg0ACwsgAAtoAQJ/IwBBEGsiAyQAIAAgARCSDiEBA0AgAQRAIAMgADYCDCADQQxqIAFBAXYiBBDVGyADKAIMIAIQzwoEfyADIAMoAgxBBGoiADYCDCABIARBf3NqBSAECyEBDAELCyADQRBqJAAgAAshAQF/IwBBEGsiAyQAIAAgASACEMMkIQAgA0EQaiQAIAALUAIBfwF+IwBBIGsiAiQAIAJBCGogABDROikDACEDIAIgASkDADcDACACIAMgAikDAHw3AxAgAkEYaiACQRBqEKQHKQMAIQMgAkEgaiQAIAML4wsCBn8IfUMAAIA/IQkCQAJAAkAgALwiBEGAgID8A0YNACABvCIFQf////8HcSICRQ0AIARB/////wdxIgNBgICA/AdNQQAgAkGBgID8B0kbRQRAIAAgAZIPCwJ/QQAgBEF/Sg0AGkECIAJB////2wRLDQAaQQAgAkGAgID8A0kNABpBACACQZYBIAJBF3ZrIgZ2IgcgBnQgAkcNABpBAiAHQQFxawshBgJAIAJBgICA/ANHBEAgAkGAgID8B0cNASADQYCAgPwDRg0CIANBgYCA/ANPBEAgAUMAAAAAIAVBf0obDwtDAAAAACABjCAFQX9KGw8LIABDAACAPyAAlSAFQX9KGw8LIAVBgICAgARGBEAgACAAlA8LIAVBgICA+ANHIARBAEhyRQRAIACRDwsgAIshCCADQQAgA0GAgICABHJBgICA/AdHG0UEQEMAAIA/IAiVIAggBUEASBshCSAEQX9KDQEgBiADQYCAgIR8anJFBEAgCSAJkyIAIACVDwsgCYwgCSAGQQFGGw8LIARBf0ogBkEBS3JFBEAgBkEBawRAIAAgAJMiACAAlQ8LQwAAgL8hCQsCfSACQYGAgOgETwRA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AABBGHRyIAEtAAJBCHRyIgVGckUEQANAIANBAWohASADLQABIgJBAEchBCAAIAJyQQh0IgAgBUYNAiABIQMgAg0ADAIACwALIAMhAQsgAUF+akEAIAQbC3cBBH8gAC0AASICQQBHIQMCQCACRQ0AIAAtAABBCHQgAnIiAiABLQABIAEtAABBCHRyIgVGDQAgAEEBaiEBA0AgASIALQABIgRBAEchAyAERQ0BIABBAWohASACQQh0QYD+A3EgBHIiAiAFRw0ACwsgAEEAIAMbC4MBAQJ/IAEsAAAiA0UEQCAADwsCQCAAIAMQtQQiAEUNACABLQABRQRAIAAPCyAALQABRQ0AIAEtAAJFBEAgACABENkkDwsgAC0AAkUNACABLQADRQRAIAAgARDYJA8LIAAtAANFDQAgAS0ABEUEQCAAIAEQ1yQPCyAAIAEQ1iQhAgsgAgsuAQF/IAFB/wFxIQEDQCACRQRAQQAPCyAAIAJBf2oiAmoiAy0AACABRw0ACyADC4MCAQJ/AkACQAJAIAAgAXNBA3ENACACQQBHIQMCQCACRSABQQNxRXINAANAIAAgAS0AACIDOgAAIANFDQQgAEEBaiEAIAFBAWohASACQX9qIgJBAEchAyACRQ0BIAFBA3ENAAsLIANFDQEgAS0AAEUNAiACQQRJDQADQCABKAIAIgNBf3MgA0H//ft3anFBgIGChHhxDQEgACADNgIAIABBBGohACABQQRqIQEgAkF8aiICQQNLDQALCyACRQ0AIAAgAmohAwNAIAAgAS0AACIEOgAAIARFDQIgAEEBaiEAIAFBAWohASACQX9qIgINAAsgAyEAC0EAIQILIABBACACEGUaC8gBAQF/AkACQCAAIAFzQQNxDQAgAUEDcQRAA0AgACABLQAAIgI6AAAgAkUNAyAAQQFqIQAgAUEBaiIBQQNxDQALCyABKAIAIgJBf3MgAkH//ft3anFBgIGChHhxDQADQCAAIAI2AgAgASgCBCECIABBBGohACABQQRqIQEgAkH//ft3aiACQX9zcUGAgYKEeHFFDQALCyAAIAEtAAAiAjoAACACRQ0AA0AgACABLQABIgI6AAEgAEEBaiEAIAFBAWohASACDQALCws1AQF+IwBBEGsiAyQAIAMgASACEN8kIAMpAwAhBCAAIAMpAwg3AwggACAENwMAIANBEGokAAs5AgF/AX4jAEEQayIDJAAgAyABIAJBAhCCECADKQMAIQQgACADKQMINwMIIAAgBDcDACADQRBqJAALKQAgAEEANgIMIAAgATYCCCAAIAI2AgQgACADNgIAIABBEGoQogQaIAALMgIBfwF9IwBBEGsiAiQAIAIgACABQQAQghAgAikDACACKQMIEPIVIQMgAkEQaiQAIAMLCwAgACABIAIQ4yQLVAECfyABIAAoAlQiASABQQAgAkGAAmoiAxDKCiIEIAFrIAMgBBsiAyACIAMgAkkbIgIQWBogACABIANqIgM2AlQgACADNgIIIAAgASACajYCBCACC4wBAQJ/IwBBoAFrIgIkACACQQhqQYjOKkGQARBYGiACIAA2AjQgAiAANgIcIAJBfiAAayIDQf////8HQf////8HIANLGyIDNgI4IAIgACADaiIANgIkIAIgADYCGCACQQhqQf3JAiABEIMWIAMEQCACKAIcIgAgACACKAIYRmtBADoAAAsgAkGgAWokAAuOAQECfyMAQaABayIDJAAgA0EIakGIzipBkAEQWBogAyAANgI0IAMgADYCHCADQX4gAGsiBEH/////B0H/////ByAESxsiBDYCOCADIAAgBGoiADYCJCADIAA2AhggA0EIaiABIAIQhBYhACAEBEAgAygCHCIBIAEgAygCGEZrQQA6AAALIANBoAFqJAAgAAszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQWBogACAAKAIUIAFqNgIUIAILMAEBfyMAQRBrIgIgADYCDCACIAAgAUECdCABQQBHQQJ0a2oiAEEEajYCCCAAKAIAC9cbAwx/Bn4BfCMAQYDGAGsiByQAQQAgAyAEaiIRayESAkACfwNAAkAgAkEwRwRAIAJBLkcNBCABKAIEIgIgASgCaE8NASABIAJBAWo2AgQgAi0AAAwDCyABKAIEIgIgASgCaEkEQEEBIQogASACQQFqNgIEIAItAAAhAgVBASEKIAEQ+AEhAgsMAQsLIAEQ+AELIQJBASELIAJBMEcNAANAIBNCf3whEwJ/IAEoAgQiAiABKAJoSQRAIAEgAkEBajYCBCACLQAADAELIAEQ+AELIgJBMEYNAAtBASEKCyAHQQA2AoAGIAACfgJAAkACQAJAIAJBLkYiCSACQVBqIg5BCU1y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Aih0ajYCLCACIAIoAihBCGo2AiggAiACKAJQIgBBAWo2AlAgAiACKAIsIAAtAAEgAigCKHRqNgIsIAIgAigCKEEIajYCKAsgAkEQaiACKAIkIAIoAiwgAigCHHFBAnRqKAEANgEAAkACQANAIAIgAi0AETYCDCACIAIoAiwgAigCDHY2AiwgAiACKAIoIAIoAgxrNgIoIAIgAi0AEDYCDCACKAIMRQRAIAIvARIhACACIAIoAkgiAUEBajYCSCABIAA6AAEMAgsgAigCDEEQcQRAIAIgAi8BEjYCCCACIAIoAgxBD3E2AgwgAigCDARAIAIoAiggAigCDEkEQCACIAIoAlAiAEEBajYCUCACIAIoAiwgAC0AASACKAIodGo2AiwgAiACKAIoQQhqNgIoCyACIAIoAgggAigCLEEBIAIoAgx0QQFrcWo2AgggAiACKAIsIAIoAgx2NgIsIAIgAigCKCACKAIMazYCKAsgAigCKEEPSQRAIAIgAigCUCIAQQFqNgJQIAIgAigCLCAALQABIAIoAih0ajYCLCACIAIoAihBCGo2AiggAiACKAJQIgBBAWo2AlAgAiACKAIsIAAtAAEgAigCKHRqNgIsIAIgAigCKEEIajYCKAsgAkEQaiACKAIgIAIoAiwgAigCGHFBAnRqKAEANgEAAkADQCACIAItABE2AgwgAiACKAIsIAIoAgx2NgIsIAIgAigCKCACKAIMazYCKCACIAItABA2AgwgAigCDEEQcQRAIAIgAi8BEjYCBCACIAIoAgxBD3E2AgwgAigCKCACKAIMSQRAIAIgAigCUCIAQQFqNgJQIAIgAigCLCAALQABIAIoAih0ajYCLCACIAIoAihBCGo2AiggAigCKCACKAIMSQRAIAIgAigCUCIAQQFqNgJQIAIgAigCLCAALQABIAIoAih0ajYCLCACIAIoAihBCGo2AigLCyACIAIoAgQgAigCLEEBIAIoAgx0QQFrcWo2AgQgAiACKAIsIAIoAgx2NgIsIAIgAigCKCACKAIMazYCKCACIAIoAkggAigCRGs2AgwCQCACKAIEIAIoAgxLBEAgAiACKAIEIAIoAgxrNgIMIAIoAgwgAigCOEsEQCACKAJUKALANwRAIAIoAlxBkswANgIYIAIoAlRBHTYCAAwKCwsgAiACKAIwQX9qNgIAAkAgAigCNEUEQCACIAIoAgAgAigCPCACKAIMa2o2AgAgAigCDCACKAIISQRAIAIgAigCCCACKAIMazYCCANAIAIgAigCACIAQQFqNgIAIAAtAAEhACACIAIoAkgiAUEBajYCSCABIAA6AAEgAiACKAIMQX9qIgA2AgwgAA0ACyACIAIoAkggAigCBGs2AgALDAELAkAgAigCNCACKAIMSQRAIAIgAigCACACKAI8IAIoAjRqIAIoAgxrajYCACACIAIoAgwgAigCNGs2AgwgAigCDCACKAIISQRAIAIgAigCCCACKAIMazYCCANAIAIgAigCACIAQQFqNgIAIAAtAAEhACACIAIoAkgiAUEBajYCSCABIAA6AAEgAiACKAIMQX9qIgA2AgwgAA0ACyACIAIoAjBBf2o2AgAgAigCNCACKAIISQRAIAIgAigCNDYCDCACIAIoAgggAigCDGs2AggDQCACIAIoAgAiAEEBajYCACAALQABIQAgAiACKAJIIgFBAWo2AkggASAAOgABIAIgAigCDEF/aiIANgIMIAANAAsgAiACKAJIIAIoAgRrNgIACwsMAQsgAiACKAIAIAIoAjQgAigCDGtqNgIAIAIoAgwgAigCCEkEQCACIAIoAgggAigCDGs2AggDQCACIAIoAgAiAEEBajYCACAALQABIQAgAiACKAJIIgFBAWo2AkggASAAOgABIAIgAigCDEF/aiIANgIMIAANAAsgAiACKAJIIAIoAgRrNgIACwsLA0AgAigCCEECTUUEQCACIAIoAgAiAEEBajYCACAALQABIQAgAiACKAJIIgFBAWo2AkggASAAOgABIAIgAigCACIAQQFqNgIAIAAtAAEhACACIAIoAkgiAUEBajYCSCABIAA6AAEgAiACKAIAIgBBAWo2AgAgAC0AASEAIAIgAigCSCIBQQFqNgJIIAEgADoAASACIAIoAghBA2s2AggMAQsLDAELIAIgAigCSCACKAIEazYCAANAIAIgAigCACIAQQFqNgIAIAAtAAEhACACIAIoAkgiAUEBajYCSCABIAA6AAEgAiACKAIAIgBBAWo2AgAgAC0AASEAIAIgAigCSCIBQQFqNgJIIAEgADoAASACIAIoAgAiAEEBajYCACAALQABIQAgAiACKAJIIgFBAWo2AkggASAAOgABIAIgAigCCEEDazYCCCACKAIIQQJLDQALCyACKAIIBEAgAiACKAIAIgBBAWo2AgAgAC0AASEAIAIgAigCSCIBQQFqNgJIIAEgADoAASACKAIIQQFLBEAgAiACKAIAIgBBAWo2AgAgAC0AASEAIAIgAigCSCIBQQFqNgJIIAEgADoAAQsLDAILIAIoAgxBwABxRQRAIAJBEGogAigCICACLwESIAIoAixBASACKAIMdEEBa3FqQQJ0aigBADYBAAwBCwsgAigCXEGghwE2AhggAigCVEEdNgIADAQLDAILIAIoAgxBwABxRQRAIAJBEGogAigCJCACLwESIAIoAixBASACKAIMdEEBa3FqQQJ0aigBADYBAAwBCwsgAigCDEEgcQRAIAIoAlRBCzYCAAwCCyACKAJcQfLEATYCGCACKAJUQR02AgAMAQtBACEAIAIoAlAgAigCTEkEfyACKAJIIAIoAkBJBUEAC0EBcQ0BCwsgAiACKAIoQQN2NgIIIAIgAigCUCACKAIIazYCUCACIAIoAiggAigCCEEDdGs2AiggAiACKAIsQQEgAigCKHRBAWtxNgIsIAIoAlwgAigCUEEBajYCACACKAJcIAIoAkhBAWo2AgwgAigCXAJ/IAIoAlAgAigCTEkEQCACKAJMIAIoAlBrQQVqDAELQQUgAigCUCACKAJMa2sLNgIEIAIoAlwCfyACKAJIIAIoAkBJBEAgAigCQCACKAJIa0GBAmoMAQtBgQIgAigCSCACKAJAa2sLNgIQIAIoAlQgAigCLDYCOCACKAJUIAIoAig2AjwLsgQBAX8jAEEgayICJAAgAiAANgIYIAIgATYCFCACIAIoAhgoAhw2AhACQCACKAIQKAI0RQRAIAIoAhgoAihBASACKAIQKAIkdEEBIAIoAhgoAiARBAAhACACKAIQIAA2AjQgAigCECgCNEUEQCACQQE2AhwMAgsLIAIoAhAoAihFBEAgAigCEEEBIAIoAhAoAiR0NgIoIAIoAhBBADYCMCACKAIQQQA2AiwLIAIgAigCFCACKAIYKAIQazYCDAJAIAIoAgwgAigCECgCKE8EQCACKAIQKAI0IAIoAhgoAgwgAigCECgCKGsgAigCECgCKBBYGiACKAIQQQA2AjAgAigCECACKAIQKAIoNgIsDAELIAIgAigCECgCKCACKAIQKAIwazYCCCACKAIIIAIoAgxL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BCIDSgRAIAEgAhCIByADQXxqIQYgAiADayEHIANBBEshCCADQQVIIQkgA0ECdCEEA0ACQAJAAkACQAJAIAhFBEAgA0EBaw4EBAMCAQULIAYhAiABIQAgCQ0AA0AgACAEaiIFIAUoAgAgACgCAGo2AgAgAEEEaiEAIAJBAUohBSACQX9qIQIgBQ0ACyABIAZBAnRqIQELIAEgBGoiACAAKAIAIAEoAgBqNgIAIAFBBGohAQsgASAEaiIAIAAoAgAgASgCAGo2AgAgAUEEaiEBCyABIARqIgAgACgCACABKAIAajYCACABQQRqIQELIAEgBGoiACAAKAIAIAEoAgBqNgIAIAFBBGohAQsgByADayIHQQBKDQALCwskAQJ/IwBBEGsiAiQAIAAgARDPCiEDIAJBEGokACABIAAgAxsLswIBBn8gAkECbSICIAAoAsgEKAIEIgNKBEAgASACEPQHIANBfGohBSACIANrIQYgA0EESyEHIANBBUghCANAAkACQAJAAkACQCAHRQRAIANBAWsOBAQDAgEFCyAFIQIgASEAIAgNAANAIAAgA0EBdGoiBCAELwEAIAAvAQBqOwEAIABBAmohACACQQFKIQQgAkF/aiECIAQNAAsgASAFQQF0aiEBCyABIANBAXRqIgAgAC8BACABLwEAajsBACABQQJqIQELIAEgA0EBdGoiACAALwEAIAEvAQBqOwEAIAFBAmohAQsgASADQQF0aiIAIAAvAQAgAS8BAGo7AQAgAUECaiEBCyABIANBAXRqIgAgAC8BACABLwEAajsBACABQQJqIQELIAYgA2siBkEASg0ACwsL2gEBAn8CQAJAAkAgACgCyAQiBARAIAQoAiQiBUUNASAAIAEgAiADIAURBwBFBEBBAA8LIAQoAggiA0EATA0CIAQoAigiBUUNAwJAIAJBAUgNACAAIAEgAyAFEQUAIAIgA2siAkEATA0AA0AgACABIANqIgEgAyAEKAIoEQUAIAIgA2siAkEASg0ACwtBAQ8LQbS1AkHOhQFBoANB4cMpEAMAC0HsxwZBzoUBQaEDQeHDKRADAAtBoOUGQc6FAUGlA0HhwykQAwALQcypBkHOhQFBpgNB4cMpEAMAC4IBAQJ/AkACQCAAKALIBCIEBEAgBCgCHCIFRQ0BIAQoAihFDQIgACABIAIgAyAFEQcARQRAQQAPCyAAIAEgAiAEKAIoEQUAQQEPC0G0tQJBzoUBQYkDQc7DKRADAAtB1YYGQc6FAUGKA0HOwykQAwALQcypBkHOhQFBiwNBzsMpEAMAC6QCAQd/IAJBBG0iAiAAKALIBCgCBCIDSgRAIANBfGohBiACIANrIQcgA0EESyEIIANBBUghCSADQQJ0IQQDQAJAAkACQAJAAkAgCEUEQCADQQFrDgQEAwIBBQsgBiECIAEhACAJDQADQCAAIARqIgUgBSgCACAAKAIAajYCACAAQQRqIQAgAkEBSiEFIAJBf2ohAiAFDQALIAEgBkECdGohAQsgASAEaiIAIAAoAgAgASgCAGo2AgAgAUEEaiEBCyABIARqIgAgACgCACABKAIAajYCACABQQRqIQELIAEgBGoiACAAKAIAIAEoAgBqNgIAIAFBBGohAQsgASAEaiIAIAAoAgAgASgCAGo2AgAgAUEEaiEBCyAHIANrIgdBAEoNAAsLC6wCAQZ/IAJBAm0iAiAAKALIBCgCBCIDSgRAIANBfGohBSACIANrIQYgA0EESyEHIANBBUghCANAAkACQAJAAkACQCAHRQRAIANBAWsOBAQDAgEFCyAFIQIgASEAIAgNAANAIAAgA0EBdGoiBCAELwEAIAAvAQBqOwEAIABBAmohACACQQFKIQQgAkF/aiECIAQNAAsgASAFQQF0aiEBCyABIANBAXRqIgAgAC8BACABLwEAajsBACABQQJqIQELIAEgA0EBdGoiACAALwEAIAEvAQBqOwEAIAFBAmohAQsgASADQQF0aiIAIAAvAQAgAS8BAGo7AQAgAUECaiEBCyABIANBAXRqIgAgAC8BACABLwEAajsBACABQQJqIQELIAYgA2siBkEASg0ACwsLggQBBn8CQCAAKALIBCgCBCIDIAJODQAgAiADayEEIANBfWoiAEEBTQRAIABBAWsEQCABLAACIQIgASwAASEAIAEsAAAhBQNAIAEgBSABLAADaiIFOgADIAEgACABLAAEaiIAOgAEIAEgAiABLAAFaiICOgAFIAFBA2ohASAEQQNKIQMgBEF9aiEEIAMNAAsMAgsgASwAAyECIAEsAAIhACABLAABIQUgASwAACEDA0AgASADIAEsAARqIgM6AAQgASAFIAEsAAVqIgU6AAUgASAAIAEsAAZqIgA6AAYgASAC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A0AgAyAEIAJBAnRqKALYATYCQCABQY33CyADQUBrEK8BIAJBAWoiAiAELQDTAUkNAAsLQQogARC3BiAAKAIwIQILIAJBIHELBEBB2JIMQQ9BASABEIkBGiAELQDUAQRAQQAhAgNAIAMgBCACQQJ0aigC5AE2AjAgAUGN9wsgA0EwahCvASACQQFqIgIgBC0A1AFJDQALC0EKIAEQtwYgACgCMCECCyACQcAAcQsEQEH9oAxBD0EBIAEQiQEaIAQtANUBBEBBACECA0AgAyAEIAJBAnRqKALwATYCICABQY33CyADQSBqEK8BIAJBAWoiAiAELQDVAUkNAAsLQQogARC3BiAAKAIwIQILIAJBgAFxCwR/IAMgBC0AzAE2AhAgAUGrrQwgA0EQahCvASAAKAIwBSACC0GAAnEEQCADIAQvAawCNgIAIAFB/rgMIAMQrwELIANB8ABqJAAPC0HvvwtB34QBQcYEQaO7KRADAAuqAgECfyAAKALIBCEDAkACQCABQYB8aiIEQRJLDQACQAJAAkACQAJAAkACQAJAIARBAWsOEgABBwgICAMEBQgICAgICAgIAgYLIAIoAgAgAygCxAE2AgAMCAsgAigCACADKALIATYCAAwHCyADLQDOAUUEQCAAELEWCyACKAIAIAMtANABOwEAIAIoAgQgAy0A0QE7AQAMBgsgAigCACADLQDTATYCACACKAIEIANB2AFqNgIADAULIAIoAgAgAy0A1AE2AgAgAigCBCADQeQBajYCAAwECyACKAIAIAMtANUBNgIAIAIoAgQgA0HwAWo2AgAMAwsgAigCACADLQDMATsBAAwCCyACKAIAIAMvAawCOwEADAELIAAgASACIAMoAqABEQQADwtBAQsWACAAKAL0BEGAvilBiZEOQQAQR0EACxYAIAAoAvQEQZG+KUGJkQ5BABBHQQALFgAgACgC9ARBsL4pQYmRDkEAEEdBAAsWACAAKAL0BEGgvilBiZEOQQAQR0EAC9gCAQJ/AkAgACgCyAQiAgRAIAAgAigCoAE2AqAFIAAgAigCpAE2ApwFIAIoAvwBIgEEQCABED0LIAIoAoACIgEEQCABED0LIAIoAoQCIgEEQCABED0LIAIoAogCIgEEQCABED0LIAIoAowCIgEEQCABED0LIAIoApACIgEEQCABED0LIAIoApQCIgEEQCABED0LIAIoApgCIgEEQCABED0LIAIoApwCIgEEQCABED0LIAIoAqACIgEEQCABED0LIAIoAqQCIgEEQCABED0LIAIoAqgCIgEEQCABED0LIAItAJADBEAgACgCyAQiAS0AkANFDQIgAUGYBGoQgQggAUEAOgCQAwsgAigCvAgiAQRAIAEQPQsgAigC0AgiAQRAIAEQPQsgAigCiCkiAQRAIAEQPQsgAhA9IABBADYCyAQgABCMBwsPC0Hvog1B34QBQawJQYq8KRADAAuOBQEMfyMAQRBrIgYkAAJAAkACQAJAIAAoAsgEIgQtAJEDRQRAIAIgBCgC3AhwBEBBACEDIAAoAvQEQby9KUHqhQ5BABBHDAULIAJBAUgNASAEQZgEaiEOIAQoAtgIIQADQCAARQRAIAQgDiAEKALQCCAELQDRAUEDdBCbEEUEQEEAIQMMBwsgBCgC2AghAAsgBCgC1AgEQCAEKAKoCCAAbCIDIAQoAsQIaiEIIAQoAsgIIANqIQkgBCgCwAggBCgCoAggACAELQDRASIHbGxqIQpBACEMIAEhBQNAIAQtANABIgshA0EAIQ0gCiEAIAcEQANAIANB/wFxIQ9BACEDIA8EQANAIAUgAC0AADoAACAFQQFqIQUgAEEBaiEAIANBAWoiA0H/AXEgBC0A0AEiC0kNAAsgBC0A0QEhByALIQMLIAAgBCgCoAggA2tqIQAgDUEBaiINQf8BcSAHSQ0ACwsgBSAILQAAOgAAIAUgCS0AADoAASAMQQFqIgwgBCgC1AhJBEAgCEEBaiEIIAlBAWohCSAFQQJqIQUgCiALaiEKIAQtANEBIQcMAQsLIAQoAtgIIQALQQEhAyAEQQAgAEEBaiIAIAAgBCgCrAhGGyIANgLYCCABIAQoAtwIIgVqIQEgAiAFayICDQALDAQLIAIgBCgC3AhwBEAgACgC9ARB0L0pQeqFDkEAEEcMAwsgAkEATA0BIAYgATYCDCAEQZgEaiEAA0AgBCAAIAZBDGoQrhZFDQMgBiAEKALcCCIBIAYoAgxqNgIMIAIgAWsiAg0AC0EBIQMMAwtBmYsOQd+EAUGKBkG8vSkQAwALQZmLDkHfhAFBugZB0L0pEAMAC0EAIQMLIAZBEGokACADCxcAIAAoAvQEQcC7KUG9xQxBABCzAUEBC4AWAQx/IwBBEGsiCiQAIAAoAsgEIgctAM4BRQRAIAAQsRYLAkACQAJAAkACQAJAAkACQAJAAkACQCAHLQCIA0UEQCAAKALIBCIGLQCIAw0CIAYgACgCOCIENgKsASAGIAAoAjwiBTYCsAEgBgJ/IAAtAA1BBHEEQCAAKAJEIQQgBSAAKAJIIgJqQX9qIgMgAyACcGsMAQsgACgCZCECIAULNgK8ASAGIAI2ArgBIAYgBDYCtAEgBiAALwFiIgM6AMABAkACQAJAIANB/wFxIgNBf2oiCUECSw0AAkAgCUEBaw4CAQIACyAGQYECOwHQASAGQYACOwDBAQwCCyAAKAL0BCEAIAogAzYCACAAQeC7KUHO3gwgChBHQQAhBQwDCyAGQQA6AMEBIAAvAYoBQQFGBEAgBkEDOgDCAQwBCyAGQQE6AMIBCyACIAVJBEAgAiACIAYtANEBQQN0IgNuIgUgA2xrBEBBACEFIAAoAvQEQeC7KUHq6gxBABBHDAMLIAYgBSAEIAYtANABQQN0IgNqQX9qIANubDsBrAILIAAQsBZFBEBBACEFDAILIAZBAToAzAIgBkEBOgCIAyAGIAYpAuQINwLQAiAGIAYoAvAIIAYvAfwIIgNrNgLYAiAGIAMgBigC+AhqNgLcAgsCQCAHIAFBFGxqLQDMAg0AIAFFDQMgAUEDTw0EIAAoAsgEIgMtAMwCRQ0FIAMgAUEUbGotAMwCDQYgASEFA0AgAyAFQX9qIgVB/wFxIgRBFGxqLQDMAkUNAAsgAyAFOgDBASADIAMgBEEUbGoiBCgC0AI2AuQIIAMgBCgC1AI2AugIIAQoAtgCIQZBACECIANBADoA9AggAyAGNgLwCCAEKALcAiEEIANBADYCgAkgA0EAOwH8CCADIAQ2AvgIIAVB/wFxIAFPDQADQCACQf//A3FFBEAgAxCcAkUEQEEAIQUMBAsgAy8B/AgiAkUNDQsgAygCgAkiBS0AACEEIAMgAkF/aiICOwH8CCADIAVBAWoiBTYCgAkgBEH/AUcNAANAIAJB//8DcUUEQCADEJwCRQRAQQAhBQwFCyADLwH8CCICRQ0OIAMoAoAJIQULIAUtAAAhBCADIAJBf2oiAjsB/AggAyAFQQFqIgU2AoAJIARB/wFGDQALIARB2gFHDQAgAyADLQDBAUEBajoAwQEgABCvFkUEQEEAIQUMAwsgAyADLQDBASIEQRRsaiIFQQE6AMwCIAUgAygC5Ag2AtACIAUgAygC6Ag2AtQCIAUgAygC8AggAy8B/AgiAms2AtgCIAUgAiADKAL4CGo2AtwCIAQgAUkNAAsLIABB+ANB4AMgAC0ADUEEcRtqKAIAIQkCQCAHLQCJAwRAIAEgBy8BigNGBEAgBygCjAMiBCAJTQ0CCyAHLQCQAwRAIAAoAsgEIgMtAJADRQ0JIANBmARqEIEIIANBADoAkAMLIAdBADoAiQMLIAcgATsBigMgByABOgDBASAHIAAoArABIAFsNgKMAwJAAkAgBy0A9AhFBEAgByABQRRsaigC2AIhAgwBCyAHIAFBFGxqKALYAiICIAcoAvAIIAcvAfwIa0YNAQsgByAHIAFBFGxqIgEoAtACNgLkCCABKALUAiEDIAdBADoA9AggByACNgLwCCAHIAM2AugIIAEoAtwCIQEgB0EANgKACSAHQQA7AfwIIAcgATYC+AgLIAAoAsgEIgItAJADDQhBACEFIAJBADoArgIgAkEANgKEGSACQZQDaiIBEPAMGiACIAA2AqQEIAIgATYCmAQgAkG/BjYClAMgAkHABjYCnAMgAiACQZgEaiILEPclRQ0BIAJBAToAkAMgAkGYCGpBwQY2AgAgAkGUCGpBwgY2AgAgAkGQCGpBwwY2AgAgAkGMCGpBxAY2AgAgAkGICGpBxQY2AgAgAkGECGpBADYCACACIAJBgAhqNgKwBCACIAsQ8yVFDQECQCACLQDSASACLQDCASIBQQJJckUEQCACQQA6AJEDIAJBADYC5AQgAkEBNgLcBCACLQCcCA0BIAIoArwIDQsgAigC0AgNDCACQQg2AqwIIAIgAi0A0QFBA3QiAzYCpAggAiACLQDQASIEQQN0IgEgAigCtAFqQX9qIgYgBiABcGsiATYCoAggAiABIANsIgM2ArAIIAIgASAEbiIBNgKoCCACIAFBA3Q2ArQIIAIgAyABQQR0aiIBNgK4CCACIAEQXCIBNgK8CCABRQRAIAAoAvQEQbC8KUH1kAlBABBHDAQLIAIgATYCwAggAiABIAIoArAIaiIBNgLECCACIAEgAigCtAhqNgLICCACIAIoAqQIIAIoAqwIQQF0akEDaiIBNgLMCCACIAFBAnQQXCIDNgLQCCADRQRAIAAoAvQEQbC8KUH1kAlBABBHDAQLIAMgA0EMaiIENgIAIAMgAigCpAgiCEECdCIBIAIoAtAIakEMajYCBCADIAIoAtAIIAFqIAIoAqwIIgZBAnRqQQxqNgIIIAgEQCAIQQJ0QQxqIQwgAigCoAghDUEAIQEDQCAEIAIoAsAIIAEgDWxqNgIAIARBBGohBCABQQFqIgEgCEcNAAsgAyAMaiEECyAGBEAgAigCqAghCEEAIQEgBCEDA0AgAyACKALECCABIAhsajYCACADQQRqIQMgAUEBaiIBIAZHDQALIAQgBkECdGohBEEAIQEDQCAEIAIoAsgIIAEgCGxqNgIAIARBBGohBCABQQFqIgEgBkcNAAsLIAJBADYC2AggAkEBOgCcCCACIAItANABIgEgAigCtAFqQX9qIAFuIgQ2AtQIIAIgAi0A0QEiAyACKAK4AWpBf2ogA242AuAIIAIgASADbEECaiAEbDYC3AgMAQsgAkEBOgCRAyACQgA3A8AEIAIgAigCuAE2AuAIIAIgAigCtAEgAWw2AtwICyACIAsQ8iVFDQEgAkEBOgCJAyAHKAKMAyEEC0EBIQUgBCAJTw0AA0AgACgCyAQhAQJAAkAgBy0AkQNFBEAgASgCrAghAyABKALgCCECAn8gASgC2AgiBQRAIAIgAyAFayIETQRAIAFBACACIAVqIgEgASADRhs2AtgIDAULIAFBADYC2AggAiAEayECCyACIANPCwRAIAFBmARqIQMDQCABIAMgASgC0AggAS0A0QFBA3QQmxBFBEBBACEFDAcLIAIgASgCrAgiBWsiAiAFTw0ACwsgAkUNAiABIAFBmARqIAEoAtAIIAEtANEBQQN0EJsQDQFBACEFDAQLAkAgASgCiCkNACABIAEoAtwIEFwiAzYCiCkgAw0AQQAhBSAAKAL0BEGgvSlB9ZAJQQAQRwwECyABKALgCEUNASABQYgpaiEDIAFBmARqIQRBACEFQQAhAgNAIAEgBCADEK4WRQ0EIAJBAWoiAiABKALgCEkNAAsMAQsgASACNgLYCAtBASEFIAcgBygCjANBAWoiATYCjAMgASAJSQ0ACwsgCkEQaiQAIAUPC0Hi0QxB34QBQeIHQeC7KRADAAtB5vcMQd+EAUGfCEH0uykQAwALQeWCDUHfhAFBoAhB9LspEAMAC0HGjg1B34QBQaEIQfS7KRADAAtBvpgNQd+EAUGiCEH0uykQAwALQe+iDUHfhAFBrAlBirwpEAMAC0GjrA1B34QBQdMIQbC8KRADAAtBx7UNQd+EAUHwCEGwvCkQAwALQZe+DUHfhAFB8QhBsLwpEAMAC0HquQdB34QBQZsPQb24KRADAAteACAAKALIBCIBIAEoAowDQQFqIgI2AowDAkAgAiAAKAKwAXBFBEAgAS0AkANFDQEgAUGYBGoQgQggAUEAOgCJAyABQQA6AJADCw8LQe+iDUHfhAFB0AZB5b0pEAMAC/UCAQF/IwBBEGsiAiQAIAFBBkYEQAJ/IABB0LYpQQcQuQVFBEAgACgC9ARBurYpQZrBAUEAEEdBAAwBC0GQKRBcIgFFBEAgACgC9ARBurYpQaeBAkEAEEdBAAwBCyABQQBBkCkQxQIgAUGCBDsB0AEgAUEBOgDMASABIAA2AgAgAkKCgICAIDcDACAAQZIEIAIQkAEaIABBswY2AowFIABBtAY2AogEIABBtQY2AoQEIABBtgY2AqwEIABBtgY2AqQEIABBtgY2ApwEIAAgATYCyAQgAEG3BjYCvAQgAEG4BjYCsAQgAEG4BjYCqAQgAEG4BjYCoAQgAEG5BjYCmAQgAEG6BjYClAQgAEG7BjYCjAQgASAAKAKgBTYCoAEgAEG8BjYCoAUgASAAKAKcBTYCpAEgAEG9BjYCpAUgAEG+BjYCnAUgACAAKAIMQYCACHI2AgxBAQshACACQRBqJAAgAA8LQaXIAEHfhAFBjQNBurYpEAMAC+UEARF/IwBBEGsiDSQAAn8CQCACQQBMBEAgAEHgBGohDyAAQdwEaiEQIAAoAuAEIQMgACgC3AQhBAwBCyABQf8BIAIQZRogAEHgBGohDyAAQdwEaiEQIAAoAswEIQggACgC4AQhAyAAKALcBCEEA0AgA0F/aiEKIARBAWohCQJAAkACQCAELQAAIgZBwABHBEAgBg0BIAMgCEwNAiABIAkgCBDRASAKIAhrIQMgCCAJaiEEDAMLIAMgBC0ABCAELQADQQh0ciIDQQRqIgdMDQEgAyAELQACIAQtAAFBCHRyIgVqIAhKDQEgASAFaiAEQQVqIAMQ0QEgCiAHayEDIAcgCWohBAwCCyAAKAI4IQxBACEFIAEhAwNAIAUgDEkhCwJAIAZBP3EiDkUgBSAMT3JFBEAgBkHAAXEiEkEGdiIRQQR0IRMgEUECdCEUIAMhBwNAIAVBAWohBCATIQYgEiELAkACQAJAAkAgBUEDcUEBaw4DAgABAwsgFCEGIAMhBwwBCyADQQFqIQcgESEGCyADLQAAIAZyIQsLIAMgCzoAACAEIAxJIQsgDkECSA0CIA5Bf2ohDiAEIQUgByEDIAQgDEkNAAsMAQsgAyEHIAUhBAsgC0UEQCAKIQMgCSEEDAMLIApFDQEgCkF/aiEKIAktAAAhBiAHIQMgCUEBaiEJIAQhBQwAAAsACyAAKAIAIQEgACgC9AQhAiANIAAoAtgDNgIAIAIgAUH4xwAgDRBHQQAMAwsgASAIaiEBIAIgCGsiAkEASg0ACwsgECAENgIAIA8gAzYCAEEBCyEEIA1BEGokACAECx8AIABBsgY2AqwEIABBsgY2AqQEIABBsgY2ApwEQQELiQsBDn8jAEHwAGsiCCQAAkAgACgCyAQiBQRAIAUoAlgiBgRAIAUoAmQiBC8BBCAGayIDIAJKBEAgBSACIAZqNgJYA0AgBCgCACEEIANBf2oiAyACSg0ACyABIAJqIQMDQCADQX9qIgMgBC0ABjoAACAEKAIAIQQgAkF/aiICDQALQQEhDgwDCyABIANqIgEhByADIQoDQCAHQX9qIgcgBC0ABjoAACAEKAIAIQQgCkF/aiIKDQALIAVBADYCWCACIANrIQILQQEhDiAFKAJwIRAgBSgCbCELIAUoAmghAyAFKAJUIQ8gBSgCTCEKIAUoAkghDCAFLwFAIQcgACgC3AQhCQJAIAJBAUgNAANAIAUoAlwiBiAHSARAIAAoAgAhASAAKAL0BCEGIAggACgC4AM2AhAgBiABQffAAyAIQRBqELMBDAILIAktAAAgCnQgDHIhBAJ/IAlBAWogCkEIaiIMIAdODQAaIAktAAEgDHQgBHIhBCAKQRBqIQwgCUECagshCSAFIAYgB2s2AlwgDCAHayEKIAQgB3UhDCAEIA9xIhFB//8DcSINQYECRg0BIAUoAnQhBAJAIA1BgAJGBEAgBEGQEGoiC0EAQeivAhDFAiAFKAJ0QfgfaiEQIAUoAlwiDUEITARAIAAoAgAhASAAKAL0BCEGIAggACgC4AM2AiAgBiABQffAAyAIQSBqELMBQf8DIQ9BCSEHDAQLIApBCGohByAJLQAAIAp0IAxyIQQgCkEASgR/IAlBAWoFIAktAAEgB3QgBHIhBCAKQRBqIQcgCUECagshBiAFIA1Bd2o2AlxB/wMhDyAHQXdqIQpBCSEHIARBCXUhDCAEQf8DcSIJQYB+aiINQQFNBEAgBiEJIA1BAWtFDQQgACgCACEBIAAoAvQEIQIgCCAAKALYAzYCMCACIAFBnu8DIAhBMGoQR0EAIQ4MBgsgASAEOgAAIAJBf2ohAiABQQFqIQEgBSgCdCAJQQN0aiEDIAYhCQwBCwJAIAsgBE8EQCALIARB+L8CaiIGSQ0BCyAAKAIAIQEgACgC9AQhAiAIIAAoAtgDNgJgIAIgAUGnmQQgCEHgAGoQR0EAIQ4MBQsgCyADNgIAIAMgBE9BACADIAZJG0UEQCAAKAIAIQEgACgC9AQhAiAIIAAoAtgDNgJQIAIgAUGnmQQgCEHQAGoQR0EAIQ4MBQsgCyADLQAHOgAHIAsgAy8BBEEBajsBBCALIAQgDUEDdCIDaiIGQQdqIAtBB2ogBiALSRstAAA6AAYgC0EIaiILIBBLBEAgBEF/IAdBAWpBDCAHQQxIGyIHdEF/cyIPQQN0aiEQCwJ/AkAgDUGAAk8EQCADIARqLwEEIhFFBEAgACgCACEBIAAoAvQEIQIgCCAAKALYAzYCQCACIAFB08EEIAhBQGsQR0EAIQ4MCAsgAiARSARAIAUgBjYCZCAGIQQDQCACIAQoAgAiBC8BBEgNAAsgBSACNgJYIAEgAmohAwNAIANBf2oiAyAELQAGOgAAIAQoAgAhBCACQX9qIgINAAtBACECIAYhAwwGCyABIBFqIg0hBCAGIQMDQCAEQX9qIgQgAy0ABjoAACAEIAFNDQIgAygCACIDDQALDAELIAEgEToAACACQX9qIQIgAUEBagwBCyACIBFrIQIgDQshASAGIQMLIAJBAEoNAAsLIAAgCTYC3AQgBSAQNgJwIAUgCzYCbCAFIAM2AmggBSAPNgJUIAUgCjYCTCAFIAw2AkggBSAHOwFAIAJBAUgNASAAKAIAIQEgACgC9AQhAyAAKALYAyEAIAggAjYCBCAIIAA2AgAgAyABQeTsBCAIEEdBACEODAELQfi0AkHVhAFBvQRB77UpEAMACyAIQfAAaiQAIA4LTAEBfyAAKALIBCIBBEAgAUHIsgQQXCIBNgKQASABBH9BAQUgACgC9ARBibYpQcqnBkEAEEdBAAsPC0H4tAJB1YQBQesFQYm2KRADAAuMAgEDfyAAKALIBCIBBEAgASgCkAEiAkUEQCAAIAAoAowEEQEAGiABKAKQASECCyABQYICOwFEIAFBiYD8DzYCQCABQgA3AoQBIAFCkM4ANwJ8IAFCADcCSCABIAAoAtQEIAAoAtgEakF7ajYCjAEgAkHAsgRqIQBBocYAIQMDQCAAQX82AgAgAEF4akF/NgIAIABBcGpBfzYCACAAQWhqQX82AgAgAEFgakF/NgIAIABBWGpBfzYCACAAQVBqQX82AgAgAEFIakF/NgIAIABBQGohACADQQdLIQQgA0F4aiEDIAQNAAsgAkF/NgIAIAFB//8DNgJ4QQEPC0H4tAJB1YQBQf0FQZi2KRADAAuTAgEGfyAAKALIBCICLwFAIQMgAigCSCEEIAIoAkwhBSAAKALcBCIBIAIoAowBSwRAIAAgASAAKALUBGs2AuAEIAAQ8QEaIAAoAtQEIQELIAIoAngiBkH//wNHBEAgASAGIAQgA3RyIgQgAyAFaiIGQXhqIgV1OgAAIAZBEEgEfyABQQFqBSABIAQgBkFwaiIFdToAASABQQJqCyEBIAJB//8DNgJ4CyABIAQgA3RBgQJyIgQgAyAFaiIDQXhqIgJ1OgAAIANBEEgEfyABQQFqBSABIAQgA0FwaiICdToAASABQQJqCyEBIAAgAkEBTgR/IAEgBEEIIAJrdDoAACABQQFqBSABCyAAKALUBGs2AuAEQQELjAoBFX8gACgCyAQiBEUEQEEADwsgBCgCkAEEQCAELwF4IQwgBCgCjAEhFyAAKALcBCEFIAQvAUAhByAELwFCIQ8gBC8BRCEGIAQoAkwhCCAEKAJIIQkgBCgCfCESIAQoAogBIQogBCgChAEhAwJ/IAEgAkEBSA0AGiABIAxB//8DRw0AGiAFIAkgB3RBgAJyIgkgByAIaiIOQXhqIgh1OgAAIA5BEEgEfyAFQQFqBSAFIAkgDkFwaiIIdToAASAFQQJqCyEFIANBAWohAyACQX9qIQIgByAKaiEKIAEtAAAhDCABQQFqCyEOAkAgAkEBSA0AA0AgBCgCkAEhECACIRECQANAIAwhCyAOLQAAIQwgA0EBaiEBIBFBf2ohAiAOQQFqIQ4gECALIAxBBXRzIg1BA3QiE2oiFCgCACIVIAsgDEEMdGoiFkcNASARQQFKIQsgECATai8BBCEMIAEhAyACIREgCw0ACwwCCwJAIBVBAE4EQEGpxgAgDWtBASANGyETA0AgFiAQIA0gE2siDUGpxgBqIA0gDUEASBsiDUEDdCIVaiIUKAIAIhhGBEAgECAVai8BBCEMIAEhAwwDCyAYQX9KDQALCyAFIBdLBEAgACAFIAAoAtQEazYC4AQgABDxARogACgC1AQhBQsgBSAJIAd0IAtyIgkgByAIaiILQXhqIgh1OgAAIAtBEEgEfyAFQQFqBSAFIAkgC0FwaiIIdToAASAFQQJqCyEFIBQgFjYCACAUIAY7AQQCfwJAIAZBAWoiC0H+H0YEQCAEKAKQASIDQcCyBGohAUGhxgAhBgNAIAFBfzYCACABQXhqQX82AgAgAUFwakF/NgIAIAFBaGpBfzYCACABQWBqQX82AgAgAUFYakF/NgIAIAFBUGpBfzYCACABQUhqQX82AgAgAUFAaiEBIAZBB0shCiAGQXhqIQYgCg0ACyADQX82AgBBACEDIARBADYCgAEgBSAJIAd0QYACciIJIAcgCGoiAUF4aiIIdToAAEH/AyEPQYICIQYgAUEQSA0BIAUgCSABQXBqIgh1OgABIAVBAmoMAgsgByAKaiEKAkACQCAGIA9OBEAgB0EMTg0CQX8gB0EBaiIHdEF/cyEPDAELIAEgEkgNACADQZHOAGohEgJ/IANB////A04EQEH/////ByAKQQh1IgZFDQEaIAEgBm0MAQsgAUEIdCAKbQsiBiAEKAKAAUwEQCAEKAKQASIDQcCyBGohAUGhxgAhBgNAIAFBfzYCACABQXhqQX82AgAgAUFwakF/NgIAIAFBaGpBfzYCACABQWBqQX82AgAgAUFYakF/NgIAIAFBUGpBfzYCACABQUhqQX82AgAgAUFAaiEBIAZBB0shCiAGQXhqIQYgCg0ACyADQX82AgBBACEDIARBADYCgAEgBSAJIAd0QYACciIJIAcgCGoiAUF4aiIIdToAAEH/AyEPQYICIQYgAUEQSA0DIAUgCSABQXBqIgh1OgABIAVBAmoMBAsgBCAGNgKAAQsgASEDIAshBgwDC0H85AZB1YQBQawHQaW2KRADAAsgBUEBagshBSAHIQpBCSEHCyARQQFKDQALCyAEIAo2AogBIAQgAzYChAEgBCASNgJ8IAQgCDYCTCAEIAk2AkggBCAGOwFEIAQgDzsBQiAEIAc7AUAgBCAMNgJ4IAAgBTYC3ARBAQ8LQZnHBkHVhAFBygZBpbYpEAMAC2cBAn8gABCZECAAKALIBCIBBEACfyABKAJ0IgIEQCACED0gACgCyAQhAQsgASgCkAEiAgsEfyACED0gACgCyAQFIAELED0gAEEANgLIBCAAEIwHDwtBr4IHQdWEAUGVCEGvtikQAwAL5gEBAn8CQAJAIAAoAsgEIgFFBEAgAEGUARBcIgE2AsgEIAFFBEAgACgC9ARBmoECQf3AAUEAEEdBAA8LIAFBADYCYCABQQA2AnQgABDaDCAAKALIBCIBRQ0BCyABKAJ0RQRAIAFB+L8CEFwiAjYCdCACRQ0CQf8BIQEDQCACIAEiAEEDdGoiASAAOgAHIAEgADoABiABQQE7AQQgAUEANgIAIABBf2ohASAADQALIAJBgBBqQQBBEBDFAgtBAQ8LQfi0AkHVhAFB3gFB4LUpEAMACyAAKAL0BEHQtSlBleECQQAQR0EAC6ICAQF/IAAoAsgEIgEEQCABKAJ0RQRAIAAgACgChAQRAQAaCwJAAkAgACgC1AQiAi0AAA0AIAItAAFBAXFFDQAgASgCYEUEQCAAKAL0BCAAKAIAQdePA0EAELMBIABBsQY2AqwEIABBsQY2AqQEIABBsQY2ApwEIAAgACgChAQRAQAaIAFBsQY2AmALIAFB/wM7AUIMAQsgAUGpBjYCYCABQf4DOwFCCyABQQk7AUAgAUIANwJIIAFC/wM3AlQgACgC4AQhACABIAEoAnRBkBBqIgI2AmwgASAAQQN0NgJcIAJBAEHorwIQxQIgASABKAJ0IgBBeGo2AmggASAAIAEoAlRBA3RqQXhqNgJwQQEPC0H4tAJB1YQBQYMCQZqBAhADAAu2DAEPfyMAQZABayIFJAAgACgCyAQiBARAIAQoAnQEQAJAIAQoAlgiBgRAIAQoAmQiAy8BBCAGayIKIAJKBEAgBCACIAZqNgJYA0ACQCADKAIAIQMgCkF/aiIKIAJMDQAgAw0BCwtBASESIANFDQIgASACaiEHA0AgB0F/aiIHIAMtAAY6AAAgAkF/aiICRQ0DIAMoAgAiAw0ACwwCCyABIApqIgEhCSAKIQgDQAJAIAMoAgAhBiAJQX9qIgkgAy0ABjoAACAIQX9qIghFDQAgBiIDDQELCyAEQQA2AlggAiAKayECC0EBIRIgBCgCcCERIAQoAmwhCyAEKAJoIQcgBCgCVCEPIAQoAkwhDiAEKAJIIQkgBC8BQCEIIAAoAtwEIQMCQAJAIAJBAUgNAANAIAQoAlwiBiAISARAIAAoAgAhBiAAKAL0BCEBIAUgACgC4AM2AhAgASAGQffAAyAFQRBqELMBDAILIAMtAAAgCUEIdHIhCQJ/IANBAWogDkEIaiIKIAhODQAaIA5BEGohCiADLQABIAlBCHRyIQkgA0ECagshDCAEIAYgCGs2AlwgCSAKIAhrIg51IA9xIgpB//8DcSIQQYECRgRAIAwhAwwCCyAEKAJ0IQ0CQCAQQYACRgRAIA1BkBBqIgtBAEHorwIQxQIgBCgCdEHwH2ohESAEKAJcIgZBCEwEQCAAKAIAIQMgACgC9AQhASAFIAAoAuADNgIgIAEgA0H3wAMgBUEgahCzAUH/AyEPQQkhCCAMIQMMBAsgDC0AACAJQQh0ciEJAn8gDkEASgRAIA5BCGohCCAMQQFqDAELIA5BEGohCCAMLQABIAlBCHRyIQkgDEECagshAyAEIAZBd2o2AlxB/wMhDyAJIAhBd2oiDnUiDEH/A3FBgH5qIgZBAU0EQEEJIQggBkEBa0UNBCAAKAIAIQIgACgC9AQhASAFIAAoAtgDNgIwIAEgAkGe7wMgBUEwahBHDAULIAEgDDoAACACQX9qIQIgAUEBaiEBIAQoAnQgDEH/A3FBA3RqIQdBCSEIDAELAkAgCyANTwRAIAsgDUH4vwJqIgNJDQELIAAoAgAhAiAAKAL0BCEBIAUgACgC2AM2AoABIAEgAkGe7wMgBUGAAWoQRwwECyALIAc2AgAgByANT0EAIAcgA0kbRQRAIAAoAgAhAiAAKAL0BCEBIAUgACgC2AM2AnAgASACQZ7vAyAFQfAAahBHDAQLIAsgBy0ABzoAByALIAcvAQRBAWo7AQQgCyANIBBBA3QiA2oiBkEHaiALQQdqIAYgC0kbLQAAOgAGIAtBCGoiCyARSwRAIA1BfyAIQQFqQQwgCEEMSBsiCHRBf3MiD0EDdGpBeGohEQsCQCAQQYACTwRAIAMgDWovAQQiDUUEQCAAKAIAIQIgACgC9AQhASAFIAAoAtgDNgJAIAEgAkHIugUgBUFAaxBHDAYLIAIgDUgEQCAEIAY2AmQgBiEDA0AgAygCACIDRQ0DIAIgAy8BBEgNAAsgBCACNgJYIAEgAmohBwNAAkAgB0F/aiIHIAMtAAY6AAAgAygCACEDIAJBf2oiAkUNACADDQELCyADRQ0CIAAoAgAhAyAAKAL0BCEBIAUgACgC2AM2AlAgASADQfaDBiAFQdAAahBHDAILIAEgDWoiCiEDIAYhBwNAAkAgBygCACEQIANBf2oiAyAHLQAGOgAAIAMgAU0NACAQIgcNAQsLIBAEQCAAKAIAIQMgACgC9AQhASAFIAAoAtgDNgJgIAEgA0H2gwYgBUHgAGoQRwwCCyACIA1rIQIgDCEDIAYhByAKIQEMAgsgASAKOgAAIAJBf2ohAiABQQFqIQEgDCEDIAYhBwwBCyAMIQMgBiEHDAILIAJBAEoNAAsLIAAgAzYC3AQgBCARNgJwIAQgCzYCbCAEIAc2AmggBCAPNgJUIAQgDjYCTCAEIAk2AkggBCAIOwFAIAJBAUgNASAAKAIAIQMgACgC9AQhASAAKALYAyEAIAUgAjYCBCAFIAA2AgAgASADQebgBSAFEEcLQQAhEgsgBUGQAWokACASDwtB3JQFQdWEAUHsAkH/tSkQAwALQfi0AkHVhAFB6wJB/7UpEAMAC9cBACABQQVGBEAgAEGUARBcIgE2AsgEIAEEQCABQQA2ApABIAFBADYCYCABQQA2AnQgASAAKAIINgJQIABBqQY2AqwEIABBqQY2AqQEIABBqQY2ApwEIABBqgY2AogEIABBqwY2AoQEIABBrAY2ArwEIABBrQY2ArAEIABBrQY2AqgEIABBrQY2AqAEIABBrgY2ApgEIABBrwY2ApQEIABBsAY2AowEIAAQ2gxBAQ8LIAAoAvQEQby1KUH9wAFBABBHQQAPC0HexwBB1YQBQaYIQby1KRADAAvzAgIDfwF8IAJBAU4EQCAAKAIMIQMDQCACIQQCf0H//wEgASoCALsiBkQQwKjay97vQ2YNABpB//8DIAZEEMCo2sve78NlDQAaIAAoAgQhAiAGRLWIis/q9O87ZEEBc0UEQCAGEOECRP6CK2VHFfc/okQAAAAAAABQQKBEAAAAAAAAcECiIQYCfyACBEAgBhDSA7dEAAAgAAAAAD6ioEQAAAAAAADgv6AhBgsgBplEAAAAAAAA4EFjCwRAIAaqDAILQYCAgIB4DAELQQAgBkS1iIrP6vTvu2NBAXMNABogBpoQ4QJE/oIrZUcV9z+iRAAAAAAAAFBAoEQAAAAAAABwQKIhBgJ/An8gAgRAIAYQ0gO3RAAAIAAAAAA+oqBEAAAAAAAA4L+gIQYLIAaZRAAAAAAAAOBBYwsEQCAGqgwBC0GAgICAeAtBgIB+cgshBSABQQRqIQEgBEF/aiECIAMgBTsBACADQQJqIQMgBEEBSg0ACwsLwwYBC38gA0UEQCAAKALIBCIDBEAgAiADKAIIbSEKAkAgAygCAEEBRwRAIAMoAhAgCkgNASADKAIMIQIgAyABIAogAygCFBEFACACIQELIAAoAtgEIAAoAuAEayEFIAAoAtwEIQRBCCEDIApBAUghDgNAIAMhCyAORQRAQf8BIAt0IQxBACEGA0AgBUEDTARAIAAgBDYC3AQgACAAKALYBCAFazYC4AQgABDxAUUEQEF/DwsgACgC2AQgACgC4ARrIQUgACgC3AQhBAsgBiIDIQcCQCADIApODQADQEEBIQggASADIgdBAXRqLwEAIAxxQRB0QRB1IQICQAJAA0AgByAIaiIDIApODQIgDCABIANBAXRqLgEAcSACRw0BIAhBAWoiCEGBAUcNAAtBgQEhCAwDCyAIQQNNDQEMAgsLIAcgAyAIQQNLGyEHCwJAIAcgBmtBfnFBAkcNACAHQf8BaiEJIAZBAWohAyABIAZBAXRqLwEAIAxxQRB0QRB1IQIDQCAMIAEgA0EBdGouAQBxIAJHDQEgA0EBaiIDIAdHDQALIAQgAiALdToAASAEIAkgBmtB/wBqOgAAIAVBfmohBSAEQQJqIQQgByEGCyAHIAZKBEADQCAFIAcgBmsiAkH/ACACQf8ASBsiCUEDakgEQCAAIAQ2AtwEIAAgACgC2AQgBWs2AuAEIAAQ8QFFBEBBfw8LIAAoAtgEIAAoAuAEayEFIAAoAtwEIQQLIAQgCToAACAFQX9qIQUgBEEBaiIEIQMgCSENIAYhAiAJBEADQCADIAEgAkEBdGouAQAgC3U6AAAgA0EBaiEDIAJBAWohAiANQX9qIg0NAAsgBCAJaiEEIAUgCWshBSAGIAlqIQYLIAcgBkoNAAsLAkAgCEEESARAQQAhCAwBCyAEIAhB/gBqOgAAIAQgASAHQQF0ai4BACALdToAASAFQX5qIQUgBEECaiEECyAGIAhqIgYgCkgNAAsLIAtBeGohAyALDQALIAAgBDYC3AQgACAAKALYBCAFazYC4ARBAQ8LQc/gBUHLhAFBhgNB7rQpEAMAC0GT7wNBy4QBQf8CQe60KRADAAtBwboFQcuEAUH+AkHutCkQAwALgAMCBH8CfCAAKAIMIQMCQCAAKAIEBEAgAkEATA0BQQEhBANAIAEvAQAhBiABLgECt0QAAAAAAKCJP6IhByAEBH8gBxDSA7dEAAAgAAAAAD6ioEQAAAAAAADgv6AhByAAKAIEBUEACyEFIAEuAQS3IQgCfyAHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAshBCAIRAAAAAAAoIk/oiEHIAUEQCAHENIDt0QAACAAAAAAPqKgRAAAAAAAAOC/oCEHCyAEQQh0QYD+A3EgBkEQdHIhBSADIAUCfyAHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAtB/wFxcjYCACACQQJIDQIgAkF/aiECIANBBGohAyABQQZqIQEgACgCBCEEDAAACwALIAJBAUgNAANAIAMgAS4BBEGaA2xBD3ZB/wFxIAEuAQJBmgNsQQd2QYD+A3EgAS8BAEEQdHJyNgIAIAFBBmohASADQQRqIQMgAkEBSiEAIAJBf2ohAiAADQALCwtFAQJ/IAJBAU4EQCAAKAIMIQMDQCADIAEgACgCBBCyJjYCACABQQxqIQEgA0EEaiEDIAJBAUohBCACQX9qIQIgBA0ACwsLtAYBC38gA0UEQCAAKALIBCIDBEAgAiADKAIIbSEKAkAgAygCAEECRwRAIAMoAhAgCkgNASADKAIMIQIgAyABIAogAygCFBEFACACIQELIAAoAtgEIAAoAuAEayEFIAAoAtwEIQRBGCEDIApBAUghDgNAIAMhCyAORQRAQf8BIAt0IQxBACEGA0AgBUEDTARAIAAgBDYC3AQgACAAKALYBCAFazYC4AQgABDxAUUEQEF/DwsgACgC2AQgACgC4ARrIQUgACgC3AQhBAsgBiIDIQcCQCADIApODQADQCABIAMiB0ECdGooAgAhAkEBIQgCQAJAA0AgByAIaiIDIApODQIgASADQQJ0aigCACACcyAMcQ0BIAhBAWoiCEGBAUcNAAtBgQEhCAwDCyAIQQNNDQEMAgsLIAcgAyAIQQNLGyEHCwJAIAcgBmtBfnFBAkcNACAHQf8BaiEJIAZBAWohAyABIAZBAnRqKAIAIAxxIQIDQCABIANBAnRqKAIAIAxxIAJHDQEgA0EBaiIDIAdHDQALIAQgAiALdjoAASAEIAkgBmtB/wBqOgAAIAVBfmohBSAEQQJqIQQgByEGCyAHIAZKBEADQCAFIAcgBmsiAkH/ACACQf8ASBsiCUEDakgEQCAAIAQ2AtwEIAAgACgC2AQgBWs2AuAEIAAQ8QFFBEBBfw8LIAAoAtgEIAAoAuAEayEFIAAoAtwEIQQLIAQgCToAACAFQX9qIQUgBEEBaiIEIQMgCSENIAYhAiAJBEADQCADIAEgAkECdGooAgAgC3Y6AAAgA0EBaiEDIAJBAWohAiANQX9qIg0NAAsgBCAJaiEEIAUgCWshBSAGIAlqIQYLIAcgBkoNAAsLAkAgCEEESARAQQAhCAwBCyAEIAhB/gBqOgAAIAQgASAHQQJ0aigCACALdjoAASAFQX5qIQUgBEECaiEECyAGIAhqIgYgCkgNAAsLIAtBeGohAyALDQALIAAgBDYC3AQgACAAKALYBCAFazYC4ARBAQ8LQc/gBUHLhAFBjARB37QpEAMAC0GT7wNBy4QBQYQEQd+0KRADAAtBwboFQcuEAUGDBEHftCkQAwAL2AECA38BfSMAQRBrIgIkACACIAE2AgwCQCACIAFBAUYEf0ECBSABIAFBf2pxRQ0BIAEQ6gULIgE2AgwLAkAgASAAEOQCIgNLBEAgACABEKwWDAELIAEgA08NACADEPIFIQQCfyAAEGIoAgCzIAAQTCoCAJWNIgVDAACAT10gBUMAAAAAYHEEQCAFqQwBC0EACyEBIAICfyAEBEAgARDUCgwBCyABEOoFCzYCCCACIAJBDGogAkEIahDGAigCACIBNgIMIAEgA08NACAAIAEQrBYLIAJBEGokAAuIAgIDfwF8IAJBAU4EQCAAKAIMIQMDQCACIQUCf0EAIAEuAQAiAkEBSA0AGkH/ByACQfE5Sg0AGiACQY5makECdSAAKAIERQ0AGiACt0QAAAAAAOSpwKBEAAAAAAAA0D+iENIDt0QAACAAAAAAPqKgRAAAAAAAAOC/oCIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAshBCAFQX9qIQIgAyAEQQ50QerfACABLgECt0QAAAAAAADgP6BEAAAAAAAAAD+iIAEuAQS3RAAAAAAAAOA/oEQAAAAAAAAAP6IgACgCBBC1FiIEIARBAEgbcjYCACABQQZqIQEgA0EEaiEDIAVBAUoNAAsLC0UBAn8gAkEBTgRAIAAoAgwhAwNAIAMgASAAKAIEELMmNgIAIAFBDGohASADQQRqIQMgAkEBSiEEIAJBf2ohAiAEDQALCwvJAgECfwJAAkAgA0UEQCAAKALIBCIDRQ0BIAIgAygCCG0hBCADKAIAQQJHBEAgAygCECAESA0DIAMoAgwhAiADIAEgBCADKAIUEQUAIAIhAQsgACgC2AQiBSAAKALgBGshAiAAKALcBCEDIAQEQANAIAJBAkwEQCAAIAM2AtwEIAAgACgC2AQgAms2AuAEIAAQ8QFFBEBBfw8LIAAoAtwEIQMgACgC2AQgACgC4ARrIQILIAMgAS8BAjoAACADIAEoAgBBCHY6AAEgAyABKAIAOgACIAJBfWohAiADQQNqIQMgAUEEaiEBIARBf2oiBA0ACyAAKALYBCEFCyAAIAM2AtwEIAAgBSACazYC4ARBAQ8LQcG6BUHLhAFB1ANB0LQpEAMAC0GT7wNBy4QBQdUDQdC0KRADAAtBz+AFQcuEAUHcA0HQtCkQAwAL1wECA38BfCACQQFOBEAgACgCDCEAA0AgAiEEQQAhAwJAIAAuAQAiAkH//wFxIgVFDQAgBbdEAAAAAAAA4D+gRO85+v5CLmY/okTvOfr+Qi5GwKAQhQciBpogBiACQYCAAnEbIgZEAAAAAAAAAABlDQAgBkQAAAAAAADwP2YhA0H/AQJ/IAafRAAAAAAAAHBAoiIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAsgAxshAwsgAEECaiEAIARBf2ohAiABIAM6AAAgAUEBaiEBIARBAUoNAAsLC5EBAgJ/AXwgAkEBTgRAIAAoAgwhAANAAnxEAAAAAAAAAAAgAC4BACIDQf//AXEiBEUNABogBLdEAAAAAAAA4D+gRO85+v5CLmY/okTvOfr+Qi5GwKAQhQciBZogBSADQYCAAnEbCyEFIABBAmohACABIAW2OAIAIAFBBGohASACQQFKIQMgAkF/aiECIAMNAAsLC6QEAQl/IwBBEGsiCiQAIANFBEAgACgCyAQiCARAIAIgCCgCCG0hBAJAAn8gASAIKAIAQQFGDQAaIAgoAhAgBEgNASAIKAIMCyILQQAgBEEBdBDFAiAAKALgBCEFIAAoAtwEIQZBECEJAn8DQAJAAkAgCQRAIAlBeGohCUEAIQMgBEEBSCAFQQFIcg0CA0AgBkEBaiECIAYsAAAiDEH/AXEhBwJAAkAgDEEATgRAIAVBf2oiBQ0BDAULIAVBfmohBSAGQQJqIQYgAyAETg0BIAdBgn9qIgdFDQEgAi0AACAJdCECA0AgCyADQQF0aiIMIAwvAQAgAnI7AQAgA0EBaiIDIARODQIgB0F/aiIHDQALDAELA0AgB0UgAyAETnJFBEAgCyADQQF0aiIGIAYvAQAgAi0AACAJdHI7AQAgA0EBaiEDIAJBAWohAiAHQX9qIQcgBUF/aiIFDQEMBQsLIAIhBgsgBCADTA0DIAVBAEoNAAsMAgsgCCABIAQgCCgCFBEFAEEBDAMLIAIhBkEAIQULIAMgBEYNAAsgACgCACEBIAAoAvQEIQIgACgC2AMhCyAKIAQgA2s2AgQgCiALNgIAIAIgAUH1gQcgChBHQQALIQMgACAFNgLgBCAAIAY2AtwEIApBEGokACADDwtBz+AFQcuEAUHJAUGgtCkQAwALQZPvA0HLhAFBwgFBoLQpEAMAC0HBugVBy4QBQcEBQaC0KRADAAvvBQMDfwN9BnwgAkEBTgRAIAAoAgwhAANAQwAAAAAhBwJ9IAAoAgAiBEEQdSIDQf//AXEiBUUEQEMAAAAAIQZDAAAAAAwBC0MAAAAAIQZDAAAAACAFt0QAAAAAAADgP6BE7zn6/kIuZj+iRO85+v5CLkbAoBCFByIJmiAJIANBgIACcRsiCUQAAAAAAAAAAGUNABogCSAEQQh2Qf8BcbhEAAAAAAAA4D+gRPsTsD8B+2M/oiIKRAAAAAAAACJAokQAAAAAAADwPyAKRAAAAAAAABhAoiAEQf8BcbhEAAAAAAAA4D+gRPsTsD8B+2M/oiIKRAAAAAAAADDAoqBEAAAAAAAAKECgoyIMoiILIApEAAAAAAAAEECiIAyiIgqjorYhBiAJRAAAAAAAAPA/IAuhIAqhIAqjorYhByAJtgshCCAGuyIJRAisHFpkO68/oiAIuyIKRHnpJjEIrMy/oqAhDSAHuyIMRM/3U+Olm/I/oiEOQQAhA0EAIQQgASAJRIXrUbgehQVAoiAKRNEi2/l+avS/oqAgDETl0CLb+X7av6KgIgtEAAAAAAAAAABlBH9BAAUgC0QAAAAAAADwP2YhBUF/An8gC59EAAAAAAAAcECiIguZRAAAAAAAAOBBYwRAIAuqDAELQYCAgIB4CyAFGws6AAAgASAMRLpJDAIrh6Y/oiAKRNnO91Pjpf8/oiAJRCcxCKwcWvC/oqCgIglEAAAAAAAAAABlBH9BAAUgCUQAAAAAAADwP2YhA0F/An8gCZ9EAAAAAAAAcECiIgmZRAAAAAAAAOBBYwRAIAmqDAELQYCAgIB4CyADGws6AAFBACEDIABBBGohACABIA4gDaAiCUQAAAAAAAAAAGUEf0EABSAJRAAAAAAAAPA/ZiEDQX8CfyAJn0QAAAAAAABwQKIiCZlEAAAAAAAA4EFjBEAgCaoMAQtBgICAgHgLIAMbCzoAAiABQQNqIQEgAkEBSiEEIAJBf2ohAiAEDQALCwvaAQIBfwF8IAJBAU4EQCAAKAIMIQADQCABIAAoAgAiA0EQdjsBACABAn8gA0H/AXG4RAAAAAAAAOA/oET7E7A/AftjP6JEAAAAAAAA4ECiIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CzsBBCABAn8gA0EIdkH/AXG4RAAAAAAAAOA/oET7E7A/AftjP6JEAAAAAAAA4ECiIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CzsBAiAAQQRqIQAgAUEGaiEBIAJBAUohAyACQX9qIQIgAw0ACwsL2wICA38EfCACQQFOBEAgACgCDCEAA0ACQAJAIAAoAgAiA0EQdSIEQf//AXEiBQRAIAW3RAAAAAAAAOA/oETvOfr+Qi5mP6JE7zn6/kIuRsCgEIUHIgeaIAcgBEGAgAJxGyIHRAAAAAAAAAAAZUEBcw0BCyABQQA2AgggAUIANwIADAELIAEgB7Y4AgQgASAHIANBCHZB/wFxuEQAAAAAAADgP6BE+xOwPwH7Yz+iIgZEAAAAAAAAIkCiRAAAAAAAAPA/IAZEAAAAAAAAGECiIANB/wFxuEQAAAAAAADgP6BE+xOwPwH7Yz+iIgZEAAAAAAAAMMCioEQAAAAAAAAoQKCjIgiiIgkgBkQAAAAAAAAQQKIgCKIiBqOitjgCACABIAdEAAAAAAAA8D8gCaEgBqEgBqOitjgCCAsgAEEEaiEAIAFBDGohASACQQFKIQMgAkF/aiECIAMNAAsLC5wEAQp/IwBBEGsiCiQAAn8CQCADRQRAIAAoAsgEIggEQCACIAgoAghtIQQCQAJ/IAEgCCgCAEECRg0AGiAIKAIQIARIDQEgCCgCDAsiC0EAIARBAnQQxQIgACgC4AQhBSAAKALcBCECQSAhCSAEQQFIIQwDQCAJRQ0EIAlBeGohCUEAIQMCQCAMIAVBAUhyDQADQCACLAAAIgZB/wFxIQcCQCAGQQBOBEAgAkEBaiECIAVBf2oiBQRAA0AgB0UgAyAETnINAyALIANBAnRqIgYgBigCACACLQAAIAl0cjYCACADQQFqIQMgAkEBaiECIAdBf2ohByAFQX9qIgUNAAsLQQAhBQwDCyAFQX5qIQUgAkECaiEGAkAgAyAETg0AIAdBgn9qIgdFDQAgAi0AASAJdCECA0AgCyADQQJ0aiINIA0oAgAgAnI2AgAgA0EBaiIDIARODQEgB0F/aiIHDQALCyAGIQILIAQgA0wNASAFQQBKDQALCyADIARGDQALIAAoAgAhASAAKAL0BCELIAAoAtgDIQYgCiAEIANrNgIEIAogBjYCACALIAFBjqcGIAoQR0EADAQLQc/gBUHLhAFBrQJB/7MpEAMAC0GT7wNBy4QBQaYCQf+zKRADAAtBwboFQcuEAUGkAkH/sykQAwALIAggASAEIAgoAhQRBQBBAQshAyAAIAU2AuAEIAAgAjYC3AQgCkEQaiQAIAML7AMCA38GfCMAQRBrIgQkACACQQFOBEAgACgCDCEAA0AgACgCACAEQQRqELQWIAQqAgS7IgZECKwcWmQ7rz+iIAQqAgi7IghEeekmMQiszL+ioCEKIAQqAgy7IglEz/dT46Wb8j+iIQtBACEDQQAhBSABIAZEhetRuB6FBUCiIAhE0SLb+X5q9L+ioCAJROXQItv5ftq/oqAiB0QAAAAAAAAAAGUEf0EABSAHRAAAAAAAAPA/ZiEFQX8CfyAHn0QAAAAAAABwQKIiB5lEAAAAAAAA4EFjBEAgB6oMAQtBgICAgHgLIAUbCzoAACABIAhE2c73U+Ol/z+iIAZEJzEIrBxa8L+ioCAJRLpJDAIrh6Y/oqAiBkQAAAAAAAAAAGUEf0EABSAGRAAAAAAAAPA/ZiEDQX8CfyAGn0QAAAAAAABwQKIiBplEAAAAAAAA4EFjBEAgBqoMAQtBgICAgHgLIAMbCzoAAUEAIQMgAEEEaiEAIAEgCiALoCIGRAAAAAAAAAAAZQR/QQAFIAZEAAAAAAAA8D9mIQNBfwJ/IAafRAAAAAAAAHBAoiIGmUQAAAAAAADgQWMEQCAGqgwBC0GAgICAeAsgAxsLOgACIAFBA2ohASACQQFKIQUgAkF/aiECIAUNAAsLIARBEGokAAuUAwIFfwJ8IAJBAU4EQCAAKAIMIQQDQCABIAQoAgAiA0EMdkH9H3FBgugAajsBAEGjASEFQQAhAAJ8IANB//8AcSIGQaD/AEsEQESeGbiU11DePyEJRBpsFb2G8so/DAELAnwCQANAAkAgBiAAIAVqQQF1IgNBA3RBhqkpai4BAGsiB0EASgRAIAMhAAwBCyAHQX9KDQIgAyEFCyAFIABrQQFKDQALIAAhAyAGIABBA3RBhqkpai4BAGu3RAAAAAAAAOA/oEQAAABACKxsP6IMAQtEAAAAQAisXD8LIQggA7dEAAAAAAAA4D+gRAAAAEAIrGw/okQAAAAguFiRP6AhCSAIIANBA3RBgKkpaioCALugCyEIIAECfyAJRAAAAAAAAOBAoiIJmUQAAAAAAADgQWMEQCAJqgwBC0GAgICAeAs7AQQgAQJ/IAhEAAAAAAAA4ECiIgiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4CzsBAiAEQQRqIQQgAUEGaiEBIAJBAUohACACQX9qIQIgAA0ACwsLQAEBfyACQQFOBEAgACgCDCEAA0AgACgCACABELQWIABBBGohACABQQxqIQEgAkEBSiEDIAJBf2ohAiADDQALCwvxAgEGfyMAQRBrIgckAAJAAkAgA0UEQCAAKALIBCIERQ0BIAIgBCgCCG0hBQJ/IAEgBCgCAEECRg0AGiAEKAIQIAVIDQMgBCgCDAshCSAAKALcBCEDQQAhAgJAIAAoAuAEIgZBAUgEQCAGIQgMAQsgBUEBSARAIAYhCAwBCwNAIAkgAkECdGogAy0AAiADLQABQQh0IAMtAABBEHRycjYCACACQQFqIQIgBkF9aiEIIANBA2ohAyAGQQRIDQEgCCEGIAUgAkoNAAsLIAAgCDYC4AQgACADNgLcBAJ/IAIgBUcEQCAAKAIAIQEgACgC9AQhAyAAKALYAyEAIAcgBSACazYCBCAHIAA2AgAgAyABQbqDBiAHEEdBAAwBCyAEIAEgBSAEKAIUEQUAQQELIQMgB0EQaiQAIAMPC0HBugVBy4QBQfgBQfCzKRADAAtBk+8DQcuEAUH5AUHwsykQAwALQc/gBUHLhAFBgAJB8LMpEAMAC+UCAQN/IwBB0ABrIgMkACAAKALIBCEEAn8gAUHo/3tqIgVBAU0EQCAFQQFrBEAgBCACKAIAIgE2AgBBAyECAkACQCABQQNNBEBBICEEAkACQCABQQFrDgMDAAEEC0EBIQIgA0EBNgIwIABBlQIgA0EwahCQARoMAwtBASECQQghBAwCCyAAKAIAIQIgACgC9AQhACADIAE2AgAgACACQeeeCCADEEdBAAwEC0ECIQJBECEECyADIAQ2AiAgAEGCAiADQSBqEJABGiADIAI2AhAgAEHTAiADQRBqEJABGkF/IQEgACAALQANQQRxBH8gABDvBQVBfws2AvwDIAAgABDCAzYCzARBAQwCCyAEIAIoAgAiAjYCBEEBIAJBAkkNARogACgCACEBIAAoAvQEIQAgAyACNgJAIAAgAUHytwggA0FAaxBHQQAMAQsgACABIAIgBCgCHBEEAAshASADQdAAaiQAIAELNAEBfyAAKALIBCEDIAFBmIAERgRAIAIoAgAgAygCADYCAEEBDwsgACABIAIgAygCGBEEAAvpAgEEfyMAQSBrIgQkAEEBIQICQAJAIAAvAVoiAUG0/31qIgNBAU0EQCAAKALIBCEBIANBAWtFBEAgABCzFkUNAyAALwFYQfWOAkYEQCAAQaEGNgKgBCABKAIAIgNBAksNAwJAAkAgA0EBaw4CAQYACyABQaIGNgIUDAULIAFBowY2AhQMBAsgAEGkBjYCoAQgASgCACIDQQJLDQICQAJAIANBAWsOAgEFAAsgAUGlBjYCFAwECyABQaYGNgIUDAMLIAAQshZFBEAMAwsgAEGnBjYCoAQgASgCACICQQFLDQEgAkEBa0UNAiABQagGNgIUQQEhAgwCCyAAKAIAIQMgACgC9AQhACAEQdnAAzYCBCAEIAE2AgAgACADQZCPAyAEEEcMAQsgACgCACEBIAAoAvQEIQIgBEGF1gdBmO8HIAAvAVpBzIACRhs2AhAgAiABQbS5ByAEQRBqEEdBACECCyAEQSBqJAAgAgtZAQF/IAIgABDCAyIEb0UEQCACBEADQCAAIAEgBCADIAAoAqAEEQcAQQFHBEBBAA8LIAEgBGohASACIARrIgINAAsLQQEPC0GIngdBy4QBQdgEQfu0KRADAAtZAQF/IAIgABC5BiIEb0UEQCACBEADQCAAIAEgBCADIAAoAqAEEQcAQQFHBEBBAA8LIAEgBGohASACIARrIgINAAsLQQEPC0GIngdBy4QBQecEQY21KRADAAsfACAAQZCACDYCVCAAQQFBAyAALwFaQcyAAkYbOwFiC1cBAn8gACgCyAQiAQRAIAAgASgCGDYCoAUgACABKAIcNgKcBSABKAIMIgIEQCACED0LIAEQPSAAQQA2AsgEIAAQjAcPC0GpiAhBy4QBQb0LQZ61KRADAAvqAgEDfyMAQRBrIgMkACAAQaoFNgKMBQJAAkAgAC8BWiIBQbT/fWoiAkEBTQRAIAAoAsgEIQEgAkEBa0UEQCAAELMWRQ0CIAAvAVhB9Y4CRgRAIABBlgY2ApwEQQEhACABKAIAIgJBA0sNBAJAAkACQCACQQFrDgMBBwIACyABQZcGNgIUDAYLIAFBmAY2AhQMBQsgAUGZBjYCFAwECyAAQZoGNgKcBEEBIQAgASgCACICQQNLDQMCQAJAAkAgAkEBaw4DAQYCAAsgAUGbBjYCFAwFCyABQZwGNgIUDAQLIAFBnQY2AhQMAwsgABCyFkUNASAAQZ4GNgKcBEEBIQAgASgCACICQQNLDQICQAJAIAJBAWsOAwQEAQALIAFBnwY2AhQMAwsgAUGgBjYCFAwCCyAAKAIAIQIgACgC9AQhACADQdnAAzYCBCADIAE2AgAgACACQZCPAyADEEcLQQAhAAsgA0EQaiQAIAALVwEBfyACIAAQwgMiBG9FBEAgAgRAA0AgACABIAQgAyAAKAKcBBEHAEUEQEEADwsgASAEaiEBIAIgBGsiAg0ACwtBAQ8LQYieB0HLhAFB2wJBrbQpEAMAC1cBAX8gAiAAELkGIgRvRQRAIAIEQANAIAAgASAEIAMgACgCnAQRBwBFBEBBAA8LIAEgBGohASACIARrIgINAAsLQQEPC0GIngdBy4QBQesCQb+0KRADAAurAgECfyMAQRBrIgMkACABQQFyQfWOAkYEQAJ/IABBsLMpQQIQuQVFBEAgACgC9ARBmLMpQdPAAUEAEEdBAAwBCyAAQSAQXCICNgLIBCACBEAgAkEAQSAQxQIgAkGLBjYCFCACIAFB9Y4CRjYCBCACQX82AgAgAEGMBjYCrAQgAEGNBjYCpAQgAEGOBjYChAQgAEGPBjYCvAQgAEGQBjYCtAQgAEGRBjYCsAQgAEGSBjYCqAQgAEGTBjYCjAQgAiAAKAKgBTYCGCAAQZQGNgKgBSACIAAoApwFNgIcIABBlQY2ApwFQQEMAQsgACgC9AQhASADIAAoAgA2AgAgAUGYsylB9oACIAMQR0EACyEAIANBEGokACAADwtBn8cAQcuEAUGfDEGYsykQAwALnQUCAn8FfAJ/Qf//ASAAKgIEuyIERBDAqNrL3u9DZg0AGkH//wMgBEQQwKjay97vw2UNABogBES1iIrP6vTvO2RBAXNFBEAgBBDhAkT+gitlRxX3P6JEAAAAAAAAUECgRAAAAAAAAHBAoiEEAn8gAQRAIAQQ0gO3RAAAIAAAAAA+oqBEAAAAAAAA4L+gIQQLIASZRAAAAAAAAOBBYwsEQCAEqgwCC0GAgICAeAwBC0EAIAREtYiKz+r077tjQQFzDQAaIASaEOECRP6CK2VHFfc/okQAAAAAAABQQKBEAAAAAAAAcECiIQQCfwJ/IAEEQCAEENIDt0QAACAAAAAAPqKgRAAAAAAAAOC/oCEECyAEmUQAAAAAAADgQWMLBEAgBKoMAQtBgICAgHgLQYCAfnILIQJEGmwVvYbyyj8hBUSeGbiU11DePyEEAn8CQCACRQ0AIAAqAgS7IgdEAAAAAAAALkCiIAAqAgC7IgigIAAqAgi7RAAAAAAAAAhAoqAiBkQAAAAAAAAAAGUNACAHRAAAAAAAACJAoiAGoyEEQQAgCEQAAAAAAAAQQKIgBqMiBUQAAAAAAAAAAGUNARoLIAVEAAAAAACgeUCiIQUCfwJ/IAEEQCAFENIDt0QAACAAAAAAPqKgRAAAAAAAAOC/oCEFCyAFmUQAAAAAAADgQWMLBEAgBaoMAQtBgICAgHgLIgBB/wEgAEH/AUkbQQh0CyEDQQAhACAERAAAAAAAAAAAZQR/QQAFIAREAAAAAACgeUCiIQQCfwJ/IAEEQCAEENIDt0QAACAAAAAAPqKgRAAAAAAAAOC/oCEECyAEmUQAAAAAAADgQWMLBEAgBKoMAQtBgICAgHgLIgBB/wEgAEH/AUkbCyADIAJBEHRycgutAgIBfwV8An9B/wcgACoCBLsiBESWQ4ts53svQGYNABpBACAERBVMJdEF1C8/ZQ0AGiAEEOECRP6CK2VHFfc/okQAAAAAAAAoQKBEAAAAAAAAUECiIQMgAQRAIAMQ0gO3RAAAIAAAAAA+oqBEAAAAAAAA4L+gIQMgACoCBLshBAsgA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLIQJEnhm4lNdQ3j8hA0QabBW9hvLKPyEFAkAgAkUNACAERAAAAAAAAC5AoiAAKgIAuyIHoCAAKgIIu0QAAAAAAAAIQKKgIgZEAAAAAAAAAABlDQAgBEQAAAAAAAAiQKIgBqMhAyAHRAAAAAAAABBAoiAGoyEFCyACQQ50QerfACAFIAMgARC1FiIAIABBAEgbcgvtBQIHfwN8IwBBoAZrIgYkAEHwvC0tAABFBEBB4wAhAwNAIAYgAyICQQN0akKAgICAgICAgMAANwMAIAJBf2ohAyACDQALQaMBIQNBogEhAgNAIAIiBUEDdCIEQYSpKWouAQBBf2ohAiAFt0QAAAAAAADgP6BEAAAAQAisbD+iRAAAACC4WJE/oCEJAn8gA0GjAUcEQCACIANBAUcNARoLQQELIQcgCUSeGbiU11Dev6AhCiAEQYapKWohCCAEQYCpKWoqAgC7IQsDQAJ/IAogArdEAAAAAAAA4D+gRAAAAEAIrGw/oiALoEQabBW9hvLKv6AQhwlEN9x5qrvUL0CiRAAAAAAAAElAoCIJmUQAAAAAAADgQWMEQCAJqgwBC0GAgICAeAshAyAJIAO3RAAAAAAAAOA/oKGZIgkgBiADQQN0aiIEKwMAY0EBc0UEQCADQQJ0QeC5LWogAiAILgEAajYCACAEIAk5AwALIAIgB2siAkF/Sg0ACyAFQX9qIQIgBSIDDQALQeQAIQRB4wAhAwNAQQEhAiAGIAMiBUEDdGorAwBEAAAAAAAA+D9kQQFzRQRAA0ACQCAGIAIgBWpB5ABwQQN0aisDAEQAAAAAAAD4P2MEQCACIQcMAQtBMiEHIAJBAWoiAkEyRw0BCwsgBEHjAGohCEEBIQJBfyEDAkADQCAGIAMgCGpB5ABwQQN0aisDAEQAAAAAAAD4P2MEQCACIQQMAgsgAkF/cyEDQTIhBCACQQFqIgJBMkcNAAtBTiEDCyAFQQJ0QeC5LWogBSAHaiADIAhqIAcgBEkbQeQAb0ECdEHguS1qKAIANgIACyAFQX9qIQMgBSIEDQALQfC8LUEBOgAACwJ/IAFEnhm4lNdQ3r+gIABEGmwVvYbyyr+gEIcJRDfceaq71C9AokQAAAAAAABJQKAiAJlEAAAAAAAA4EFjBEAgAKoMAQtBgICAgHgLQQJ0QeC5LWooAgAhAiAGQaAGaiQAIAILqQEBBn9BKBBcIgNBADYCACAAQfAEakEBIANBBBALIQQQACEIQQAhAwJAA0AgAwRAQX8hBQwCC0Ggzi1BADYCAEGKBiAAIAEgAhAFIQVBoM4tKAIAIQNBoM4tQQA2AgBBfyEGAkACQCADRQ0AQaTOLSgCACIHRQ0AIAMoAgAgBCAIEAEiBkUNASAHEAILEAAhAyAGQQFGDQEMAgsLIAMgBxAEAAsgBBA9IAULTQEBfyMAQeABayIBJAAgACABQRBqIAAoAgAoAgwRAgAgACgCvAYoAvQEIQAgASABQRBqNgIAIABBp+wEQa6UBSABELMBIAFB4AFqJAALVAECfyMAQeABayIBJAAgACABQRBqIAAoAgAoAgwRAgAgACgCvAYoAvQEIQIgASABQRBqNgIAIAJBp+wEQa6UBSABEEcgABDeCiAAQfAEakEBEAQAC6wCAQZ/QSgQXCIDQQA2AgBBoM4tQQA2AgAgAEHsA2oQ8AwhBkGgzi0oAgAhAUGgzi1BADYCAEF/IQRBBCEFAkAgAUUNAEGkzi0oAgAiAkUNACABKAIAIANBBBABIgRFBEAgASACEAQACyACEAILEAAhASAEQQFHBEAgAEGIBjYC7AMgACAGNgIAIABBiQY2AvQDIABB8ARqQQEgA0EEEAshAxAAIQVBACEBCwNAAkAgAQRAQQAhAgwBC0Ggzi1BADYCAEHfAiAAQdAAQbADEApBoM4tKAIAIQFBoM4tQQA2AgBBfyEEAkAgAUUNAEGkzi0oAgAiAkUNACABKAIAIAMgBRABIgRFBEAgASACEAQACyACEAILQQEhAhAAIQEgBEEBRg0BCwsgAxA9IAILrAIBBn9BKBBcIgNBADYCAEGgzi1BADYCACAAQewDahDwDCEGQaDOLSgCACEBQaDOLUEANgIAQX8hBEEEIQUCQCABRQ0AQaTOLSgCACICRQ0AIAEoAgAgA0EEEAEiBEUEQCABIAIQBAALIAIQAgsQACEBIARBAUcEQCAAQYgGNgLsAyAAIAY2AgAgAEGJBjYC9AMgAEHwBGpBASADQQQQCyEDEAAhBUEAIQELA0ACQCABBEBBACECDAELQaDOLUEANgIAQcICIABB0ABB6AMQCkGgzi0oAgAhAUGgzi1BADYCAEF/IQQCQCABRQ0AQaTOLSgCACICRQ0AIAEoAgAgAyAFEAEiBEUEQCABIAIQBAALIAIQAgtBASECEAAhASAEQQFGDQELCyADED0gAgucAQEGf0EoEFwiAUEANgIAIABB8ARqQQEgAUEEEAshAxAAIQZBACEBAkADQCABDQFBoM4tQQA2AgBB7AIgABAIQaDOLSgCACEBQaDOLUEANgIAQX8hBAJAIAFFDQBBpM4tKAIAIgVFDQAgASgCACADIAYQASIERQRAIAEgBRAEAAsgBRACCxAAIQEgBEEBRg0AC0EBIQILIAMQPSACC+4DAgV/AX0jAEEgayIEJAAgARBiIAIoAgAQvxYhByABEOQCIQUgBEEAOgAfAkACQCAFRQ0AIAEgByAFEPkBIggQYSgCACIGRQ0AA0AgBigCACIGRQ0BIAcgBigCBEcEQCAGKAIEIAUQ+QEgCEcNAgsgARBMIAZBCGogAhDTA0UNAAsMAQsgBEEQaiABIAcgAxDeDCABEGIoAgAhAiABEEwhAwJAIAUEQCADKgIAIAWzlCACQQFqs11BAXMNAQsgBCAFEPIFQQFzIAVBAXRyNgIMIAQCfyABEGIoAgBBAWqzIAEQTCoCAJWNIglDAACAT10gCUMAAAAAYHEEQCAJqQwBC0EACzYCCCABIARBDGogBEEIahDGAigCABCYJiAHIAEQ5AIiBRD5ASEICwJAIAEgCBBhKAIAIgJFBEAgBCgCECABQQhqIgIoAgA2AgAgAiAEKAIQNgIAIAEgCBBhIAI2AgAgBCgCECgCAEUNASAEKAIQIQIgASAEKAIQKAIAKAIEIAUQ+QEQYSACNgIADAELIAQoAhAgAigCADYCACACIAQoAhA2AgALIARBEGoQgwUhBiABEGIiASABKAIAQQFqNgIAIARBAToAHyAEQRBqENkMCyAAIARBEGogBhDAASAEQR9qEJIJIARBIGokAAu6BQEUfwJAIAAoAsgEIgQEQCAEKAL4BiESIAIgBCgCSCAELwHCBiIDIAQoAhxqQX9qIANubCADIAQvAcQGIgNsQQJqbEEHakEDdiIFbSIGIANsIQsgAiAFIAZsawRAIAAoAvQEIAAoAgBB+K4KQQAQswELQQEhAyALQQFIDQEgBCgCVCIIKAKEASEGIARBzAZqIRQDQEEAIQxBACENIAQoAkwiAkEBTgRAA0AgCCgCDCIOQQFOBEAgCCgCHEEDdCAIKAIIIgcgBmxrIRMgByAObCEVQQAhDyAGIAdBACAHQQBKG2whFiAEIAxBAnRqIRcgDSEQA0AgASAQaiEJIBcoAswGIAQoAvQGIA5sIA9qQQJ0aigCACEFAkAgB0EBRwRAIAYhESAFIQogBkUNAQNAIBFBf2ohEUEAIQIgCiEDIAdBAU4EQANAIAMgAiAJai0AADoAACADQQFqIQMgAkEBaiICIAdHDQALIAcgCmohCgsgCSASaiEJIBENAAsgBSAWaiEFDAELIAUhAiAGIgNFDQADQCACIAktAAA6AAAgCSASaiEJIAJBAWohAiADQX9qIgMNAAsgBSAGaiEFCyATQQFOBEAgBUF/ai0AACEDQQAhAgNAIAUgAzoAACAFQQFqIQUgAkEBaiICIBNHDQALCyAHIBBqIRAgD0EBaiIPIA5HDQALIA0gFWohDSAEKAJMIQILIAhB2ABqIQggDEEBaiIMIAJIDQALCyAEIAQoAvQGIgJBAWo2AvQGIAJBB04EQCAEIBQgBCgCkAJBA3QiAhC4FiACRwRAQQAhAwwECyAEQQA2AvQGCyAAIAQvAcQGIgIgACgC2ANqNgLYA0EBIQMgCyACayILQQFIDQIgASAEKALIBmohASAEKAJUIQgMAAALAAtBk8EEQcCEAUG5C0HOqCkQAwALIAMLIgEBfyAAIAAoArwGIgEoAtQENgKMBiAAIAEoAtgENgKQBgs2AQF/IAAoArwGIgEgASgC2AQ2AuAEIAEQ8QEaIAAgASgC1AQ2AowGIAAgASgC2AQ2ApAGQQELKQEBfyAAKAK8BiIBIAAoAowGNgLcBCABIAEoAtgEIAAoApAGazYC4AQLnAEBBn9BKBBcIgFBADYCACAAQfAEakEBIAFBBBALIQMQACEGQQAhAQJAA0AgAQ0BQaDOLUEANgIAQYQGIAAQCEGgzi0oAgAhAUGgzi1BADYCAEF/IQQCQCABRQ0AQaTOLSgCACIFRQ0AIAEoAgAgAyAGEAEiBEUEQCABIAUQBAALIAUQAgsQACEBIARBAUYNAAtBASECCyADED0gAgsOACAAIAApA5AHNwKMBgtpAQJ/IAAoApAHIAAoApQHQegHahCRCSIBRQRAIAAoAgBCuICAgMAMNwIUIAAgACgCACgCABEAAAsgACABNgKQByAAQegHNgKQBiAAIAAoApQHIgJB6AdqNgKUByAAIAEgAmo2AowGQQELJwEBfwJ/QQAgACgCBCIBRQ0AGiAAKAIAKAJEIAEoAggoAgQQhAoLCxUAIAAgACgClAcgACgCkAZrNgKUBwucAQEGf0EoEFwiAUEANgIAIABB8ARqQQEgAUEEEAshAxAAIQZBACEBAkADQCABDQFBoM4tQQA2AgAgAEEBELcQQaDOLSgCACEBQaDOLUEANgIAQX8hBAJAIAFFDQBBpM4tKAIAIgVFDQAgASgCACADIAYQASIERQRAIAEgBRAEAAsgBRACCxAAIQEgBEEBRg0AC0EBIQILIAMQPSACC5wBAQZ/QSgQXCIBQQA2AgAgAEHwBGpBASABQQQQCyEDEAAhBkEAIQECQANAIAENAUGgzi1BADYCAEHiAiAAEAhBoM4tKAIAIQFBoM4tQQA2AgBBfyEEAkAgAUUNAEGkzi0oAgAiBUUNACABKAIAIAMgBhABIgRFBEAgASAFEAQACyAFEAILEAAhASAEQQFGDQALQQEhAgsgAxA9IAILnQEBBn9BKBBcIgFBADYCACAAQfAEakEBIAFBBBALIQMQACEGQQAhAQJAA0AgAQ0BQaDOLUEANgIAQcoCIAAQBhpBoM4tKAIAIQFBoM4tQQA2AgBBfyEEAkAgAUUNAEGkzi0oAgAiBUUNACABKAIAIAMgBhABIgRFBEAgASAFEAQACyAFEAILEAAhASAEQQFGDQALQQEhAgsgAxA9IAIL+wMBEX8gACgCyAQiBCgCICIQBEAgBEHMBmohEiAEKALYASgChAEhAiAEKAL0BiEGIAQoAvgGIREDQCAGQQhOBEAgBCASIAQoArwCQQN0IgMQtSYgA0cEQEEADwsgBEEANgL0BkEAIQYLIAQgBCgCJCIFQQFOBH8gBCgC2AEhCkEAIQtBACEMA0AgCigCDCINQQFOBEAgCigCCCIJIA1sIRMgBCAMQQJ0aiEUQQAhDiALIQ8DQCABIA9qIQggFCgCzAYgBCgC9AYgDWwgDmpBAnRqKAIAIQcCQCAJQQFHBEAgAiIDRQ0BA0AgA0F/aiEDQQAhBSAHIQYgCUEBTgRAA0AgBSAIaiAGLQAAOgAAIAZBAWohBiAFQQFqIgUgCUcNAAsgByAJaiEHCyAIIBFqIQggAw0ACwwBCyACIgVFDQADQCAIIActAAA6AAAgCCARaiEIIAdBAWohByAFQX9qIgUNAAsLIAkgD2ohDyAOQQFqIg4gDUcNAAsgBCgCJCEFIAsgE2ohCwsgCkHYAGohCiAMQQFqIgwgBUgNAAsgBCgC9AYFIAYLQQFqIgY2AvQGIAAgBC8BxAYiAyAAKALYA2o2AtgDIAEgBCgCyAZqIQEgECADayIQQQBKDQALC0EBIQUgBCgCjAEgBCgCdE8EfyAEELsWQQBHBUEBCwucAQEGf0EoEFwiAUEANgIAIABB8ARqQQEgAUEEEAshAxAAIQZBACEBAkADQCABDQFBoM4tQQA2AgBBggYgABAIQaDOLSgCACEBQaDOLUEANgIAQX8hBAJAIAFFDQBBpM4tKAIAIgVFDQAgASgCACADIAYQASIERQRAIAEgBRAEAAsgBRACCxAAIQEgBEEBRg0AC0EBIQILIAMQPSACCyIBAX8gACAAKAK8BiIBKALUBDYCoAYgACABKALgBDYCpAYLDgAgACAAKQOQBzcDoAYLMQEBfyAAKAIAIgFB+wA2AhQgAEF/IAEoAgQRAgAgAEECNgKkBiAAQZmoKTYCoAZBAQteAQF/IAFBAU4EQCAAAn8gACgCpAYiAiABSARAIAAoAgAiAUH7ADYCFCAAQX8gASgCBBECACAAQZmoKTYCoAZBAgwBCyAAIAAoAqAGIAFqNgKgBiACIAFrCzYCpAYLC3UBA38gACABIAIgACgCyAQoAowHEQUAIAEgASgCACIBQQAgAC8BzAFBA3QiA2tJBH8gASADakF/aiADbgVBAAsgA2w2AgAgAiACKAIAIgFBACAALwHOAUEDdCIAa0kEfyAAIAFqQX9qIABuBUEACyAAbDYCAAtIAQF/IAAgASAAKALIBCgCiAcRAwAiASAAKAI8SQR/IAFBACAALwHOAUEDdCIAa0kEfyAAIAFqQX9qIABuBUEACyAAbAUgAQsLhQgCBn8CfSMAQZABayICJAAgACgCyAQhAyAAQQFBABDfDAJAIAMEQCADKAIQDQEgA0IBNwIkAkAgAxDGJkUNACADIAAvAVoiATsBwAYCQAJAIAFBfWoiBEEDSw0AAkACQCAEQQJrDgICAAELIAMgAC8BzAE7AcIGIAMgAC8BzgE7AcQGIAIgAkGMAWo2AlAgAEGUBCACQdAAahCnAQ0CIAAvAVQhASACQQA2AnAgAkEBIAF0IgFBf2qyIgc4AoQBIAIgAUEBdbIiCDgCgAEgAiAHOAJ8IAIgCDgCeCACIAc4AnQgAiACQfAAajYCQCAAQZQEIAJBQGsQkAEaDAILIAAoAvQEIQAgAiABNgJgIABBsKgpQcOQCSACQeAAahBHDAILIANBgYAENgHCBgsgAC8BVCIBQQhHBEAgACgC9AQhACACIAE2AjAgAEGwqClB2qMJIAJBMGoQRwwBCyADQQg2AkgCQCAALQANQQRxBEAgACgCSCADLwHEBkEDdCIBcARAIAAoAvQEIQAgAiABNgIgIABBsKgpQb+5CSACQSBqEEcMAwsgACgCRCADLwHCBkEDdCIBcEUNASAAKAL0BCEAIAIgATYCECAAQbCoKUHfywkgAkEQahBHDAILIAAoAmQiASAAKAI8Tw0AIAEgAy8BxAZBA3QiAXBFDQAgACgC9AQhACACIAE2AgAgAEGwqClBhuAJIAIQRwwBCwJAIAMtAKAHQQNxBEAgAygCkAciAQRAIAEpAABCAFINAgsgACgCyAQhASAAQQBBABDfDCABIAEoApgHELoWRQ0CIAEQxSZFDQICQCABKAKgByIEQQFxRQ0AIAEoAlgiBQRAIAVBADYCgAELIAEvAcAGQQZHDQAgASgCXCIFRQ0AIAVBADYCgAELAkAgBEECcUUNACABKAJ4IgQEQCAEQQA2ApQCCyABKAKIASIEBEAgBEEANgKUAgsgAS8BwAZBBkcNACABKAJ8IgQEQCAEQQA2ApQCCyABKAKMASIERQ0AIARBADYClAILIAEoApAHIgQEQCAEED0LIAFB6Ac2ApQHIAFB6AcQXCIENgKQByAERQRAIAFBADYClAcgASgCvAYoAvQEQeL/CUGcjwpBABBHDAMLIAFB/AU2ApwGIAFB/QU2ApgGIAFB/gU2ApQGIAEgAUGMBmo2AhggARDAJkUNAiAAIAAoAgxBCHI2AgwgACAAKAIwQQRyNgIwDAELIAAgACgCMEF7cTYCMAsgA0H/BTYCnAYgA0GABjYCmAYgA0GBBjYClAYgAyADQYwGajYCGEEBIQYLIAJBkAFqJAAgBg8LQZPBBEHAhAFBlAlBsKgpEAMAC0G3/AhBwIQBQZUJQbCoKRADAAuDBwEIfwJAAkACQAJAIAAoAsgEIgIEQCACKAIQDQEgAgJ/IAAtAA1BBHEEQCAAKAJIIQUgACgCRCEDIAAQuQYMAQsgACgCZCIDIAAoAjwgACgC2ANrIgQgBCADSxshBSAAKAI4IQMgABClFgs2AsgGAkAgAUUEQCADIQQMAQsgAC8BigFBAkcEQCADIQQMAQtBACEEIANBACACLwHCBiIGa0kEQCADIAZqQX9qIAZuIQQLIAVBACACLwHEBiIDa08EQEEAIQUMAQsgAyAFakF/aiADbiEFCyAEIAVyQYCABE8EQCAAKAL0BEHAqClB6J4KQQAQR0EADwsgAiAFNgIgIAIgBDYCHAJAIAAvAYoBQQFGBEAgAiAALwFiNgIkIAIvAcAGQQZGBEACfyACKAKcB0EBRgRAIAJBAjYCKEEADAELIAJBAzYCKCACLwHCBkEBRgRAQQAgAi8BxAZBAUYNARoLQQELIQMgAkEDEJ0QRQRAQQAPCyACKAJUIAIvAcIGNgIIIAIoAlQgAi8BxAY2AgwMAgtBACEDIAJBADYCKCACQQAQnRANAQwGCyACQgE3AiRBACEDIAJBABCdEEUNBSACKAJUIAE2AgAgAUUNACACLwHABkEGRw0AIAIoAlRBATYCECACKAJUQQE2AhQgAigCVEEBNgIYCyACQQA2AoACIAJBADYC9AEgAiACKAKYBxC6FkUEQEEADwsCQCACKAKgByIBQQFxDQAgAigCWCIEBEAgBEEANgKAAQsgAigCXCIERQ0AIARBADYCgAELIAIgAUEBdkF/c0EBcTYC2AEgA0UNAiACQQE2AtABIABB+wU2ArAEIABB+wU2AqgEIABB+wU2AqAEQQAhAyACELkWRQ0EIAAoAsgEIQQCQCACKAJMIgZBAUgEQEEAIQEMAQsgAigCVCEAQQAhAUEAIQUDQCAAKAIIIQcgBCAAKAIcQQN0IAAoAgwiCEEDdBC9FiIJRQ0GIAQgBUECdGogCTYCzAYgAEHYAGohACAHIAhsIAFqIQEgBUEBaiIFIAZHDQALCyAEIAE2AvgGDAMLQZPBBEHAhAFBmgpBwKgpEAMAC0G3/AhBwIQBQZsKQcCoKRADAAtBACEDIAJBADYC0AEgAEHvBTYCsAQgAEHvBTYCqAQgAEHvBTYCoAQgAhC5FkUNAQsgAkEANgL0BkEBIQMLIAML3QEBCH8CfyAAKALIBCIBKAL0BiICQQFOBH8CQCABKAJMIgNBAUgNACABKAJUIQQDQCACIAQoAgwiBmwiAiAGQQN0IgZIBEAgBCgCHEEDdCEDIAEgBUECdGohBwNAIAcoAswGIAJBAnRqIggoAgAgCEF8aigCACADENEBIAJBAWoiAiAGRw0ACyABKAJMIQMLIAVBAWoiBSADTg0BIARB2ABqIQQgASgC9AYhAgwAAAsAC0EAIAEgAUHMBmogASgCkAJBA3QiARC4FiABRw0BGiAAKALIBAUgAQsQuiYLC/UBAQN/IwBBEGsiBCQAIAAoAsgEIgUEQCACIAIgBSgCyAYiAm0iAyACbGsEQCAAKAL0BCAAKAIAQfiuCkEAELMBCyAALQANQQRxRQRAIAAoAjwiAiAAKALYAyIGayADIAMgBmogAksbIQMLQQEhAgJAIANBAUgNACAEIAE2AgxBACECIAUgBEEMahC3FkEBRw0AA0AgA0ECSARAQQEhAgwCCyAAIAAoAtgDQQFqNgLYAyAEIAEgBSgCyAZqIgE2AgwgA0F/aiEDIAUgBEEMahC3FkEBRg0ACwsgBEEQaiQAIAIPC0GTwQRBwIQBQZILQdyoKRADAAt4AQF/IAAoAsgEIgEEQCAAIAEoAvwGNgKgBSAAIAEoAoAHNgKcBSAAIAEoAoQHNgKkBSABKALoAwRAIAEQthYLIAEoApAHIgEEQCABED0LIAAoAsgEED0gAEEANgLIBCAAEIwHDwtBq8AKQcCEAUGnDEHnqCkQAwALwAIBAn8gACgCyAQhASAAQQBBARDfDAJAIAEEQCABKAIQRQ0BAkAgAC0AMEEEcUUNACABQgA3A6AGIAFB9gU2ArgGIAFBjgQ2ArQGIAFB9wU2ArAGIAFB+AU2AqwGIAEgAUGgBmo2AhggAUH5BTYCqAYgAUEAEL4WQQJGDQAgACgC9ARBiagpQd6BB0EAEEdBAA8LIAEgAC8BWiICOwHABiABAn8gAkEGRgRAIAEgAC8BzAE7AcIGIAAvAc4BDAELIAFBATsBwgZBAQs7AcQGIAFCADcDoAYgAUH2BTYCuAYgAUGOBDYCtAYgAUH3BTYCsAYgAUH4BTYCrAYgAUH6BTYCqAYgASABQaAGajYCGCAAQaoFNgKMBUEBDwtBk8EEQcCEAUGGBUGJqCkQAwALQarkBkHAhAFBhwVBiagpEAMAC/oJAQl/IwBBQGoiBiQAAkAgACgCyAQiAgRAIAIoAhBFDQECQCACEMkmRQ0AIAJBARC+FkEBRw0AIAICfyAALQANQQRxBEAgACgCSCEFIAAoAkQhAyAAELkGDAELIAAoAmQiAyAAKAI8IAAoAtgDayIFIAUgA0sbIQUgACgCOCEDIAAQpRYLNgLIBgJAIAFFBEAgAyEBDAELIAAvAYoBQQJHBEAgAyEBDAELQQAhASADQQAgAi8BwgYiB2tJBEAgAyAHakF/aiAHbiEBCyAFQQAgAi8BxAYiA2tPBEBBACEFDAELIAMgBWpBf2ogA24hBQsCfyACKAIcIgMgAU9BACACKAIgIgcgBU8bRQRAIAAoAvQEIQggBiAHNgI8IAYgAzYCOCAGIAU2AjQgBiABNgIwIAhBm6gpQc+dByAGQTBqELMBIAIoAhwhAwsgAyABTQtBACACKAIgIgcgBU0bRQRAIAAoAvQEIQAgBiAHNgIMIAYgAzYCCCAGIAU2AgQgBiABNgIAIABBm6gpQei4ByAGEEcMAQtBASEEIAIoAiQhASAALwGKASIFQQFGBH8gAC8BYgVBAQsgAUcEQEEAIQQgACgC9ARBm6gpQefVB0EAEEcMAQsgAigC1AEgAC8BVEcEQEEAIQQgACgC9ARBm6gpQfvuB0EAEEcMAQsgAigC2AEiAygCCCEBAkAgBUEBRgRAAkAgAi8BwgYiBSABRkEAIAIvAcQGIgQgAygCDCIDRhsNACAAKAL0BCEHIAYgBDYCLCAGIAU2AiggBiADNgIkIAYgATYCICAHQZuoKUHohwggBkEgahCzAQJAIAIoAtgBIgEoAgggAi8BwgZMBEAgASgCDCACLwHEBkwNAQtBACEEIAAoAvQEQZuoKUGmnghBABBHDAQLIABB/ogCEJcJDQAgACgC9AQhASAGIAIoAtgBKQIINwMQIAFBm6gpQb+3CCAGQRBqELMBIAIgAigC2AEiASgCCDsBwgYgAiABKAIMOwHEBgsgAigCJCIBQQJIDQEgAigC2AEhA0EBIQQDQAJAIAMgBEHYAGxqIgUoAghBAUcNACAFKAIMQQFHDQAgBEEBaiIEIAFIDQEMAwsLQQAhBCAAKAL0BEGbqClB2M4IQQAQRwwCCyABQQFGBEAgAygCDEEBRg0BC0EAIQQgACgC9ARBm6gpQdjOCEEAEEcMAQsgAgJ/AkACQCAALwGKAUEBRw0AIAIvAcAGQQZHDQAgAigCnAdBAUcNACACQoOAgIAgNwMoDAELIAJCADcDKCAALwGKAUEBRw0AQQAhAUH1BSEEQQEgAi8BwgZBAUcNARpBASACLwHEBkEBRw0BGgtBASEBQesFIQRBAAs2AkQgACAENgKsBCAAIAQ2AqQEIAAgBDYCnAQgAhDHJiIDQQBHIQQgASADRXINAEEBIQQgACgCyAQhAQJAIAIoAiQiB0EBSARAQQAhAwwBCyACKALYASEAQQAhA0EAIQUDQCAAKAIIIQggASAAKAIcQQN0IAAoAgwiCUEDdBC9FiIKRQRAQQAhBAwDCyABIAVBAnRqIAo2AswGIABB2ABqIQAgCCAJbCADaiEDIAVBAWoiBSAHRw0ACwsgASADNgL4BiACQQg2AvQGCyAGQUBrJAAgBA8LQZPBBEHAhAFBswVBm6gpEAMAC0Gq5AZBwIQBQbQFQZuoKRADAAveAwEFfyMAQRBrIgQkACACIAIgACgCyAQiAygCyAYiBW0iAiAFbGsEQCAAKAL0BCAAKAIAQZLmCEEAELMBCwJ/AkACQCADKAIgIgUgAiACIAVKGyIFRQ0AQQAhAiAEQQA2AgwgAygC1AFBDEYEQCAEIAMoAnAgAygCJGxBAXQQXCICNgIMCwNAAkAgAgRAQQAgAyAEQQxqELwWQQFHDQUaIAMoAtQBQXhqIgJBBEsNAQJAAkAgAkEBaw4EAwMDAAELQQAhAiADKAIkIAMoAnBsQQF2IghFDQIDQCABIAJBA2xqIgYgBCgCDCACQQF0aiIHLQAAQQR2OgAAIAYgBy0AAEEEdDoAASAGIActAAE6AAIgAkEBaiICIAhHDQALDAILQQAhAiADKAIkIAMoAnBsIgZBAUgNAQNAIAEgAmogBCgCDCACai0AADoAACACQQFqIgIgBkcNAAsMAQsgBCABNgIIIAMgBEEIahC8FkEBRw0DCyAAIAAoAtgDQQFqNgLYAyAFQQJOBEAgBUF/aiEFIAEgAygCyAZqIQEgBCgCDCECDAELCyAEKAIMIgBFDQAgABA9C0EBIAMoAowBIAMoAnRJDQEaIAMQuxZBAEcMAQtBAAshACAEQRBqJAAgAAuAAgECfyMAQdAAayICJAAgACgCyAQiBARAAn8CfwJ/IAAoAjAiA0EEcQRAIAIgBCgClAc2AkAgAUGlugUgAkFAaxCvASAAKAIwIQMLIANBCHELBEAgAiAEKAKoBzYCMCABQa7gBSACQTBqEK8BIAAoAjAhAwsgA0EQcQsEQCACIAQoAqwHNgIgIAFBpIMGIAJBIGoQrwEgACgCMCEDCyADQSBxCwR/IAIgBCgCsAc2AhAgAUHwpgYgAkEQahCvASAAKAIwBSADC0HAAHEEQCACIAQoArQHNgIAIAFB48YGIAIQrwELIAJB0ABqJAAPC0GTwQRBwIQBQZkOQfynKRADAAvCBQECfwJAAkACQCAAKALIBCIDBEACQAJAAkACQAJAAkACQCABQduQAkwEQCABQYYCRg0EIAFB2wJGDQEgAUGSBEcNBiADQQE2AqQHIABBkgQgAiADKAKABxEEAA8LIAFBpO99aiIEQQNNDQggAUH//3tqIgRBAksNBSAEQQFrDgICBAELIAIoAgAiBA0FQQAPCyADIAIoAgA2ApgHQQEPCyADIAIoAgAiAjYCnAcgACAAKAIMIgNB//9+cSIBNgIMAkAgAC8BigFBAUcgAkEBR3INACAALwFaQQZHDQAgACADQYCAAXIiATYCDAsgACgC/ANBAU4EQEF/IQMgACABQYAIcQR/IAAQ7wUFQX8LNgL8AwtBASEBIAAoAswEQQFIDQcgACAAEMIDNgLMBEEBDwsgAEGGAiACIAMoAoAHEQQAIQEgACAAKAIMIgJB//9+cSIDNgIMAkAgAC8BigFBAUcNACAALwFaQQZHDQAgACgCyAQoApwHQQFHDQAgACACQYCAAXIiAzYCDAsgACgC/ANBAU4EQEF/IQIgACADQYAIcQR/IAAQ7wUFQX8LNgL8AwsgACgCzARBAUgNBiAAIAAQwgM2AswEIAEPCyADIAIoAgA2AqAHQQEPCyAAIAEgAiADKAKABxEEAA8LIANBkAdqIAIoAgQgBBCxJyADIAQ2ApQHIAAgACgCMEEEcjYCMAwCC0GTwQRBwIQBQeIMQe6nKRADAAsCQAJAAkACQCAEQQFrDgMCAQADCyADQbQHaiACKAIAEOUMDAMLIAMgAigCADYCsAcMAgsgA0GsB2ogAigCABDlDAwBCyADIAIoAgA2AqgHCyAAIAEQ/QIiAkUEQEEADwtBASEBIAAgAi8BDCICQQN2Qfw/cWoiA0EoaiADKAIoQQEgAkEfcXRyNgIAIAAgACgCDEEIcjYCDAsgAQveAwEDfyMAQRBrIgQkAAJ/AkAgACgCyAQiAwRAAkACQAJAAkACQAJAAkACQCABQYCABEwEQCABQaTvfWoiBUEDTQ0KIAFB2wJGDQEgAUGSBEcNCCAAQQBBABDfDCADKAIQRQ0HIAMoAqQHDQcgAC8BWkEGRw0HIANBATYCpAcgABDbDEUNBSAAQQAQqBYNBgwHCyABQf//e2oiBUECSw0HIAVBAWsOAgIDAQsgAigCACADKAKUBzYCACACKAIEIAMoApAHNgIAQQEMCQsgAigCACADKAKYBzYCAEEBDAgLIAIoAgAgAygCnAc2AgBBAQwHCyACKAIAIAMoAqAHNgIAQQEMBgsgAEEAEJgQRQ0BCyADLwHCBiEBIAQgAy8BxAY2AgQgBCABNgIAIABBkgQgBBCQARogAEF/NgLgAwsgAEGSBCACIAMoAvwGEQQADAMLIAAgASACIAMoAvwGEQQADAILQZPBBEHAhAFB7w1B4KcpEAMACwJAAkACQAJAIAVBAWsOAwIBAAMLIAIoAgAgAygCtAc2AgBBAQwDCyACKAIAIAMoArAHNgIAQQEMAgsgAigCACADKAKsBzYCAEEBDAELIAIoAgAgAygCqAc2AgBBAQshASAEQRBqJAAgAQvOAwAgAUEHRgRAIABBwKYpQQgQuQVFBEAgACgC9ARBpKYpQavAAUEAEEdBAA8LIABBuAcQXCIBNgLIBCABRQRAIAAoAvQEQaSmKUHYgAJBABBHQQAPCyABQQBBuAcQxQIgACgCyAQiASAANgK8BiABIAAoAqAFNgL8BiAAQegFNgKgBSABIAAoApwFNgKAByAAQekFNgKcBSABIAAoAqQFNgKEByAAQeoFNgKkBSABQQA2ArQHIAFCADcDqAcgAULLADcDmAcgAUIANwOQByABQgM3A6AHIABB6wU2AqwEIABB6wU2AqQEIABB6wU2ApwEIABB7AU2AogEIABB7QU2AoQEIABB7gU2ArwEIABB7wU2ArAEIABB7wU2AqgEIABB7wU2AqAEIABB8AU2ApgEIABB8QU2ApQEIABB8gU2AowEIAEgACgCwAQ2AogHIABB8wU2AsAEIAEgACgCxAQ2AowHIABB9AU2AsQEIAAgACgCDEGAAnI2AgwgAUEANgLoAyAAKAIQRQRAIAFB0A82ApQHIAFB0A8QXCIBNgKQByABQQBB0A8QxQILIAAgACgCLEGAAXI2AixBAQ8LQYTHAEHAhAFBnw9BpKYpEAMAC/YBAQJ/IwBB4AhrIgQkACAEQeAAakEAQYAIEGUaAkACQCAAIARB4ABqEIQnRQ0AIARBCGogACAEQeAAahCBJ0UNACAEQQE7ASYCfyAEKAI4IgBFBEAgBCgCCCIAKAL0BCAAKAIAQZPkBkEAEEdBAAwBCyAEKAI8RQRAIAQoAggiACgC9AQgACgCAEGggQdBABBHQQAMAQsgBEEIaiADIAIgBCgCHCICayABbEECdGogASACIAARBwALIQUgBEEIahCDJwwBCyAAKAL0BCEBIAAoAgAhACAEIARB4ABqNgIAIAEgAEHMnQcgBBBHCyAEQeAIaiQAIAUL2wEBA38jAEEQayILJAAgBQRAIAdBAnQhDANAIAQgCmohDSAEIAhqIQ4gBCEDIAkhByABIQIDQCAAKAJEIAgtAAAgBy0AACAKLQAAIAtBDGogC0EIaiALQQRqEJ0BIAIgCygCDCALKAIIQQh0ciALKAIEQRB0ckGAgIB4cjYCACACQQRqIQIgCkEBaiEKIAdBAWohByAIQQFqIQggA0F/aiIDDQALIAEgBEECdGogDGohASAGIA1qIQogBiAOaiEIIAQgCWogBmohCSAFQX9qIgUNAAsLIAtBEGokAAvRAQECfyAFBEAgB0ECdCENIAZBAXQhAwNAIAVBf2ohBQJAIARFBEAgCCEAIAohAgwBCyAKIARBAXQiC2ohAiAIIAtqIQBBACEMIAkhBiABIQcDQCAHIAgtAAEgBi0AAUEIdHIgCi0AAUEQdHJBgICAeHI2AgAgB0EEaiEHIApBAmohCiAGQQJqIQYgCEECaiEIIAxBAWoiDCAERw0ACyABIARBAnRqIQEgCSALaiEJCyABIA1qIQEgAiADaiEKIAMgCWohCSAAIANqIQggBQ0ACwsLnAIBBX8gBQRAIAdBAnQhECAGQQF0IQwDQCAFQX9qIQUCQCAERQRAIAohAyAIIQYMAQsgCiAEQQF0Ig1qIQMgCCANaiEGIAEhByAEIQ8gCyEAIAkhAgNAIAcgAC0AASIOQRh0IAgtAAEgDmxB/wBqQf//A3FB/wFuciACLQABIA5sQf8AakH//wNxQf8BbkEIdHIgCi0AASAObEH/AGpB//8DcUH/AW5BEHRyNgIAIAdBBGohByAKQQJqIQogAkECaiECIAhBAmohCCAAQQJqIQAgD0F/aiIPDQALIAEgBEECdGohASAJIA1qIQkgCyANaiELCyABIBBqIQEgCyAMaiELIAMgDGohCiAJIAxqIQkgBiAMaiEIIAUNAAsLC+0BAQR/IAUEQCAHQQJ0IQ8gBkEBdCEMA0AgBUF/aiEFAkAgBEUEQCAJIQIgCyEDDAELIAsgBEEBdCINaiEDIAkgDWohAkEAIQ4gCiEGIAghByABIQADQCAAIActAAEgCS0AAUEIdHIgBi0AAUEQdHIgCy0AAUEYdHI2AgAgAEEEaiEAIAtBAmohCyAGQQJqIQYgCUECaiEJIAdBAmohByAOQQFqIg4gBEcNAAsgASAEQQJ0aiEBIAogDWohCiAIIA1qIQgLIAEgD2ohASADIAxqIQsgCiAMaiEKIAIgDGohCSAIIAxqIQggBQ0ACwsL5gYAIAUEQCAEQQhJIQAgB0ECdCECA0AgBCEHIABFBEADQCABIAgtAAAgCS0AAEEIdHIgCi0AAEEQdHJBgICAeHI2AgAgASAILQABIAktAAFBCHRyIAotAAFBEHRyQYCAgHhyNgIEIAEgCC0AAiAJLQACQQh0ciAKLQACQRB0ckGAgIB4cjYCCCABIAgtAAMgCS0AA0EIdHIgCi0AA0EQdHJBgICAeHI2AgwgASAILQAEIAktAARBCHRyIAotAARBEHRyQYCAgHhyNgIQIAEgCC0ABSAJLQAFQQh0ciAKLQAFQRB0ckGAgIB4cjYCFCABIAgtAAYgCS0ABkEIdHIgCi0ABkEQdHJBgICAeHI2AhggASAILQAHIAktAAdBCHRyIAotAAdBEHRyQYCAgHhyNgIcIAFBIGohASAKQQhqIQogCUEIaiEJIAhBCGohCCAHQXhqIgdBB0sNAAsLIAVBf2ohBSAHQX9qIgNBBk0EQAJAAkACQAJAAkACQAJAIANBAWsOBgUEAwIBAAYLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ckGAgIB4cjYCACABQQRqIQEgCkEBaiEKIAlBAWohCSAIQQFqIQgLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ckGAgIB4cjYCACABQQRqIQEgCkEBaiEKIAlBAWohCSAIQQFqIQgLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ckGAgIB4cjYCACABQQRqIQEgCkEBaiEKIAlBAWohCSAIQQFqIQgLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ckGAgIB4cjYCACABQQRqIQEgCkEBaiEKIAlBAWohCSAIQQFqIQgLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ckGAgIB4cjYCACABQQRqIQEgCkEBaiEKIAlBAWohCSAIQQFqIQgLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ckGAgIB4cjYCACABQQRqIQEgCkEBaiEKIAlBAWohCSAIQQFqIQgLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ckGAgIB4cjYCACAKQQFqIQogCUEBaiEJIAhBAWohCCABQQRqIQELIAYgCmohCiAGIAlqIQkgBiAIaiEIIAEgAmohASAFDQALCwuQAgEEfyAFBEAgB0ECdCEPA0AgBUF/aiEFAkAgBEUEQCAKIQcgCCENDAELIAQgCmohByAEIAhqIQ0gASEAIAQhDiALIQIgCSEDA0AgACACLQAAIgxBGHQgCC0AACAMbEH/AGpB//8DcUH/AW5yIAMtAAAgDGxB/wBqQf//A3FB/wFuQQh0ciAKLQAAIAxsQf8AakH//wNxQf8BbkEQdHI2AgAgAEEEaiEAIApBAWohCiADQQFqIQMgCEEBaiEIIAJBAWohAiAOQX9qIg4NAAsgBCAJaiEJIAQgC2ohCyABIARBAnRqIQELIAYgC2ohCyAGIAdqIQogBiAJaiEJIAYgDWohCCABIA9qIQEgBQ0ACwsL0gcAIAUEQCAEQQhJIQAgB0ECdCECA0AgBCEHIABFBEADQCABIAgtAAAgCS0AAEEIdHIgCi0AAEEQdHIgCy0AAEEYdHI2AgAgASAILQABIAktAAFBCHRyIAotAAFBEHRyIAstAAFBGHRyNgIEIAEgCC0AAiAJLQACQQh0ciAKLQACQRB0ciALLQACQRh0cjYCCCABIAgtAAMgCS0AA0EIdHIgCi0AA0EQdHIgCy0AA0EYdHI2AgwgASAILQAEIAktAARBCHRyIAotAARBEHRyIAstAARBGHRyNgIQIAEgCC0ABSAJLQAFQQh0ciAKLQAFQRB0ciALLQAFQRh0cjYCFCABIAgtAAYgCS0ABkEIdHIgCi0ABkEQdHIgCy0ABkEYdHI2AhggASAILQAHIAktAAdBCHRyIAotAAdBEHRyIAstAAdBGHRyNgIcIAFBIGohASALQQhqIQsgCkEIaiEKIAlBCGohCSAIQQhqIQggB0F4aiIHQQdLDQALCyAFQX9qIQUgB0F/aiIDQQZNBEACQAJAAkACQAJAAkACQCADQQFrDgYFBAMCAQAGCyABIAgtAAAgCS0AAEEIdHIgCi0AAEEQdHIgCy0AAEEYdHI2AgAgAUEEaiEBIAtBAWohCyAKQQFqIQogCUEBaiEJIAhBAWohCAsgASAILQAAIAktAABBCHRyIAotAABBEHRyIAstAABBGHRyNgIAIAFBBGohASALQQFqIQsgCkEBaiEKIAlBAWohCSAIQQFqIQgLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ciALLQAAQRh0cjYCACABQQRqIQEgC0EBaiELIApBAWohCiAJQQFqIQkgCEEBaiEICyABIAgtAAAgCS0AAEEIdHIgCi0AAEEQdHIgCy0AAEEYdHI2AgAgAUEEaiEBIAtBAWohCyAKQQFqIQogCUEBaiEJIAhBAWohCAsgASAILQAAIAktAABBCHRyIAotAABBEHRyIAstAABBGHRyNgIAIAFBBGohASALQQFqIQsgCkEBaiEKIAlBAWohCSAIQQFqIQgLIAEgCC0AACAJLQAAQQh0ciAKLQAAQRB0ciALLQAAQRh0cjYCACABQQRqIQEgC0EBaiELIApBAWohCiAJQQFqIQkgCEEBaiEICyABIAgtAAAgCS0AAEEIdHIgCi0AAEEQdHIgCy0AAEEYdHI2AgAgC0EBaiELIApBAWohCiAJQQFqIQkgCEEBaiEIIAFBBGohAQsgBiALaiELIAYgCmohCiAGIAlqIQkgBiAIaiEIIAEgAmohASAFDQALCwucBwERfyMAQRBrIggkACAAKAI0IRIgACgCECEFAkBBBEEDIAAoAgwiDBsgACgCACIHENAKIgRsIgYQXCILRQRAIAcoAvQEIAcoAgBBjZ4IQQAQRwwBCyALQQAgBhDFAgJ/QQAgAC8BHEF/aiIGQQdLDQAaAkACQAJAAkAgBkEBaw4HAQIDAAECAwALQQAgAC8BHkF+aiIGQf//A3FBB08NAxogBkEQdEEQdUECdEGspSlqKAIADAMLQQAgAC8BHkF/aiIGQf//A3FBCE8NAhogBkEQdEEQdUECdEHIpSlqKAIADAILQQAgAC8BHkF/aiIGQf//A3FBCE8NARogBkEQdEEQdUECdEHopSlqKAIADAELQQAgAC8BHkF/aiIGQf//A3FBB08NABogBkEQdEEQdUECdEGIpilqKAIACyENIAggCEEMajYCACAHQZYCIAgQ8QJBASEKIAcQwgMhBgJAIANFDQAgBCALaiIOIARqIg8gBGpBACAMGyEQQQAgBSACayIEIAQgBUsbIRNBACACQQF0a0EAIA1BAXEiERshFCADQX9qQQAgERshCkEAIQQCfwNAIAgoAgwhBQJAIAcgByAAKAJMIARqIglBABDRCiALIAMgBGsgBSAJIAVwayIFIAQgBWogA0sbIgUgACgCTCAEaiAIKAIMcGogBmwQ0wpBf0oNACAAKAIERQ0AQQAMAgsCQCAHIAcgCUEBENEKIA4gACgCTCAEaiAIKAIMcCAFaiAGbBDTCkF/Sg0AIAAoAgRFDQBBAAwCCwJAIAcgByAJQQIQ0QogDyAAKAJMIARqIAgoAgxwIAVqIAZsENMKQX9KDQAgACgCBEUNAEEADAILAkAgDEUNACAHIAcgCUEDENEKIBAgACgCTCAEaiAIKAIMcCAFaiAGbBDTCkF/Sg0AIAAoAgRFDQBBAAwCCyAAIAEgAiAKbEECdGpBACAKIAIgBSATIBQgCyAAKAJMIARqIAgoAgxwIAZsIglqIAkgDmogCSAPaiAJIBBqQQAgDBsgEhEYAEEAIAVrIAUgERsgCmohCiAEIAVqIgQgA0kNAAtBAQshCiANQQJxRQ0AQQAhBwNAIAEgAiAHbEECdGoiBCAEIAJBAnRqQXxqIgBJBEADQCAEKAIAIQUgBCAAKAIANgIAIAAgBTYCACAEQQRqIgQgAEF8aiIASQ0ACwsgB0EBaiIHIANHDQALCyALED0LIAhBEGokACAKC7IIARR/IwBBIGsiByQAIAAoAjQhFAJAQQRBAyAAKAIMIg4bIAAoAgAiCBDvBSIFbCIEEFwiCkUEQCAIKAL0BCAIKAIAQY2eCEEAEEcMAQsgCkEAIAQQxQIgByAHQRxqNgIQIAhBwgIgB0EQahCnARogByAHQRhqNgIAIAhBwwIgBxCnARoCfwJAIAAvARxBf2oiBEEHSw0AAkACfwJAAkACQAJAAkACQCAEQQFrDgcBAgMAAQIDAAsgAC8BHiIEQQhLDQZBASAEdCIGQcQAcQRAQQIhCQwIC0EDIAZBiAFxDQUaQQFBASAEdEGQAnENBRoMBgsgAC8BHiIEQQhLDQVBASAEdCIGQSJxBEBBAiEJDAcLQQEgBkGIAXENBBpBASAEdEGQAnFFDQVBAwwECyAALwEeIgRBCEsNBEEDQQEgBHQiBkEicQ0DGiAGQcQAcQ0BQQIhCUEBIAR0QZACcUUNBAwFCyAALwEeIgRBB0sNA0EBIAR0IgZBInENACAGQcQAcQ0BQQIhCUEBIAR0QYgBcUUNAwwEC0EBDAELQQMLIQlBACAHKAIcIAJqayEPQQEhFiADQX9qDAILQQAhCQsgAiAHKAIcayEPQQALIQwCQCADRQRAQQEhEAwBCyAFIApqIhEgBWoiEiAFakEAIA4bIRNBACEEQQEhEANAIAMgBGsgBygCGCIFIAAoAkwiBiAEaiAFcGsiBSAEIAVqIANLGyENAkAgAkUNACABIAIgDGxBAnRqIRVBACEFA0ACQCAIIAogACgCUCAFaiAEIAZqQQAQ0gpBf0wEQCAAKAIEDQELIAggESAAKAJQIAVqIAAoAkwgBGpBARDSCkF/TARAIAAoAgQNAQsgCCASIAAoAlAgBWogACgCTCAEakECENIKQX9MBEAgACgCBA0BCwJAIA5FDQAgCCATIAAoAlAgBWogACgCTCAEakEDENIKQX9KDQAgACgCBA0BCyAAKAJMIQYgBygCGCELIAgQuQYgBCAGaiALcGwhBgJAIAcoAhwiCyAFaiACSwRAIAAgFSAFQQJ0aiAFIAwgAiAFayIXIA0gCyAXayILIAsgD2ogBiAKaiAGIBFqIAYgEmogBiATakEAIA4bIBQRGAAMAQsgACAVIAVBAnRqIAUgDCALIA1BACAPIAYgCmogBiARaiAGIBJqIAYgE2pBACAOGyAUERgACyAHKAIcIAVqIgUgAk8NAiAAKAJMIQYMAQsLQQAhEAtBACANayANIBYbIAxqIQwgBCANaiIEIANJDQALIAlBAnFFDQBBACEGA0AgASACIAZsQQJ0aiIAIAAgAkECdGpBfGoiBUkEQANAIAAoAgAhBCAAIAUoAgA2AgAgBSAENgIAIABBBGoiACAFQXxqIgVJDQALCyAGQQFqIgYgA0cNAAsLIAoQPQsgB0EgaiQAIBAL+gEBA38jAEEgayIDJAAgBQRAIAZBA2whCSAEQQNsIQogB0ECdCELA0AgBUF/aiEFAkAgBEUEQCABIQIMAQsgASAEQQJ0aiECIAghByAEIQYDQCAAKAJIIActAAAgBywAASAHLAACIANBHGogA0EYaiADQRRqEIgnIAAoAkggAyoCHCADKgIYIAMqAhQgA0EQaiADQQxqIANBCGoQhycgASADKAIQIAMoAgxBCHRyIAMoAghBEHRyQYCAgHhyNgIAIAdBA2ohByABQQRqIQEgBkF/aiIGDQALIAggCmohCAsgCCAJaiEIIAIgC2ohASAFDQALCyADQSBqJAALvgEBBH8jAEEQayICJAAgBEEDbCEDIAZBA2whCSAEQQJ0IQogB0ECdCELA0AgASAKaiEMIAghByAEIQYDQCAAKAJEIActAAAgBy0AASAHLQACIAJBDGogAkEIaiACQQRqEJ0BIAEgAigCDCACKAIIQQh0ciACKAIEQRB0ckGAgIB4cjYCACAHQQNqIQcgAUEEaiEBIAZBf2oiBg0ACyADIAhqIAlqIQggCyAMaiEBIAVBf2oiBQ0ACyACQRBqJAALnwMBB38jAEEQayIJJAAgBkECbSECIAVBAk8EQCACQQJ0IQwgASAEQQJ0IgpqIAdBAnRqIQYgB0EBdCAEakECdCELA0AgBiAKaiENIAghByAEIQMgASECA0AgACgCRCAHLQAAIActAAIiDiAHLQADIg8gCUEMaiAJQQhqIAlBBGoQnQEgAiAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIAIAAoAkQgBy0AASAOIA8gCUEMaiAJQQhqIAlBBGoQnQEgBiAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIAIAdBBGohByAGQQRqIQYgAkEEaiECIANBf2oiAw0ACyABIApqIAtqIQEgCCAKaiAMaiEIIAsgDWohBiAFQX5qIgVBAUsNAAsLIAVBAUYEQANAIAAoAkQgCC0AACAILQACIAgtAAMgCUEMaiAJQQhqIAlBBGoQnQEgASAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIAIAhBBGohCCABQQRqIQEgBEF/aiIEDQALCyAJQRBqJAALlgMBC38jAEEQayIJJAAgBEEBcSELIAZBAXQhDCAEQX5xIg1BfmohDiAEQQF2Ig9BAnQiAkF8aiEDIAdBAnQhEANAIAMgCGohCiABIA1BAnRqIREgCCEEIA8hBiABIQcDQCAAKAJEIAQtAAAgBC0AAiISIAQtAAMiEyAJQQxqIAlBCGogCUEEahCdASAHIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgAgACgCRCAELQABIBIgEyAJQQxqIAlBCGogCUEEahCdASAHIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgQgBEEEaiEEIAdBCGohByAGQX9qIgYNAAtBAiEEIAMhByABIA5BAnRqIBBqIAsEfyAAKAJEIAIgCGotAAAgCi0ABiAKLQAHIAlBDGogCUEIaiAJQQRqEJ0BIBEgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCACACIQdBAwVBAgtBAnRqIQEgCCAMaiAHakEEaiEIIAVBf2oiBQ0ACyAJQRBqJAAL5AYBA38jAEEQayIDJAAgBkECbSECIAVBAk8EQCACQQZsIQsgASAEQQJ0aiAHQQJ0aiEGIAdBAXQgBGpBAnQhCgNAIAQhAiAEQQJPBEADQCAAKAJEIAgtAAAgCC0ABCIHIAgtAAUiCSADQQxqIANBCGogA0EEahCdASABIAMoAgwgAygCCEEIdHIgAygCBEEQdHJBgICAeHI2AgAgACgCRCAILQABIAcgCSADQQxqIANBCGogA0EEahCdASABIAMoAgwgAygCCEEIdHIgAygCBEEQdHJBgICAeHI2AgQgACgCRCAILQACIAcgCSADQQxqIANBCGogA0EEahCdASAGIAMoAgwgAygCCEEIdHIgAygCBEEQdHJBgICAeHI2AgAgACgCRCAILQADIAcgCSADQQxqIANBCGogA0EEahCdASAGIAMoAgwgAygCCEEIdHIgAygCBEEQdHJBgICAeHI2AgQgCEEGaiEIIAZBCGohBiABQQhqIQEgAkF+aiICQQFLDQALCyACQQFGBEAgACgCRCAILQAAIAgtAAQiAiAILQAFIgcgA0EMaiADQQhqIANBBGoQnQEgASADKAIMIAMoAghBCHRyIAMoAgRBEHRyQYCAgHhyNgIAIAAoAkQgCC0AAiACIAcgA0EMaiADQQhqIANBBGoQnQEgBiADKAIMIAMoAghBCHRyIAMoAgRBEHRyQYCAgHhyNgIAIAhBBmohCCAGQQRqIQYgAUEEaiEBCyAIIAtqIQggBiAKaiEGIAEgCmohASAFQX5qIgVBAUsNAAsLAkAgBUEBRw0AIARBAk8EQANAIAAoAkQgCC0AACAILQAEIgIgCC0ABSIFIANBDGogA0EIaiADQQRqEJ0BIAEgAygCDCADKAIIQQh0ciADKAIEQRB0ckGAgIB4cjYCACAAKAJEIAgtAAEgAiAFIANBDGogA0EIaiADQQRqEJ0BIAEgAygCDCADKAIIQQh0ciADKAIEQRB0ckGAgIB4cjYCBCAIQQZqIQggAUEIaiEBIARBfmoiBEEBSw0ACwsgBEEBRw0AIAAoAkQgCC0AACAILQAEIAgtAAUgA0EMaiADQQhqIANBBGoQnQEgASADKAIMIAMoAghBCHRyIAMoAgRBEHRyQYCAgHhyNgIACyADQRBqJAALwwUBC38jAEEQayIJJAAgBEEDcSEOIARBAnYiEEEGbCICQXpqIQMgBEF8cSIRQXxqQQJ0IRIgB0ECdCETA0AgAyAIaiELIAEgEUECdGohDCAIIQQgECENIAEhBwNAIAAoAkQgBC0AACAELQAEIgogBC0ABSIPIAlBDGogCUEIaiAJQQRqEJ0BIAcgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCACAAKAJEIAQtAAEgCiAPIAlBDGogCUEIaiAJQQRqEJ0BIAcgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCBCAAKAJEIAQtAAIgCiAPIAlBDGogCUEIaiAJQQRqEJ0BIAcgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCCCAAKAJEIAQtAAMgCiAPIAlBDGogCUEIaiAJQQRqEJ0BIAcgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCDCAEQQZqIQQgB0EQaiEHIA1Bf2oiDQ0ACyAOBH8gDkF/aiINQQJNBEAgAiAIaiEKIAEgEmohByALLQALIQEgCy0ACiEEAkACQAJAIA1BAWsOAgEAAgsgACgCRCALLQAIIAQgASAJQQxqIAlBCGogCUEEahCdASAHIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AhgLIAAoAkQgCy0AByAEIAEgCUEMaiAJQQhqIAlBBGoQnQEgByAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIUCyAAKAJEIAotAAAgBCABIAlBDGogCUEIaiAJQQRqEJ0BIAwgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCAAsgDCAOQQJ0aiEMIAIFIAMLIQQgDCATaiEBIAYgCGogBGpBBmohCCAFQX9qIgUNAAsgCUEQaiQAC8MLAQl/IwBBEGsiCSQAIAEgBEECdGogB0ECdGohCiAGQQpsQQRtIQwgB0EBdCAEaiENAkAgBUEDcSAEQQFxcgRAIAVFDQEgDUECdCEGA0AgBARAIAQhBwNAIAgtAAkhAiAILQAIIQMCQAJAAkAgB0F/aiILQQJNBEAgC0EBaw4CAgEDCyAFQQFHBEAgACgCRCAILQAHIAMgAiAJQQxqIAlBCGogCUEEahCdASAKIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgwLIAAoAkQgCC0AAyADIAIgCUEMaiAJQQhqIAlBBGoQnQEgASAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIMCyAFQQFHBEAgACgCRCAILQAGIAMgAiAJQQxqIAlBCGogCUEEahCdASAKIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AggLIAAoAkQgCC0AAiADIAIgCUEMaiAJQQhqIAlBBGoQnQEgASAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIICyAFQQFHBEAgACgCRCAILQAFIAMgAiAJQQxqIAlBCGogCUEEahCdASAKIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgQLIAAoAkQgCC0AASADIAIgCUEMaiAJQQhqIAlBBGoQnQEgASAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIECyAFQQFHBEAgACgCRCAILQAEIAMgAiAJQQxqIAlBCGogCUEEahCdASAKIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgALIAAoAkQgCC0AACADIAIgCUEMaiAJQQhqIAlBBGoQnQEgASAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIAIAhBCmohCCABIAdBBCAHQQRJG0ECdCICaiEBIAIgCmohCiAHQQRLIQJBACAHQXxqIgMgAyAHSxshByACDQALCyAFQQNJDQIgCCAMaiEIIAVBfmohBSAGIApqIQogASAGaiEBDAAACwALIAVBAkkNACAEQXxxIQ4gBEECdiIDQQpsIQ8DQCAKIA5BAnQiEGohESAIIQcgAyEEIAEhAgNAIAAoAkQgBy0AACAHLQAIIgYgBy0ACSILIAlBDGogCUEIaiAJQQRqEJ0BIAIgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCACAAKAJEIActAAEgBiALIAlBDGogCUEIaiAJQQRqEJ0BIAIgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCBCAAKAJEIActAAIgBiALIAlBDGogCUEIaiAJQQRqEJ0BIAIgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCCCAAKAJEIActAAMgBiALIAlBDGogCUEIaiAJQQRqEJ0BIAIgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCDCAAKAJEIActAAQgBiALIAlBDGogCUEIaiAJQQRqEJ0BIAogCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCACAAKAJEIActAAUgBiALIAlBDGogCUEIaiAJQQRqEJ0BIAogCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCBCAAKAJEIActAAYgBiALIAlBDGogCUEIaiAJQQRqEJ0BIAogCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCCCAAKAJEIActAAcgBiALIAlBDGogCUEIaiAJQQRqEJ0BIAogCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCDCAHQQpqIQcgCkEQaiEKIAJBEGohAiAEQX9qIgQNAAsgDUECdCICIAEgEGpqIQEgCCAPaiAMaiEIIAIgEWohCiAFQX5qIgVBAUsNAAsLIAlBEGokAAutFQENfyMAQRBrIgkkACAHQQJ0IgIgBEEDbGohECACIAEgBEECdCIDaiACaiILIANqIAJqIgIgA2pqIQwgBkESbEEEbSERAkAgBCAFckEDcQRAIAVFDQEgEEECdCEOA0ACQCAEIgZFDQADQCAILQARIQMgCC0AECEHAkACQAJAIAZBf2oiCkECTQRAIApBAWsOAgIBAwsCQAJAAkAgBUF/aiIKQQJNBEAgCkEBaw4CAgEDCyAAKAJEIAgtAA8gByADIAlBDGogCUEIaiAJQQRqEJ0BIAwgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCDAsgACgCRCAILQALIAcgAyAJQQxqIAlBCGogCUEEahCdASACIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgwLIAAoAkQgCC0AByAHIAMgCUEMaiAJQQhqIAlBBGoQnQEgCyAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIMCyAAKAJEIAgtAAMgByADIAlBDGogCUEIaiAJQQRqEJ0BIAEgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCDAsCQAJAAkAgBUF/aiIKQQJNBEAgCkEBaw4CAgEDCyAAKAJEIAgtAA4gByADIAlBDGogCUEIaiAJQQRqEJ0BIAwgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCCAsgACgCRCAILQAKIAcgAyAJQQxqIAlBCGogCUEEahCdASACIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AggLIAAoAkQgCC0ABiAHIAMgCUEMaiAJQQhqIAlBBGoQnQEgCyAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIICyAAKAJEIAgtAAIgByADIAlBDGogCUEIaiAJQQRqEJ0BIAEgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCCAsCQAJAAkAgBUF/aiIKQQJNBEAgCkEBaw4CAgEDCyAAKAJEIAgtAA0gByADIAlBDGogCUEIaiAJQQRqEJ0BIAwgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCBAsgACgCRCAILQAJIAcgAyAJQQxqIAlBCGogCUEEahCdASACIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgQLIAAoAkQgCC0ABSAHIAMgCUEMaiAJQQhqIAlBBGoQnQEgCyAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIECyAAKAJEIAgtAAEgByADIAlBDGogCUEIaiAJQQRqEJ0BIAEgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCBAsCQAJAAkAgBUF/aiIKQQJNBEAgCkEBaw4CAgEDCyAAKAJEIAgtAAwgByADIAlBDGogCUEIaiAJQQRqEJ0BIAwgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCAAsgACgCRCAILQAIIAcgAyAJQQxqIAlBCGogCUEEahCdASACIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgALIAAoAkQgCC0ABCAHIAMgCUEMaiAJQQhqIAlBBGoQnQEgCyAJKAIMIAkoAghBCHRyIAkoAgRBEHRyQYCAgHhyNgIACyAAKAJEIAgtAAAgByADIAlBDGogCUEIaiAJQQRqEJ0BIAEgCSgCDCAJKAIIQQh0ciAJKAIEQRB0ckGAgIB4cjYCACAGQQNNBEAgCEESaiEIIAwgBkECdCIDaiEMIAIgA2ohAiADIAtqIQsgASADaiEBDAILIAhBEmohCCAMQRBqIQwgAkEQaiECIAtBEGohCyABQRBqIQEgBkF8aiIGDQALCyAFQQVJDQIgCCARaiEIIAVBfGohBSAMIA5qIQwgAiAOaiECIAsgDmohCyABIA5qIQEMAAALAAsgBUEESQ0AIARBfHEhEiAEQQJ2Ig5BEmwhEwNAIAwgEkECdCIPaiEUIAsgD2ohFSACIQMgCCEHIA4hBCABIQYDQCAAKAJEIActAAAgBy0AECIKIActABEiDSAJQQxqIAlBCGogCUEEahCdASAGIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgAgACgCRCAHLQABIAogDSAJQQxqIAlBCGogCUEEahCdASAGIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgQgACgCRCAHLQACIAogDSAJQQxqIAlBCGogCUEEahCdASAGIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgggACgCRCAHLQADIAogDSAJQQxqIAlBCGogCUEEahCdASAGIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgwgACgCRCAHLQAEIAogDSAJQQxqIAlBCGogCUEEahCdASALIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgAgACgCRCAHLQAFIAogDSAJQQxqIAlBCGogCUEEahCdASALIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgQgACgCRCAHLQAGIAogDSAJQQxqIAlBCGogCUEEahCdASALIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgggACgCRCAHLQAHIAogDSAJQQxqIAlBCGogCUEEahCdASALIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgwgACgCRCAHLQAIIAogDSAJQQxqIAlBCGogCUEEahCdASADIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgAgACgCRCAHLQAJIAogDSAJQQxqIAlBCGogCUEEahCdASADIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgQgACgCRCAHLQAKIAogDSAJQQxqIAlBCGogCUEEahCdASADIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgggACgCRCAHLQALIAogDSAJQQxqIAlBCGogCUEEahCdASADIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgwgACgCRCAHLQAMIAogDSAJQQxqIAlBCGogCUEEahCdASAMIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgAgACgCRCAHLQANIAogDSAJQQxqIAlBCGogCUEEahCdASAMIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgQgACgCRCAHLQAOIAogDSAJQQxqIAlBCGogCUEEahCdASAMIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgggACgCRCAHLQAPIAogDSAJQQxqIAlBCGogCUEEahCdASAMIAkoAgwgCSgCCEEIdHIgCSgCBEEQdHJBgICAeHI2AgwgB0ESaiEHIAxBEGohDCADQRBqIQMgC0EQaiELIAZBEGohBiAEQX9qIgQNAAsgEEECdCIDIAIgD2pqIQIgASAPaiADaiEBIAggE2ogEWohCCADIBRqIQwgAyAVaiELIAVBfGoiBUEDSw0ACwsgCUEQaiQAC9gDAQN/IAZBCG0hCiAFBEAgACgCPCEJIARBeGpBA3ZBAWohCyAEQQhJIQMgB0ECdCECA0AgBCEAIAghBwJAIAMEQAwBCwNAIAEgCSAHLQAAQQJ0aigCACIGKAIANgIAIAEgBigCBDYCBCABIAYoAgg2AgggASAGKAIMNgIMIAEgBigCEDYCECABIAYoAhQ2AhQgASAGKAIYNgIYIAEgBigCHDYCHCABQSBqIQEgB0EBaiEHIABBeGoiAEEHSw0ACyAIIAtqIQgLIAVBf2ohBQJAIABFBEAgCCEHDAELIAhBAWohByAAQX9qIgBBBksNACAJIAgtAABBAnRqKAIAIQYCQAJAAkACQAJAAkACQCAAQQFrDgYFBAMCAQAGCyABIAYoAgA2AgAgAUEEaiEBIAZBBGohBgsgASAGKAIANgIAIAFBBGohASAGQQRqIQYLIAEgBigCADYCACABQQRqIQEgBkEEaiEGCyABIAYoAgA2AgAgAUEEaiEBIAZBBGohBgsgASAGKAIANgIAIAFBBGohASAGQQRqIQYLIAEgBigCADYCACABQQRqIQEgBkEEaiEGCyABIAYoAgA2AgAgAUEEaiEBCyAHIApqIQggASACaiEBIAUNAAsLC8ACAQN/IAZBBG0hCiAFBEAgACgCPCEJIARBfGpBAnZBAWohCyAEQQRJIQMgB0ECdCECA0AgBCEAIAghBwJAIAMEQAwBCwNAIAEgCSAHLQAAQQJ0aigCACIGKAIANgIAIAEgBigCBDYCBCABIAYoAgg2AgggASAGKAIMNgIMIAFBEGohASAHQQFqIQcgAEF8aiIAQQNLDQALIAggC2ohCAsgBUF/aiEFAkAgAEUEQCAIIQcMAQsgCEEBaiEHIABBf2oiAEECSw0AIAkgCC0AAEECdGooAgAhBgJAAkACQCAAQQFrDgIBAAILIAEgBigCADYCACABQQRqIQEgBkEEaiEGCyABIAYoAgA2AgAgAUEEaiEBIAZBBGohBgsgASAGKAIANgIAIAFBBGohAQsgByAKaiEIIAEgAmohASAFDQALCwvPAQEDfyAGQQJtIQIgBQRAIAAoAjwhACAEQX5qQQF2QQFqIQMgBEECSSEJIAdBAnQhCgNAIAQhByAIIQYCQCAJBEAMAQsDQCABIAAgBi0AAEECdGooAgAiCygCADYCACABIAsoAgQ2AgQgAUEIaiEBIAZBAWohBiAHQX5qIgdBAUsNAAsgAyAIaiEICyAFQX9qIQUgBwRAIAEgACAILQAAQQJ0aigCACgCADYCACAIQQFqIQggAUEEaiEBCyACIAhqIQggASAKaiEBIAUNAAsLC5cBAQN/IAUEQCAAKAI8IQMgAC8BGiIJIARsIQogB0ECdCELA0AgBUF/aiEFAkAgBEUEQCABIQIMAQsgASAEQQJ0aiECIAQhByAIIQADQCABIAMgAC0AAEECdGooAgAoAgA2AgAgACAJaiEAIAFBBGohASAHQX9qIgcNAAsgCCAKaiEICyAGIAhqIQggAiALaiEBIAUNAAsLC50BAQN/IAUEQCAAKAI8IQMgAC8BGiIJIARsQQF0IQogB0ECdCELA0AgBUF/aiEFAkAgBEUEQCABIQIMAQsgASAEQQJ0aiECIAghACAEIQcDQCABIAMgAC0AAUECdGooAgAoAgA2AgAgAUEEaiEBIAAgCUEBdGohACAHQX9qIgcNAAsgCCAKaiEICyAGIAhqIQggAiALaiEBIAUNAAsLC9gDAQN/IAZBCG0hCiAFBEAgACgCQCEJIARBeGpBA3ZBAWohCyAEQQhJIQMgB0ECdCECA0AgBCEAIAghBwJAIAMEQAwBCwNAIAEgCSAHLQAAQQJ0aigCACIGKAIANgIAIAEgBigCBDYCBCABIAYoAgg2AgggASAGKAIMNgIMIAEgBigCEDYCECABIAYoAhQ2AhQgASAGKAIYNgIYIAEgBigCHDYCHCABQSBqIQEgB0EBaiEHIABBeGoiAEEHSw0ACyAIIAtqIQgLIAVBf2ohBQJAIABFBEAgCCEHDAELIAhBAWohByAAQX9qIgBBBksNACAJIAgtAABBAnRqKAIAIQYCQAJAAkACQAJAAkACQCAAQQFrDgYFBAMCAQAGCyABIAYoAgA2AgAgAUEEaiEBIAZBBGohBgsgASAGKAIANgIAIAFBBGohASAGQQRqIQYLIAEgBigCADYCACABQQRqIQEgBkEEaiEGCyABIAYoAgA2AgAgAUEEaiEBIAZBBGohBgsgASAGKAIANgIAIAFBBGohASAGQQRqIQYLIAEgBigCADYCACABQQRqIQEgBkEEaiEGCyABIAYoAgA2AgAgAUEEaiEBCyAHIApqIQggASACaiEBIAUNAAsLC8ACAQN/IAZBBG0hCiAFBEAgACgCQCEJIARBfGpBAnZBAWohCyAEQQRJIQMgB0ECdCECA0AgBCEAIAghBwJAIAMEQAwBCwNAIAEgCSAHLQAAQQJ0aigCACIGKAIANgIAIAEgBigCBDYCBCABIAYoAgg2AgggASAGKAIMNgIMIAFBEGohASAHQQFqIQcgAEF8aiIAQQNLDQALIAggC2ohCAsgBUF/aiEFAkAgAEUEQCAIIQcMAQsgCEEBaiEHIABBf2oiAEECSw0AIAkgCC0AAEECdGooAgAhBgJAAkACQCAAQQFrDgIBAAILIAEgBigCADYCACABQQRqIQEgBkEEaiEGCyABIAYoAgA2AgAgAUEEaiEBIAZBBGohBgsgASAGKAIANgIAIAFBBGohAQsgByAKaiEIIAEgAmohASAFDQALCwvPAQEDfyAGQQJtIQIgBQRAIAAoAkAhACAEQX5qQQF2QQFqIQMgBEECSSEJIAdBAnQhCgNAIAQhByAIIQYCQCAJBEAMAQsDQCABIAAgBi0AAEECdGooAgAiCygCADYCACABIAsoAgQ2AgQgAUEIaiEBIAZBAWohBiAHQX5qIgdBAUsNAAsgAyAIaiEICyAFQX9qIQUgBwRAIAEgACAILQAAQQJ0aigCACgCADYCACAIQQFqIQggAUEEaiEBCyACIAhqIQggASAKaiEBIAUNAAsLC5cBAQN/IAUEQCAAKAJAIQMgAC8BGiIJIARsIQogB0ECdCELA0AgBUF/aiEFAkAgBEUEQCABIQIMAQsgASAEQQJ0aiECIAQhByAIIQADQCABIAMgAC0AAEECdGooAgAoAgA2AgAgACAJaiEAIAFBBGohASAHQX9qIgcNAAsgCCAKaiEICyAGIAhqIQggAiALaiEBIAUNAAsLC+YBAQR/IAUEQCAALwEaIgkgBmwhCiAAKAI4IQYgBCAJbCELIAdBAnQhDANAIAVBf2ohBQJAIARFBEAgASECDAELIAEgBEECdGohAiAEIQMgCCEAA0AgASAGIAAtAANB/wFzIgcgAC0AAUH/AXNsQf8BbmotAABBCHQgBiAALQAAQf8BcyAHbEH/AW5qLQAAciAGIAAtAAJB/wFzIAdsQf8BbmotAABBEHRyQYCAgHhyNgIAIAAgCWohACABQQRqIQEgA0F/aiIDDQALIAggC2ohCAsgCCAKaiEIIAIgDGohASAFDQALCwuPCwECfyAFBEAgAC8BGiIAIAZsIQkgBEEISSEKIAdBAnQhBwNAIAQhBiAKRQRAA0AgASAILQADQf8BcyICIAgtAAFB/wFzbEH/AW5BCHQgCC0AAEH/AXMgAmxB/wFuciAILQACQf8BcyACbEH/AW5BEHRyQYCAgHhyNgIAIAEgACAIaiICLQABQf8BcyACLQADQf8BcyIDbEH/AW5BCHQgAi0AAEH/AXMgA2xB/wFuciACLQACQf8BcyADbEH/AW5BEHRyQYCAgHhyNgIEIAEgACACaiICLQABQf8BcyACLQADQf8BcyIDbEH/AW5BCHQgAi0AAEH/AXMgA2xB/wFuciACLQACQf8BcyADbEH/AW5BEHRyQYCAgHhyNgIIIAEgACACaiICLQABQf8BcyACLQADQf8BcyIDbEH/AW5BCHQgAi0AAEH/AXMgA2xB/wFuciACLQACQf8BcyADbEH/AW5BEHRyQYCAgHhyNgIMIAEgACACaiICLQABQf8BcyACLQADQf8BcyIDbEH/AW5BCHQgAi0AAEH/AXMgA2xB/wFuciACLQACQf8BcyADbEH/AW5BEHRyQYCAgHhyNgIQIAEgACACaiICLQABQf8BcyACLQADQf8BcyIDbEH/AW5BCHQgAi0AAEH/AXMgA2xB/wFuciACLQACQf8BcyADbEH/AW5BEHRyQYCAgHhyNgIUIAEgACACaiICLQABQf8BcyACLQADQf8BcyIDbEH/AW5BCHQgAi0AAEH/AXMgA2xB/wFuciACLQACQf8BcyADbEH/AW5BEHRyQYCAgHhyNgIYIAEgACACaiICLQABQf8BcyACLQADQf8BcyIDbEH/AW5BCHQgAi0AAEH/AXMgA2xB/wFuciACLQACQf8BcyADbEH/AW5BEHRyQYCAgHhyNgIcIAFBIGohASAAIAJqIQggBkF4aiIGQQdLDQALCyAFQX9qIQUgBkF/aiICQQZNBEACQAJAAkACQAJAAkACQCACQQFrDgYFBAMCAQAGCyABIAgtAANB/wFzIgIgCC0AAUH/AXNsQf8BbkEIdCAILQAAQf8BcyACbEH/AW5yIAgtAAJB/wFzIAJsQf8BbkEQdHJBgICAeHI2AgAgACAIaiEIIAFBBGohAQsgASAILQADQf8BcyICIAgtAAFB/wFzbEH/AW5BCHQgCC0AAEH/AXMgAmxB/wFuciAILQACQf8BcyACbEH/AW5BEHRyQYCAgHhyNgIAIAAgCGohCCABQQRqIQELIAEgCC0AA0H/AXMiAiAILQABQf8Bc2xB/wFuQQh0IAgtAABB/wFzIAJsQf8BbnIgCC0AAkH/AXMgAmxB/wFuQRB0ckGAgIB4cjYCACAAIAhqIQggAUEEaiEBCyABIAgtAANB/wFzIgIgCC0AAUH/AXNsQf8BbkEIdCAILQAAQf8BcyACbEH/AW5yIAgtAAJB/wFzIAJsQf8BbkEQdHJBgICAeHI2AgAgACAIaiEIIAFBBGohAQsgASAILQADQf8BcyICIAgtAAFB/wFzbEH/AW5BCHQgCC0AAEH/AXMgAmxB/wFuciAILQACQf8BcyACbEH/AW5BEHRyQYCAgHhyNgIAIAAgCGohCCABQQRqIQELIAEgCC0AA0H/AXMiAiAILQABQf8Bc2xB/wFuQQh0IAgtAABB/wFzIAJsQf8BbnIgCC0AAkH/AXMgAmxB/wFuQRB0ckGAgIB4cjYCACAAIAhqIQggAUEEaiEBCyABIAgtAANB/wFzIgIgCC0AAUH/AXNsQf8BbkEIdCAILQAAQf8BcyACbEH/AW5yIAgtAAJB/wFzIAJsQf8BbkEQdHJBgICAeHI2AgAgACAIaiEIIAFBBGohAQsgCCAJaiEIIAEgB2ohASAFDQALCwusAQECfyAFBEAgAC8BGiICIAZsQQF0IQMgB0ECdCEJIAIgBGxBAXQhCgNAIAVBf2ohBQJAIARFBEAgASEADAELIAEgBEECdGohACAIIQcgBCEGA0AgASAHLQABIActAANBCHRyIActAAVBEHRyQYCAgHhyNgIAIAFBBGohASAHIAJBAXRqIQcgBkF/aiIGDQALIAggCmohCAsgAyAIaiEIIAAgCWohASAFDQALCwvhAQEDfyAFBEAgBiAALwEaIgZsQQF0IQkgB0ECdCEKIAQgBmxBAXQhCwNAIAVBf2ohBQJAIARFBEAgASECDAELIAEgBEECdGohAiAEIQAgCCEHA0AgASAHLQAHIgNBGHQgBy0AASADbEH/AGpB//8DcUH/AW5yIActAAMgA2xB/wBqQf//A3FB/wFuQQh0ciAHLQAFIANsQf8AakH//wNxQf8BbkEQdHI2AgAgAUEEaiEBIAcgBkEBdGohByAAQX9qIgANAAsgCCALaiEICyAIIAlqIQggAiAKaiEBIAUNAAsLC68BAQJ/IAUEQCAALwEaIgIgBmxBAXQhAyAHQQJ0IQkgAiAEbEEBdCEKA0AgBUF/aiEFAkAgBEUEQCABIQAMAQsgASAEQQJ0aiEAIAghByAEIQYDQCABIActAAEgBy0AA0EIdHIgBy0ABUEQdHIgBy0AB0EYdHI2AgAgAUEEaiEBIAcgAkEBdGohByAGQX9qIgYNAAsgCCAKaiEICyADIAhqIQggACAJaiEBIAUNAAsLC5IFAQF/IAUEQCAALwEaIgAgBmwhAyAEQQhJIQYgB0ECdCEJA0AgBCEHIAZFBEADQCABIAgvAAAgCC0AAkEQdHJBgICAeHI2AgAgASAAIAhqIgIvAAAgAi0AAkEQdHJBgICAeHI2AgQgASAAIAJqIgIvAAAgAi0AAkEQdHJBgICAeHI2AgggASAAIAJqIgIvAAAgAi0AAkEQdHJBgICAeHI2AgwgASAAIAJqIgIvAAAgAi0AAkEQdHJBgICAeHI2AhAgASAAIAJqIgIvAAAgAi0AAkEQdHJBgICAeHI2AhQgASAAIAJqIgIvAAAgAi0AAkEQdHJBgICAeHI2AhggASAAIAJqIgIvAAAgAi0AAkEQdHJBgICAeHI2AhwgAUEgaiEBIAAgAmohCCAHQXhqIgdBB0sNAAsLIAVBf2ohBSAHQX9qIgJBBk0EQAJAAkACQAJAAkACQAJAIAJBAWsOBgUEAwIBAAYLIAEgCC8AACAILQACQRB0ckGAgIB4cjYCACAAIAhqIQggAUEEaiEBCyABIAgvAAAgCC0AAkEQdHJBgICAeHI2AgAgACAIaiEIIAFBBGohAQsgASAILwAAIAgtAAJBEHRyQYCAgHhyNgIAIAAgCGohCCABQQRqIQELIAEgCC8AACAILQACQRB0ckGAgIB4cjYCACAAIAhqIQggAUEEaiEBCyABIAgvAAAgCC0AAkEQdHJBgICAeHI2AgAgACAIaiEIIAFBBGohAQsgASAILwAAIAgtAAJBEHRyQYCAgHhyNgIAIAAgCGohCCABQQRqIQELIAEgCC8AACAILQACQRB0ckGAgIB4cjYCACAAIAhqIQggAUEEaiEBCyADIAhqIQggASAJaiEBIAUNAAsLC9gBAQN/IAUEQCAGIAAvARoiBmwhCSAEIAZsIQogB0ECdCELA0AgBUF/aiEFAkAgBEUEQCABIQIMAQsgASAEQQJ0aiECIAQhACAIIQcDQCABIActAAMiA0EYdCAHLQAAIANsQf8AakH//wNxQf8BbnIgBy0AASADbEH/AGpB//8DcUH/AW5BCHRyIActAAIgA2xB/wBqQf//A3FB/wFuQRB0cjYCACAGIAdqIQcgAUEEaiEBIABBf2oiAA0ACyAIIApqIQgLIAggCWohCCACIAtqIQEgBQ0ACwsLrwMAIAUEQCAALwEaIgAgBmwhAiAEQQhJIQMgB0ECdCEGA0AgBCEHIANFBEADQCABIAgoAAA2AgAgASAAIAhqIggoAAA2AgQgASAAIAhqIggoAAA2AgggASAAIAhqIggoAAA2AgwgASAAIAhqIggoAAA2AhAgASAAIAhqIggoAAA2AhQgASAAIAhqIggoAAA2AhggASAAIAhqIggoAAA2AhwgAUEgaiEBIAAgCGohCCAHQXhqIgdBB0sNAAsLIAVBf2ohBSAHQX9qIgdBBk0EQAJAAkACQAJAAkACQAJAIAdBAWsOBgUEAwIBAAYLIAEgCCgAADYCACAAIAhqIQggAUEEaiEBCyABIAgoAAA2AgAgACAIaiEIIAFBBGohAQsgASAIKAAANgIAIAAgCGohCCABQQRqIQELIAEgCCgAADYCACAAIAhqIQggAUEEaiEBCyABIAgoAAA2AgAgACAIaiEIIAFBBGohAQsgASAIKAAANgIAIAAgCGohCCABQQRqIQELIAEgCCgAADYCACAAIAhqIQggAUEEaiEBCyACIAhqIQggASAGaiEBIAUNAAsLC+0FAQ5/IwBBIGsiBiQAIAAoAjQhDiAAKAIQIQUCQCAAKAIAIggQ0AoQXCIJRQRAIAgoAvQEIAgoAgBBpbcIQQAQRwwBCyAJQQAgCBDQChDFAgJ/QQAgAC8BHEF/aiIEQQdLDQAaAkACQAJAAkAgBEEBaw4HAQIDAAECAwALQQAgAC8BHkF+aiIEQf//A3FBB08NAxogBEEQdEEQdUECdEGspSlqKAIADAMLQQAgAC8BHkF/aiIEQf//A3FBCE8NAhogBEEQdEEQdUECdEHIpSlqKAIADAILQQAgAC8BHkF/aiIEQf//A3FBCE8NARogBEEQdEEQdUECdEHopSlqKAIADAELQQAgAC8BHkF/aiIEQf//A3FBB08NABogBEEQdEEQdUECdEGIpilqKAIACyELIAYgBkEcajYCECAIQZYCIAZBEGoQ8QIgBiAGQRhqNgIEIAYgBkEaajYCACAIQZIEIAYQ8QJBASEHIAgQwSUhDAJAIANFDQBBACAFIAJrIgQgBCAFSxshD0EAIAJBAXRrQQAgC0EBcSINGyEQIANBf2pBACANGyEEQQAhBQJ/A0AgBigCHCEHIAYvARghCgJAIAggCCAAKAJMIAVqIhFBABDRCiAJIAMgBWsgByARIAdwayIHIAUgB2ogA0sbIgcgCiAHIApwIgprQQAgChtqIAAoAkwgBWogBigCHHBqIAxsENMKQX9KDQAgACgCBEUNAEEADAILIAAgASACIARsQQJ0akEAIAQgAiAHIA8gECAJIAAoAkwgBWogBigCHHAgDGxqIA4RDwBBACAHayAHIA0bIARqIQQgBSAHaiIFIANJDQALQQELIQcgC0ECcUUNAEEAIQQDQCABIAIgBGxBAnRqIgUgBSACQQJ0akF8aiIASQRAA0AgBSgCACEIIAUgACgCADYCACAAIAg2AgAgBUEEaiIFIABBfGoiAEkNAAsLIARBAWoiBCADRw0ACwsgCRA9CyAGQSBqJAAgBwvrBgEQfyMAQSBrIgYkACAAKAI0IQ8CQCAAKAIAIggQ7wUQXCILRQRAIAgoAvQEIAgoAgBBjZ4IQQAQRwwBCyALQQAgCBDvBRDFAiAGIAZBHGo2AhAgCEHCAiAGQRBqEKcBGiAGIAZBGGo2AgAgCEHDAiAGEKcBGgJ/AkAgAC8BHEF/aiIEQQdLDQACQAJ/AkACQAJAAkACQAJAIARBAWsOBwECAwABAgMACyAALwEeIgRBCEsNBkEBIAR0IgVBxABxBEBBAiEJDAgLQQMgBUGIAXENBRpBAUEBIAR0QZACcQ0FGgwGCyAALwEeIgRBCEsNBUEBIAR0IgVBInEEQEECIQkMBwtBASAFQYgBcQ0EGkEBIAR0QZACcUUNBUEDDAQLIAAvAR4iBEEISw0EQQNBASAEdCIFQSJxDQMaIAVBxABxDQFBAiEJQQEgBHRBkAJxRQ0EDAULIAAvAR4iBEEHSw0DQQEgBHQiBUEicQ0AIAVBxABxDQFBAiEJQQEgBHRBiAFxRQ0DDAQLQQEMAQtBAwshCUEAIAYoAhwgAmprIQ5BASESIANBf2oMAgtBACEJCyACIAYoAhxrIQ5BAAshDEEBIRAgAwRAQQAhBQNAIAMgBWsgBigCGCIEIAAoAkwiByAFaiAEcGsiBCAEIAVqIANLGyENAkAgAkUNACABIAIgDGxBAnRqIRFBACEEA0ACQCAIIAsgACgCUCAEaiAFIAdqQQAQ0gpBf0oNACAAKAIERQ0AQQAhEAwCCyAAKAJMIQcgBigCGCEKIAgQuQYgBSAHaiAKcGwhBwJAIAYoAhwiCiAEaiACSwRAIAAgESAEQQJ0aiAEIAwgAiAEayITIA0gCiATayIKIAogDmogByALaiAPEQ8ADAELIAAgESAEQQJ0aiAEIAwgCiANQQAgDiAHIAtqIA8RDwALIAYoAhwgBGoiBCACTw0BIAAoAkwhBwwAAAsAC0EAIA1rIA0gEhsgDGohDCAFIA1qIgUgA0kNAAsLIAsQPSAJQQJxRSADRXINAEEAIQcDQCABIAIgB2xBAnRqIgQgBCACQQJ0akF8aiIASQRAA0AgBCgCACEIIAQgACgCADYCACAAIAg2AgAgBEEEaiIEIABBfGoiAEkNAAsLIAdBAWoiByADRw0ACwsgBkEgaiQAIBALuhgCBX8BfSMAQYAEayIDJAAgAEIANwJMIABBADYCLCAAQgA3AiQgAEEEOwEeIABBADYCBCAAIAE2AgAgAyAAQRhqNgLQAyABQYICIANB0ANqEPECAkAgAC8BGCIFQRBNQQBBASAFdEGWggRxG0UEQCADIAU2AgAgAkGPhAEgAxDYAhoMAQsgAEEANgIMIAMgAEEaajYCwAMgAUGVAiADQcADahDxAiADIANB7ANqNgK0AyADIANB6gNqNgKwAyABQdICIANBsANqEPECAkAgAy8B6gNFDQAgAygC7AMvAQAiBEECSw0AAkACQCAEQQFrDgIBAQALIAAvARpBBEkNASAAQQE2AgwMAQsgACAENgIMCyADIABBIGoiBzYCoAMgAUGGAiADQaADahCnAUUEQCAAQQA7ASALIAAvARohBAJAIAMvAeoDIgYEQCAEIQUMAQtBBCEFQQAhBiAEQQRHBEAgBCEFDAELIAAvASBBAkcNAEEBIQYgAEEBNgIMIANBATsB6gMLIAMgA0HmA2o2ApADIAFBgwIgA0GQA2oQ8QIgAyADQegDajYCgAMgAUGcAiADQYADahDxAiADIAc2AvACIAVB//8DcSAGayEFAkACQAJAAkACQAJAAkACQAJAIAFBhgIgA0HwAmoQpwFFBEACQCAFQX9qIgRBAksNAAJAIARBAWsOAgEDAAsgAyADQfADajYCoAEgAUGDAiADQaABahCnARogAy8B8AMiBEF+akEDT0EAIARBg4ACRxtFBEAgAEEAOwEgDAoLIABBATsBIAwJCyADQZClKTYCECACQZXAASADQRBqENgCGkEAIQQMCgsgAC8BICIEQQhNDQEgBEG0/31qIgZBAUsNAiAGQQFrBEAgAy8B5gNB9I4CRwRAIANB9I4CNgK0AiADQYfBBDYCsAIgAkHWmAQgA0GwAmoQ2AIaQQAhBAwLCyADQQM2AqACIAFBmIAEIANBoAJqEJABGiAAQQE7ASAgAEEIOwEYDAkLIAMvAeYDQf7/A3FB9I4CRwRAIANC9I6CgNDuITcC5AIgA0GHwQQ2AuACIAJB/usEIANB4AJqENgCGkEAIQQMCgsgAy8B6AMiBEEBRwRAIAMgBDYC1AIgA0GRugU2AtACIAJB/5MFIANB0AJqENgCGkEAIQQMCgsgA0EDNgLAAiABQZiABCADQcACahCQARogAEECOwEgIABBCDsBGAwICyAAQQI7ASAMBwsgBEECaw4HAgQAAQMABgULIAMgBDYCtAEgA0GQpSk2ArABIAJBh+AFIANBsAFqENgCGkEAIQQMBgsgAyADQfADajYCkAIgAUHMAiADQZACahDxAiADLwHwAyIEQQFHBEAgAyAENgKEAiADQYDvAzYCgAIgAkGawAMgA0GAAmoQ2AIaQQAhBAwGCyAALwEaIgRBA0sNBCADIAQ2AvQBIANB0bQCNgLwASACQZrAAyADQfABahDYAhpBACEEDAULIAVBAkoNAyADIAU2AuQBIANB844DNgLgASACQdzgAiADQeABahDYAhpBACEEDAQLIAMvAegDQQFHDQIgAy8B5gNBB0cNAiADQQE2AtABIAFBgoAEIANB0AFqEJABGiAAQQI7ASAMAgsgAyADQdgDajYCyAEgAyADQdwDajYCxAEgAyADQeADajYCwAEgAUHAAiADQcABahCnAUUEQEEAIQQgAkGcgwYpAAA3ABggAkGUgwYpAAA3ABAgAkGMgwYpAAA3AAggAkGEgwYpAAA3AAAMAwsgAEECIAAvARh0IgQQXDYCJCAAIAQQXDYCKCAAIAQQXCIGNgIsAkAgACgCJCIHRSAGRXJFBEAgACgCKA0BC0EAIQQgAkHopgYpAAA3ABggAkHgpgYpAAA3ABAgAkHYpgYpAAA3AAggAkHQpgYpAAA3AAAMAwsgByADKALgAyAEENEBIAAoAiggAygC3AMgBBDRASAAKAIsIAMoAtgDIAQQ0QELIAMvAegDQQFHDQAgAC8BGiIEQQFGDQAgAC8BGCIGQQdLDQAgAC8BICEAIAMgBjYCkAEgAyAENgKMASADQdG0AjYCiAEgAyAANgKEASADQZClKTYCgAEgAkGJgAIgA0GAAWoQ2AIaQQAhBAwBCyAAQgA3AjggAEEANgJIIABBQGtCADcCACADIABBEGo2AnAgAUGAAiADQfAAahCnARogAyAAQRRqNgJgIAFBgQIgA0HgAGoQpwEaIAMgAEEcajYCUCABQZICIANB0ABqEPECIAAgAy8B6ANBAkcgBUECSHIiBDYCCCAAKAIAENsMIQEgBARAIABBADYCNCAAQcQFQcUFIAEbNgIwAkAgAC8BICIBQQhLDQACQAJAAkACQAJAAkACQCABQQJrDgcAAgcBBAcFAwsgAC8BGEF4aiIBQQhLDQUCQAJAIAFBAWsOCAcHBwcHBwcBAAsgACgCDEF/aiIBQQFNBEAgAUEBawRAIABBxgU2AjQMCAsgAEHHBTYCNAwHCyAAQcgFNgI0DAYLIAAoAgxBf2oiAUEBTQRAIAFBAWsEQCAAQckFNgI0DAcLIABBygU2AjQMBgsgAEHLBTYCNAwFCyAAEOEMRQ0EIAAvARhBCEcNBCAAKAI4RQRAIABBzAU2AjQMBQsgAEHNBTYCNAwECyAAEOEMRQ0DIAAvARhBf2oiAUEHSw0DAkACQAJAAkAgAUEBaw4HAgcBBwcHAAMLIABBzgU2AjQMBgsgAEHPBTYCNAwFCyAAQdAFNgI0DAQLIABB0QU2AjQMAwsgABDhDEUNAiAALwEYQX9qIgFBD0sNAgJAAkACQAJAAkAgAUEBaw4PAwcCBwcHAQcHBwcHBwcABAsgAEHSBTYCNAwGCyAAQdMFNgI0DAULIABB1AU2AjQMBAsgAEHVBTYCNAwDCyAAQdYFNgI0DAILIAAvARhBCEcNASAAEMAWRQ0BIAAoAgAhASADIANB/ANqNgIkIAMgA0HwA2o2AiAgAUGSBCADQSBqEPECIAMvAfwDIAMvAfADQQR0ckFvaiIBQTNLDQFB1wUhBAJAAkACQAJAAkACQAJAIAFBAWsOMwQICAgICAgICAgICAgICAMCCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAQAIBgULIABB2AU2AjQMBwsgAEHZBTYCNAwGCyAAQdoFNgI0DAULIABB2wU2AjQMBAsgAEHcBTYCNAwDC0HdBSEECyAAIAQ2AjQMAQsgABDhDEUNACAALwEYQQhHDQAgAAJ/AkAgACgCSA0AIABBzI0BEFwiATYCSCABDQAgACgCACgC9ARBwPYsQZC5CUEAEEdBAAwBCyAAKAIAIQEgAyADQfwDajYCMCABQb4CIANBMGoQ8QIgA0GAgKCWBDYC9AMgAyADKAL8AyIBKgIAIAEqAgQiCJVDAADIQpQ4AvADIANDAACAPyABKgIAkyAIkyAIlUMAAMhClDgC+ANB3gUgACgCSCADQfADahCGJ0F/Sg0AGiAAKAIAKAL0BEHA9ixBqMsJQQAQRyAAKAJIED1BAAs2AjQLIAAoAjBFDQBBASEEIAAoAjQNAgtBACEEIAJB38YGKAAANgAYIAJB18YGKQAANwAQIAJBz8YGKQAANwAIIAJBx8YGKQAANwAADAELIABBADYCNCAAQd8FQeAFIAEbNgIwAkAgAC8BIEF+aiIBQQRLDQACQAJAAkAgAUEBaw4EAwMDAQALIAAvARhBeGoiAUEISw0BAkACQCABQQFrDggDAwMDAwMDAQALIAAoAgxBf2oiAUEBTQRAIAFBAWsEQCAAQeEFNgI0DAQLIABB4gU2AjQMAwsgAEHjBTYCNAwCCyAAKAIMQX9qIgFBAU0EQCABQQFrBEAgAEHkBTYCNAwDCyAAQeUFNgI0DAILIABB5gU2AjQMAQsgAC8BGEEIRw0AIAAvARpBA0cNACAAEMAWRQ0AIAAoAgAhASADIANB/ANqNgJEIAMgA0HwA2o2AkAgAUGSBCADQUBrEPECIAMvAfwDIAMvAfADQQR0ckERRw0AIABB5wU2AjQLIAAoAjBFDQBBASEEIAAoAjQNAQtBACEEIAJB38YGKAAANgAYIAJB18YGKQAANwAQIAJBz8YGKQAANwAIIAJBx8YGKQAANwAACyADQYAEaiQAIAQLsgEBBX8jAEEQayIDJAAgABBiIAEoAgAQvxYhBAJAAkAgABDkAiIFRQ0AIAAgBCAFEPkBIgYQYSgCACICRQ0AIAIoAgAiAkUNAANAIAQgAigCBEcEQCACKAIEIAUQ+QEgBkcNAgsCQCAEIAIoAgRHDQAgABBMIAJBCGogARDTA0UNACADQQhqIAIQwAEoAgAhAgwDCyACKAIAIgINAAsLIAMQ9QciAjYCCAsgA0EQaiQAIAILiQEBAX8gACgCOCIBBEAgARA9IABBADYCOAsgACgCPCIBBEAgARA9IABBADYCPAsgACgCQCIBBEAgARA9IABBADYCQAsgACgCRCIBBEAgARA9IABBADYCRAsgACgCSCIBBEAgARA9IABBADYCSAsgACgCJCIBBEAgARA9IAAoAigQPSAAKAIsED0LC8wGAQR/IwBB0AFrIgIkAAJAIAAoAoAERQRAIAFB/MYAKQAANwAuIAFB9sYAKQAANwAoIAFB7sYAKQAANwAgIAFB5sYAKQAANwAYIAFB3sYAKQAANwAQIAFB1sYAKQAANwAIIAFBzsYAKQAANwAADAELAkAgAC8BVCIDQRBNQQBBASADdEGWggRxG0UEQCACIAM2AgAgAUGPhAEgAhDYAhoMAQsgAC8BYiAALwGoAWshBCACIAJBzgFqNgLAAQJAAkACQAJAAkACQAJAAkAgAEGGAiACQcABahCnAUUEQAJAIARBf2oiA0ECSw0AAkAgA0EBaw4CAQADCyACQQI7Ac4BQQEhAwwLCyACQZClKTYCECABQZXAASACQRBqENgCGgwJCyACLwHOASIFQQhNDQMgBUG0/31qIgNBAUsNBCADQQFrDQEMAgtBASEFIAJBATsBzgEMBgtBASEDIAAvAVhB9I4CRg0HIAJB9I4CNgKUASACQYfBBDYCkAEgAUHWmAQgAkGQAWoQ2AIaDAYLIAAvAVhB/v8DcUH0jgJHBEAgAkL0joKA0O4hNwK0ASACQYfBBDYCsAEgAUH+6wQgAkGwAWoQ2AIaDAYLQQEhAyAALwGKASIAQQFGDQYgAiAANgKkASACQZG6BTYCoAEgAUH/kwUgAkGgAWoQ2AIaDAULQQEhAyAFQQJrDgcCAwABBQAFAwsgAiAFNgJEIAJBkKUpNgJAIAFBh+AFIAJBQGsQ2AIaDAMLIAIgAkHMAWo2AoABIABBzAIgAkGAAWoQ8QIgAi8BzAEiA0EBRwRAIAIgAzYCdCACQYDvAzYCcCABQZrAAyACQfAAahDYAhoMAwsgAC8BYiIAQQNNBEAgAiAANgJkIAJB0bQCNgJgIAFBmsADIAJB4ABqENgCGgwDC0EBIQMMAwsgBEECSg0CIAIgBDYCVCACQfOOAzYCUCABQdzgAiACQdAAahDYAhoMAQtBASEDIAAvAYoBQQFHDQEgAC8BYiIEQQFGDQEgAC8BVCIAQQdLDQEgAiAANgIwIAIgBDYCLCACQdG0AjYCKCACIAU2AiQgAkGQpSk2AiAgAUGJgAIgAkEgahDYAhoLQQAhAwsgAkHQAWokACADC/YGAw5/Cn0BfCAAQRhqQQBBgAIQxQIgACAAQZgCaiIDNgIAA0AgAyAEaiAEOgAAIARBAWoiBEGAAkcNAAsgA0GAAmpB/wFBgAQQxQIgACADQYAmaiIFNgIUIAAgA0GAHmoiBjYCECAAIANBgBZqIgc2AgwgACADQYAOaiIINgIIIAAgA0GABmoiCTYCBCACKgIMIRUgAioCEEMAAADDkiESIAIqAhQhFiACKgIAIRQgAioCBCEZAn8gAioCCEMAAADDkiITi0MAAABPXQRAIBOoDAELQYCAgIB4CyEKAn8gEotDAAAAT10EQCASqAwBC0GAgICAeAshCwJ/QwAAAEAgASoCCCIRIBGSkyIXQwAAgEeUu0QAAAAAAADgP6AiG5lEAAAAAAAA4EFjBEAgG6oMAQtBgICAgHgLIQwCf0MAAABAIAEqAgAiGCAYkpMiGkMAAIBHlLtEAAAAAAAA4D+gIhuZRAAAAAAAAOBBYwRAIBuqDAELQYCAgIB4CyENIBVDAAAAw5IhFSAWQwAAAMOSIRYCfyARIBeUIAEqAgQiF5VDAACAR5S7RAAAAAAAAOA/oCIbmUQAAAAAAADgQWMEQCAbqgwBC0GAgICAeAshDiAVIBOTIRMgFiASkyESIBkgFJMhEQJ/IBggGpQgF5VDAACAR5S7RAAAAAAAAOA/oCIbmUQAAAAAAADgQWMEQCAbqgwBC0GAgICAeAshDyATQwAAAABcIQAgEkMAAAAAXCEBIBFDAAAAAFwhAgJ/IBSLQwAAAE9dBEAgFKgMAQtBgICAgHgLIRAgE0MAAIA/IAAbIRQgEkMAAIA/IAEbIRIgEUMAAIA/IAIbIRNBgH8hBEEAIQADQCAJIABBAnQiA2ogDQJ/IAQgC2uyQwAA/kKUIBKVIhGLQwAAAE9dBEAgEagMAQtBgICAgHgLIgJsQYCAAmpBEHU2AgAgAyAIaiAMAn8gBCAKa7JDAAD+QpQgFJUiEYtDAAAAT10EQCARqAwBC0GAgICAeAsiAWxBgIACakEQdTYCACADIAdqQQAgAiAPbGs2AgAgAyAGakGAgAIgASAObGs2AgAgAyAFagJ/IAQgEGtBgAFqskMAAH9DlCATlSIRi0MAAABPXQRAIBGoDAELQYCAgIB4CzYCACAEQQFqIQQgAEEBaiIAQYACRw0AC0EAC/cCAwN/An0CfCAAQdwLNgIAIABBHGpByPUsQdQAENEBIAAgAEFAayoCACAAKgJYkyAAKAIAIgOylSIFOAIEAkAgA0F/TARAIAAgBTgCDCAAIAU4AggMAQtEAAAAAAAA8D8gACoCZLujIQcgACgCTLMhBiADtyEIA0AgACACQQJ0aiACtyAIoyAHEKMCtiAGlDgCcCACIANHIQQgAkEBaiECIAQNAAsgACAFOAIIRAAAAAAAAPA/IAAqAmi7oyEHIAAoAlCzIQZBACECA0AgACACQQJ0akHkL2ogArcgCKMgBxCjArYgBpQ4AgAgAiADRyEEIAJBAWohAiAEDQALIAAgBTgCDEQAAAAAAADwPyAAKgJsu6MhByAAKAJUsyEFQQAhAgNAIAAgAkECdGpB2N4AaiACtyAIoyAHEKMCtiAFlDgCACACIANHIQQgAkEBaiECIAQNAAsLIAAgASgCADYCECAAIAEoAgQ2AhQgACABKAIINgIYQQALugUDAn8KfQF8An9EAAAAAAAA4D9EAAAAAAAA4L8gACAAKAIAIggCfyAAKgIcIAGUIAAqAiAgApSSIAAqAiQgA5SSIgkgACoCWCIKIAkgCl4bIgkgAEFAayoCACIMIAkgDF0bIAqTIAAqAgSVIgqLQwAAAE9dBEAgCqgMAQtBgICAgHgLIgcgCCAHSBtBAnRqKgJwIgpDAAAAAF4bIAq7oCITRAAAAAAAAPBBYyATRAAAAAAAAAAAZnEEQCATqwwBC0EACyEHIAAqAkghDCAAKgJgIQogACoCPCEOIAAqAjQhDyAAKgI4IRAgACoCRCENIAAqAlwhCSAAKgIwIQsgACoCKCERIAAqAiwhEiAEIAc2AgAgBQJ/RAAAAAAAAOA/RAAAAAAAAOC/IAAgACgCACIIAn8gESABlCASIAKUkiALIAOUkiILIAkgCyAJXhsiCyANIAsgDV0bIAmTIAAqAgiVIgmLQwAAAE9dBEAgCagMAQtBgICAgHgLIgcgCCAHSBtBAnRqQeQvaioCACIJQwAAAABeGyAJu6AiE0QAAAAAAADwQWMgE0QAAAAAAAAAAGZxBEAgE6sMAQtBAAs2AgAgBgJ/RAAAAAAAAOA/RAAAAAAAAOC/IAAgACgCACIIAn8gDyABlCAQIAKUkiAOIAOUkiIBIAogASAKXhsiASAMIAEgDF0bIAqTIAAqAgyVIgGLQwAAAE9dBEAgAagMAQtBgICAgHgLIgcgCCAHSBtBAnRqQdjeAGoqAgAiAUMAAAAAXhsgAbugIhNEAAAAAAAA8EFjIBNEAAAAAAAAAABmcQRAIBOrDAELQQALNgIAIAQgBCgCACIEIAAoAkwiByAEIAdJGzYCACAFIAUoAgAiBCAAKAJQIgUgBCAFSRs2AgAgBiAGKAIAIgQgACgCVCIAIAQgAEkbNgIAC4QCAQN9AkAgAbNDAADIQpRDAAB/Q5UiB0Mtsg1BXUEBc0UEQCAFIAcgACoCFJRDsNJhRJUiBzgCACAHIAAqAhSVQxsv+UCUQ8s9DT6SIQcMAQsgBSAHQwAAgEGSQwAA6EKVIgcgByAHIAAqAhSUlJQ4AgALIAAqAhAhCSAEAn0gArJDAAD6Q5UgB5IiCEOY3VM+XUEBc0UEQCAJIAhDhj0NvpKUQxsv+UCVDAELIAggCCAJIAiUlJQLOAIAIAAqAhghCCAHIAOyQwAASMOVkiIHQ5jdUz5dQQFzRQRAIAYgB0OGPQ2+kiAIlEMbL/lAlTgCAA8LIAYgByAHIAcgCJSUlDgCAAtAAQJ/AkAgACgCDCICQcAAcUUNACACQYAgcQRAIAAgAkH/X3E2AgwgACAAKAKYBBEBAEUNAQsgABDxASEBCyABC1oBAX8CQCAAKAIIRQ0AIAAoAgwiAUHAAHFFDQAgAUGAIHEEQCAAIAFB/19xNgIMIAAgACgCmAQRAQBFDQELIAAQ8QFFDQAgAC0ADEEIcUUNACAAEIsnRQ0ACwu/OQIVfwF8IwBBkAZrIgEkAAJ/QQEgACgCCEUNABoCQCAAKAIMIgJBgCBxRQ0AIAAgAkH/X3E2AgwgACAAKAKYBBEBAA0AIAAoAvQEIAAoAgBBprQCQQAQR0EADAELIAAgACgCtAQRAAACQCAAKALgBEEBSA0AIAAtAAxBwABxRQ0AIAAQ8QENACAAKAL0BCAAKAIAQbHgAkEAEEdBAAwBCwJAIAAoAgwiBEGABHFFDQAgACgC1AQiAkUNACACED0gAEEANgLgBCAAQgA3AtQEIAAoAgwhBAsgACAEQa9/cTYCDEEAIQQDQEECQQEgBEEFSRtBACAAIARBA3ZB/P///wFxaigCKCAEQR9xdkEBcRtBACAEQcEARxsgCWohCSAEQQFqIgRBgAFHDQALIAAoAuwBIAlqIgxBDGwiDRBcIgtFBEAgACgC9AQgACgCAEHOjgNBABBHQQAMAQsCQCAAIAAoAhAiAgR/IAIFIAAgACgC9ARBAEECIAAoAoAFEQQAQQFqQX5xIgI2AhAgASACNgLwBAJAAkAgACgCDCICQYABcQR/IAFB8ARqEIkHIAAoAgwFIAILQYDAAHEEQCAAKAL0BCAAKALwA0EAIAAoAoAFEQQAGiAAKAL0BCABQfAEakEEIAAoAvwEEQQAQQRHBEAgACgC9AQhAiABIAAoAgA2AsAEIAJB8KQpQa6YBCABQcAEahBHDAULIAAgAC8B7ANBf2oiAjsB7AMgAkH//wNxRQ0BIAAgACgC8ANBBGo2AvADDAILIAAoAswDIgRFBEAgACAAKAIQNgLMAyAAKAL0BEEEQQAgACgCgAURBAAaIAAoAvQEIAFB8ARqQQQgACgC/AQRBABBBEYNAiAAKAL0BCAAKAIAQe3ABEEAEEcMBAsgASAENgLABQNAAkAgACgC9AQgBEEAIAAoAoAFEQQAIAEoAsAFRgRAIAAoAvQEIAFB0ARqQQIgACgC+AQRBABBAkYNAQsgACgC9ARB8KQpQfCDAUEAEEcMBQsgAC0ADEGAAXEEQCABQdAEahCKBwsgACgC9AQgAS8B0ARBDGxBASAAKAKABREEABogACgC9AQgAUHABWpBBCAAKAL4BBEEAEEERwRAIAAoAvQEQfCkKUH3vwFBABBHDAULIAAtAAxBgAFxBEAgAUHABWoQiQcLIAEoAsAFIgQNAAsgACgC9ARBAEEBIAAoAoAFEQQAIQIgACgC9AQgAkF8akEAIAAoAoAFEQQAGiAAKAL0BCABQfAEakEEIAAoAvwEEQQAQQRGDQEgACgC9ARB8KQpQez/AUEAEEcMAwsgACAAKAIMQf+/f3E2AgwLIAAoAhALIA1BAnJqIgJBBWogAkEEaiICIAJBAXEbIgI2AugDIAAoAvQEIAJBACAAKAKABREEABogACAALwHcA0EBajsB3AMgAUHQBGogAEEoakEQENEBAkAgASgC0AQiAkF/Sg0AIAAvAagBDQAgASACQf////8HcTYC0AQgDUF0aiENIAxBf2ohDAsgACgClAUiEEEBTgRAIABBkAFqIREgAEGMAWohEiAAQYQBaiETIABBgAFqIRRBAiALayEVIAFBwgVqIQ4gCyECA0ACQAJAIAAoApAFIA9BAnRqKAIAIggvAQwiCkHBAEYEQCAAKALsASIFQQFIDQIgACgC8AEhA0EAIQlBACEEA0AgCSADIARBDGxqKAIAIAhGciEJIARBAWoiBCAFRw0ACyAJDQEMAgsgAUHQBGogCkEDdkH8P3FqKAIAIApBH3F2QQFxRQ0BCwJAAkACQAJAAkACQCAKQX9qIgNBMEsNAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIANBAWsOMAUJCBAKBgcQEBAQEBAQEAIKChAQEAwBAAMQEBAQEAoLCxAQDBAMEBAQEA4QDRAQDwQLQcQCQZECIAAtAA1BBHEbIgMgCCgCAEcNFSACQQQ7AQIgAiADOwEAIAIgACgCtAEiAzYCBCAAKAK4ASEEIANBAUcNECACIAQoAgA2AggMFAtBxQJBlwIgAC0ADUEEcRsiAyAIKAIARw0UIAJBBDsBAiACIAM7AQAgAiAAKAK0ASIDNgIEIAAoArwBIQQgA0EBRgRAIAIgBCgCADYCCAwUCyAAIAIgBBDZAg0TDBcLIAAoAmQhAyACQQE2AgQgAkGWAjsBACADQYCABE8EQCACIAM2AgggAkEEOwECDBMLIAJBAzsBAiAAKALUAygCDCADcSEDIAIgAC8ByANBzZoBRgR/IAMgACgC0AMoAgx0BSADCzYCCAwSCyACQcCCDDYCACACQQEgAC8BVHQ2AgQgACgC6AMhAyAAIAIgACgCmAEQ2QJFDRUgACACIAAoApwBENkCRQ0VIAAgAiAAKAKgARDZAkUNFSACIAM2AgggAiACKAIEQQNsNgIEDBELIAAoAjghBCACQQE2AgQgAkGAAjsBAAJAIARBgIAETwRAIAJBBDsBAgwBCyACQQM7AQIgACgC1AMoAgwgBHEhBCAALwHIA0HNmgFHDQAgBCAAKALQAygCDHQhBAsgAkEMaiEDIAIgBDYCCCAAKAI8IQQgAkEBNgIQIAJBgQI7AQwgBEGAgARPBEAgAkEEOwEOIAIgBDYCFCADIQIMEQsgAkEDOwEOIAAoAtQDKAIMIARxIQQgAiAALwHIA0HNmgFGBH8gBCAAKALQAygCDHQFIAQLNgIUIAMhAgwQCyAAKAJEIQQgAkEBNgIEIAJBwgI7AQACQCAEQYCABE8EQCACQQQ7AQIMAQsgAkEDOwECIAAoAtQDKAIMIARxIQQgAC8ByANBzZoBRw0AIAQgACgC0AMoAgx0IQQLIAJBDGohAyACIAQ2AgggACgCSCEEIAJBATYCECACQcMCOwEMIARBgIAETwRAIAJBBDsBDiACIAQ2AhQgAyECDBALIAJBAzsBDiAAKALUAygCDCAEcSEEIAIgAC8ByANBzZoBRgR/IAQgACgC0AMoAgx0BSAECzYCFCADIQIMDwsgAC8BWCEDIAJCg4KMgBA3AgAgAyAAKALUAygCDHEhAyACIAAvAcgDQc2aAUYEfyADIAAoAtADKAIMdAUgAws2AggMDgsgAC8BWiEDIAJChoKMgBA3AgAgAyAAKALUAygCDHEhAyACIAAvAcgDQc2aAUYEfyADIAAoAtADKAIMdAUgAws2AggMDQsgAkKegpSAEDcCACAAIAIgEhD2B0UNECACQp+ClIAQNwIMIAAgAkEMaiICIBEQ9gcNDAwQCyACQpqClIAQNwIAIAAgAiAUEPYHRQ0PIAJCm4KUgBA3AgwgACACQQxqIgIgExD2Bw0LDA8LIAgoAgAhAwJAAkAgAC8BYiIFQQtPBEAgBUEBdBBcIgYEQCABIAFB8ARqNgLwAyAAIAMgAUHwA2oQpwEaDAILIAAoAvQEIAAoAgBB498FQQAQRwwRCyABIAFB8ARqNgKABCAAIAMgAUGABGoQpwEaIAFBwAVqIQYgBUUNAQtBACEEA0AgBiAEQQF0aiABLwHwBDsBACAEQQFqIgQgBUcNAAsLIAIgBTYCBCACQQM7AQIgAiADOwEAAkAgBUECTQRAIAYvAQAhAyAALwHIA0HNmgFGBEAgAiADQRB0IgM2AghBASEEIAVBAkcNAiACIAMgBi8BAnI2AggMAgsgAiADNgIIQQEhBCAFQQJHDQEgAiAGLwECQRB0IANyNgIIDAELIAAgAiAGENkCIQQLIAFBwAVqIAZHBEAgBhA9CyAEDQoMDgsgABCoJyEKIAgoAgAhAyAALwFiIgdBC08EQCAHQQN0EFwiBgRAIAEgAUHoBGo2ApAEIAAgAyABQZAEahCnARoMCQsgACgC9AQgACgCAEHgggZBABBHDA4LIAEgAUHoBGo2AqAEIAAgAyABQaAEahCnARogAUHwBGohBiAHDQdBASEJDAgLIAgoAgAhAyABIA42ArQEIAEgAUHABWo2ArAEIAAgAyABQbAEahCnARogAkECNgIEIAJBAzsBAiACIAM7AQAgAS8BwAUhAyAALwHIA0HNmgFGBEAgAiABLwHCBSADQRB0cjYCCAwJCyACIAEvAcIFQRB0IANyNgIIDAgLIAJBzYIINgIAIAIgACgC5AE2AgQgACACIAAoAugBEIsHDQcMCwtBAiAALwFUdCEEAn8CQAJAIAAvAWIgAC8BqAFrIgNBAk0EQCADQQJrDQIMAQtBAyAAKALYASAAKALgASAEEKEWDQIaC0EDIAAoAtgBIAAoAtwBIAQQoRYNARoLQQELIQUgAkGtggw2AgAgAkEBIAAvAVR0NgIEIAAoAugDIQNBACEEA0AgACACIAAgBEECdGooAtgBENkCRQ0LIARBAWoiBCAFRw0ACyACIAM2AgggAiACKAIEIAVsNgIEDAYLIAgoAgAhAyACQQQ7AQIgAiADOwEAIAIgAC8BxAEiBDYCBCAAKALIASEDIARBAUYEQCACIAMoAgA2AgggACAEOwHsAyAAIAAoAgxBgMAAcjYCDAwDCyAAIAIgAxDZAkUNCSACKAIEIgNFDQUgACADOwHsAyAAIAAoAgxBgMAAcjYCDCADQQFGDQIgACACKAIINgLwAwwFCyAIKAIAIgVB0AJGBEAgASAONgIEIAEgAUHABWo2AgAgAEHQAiABEKcBGiACQtCCjIAgNwIAIAEvAcAFIQMgAC8ByANBzZoBRgRAIAIgAS8BwgUgA0EQdHI2AggMBgsgAiABLwHCBUEQdCADcjYCCAwFCyABIAgvAQYiBDsB6AQgAiAFOwEAIAgoAgghAyACIAQ2AgQgAiADOwECIANBf2oiA0EMSw0EAkACQAJAAkACQAJAAkACQAJAIANBAWsODAUAAQIGBwABAgMEAQYLIAgtAA8EQCACAn8gBEH9/wNGBEAgASABQcAFajYCNCABIAFB8ARqNgIwIAAgBSABQTBqEKcBGiABKALwBAwBCyABIAFBwAVqNgJEIAEgAUHoBGo2AkAgACAFIAFBQGsQpwEaIAEvAegECyIENgIEIAEoAsAFIQUgBEECTQRAIAUvAQAhAyAALwHIA0HNmgFGBEAgAiADQRB0IgM2AgggBEECRw0PIAIgAyAFLwECcjYCCAwPCyACIAM2AgggBEECRw0OIAIgBS8BAkEQdCADcjYCCAwOCyAAIAIgBRDZAg0NDBELIARBAUYEQCABIAFBwAVqNgIQIAAgBSABQRBqEKcBGiACLwECQQJ0IgMgACgC1ANqKAIAIAEvAcAFcSEEIAIgAC8ByANBzZoBRgR/IAQgACgC0AMgA2ooAgB0BSAECzYCCAwNCyABIAFBwAVqNgIgIAAgBSABQSBqEKcBGiABKALABSEFIAIoAgQiBEECTQRAIAUvAQAhAyAALwHIA0HNmgFGBEAgAiADQRB0IgM2AgggBEECRw0OIAIgAyAFLwECcjYCCAwOCyACIAM2AgggBEECRw0NIAIgBS8BAkEQdCADcjYCCAwNCyAAIAIgBRDZAg0MDBALIAgtAA8EQCACAn8gBEH9/wNGBEAgASABQcAFajYCdCABIAFB8ARqNgJwIAAgBSABQfAAahCnARogASgC8AQMAQsgASABQcAFajYChAEgASABQegEajYCgAEgACAFIAFBgAFqEKcBGiABLwHoBAsiAzYCBCABKALABSEEIANBAUYEQCACIAQoAgA2AggMDQsgACACIAQQ2QINDAwQCyAEQQFGBEAgASACQQhqNgJQIAAgBSABQdAAahCnARoMDAsgASABQcAFajYCYCAAIAUgAUHgAGoQpwEaIAEoAsAFIQMgAigCBEEBRgRAIAIgAygCADYCCAwMCyAAIAIgAxDZAg0LDA8LIAgtAA8EQCACAn8gBEH9/wNGBEAgASABQcAFajYCtAEgASABQfAEajYCsAEgACAFIAFBsAFqEKcBGiABKALwBAwBCyABIAFBwAVqNgLEASABIAFB6ARqNgLAASAAIAUgAUHAAWoQpwEaIAEvAegECzYCBCAAIAIgASgCwAUQ9gcNCwwPCyAEQQFHDQUgASABQcAFajYCkAEgACAFIAFBkAFqEKcBGiAAIAIgAUHABWoQ9gcNCgwOCyAILQAPBEAgAgJ/IARB/f8DRgRAIAEgAUHABWo2AvQBIAEgAUHwBGo2AvABIAAgBSABQfABahCnARogASgC8AQMAQsgASABQcAFajYChAIgASABQegEajYCgAIgACAFIAFBgAJqEKcBGiABLwHoBAsiAzYCBCABKALABSEEIANBAUYEQCACIAQoAgA2AggMCwsgACACIAQQ2QINCgwOCyAEQQFGBEAgASABQcAFajYC0AEgACAFIAFB0AFqEKcBGiACKAIEQQFGBEAgAiABKALABTYCCAwLCyAAIAIgAUHABWoQ2QINCgwOCyABIAFBwAVqNgLgASAAIAUgAUHgAWoQpwEaIAEoAsAFIQMgAigCBEEBRgRAIAIgAygCADYCCAwKCyAAIAIgAxDZAg0JDA0LIAgtAA8EQCACAn8gBEH9/wNGBEAgASABQcAFajYCtAIgASABQfAEajYCsAIgACAFIAFBsAJqEKcBGiABKALwBAwBCyABIAFBwAVqNgLEAiABIAFB6ARqNgLAAiAAIAUgAUHAAmoQpwEaIAEvAegECzYCBCAAIAIgASgCwAUQ2QINCQwNCyAEQQFGBEAgASABQcAFajYCkAIgACAFIAFBkAJqEKcBGiAAIAIgAUHABWoQ2QINCQwNCyABIAFBwAVqNgKgAiAAIAUgAUGgAmoQpwEaIAAgAiABKALABRDZAg0IDAwLAkAgCC0ADwRAIARB/f8DRgRAIAEgAUHABWo2AuQCIAEgAUHwBGo2AuACIAAgBSABQeACahCnARoMAgsgASABQcAFajYC9AIgASABQegEajYC8AIgACAFIAFB8AJqEKcBGgwBCyABIAFBwAVqNgLQAiAAIAUgAUHQAmoQpwEaCyACIAEoAsAFIgMQckEBajYCBCAAIAIgAxCLBw0HDAsLIAgtAA8EQCACAn8gBEH9/wNGBEAgASABQcAFajYCpAMgASABQfAEajYCoAMgACAFIAFBoANqEKcBGiABKALwBAwBCyABIAFBwAVqNgK0AyABIAFB6ARqNgKwAyAAIAUgAUGwA2oQpwEaIAEvAegECzYCBCAAIAIgASgCwAUQiwcNBwwLCyAEQQFGBEAgASABQcAFajYCgAMgACAFIAFBgANqEKcBGiAAIAIgAUHABWoQiwcNBwwLCyABIAFBwAVqNgKQAyAAIAUgAUGQA2oQpwEaIAAgAiABKALABRCLBw0GDAoLAkACQCAEQYOAfGoiA0ECSw0AAkACQCADQQFr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AkACQAJAAkACQAJAAkACQCABQQFrDgwJAgQGAQADBQYGBwQACyACKAIAIAAtAAA6AAAMBwsgAigCACAALQAAOgAADAYLIAIoAgAgAC8BADsBAAwFCyACKAIAIAAvAQA7AQAMBAsgAigCACAAKAIANgIADAMLIAIoAgAgACgCADYCAAwCCyACKAIAIAAoAgA2AgAMAQsgAigCACAAKQMANwMACyACQQRqIQJBASEDCyAIKAIAKAIIEMcWIQEgBkEBaiIGIAQoAgRODSYgACABaiEAIAUoAgghAQwAAAsACyACKAIAIAQgAEEMbGooAgg2AgBBASEDDCQLIAIoAgAgACgC6AE2AgBBASEDDCMLIAIoAgAgACgC1AE2AgBBASEDDCILIAIoAgAgACgC2AE2AgBBASEDIAAvAWIgAC8BqAFrQQJIDSEgAigCBCAAKALcATYCACACKAIIIAAoAuABNgIADCELIAIoAgAgAC8BzAE7AQAgAigCBCAALwHOATsBAEEBIQMMIAsgAigCACAALwHQATsBAEEBIQMMHwsgAigCACAALwHEATsBACACKAIEIAAoAsgBNgIAQQEhAwweCyACKAIAIAAvAVY7AQBBASEDDB0LIAIoAgAgACgCSDYCAEEBIQMMHAsgAigCACAAKAJENgIAQQEhAwwbCyACKAIAIAAvAagBOwEAIAIoAgQgACgCrAE2AgBBASEDDBoLIAIoAgAgACgCvAE2AgBBASEDDBkLIAIoAgAgACgCuAE2AgBBASEDDBgLIAIoAgAgACgCmAE2AgAgAigCBCAAKAKcATYCACACKAIIIAAoAqABNgIAQQEhAwwXCyACKAIAIAAvAaQBOwEAIAIoAgQgAC8BpgE7AQBBASEDDBYLIAIoAgAgAC8BlAE7AQAgAigCBCAALwGWATsBAEEBIQMMFQsgAigCACAALwGIATsBAEEBIQMMFAsgAigCACAAKAKQATYCAEEBIQMMEwsgAigCACAAKAKMATYCAEEBIQMMEgsgAigCACAALwGKATsBAEEBIQMMEQsgAigCACAAKAKEATYCAEEBIQMMEAsgAigCACAAKAKAATYCAEEBIQMMDwsgAigCACAAKQN4NwMAQQEhAwwOCyACKAIAIAApA3A3AwBBASEDDA0LIAIoAgAgAC8BajsBAEEBIQMMDAsgAigCACAALwFo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EIYoRQ0AIABBAToA7AQgACgC0AEiAUGAgIADcUGAgIACRgR/IABBhb0DEFsgACgC0AEFIAELQYCAgANxQYCAgAFHDQAgAEGFvQMQlQELAkAgACgC0AEiAUGAgAFxRQ0AIAAtAMkBQQhxDQAgAEHgAmogACgCzAJBAWoQ9hYgACgC0AEhAQsCQCABQYABcUUNACAALwH6AkUEQCAALQCGA0EEcUUNAQsgAEHgAmogACgCzAJBAWogAEHsA2ogAEGYA2ogAEGiA2ogACgCxAMgACgCyAMgACgCzAMgACgC0AMgACgC1AMgACgC2AMgACgCuAMQhSggACgC0AEhAQsCQCABQYDAAHFFDQACQCABQYABcUUEQCAALQCGAyECDAELIAAvAfoCDQEgAC0AhgMiAkEEcQ0BCyACQf8BcUEDRg0AIABB4AJqIAAoAswCQQFqIAAoAsQDIAAoAtADIAAoArgDEIQoIAAoAtABIQELAkAgAUGACHFFDQAgAC0A6QJBEEcNAEEAIQMgAC0A6gIiAiAAKALgAmwiBARAIAAoAswCQQFqIgEhAgNAIAIgAS0AADoAACACQQFqIQIgAUECaiEBIANBAWoiAyAERw0ACyAALQDqAiICIAAoAuACbCEDIAAoAtABIQELIABBCDoA6QIgACACQQN0OgDrAiAAIAM2AuQCCwJAIAFBwABxRQ0AIABB4AJqIAAoAswCQQFqIAAoAswEIAAoAtAEEIMoIAAoAuQCDQAgAEGf7AMQlQELAn8CfwJ/An8gACgC0AEiAUEgcQRAIABB4AJqIAAoAswCQQFqENcWIAAoAtABIQELIAFBCHELBEAgAEHgAmogACgCzAJBAWogAEHhA2oQgiggACgC0AEhAQsgAUEEcQsEQCAAQeACaiAAKALMAkEBahCBKCAAKALQASEBCyABQQFxCwRAIABB4AJqIAAoAswCQQFqENMWIAAoAtABIQELIAFBgIAEcQsEQCAAQeACaiAAKALMAkEBahDVFiAAKALQASEBCwJAIAFBgIABcUUNACAALQDJAUEIcUUNACAAQeACaiAAKALMAkEBahD2FiAAKALQASEBCwJ/An8CfyABQYCAAnEEQCAAQeACaiAAKALMAkEBaiAALwGOAyAAKALMARCAKCAAKALQASEBCyABQYCAIHELBEAgAEHgAmogACgCzAJB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QCABKAIQKAIARQRAIAEgASgCJCABKAIQKAIMIAEoAhAoAghsajYCJCABIAEoAiAgASgCECgCBCABKAIQKAIIbGo2AiALIAEgASgCECgCLDYCEAwBCwsgASABKAIoKAJINgIMA0AgASgCDARAIAEoAgwoAgBFBEAgASABKAIkIAEoAgwoAgwgASgCDCgCCGxBB3RqNgIkIAEgASgCICABKAIMKAIEIAEoAgwoAghsQQd0ajYCIAsgASABKAIMKAIsNgIMDAELCwJAIAEoAiRBAEwNACABIAEoAiwgASgCJCABKAIgIAEoAigoAkwQrCg2AhwCQCABKAIcIAEoAiBOBEAgAUGAlOvcAzYCFAwBCyABIAEoAhwgASgCJG02AhQgASgCFEEATARAIAFBATYCFAsLIAEgASgCKCgCRDYCEANAIAEoAhAEQCABKAIQKAIARQRAIAEgASgCECgCBEEBayABKAIQKAIMbkEBajYCGAJAIAEoAhggASgCFEwEQCABKAIQIAEoAhAoAgQ2AhAMAQsgASgCECABKAIUIAEoAhAoAgxsNgIQIAEoAiwgASgCEEEwaiABKAIQKAIEIAEoAhAoAghsEIgXIAEoAhBBATYCKAsgASgCLEEBIAEoAhAoAgggASgCECgCEBCEFyEAIAEoAhAgADYCACABKAIQIAEoAigoAlA2AhQgASgCEEEANgIYIAEoAhBBADYCHCABKAIQQQA2AiQLIAEgASgCECgCLDYCEAwBCwsgASABKAIoKAJINgIMA0AgASgCDEUNASABKAIMKAIARQRAIAEgASgCDCgCBEEBayABKAIMKAIMbkEBajYCGAJAIAEoAhggASgCFEwEQCABKAIMIAEoAgwoAgQ2AhAMAQsgASgCDCABKAIUIAEoAgwoAgxsNgIQIAEoAiwgASgCDEEwaiABKAIMKAIEIAEoAgwoAghsQQd0EIgXIAEoAgxBATYCKAsgASgCLEEBIAEoAgwoAgggASgCDCgCEBCFFyEAIAEoAgwgADYCACABKAIMIAEoAigoAlA2AhQgASgCDEEANgIYIAEoAgxBADYCHCABKAIMQQA2AiQLIAEgASgCDCgCLDYCDAwAAAsACyABQTBqJAALzwUBAX8jAEEwayIFJAAgBSAANgIsIAUgATYCKCAFIAI2AiQgBSADNgIgIAUgBDYCHCAFIAUo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BSgCnAhBAnQgBWooAgAgBSgCkAhMBEAgBSgCnAghACAFKAK8CCEBIAUgBSgClAgiAkEBajYClAggASACaiAAOgAACyAFIAUoApwIQQFqNgKcCAwBCwsgBSgClAghACAFQdAIaiQAIAALkAEBAX8jAEEgayICIAA2AhwgAiABNgIYIAJBADYCDCACQQA2AgggAkEANgIQIAIgAigCHDYCFANAIAIoAhAgAigCGEgEQCACKAIUKAIYIAIoAgxKBEAgAiACKAIUNgIIIAIgAigCFCgCGDYCDAsgAiACKAIQQQFqNgIQIAIgAigCFEEgajYCFAwBCwsgAigCCAugAQEBfyMAQSBrIgIgADYCHCACIAE2AhggAkEANgIMIAJBADYCCCACQQA2AhAgAiACKAIcNgIUA0AgAigCECACKAIYTkUEQAJAIAIoAhQoAhwgAigCDEwNACACKAIUKAIYQQBMDQAgAiACKAIUNgIIIAIgAigCFCgCHDYCDAsgAiACKAIQQQFqNgIQIAIgAigCFEEgajYCFAwBCwsgAigCCAvLBAEBfyMAQdAAayIDIAA2AkwgAyABNgJIIAMgAjYCRCADIAMoAkwoAuADNgJAIAMgAygCQCgCGDYCPCADQQA2AgwgA0EANgIIIANBADYCBCADQQA2AgAgAyADKAJIKAIANgIoIAMgAygCSCgCBDYCJCADIAMoAkgoAgg2AiAgAyADKAJIKAIMNgIcIAMgAygCSCgCEDYCGCADIAMoAkgoAhQ2AhQgAyADKAIoNgI0A0AgAygCNCADKAIkSkUEQCADIAMoAiA2AjADQCADKAIwIAMoAhxKRQRAIAMgAygCPCADKAI0QQJ0aigCACADKAIwQQZ0aiADKAIYQQF0ajYCOCADIAMoAhg2AiwDQCADKAIsIAMoAhRMBEAgAyADKAI4IgBBAmo2AjggAyAALwEAIgA2AhAgAARAIAMgAygCECADKAIMajYCDCADIAMoAgggAygCECADKAI0QQN0QQRqbGo2AgggAyADKAIEIAMoAhAgAygCMEECdEECamxqNgIEIAMgAygCACADKAIQIAMoAixBA3RBBGpsajYCAAsgAyADKAIsQQFqNgIsDAELCyADIAMoAjBBAWo2AjAMAQsLIAMgAygCNEEBajYCNAwBCwsgAygCTCgCiAEoAgAgAygCRGogAygC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AiAFKAKUAmsgBSgC3AFBxuUAbGpqNgKMAiAFIAUoAoQCIAUoAogCIAUoAugBQaQrbGsgBSgC3AFB9P4AbGtqNgKEAiAFIAUoAugBIAUoAtwBazYC6AEgBSAFKALkASAFKALgAWs2AuQBIAUgBSgC6AEgBSgC5AFqQdEibDYC4AEgBSAFKALgASAFKALoAUH+MGxqNgKUAiAFIAUoAuABIAUoAuQBQaH2AGxrNgKIAiAFKALMASAFKALIASAFKAKAAiAFKAKYAmpBEnVB/wdxai0AADoAACAFKALMASAFKALIASAFKAKAAiAFKAKYAmtBEnVB/wdxai0AADoACyAFKALMASAFKALIASAFKAL8ASAFKAKUAmpBEnVB/wdxai0AADoAASAFKALMASAFKALIASAFKAL8ASAFKAKUAmtBEnVB/wdxai0AADoACiAFKALMASAFKALIASAFKAL4ASAFKAKQAmpBEnVB/wdxai0AADoAAiAFKALMASAFKALIASAFKAL4ASAFKAKQAmtBEnVB/wdxai0AADoACSAFKALMASAFKALIASAFKAL0ASAFKAKMAmpBEnVB/wdxai0AADoAAyAFKALMASAFKALIASAFKAL0ASAFKAKMAmtBEnVB/wdxai0AADoACCAFKALMASAFKALIASAFKALwASAFKAKIAmpBEnVB/wdxai0AADoABCAFKALMASAFKALIASAFKALwASAFKAKIAmtBEnVB/wdxai0AADoAByAFKALMASAFKALIASAFKALsASAFKAKEAmpBEnVB/wdxai0AADoABSAFKALMASAFKALIASAFKALsASAFKAKEAmtBEnVB/wdxai0AADoABiAFIAUoAtABQSBqNgLQASAFIAUoAsQBQQFqNgLEAQwBCwsgBUGwAmokAAuPFAEBfyMAQeACayIFJAAgBSAANgLcAiAFIAE2AtgCIAUgAjYC1AIgBSADNgLQAiAFIAQ2AswCIAUgBSgC3AIoAswCQYABajYC8AEgBSAFKALUAjYCgAIgBSAFKALYAigCVDYC/AEgBSAFNgL4ASAFQQA2AuwBA0AgBSgC7AFBCE5FBEAgBSAFKAKAAi4BACAFKAL8ASgCAGw2AqACIAUgBSgCoAJBDXQ2AqACIAUgBSgCoAJBgAhqNgKgAiAFIAUoAoACLgEgIAUoAvwBKAJAbDYCkAIg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ApMiBotDAAAAT10EQCAGqAwBC0GAgICAeAtB/wdxai0AADoABSAFKAKYAiAFKAKUAgJ/IAUqAtwCIAUqAtgCkiIGi0MAAABPXQRAIAaoDAELQYCAgIB4C0H/B3FqLQAAOgADIAUoApgCIAUoApQCAn8gBSoC3AIgBSoC2AKTIgaLQwAAAE9dBEAgBqgMAQtBgICAgHgLQf8HcWotAAA6AAQgBSAFKAKcAkEgajYCnAIgBSAFKAKQAkEBajYCkAIMAQsLIAVBgANqJAALkgEBAX8jAEEgayIDJAAgAyAANgIcIAMgATYCGCADIAI2AhQgAygCHEEAQYACEGUaIAMgAygCGCgCACADKAIUai0AADYCECADIAMoAhgoAgQgAygCFGotAAA2AgwgAygCHCADKAIQIAMoAgxqQYACa0EFdDYCACADKAIcIAMoAhAgAygCDGtBBXQ2AiAgA0EgaiQAC+kDAQF/IwBBMGsiAyQAIAMgADYCLCADIAE2AiggAyACNgIkIAMoAixBAEGAAhBlGiADIAMoAiw2AhAgA0EANgIIA0AgAygCCEEETkUEQCADIAMoAiggAygCCEECdGooAgAgAygCJGo2AgwgAyADKAIMLQAANgIgIAMgAygCDC0AATYCHCADKAIQIAMoAiAgAygCHGpBgAJrQQN0NgIAIAMoAhAgAygCICADKAIca0EDdDYCBCADIAMoAhBBIGo2AhAgAyADKAIIQQFqNgIIDAELCyADIAMoAiw2AhAgA0EANgIIA0AgAygCCEECTkUEQCADIAMoAhAoAgAgAygCECgCYGo2AiAgAyADKAIQKAIgIAMoAhAoAkBqNgIcIAMgAygCECgCACADKAIQKAJgazYCGCADIAMoAhAoAiAgAygCECgCQGs2AhQgAygCECADKAIgIAMoAhxqNgIAIAMoAhAgAygCICADKAIcazYCQCADIAMoAhggAygCFGpB0SJsNgIgIAMgAygCIEGAIGo2AiAgAygCECADKAIgIAMoAhhB/jBsakENdTYCICADKAIQIAMoAiAgAygCFEGh9gBsa0ENdTYCYCADIAMoAhBBBGo2AhAgAyADKAIIQQFqNgIIDAELCyADQTBqJAAL6gUBAX8jAEEwayIDJAAgAyAANgIsIAMgATYCKCADIAI2AiQgAygCLEEAQYACEGUaIAMgAygCLDYCCCADQQA2AgADQCADKAIAQQZORQRAIAMgAygCKCADKAIAQQJ0aigCACADKAIkajYCBCADIAMoAgQtAAAgAygCBC0AAmo2AiAgAyADKAIELQABNgIcIAMgAygCBC0AACADKAIELQACazYCGCADKAIIIAMoAiAgAygCHGpBgANrQQN0NgIAIAMoAgggAygCICADKAIcayADKAIca0GhLWxBgARqQQp1NgIIIAMoAgggAygCGEGxzgBsQYAEakEKdTYCBCADIAMoAghBIGo2AgggAyADKAIAQQFqNgIADAELCyADIAMoAiw2AgggA0EANgIAA0AgAygCAEEDTkUEQCADIAMoAggoAgAgAygCCCgCoAFqNgIgIAMgAygCCCgCICADKAIIKAKAAWo2AhAgAyADKAIIKAJAIAMoAggoAmBqNgIYIAMgAygCICADKAIYajYCFCADIAMoAiAgAygCGGs2AgwgAyADKAIIKAIAIAMoAggoAqABazYCICADIAMoAggoAiAgAygCCCgCgAFrNgIcIAMgAygCCCgCQCADKAIIKAJgazYCGCADKAIIIAMoAhQgAygCEGpB5PEAbEGAgAFqQQ91NgIAIAMoAgggAygCDEGtiwFsQYCAAWpBD3U2AkAgAygCCCADKAIUIAMoAhBrIAMoAhBrQbrQAGxBgIABakEPdTYCgAEgAyADKAIgIAMoAhhqQdMpbDYCFCADKAIIIAMoAhQgAygCICADKAIcakHk8QBsakGAgAFqQQ91NgIgIAMoAgggAygCICADKAIcayADKAIYa0Hk8QBsQYCAAWpBD3U2AmAgAygCCCADKAIUIAMoAhggAygCHGtB5PEAbGpBgIABakEPdTYCoAEgAyADKAIIQQRqNgIIIAMgAygCAEEBajYCAAwBCwsgA0EwaiQAC5UJAQF/IwBBQGoiAyQAIAMgADYCPCADIAE2AjggAyACNgI0IAMoAjxBAEGAAhBlGiADIAMoAjw2AgwgA0EANgIEA0AgAygCBEEITkUEQCADIAMoAjggAygCBEECdGooAgAgAygCNGo2AgggAyADKAIILQAAIAMoAggtAANqNgIwIAMgAygCCC0AASADKAIILQACajYCLCADIAMoAggtAAAgAygCCC0AA2s2AiAgAyADKAIILQABIAMoAggtAAJrNgIcIAMoAgwgAygCMCADKAIsakGABGtBA3Q2AgAgAygCDCADKAIwIAMoAixrQQN0NgIIIAMgAygCICADKAIcakHRImw2AjAgAyADKAIwQYAEajYCMCADKAIMIAMoAjAgAygCIEH+MGxqQQp1NgIEIAMoAgwgAygCMCADKAIcQaH2AGxrQQp1NgIMIAMgAygCDEEgajYCDCADIAMoAgRBAWo2AgQMAQsLIAMgAygCPDYCDCADQQA2AgQDQCADKAIEQQRORQRAIAMgAygCDCgCACADKAIMKALgAWo2AjAgAyADKAIMKAIgIAMoAgwoAsABajYCLCADIAMoAgwoAkAgAygCDCgCoAFqNgIoIAMgAygCDCgCYCADKAIMKAKAAWo2AiQgAyADKAIwIAMoAiRqQQJqNgIgIAMgAygCMCADKAIkazYCGCADIAMoAiwgAygCKGo2AhwgAyADKAIsIAMoAihrNgIUIAMgAygCDCgCACADKAIMKALgAWs2AjAgAyADKAIMKAIgIAMoAgwoAsABazYCLCADIAMoAgwoAkAgAygCDCgCoAFrNgIoIAMgAygCDCgCYCADKAIMKAKAAWs2AiQgAygCDCADKAIgIAMoAhxqQQJ1NgIAIAMoAgwgAygCICADKAIca0ECdTYCgAEgAyADKAIYIAMoAhRqQdEibDYCECADIAMoAhBBgIABajYCECADKAIMIAMoAhAgAygCGEH+MGxqQQ91NgJAIAMoAgwgAygCECADKAIUQaH2AGxrQQ91NgLAASADIAMoAjAgAygCJGo2AiAgAyADKAIsIAMoAihqNgIcIAMgAygCMCADKAIoajYCGCADIAMoAiwgAygCJGo2AhQgAyADKAIYIAMoAhRqQaHLAGw2AhAgAyADKAIQQYCAAWo2AhAgAyADKAIwQYvgAGw2AjAgAyADKAIsQdTEAWw2AiwgAyADKAIoQbODAWw2AiggAyADKAIkQY4TbDYCJCADIAMoAiBBs0ZsNgIgIAMgAygCHEH9235sNgIcIAMgAygCGEGEZ2w2AhggAyADKAIUQbuCf2w2AhQgAyADKAIQIAMoAhhqNgIYIAMgAygCECADKAIUajYCFCADKAIMIAMoAhggAygCMCADKAIgampBD3U2AiAgAygCDCADKAIUIAMoAiwgAygCHGpqQQ91NgJgIAMoAgwgAygCGCADKAIoIAMoAhxqakEPdTYCoAEgAygCDCADKAIUIAMoAiQgAygCIGpqQQ91NgLgASADIAMoAgxBBGo2AgwgAyADKAIEQQFqNgIEDAELCyADQUBrJAAL2woBAX8jAEGQAWsiAyQAIAMgADYCjAEgAyABNgKIASADIAI2AoQBIAMoAowBQQBBgAIQZRogAyADKAKMATYCDCADQQA2AgADQAJAIAMgAygCiAEgAygCAEECdGooAgAgAygChAFqNgIEIAMgAygCBC0AACADKAIELQAEajYCgAEgAyADKAIELQABIAMoAgQtAANqNgJ8IAMgAygCBC0AAjYCeCADIAMoAoABIAMoAnxqNgJsIAMgAygCgAEgAygCfGs2AmggAyADKAIELQAAIAMoAgQtAARrNgKAASADIAMoAgQtAAEgAygCBC0AA2s2AnwgAygCDCADKAJsIAMoAnhqQYAFa0ECdDYCACADIAMoAmhBzDJsNgJoIAMgAygCbCADKAJ4QQJ0azYCbCADIAMoAmxB0BZsNgJsIAMoAgwgAygCaCADKAJsakGACGpBC3U2AgggAygCDCADKAJoIAMoAmxrQYAIakELdTYCECADIAMoAoABIAMoAnxqQZo1bDYCbCADKAIMIAMoAmwgAygCgAFB8SBsakGACGpBC3U2AgQgAygCDCADKAJsIAMoAnxBpIsBbGtBgAhqQQt1NgIMIAMgAygCAEEBajYCAAJAIAMoAgBBCEcEQCADKAIAQQpGDQIgAyADKAIMQSBqNgIMDAELIAMgA0EQajYCDAsMAQsLIAMgAygCjAE2AgwgAyADQRBqNgIIIANBADYCAANAIAMoAgBBBU5FBEAgAyADKAIMKAIAIAMoAggoAiBqNgKAASADIAMoAgwoAiAgAygCCCgCAGo2AnwgAyADKAIMKAJAIAMoAgwoAuABajYCZCADIAMoAgwoAmAgAygCDCgCwAFqNgJ0IAMgAygCDCgCgAEgAygCDCgCoAFqNgJwIAMgAygCgAEgAygCcGo2AmwgAyADKAKAASADKAJwazYCYCADIAMoAnwgAygCdGo2AmggAyADKAJ8IAMoAnRrNgJcIAMgAygCDCgCACADKAIIKAIgazYCgAEgAyADKAIMKAIgIAMoAggoAgBrNgJ8IAMgAygCDCgCQCADKAIMKALgAWs2AnggAyADKAIMKAJgIAMoAgwoAsABazYCdCADIAMoAgwoAoABIAMoAgwoAqABazYCcCADKAIMIAMoAmQgAygCbCADKAJoampB9tEAbEGAgAFqQQ91NgIAIAMgAygCZCADKAJkajYCZCADKAIMIAMoAmwgAygCZGtB3d0AbCADKAJoIAMoAmRrQeYjbGtBgIABakEPdTYCgAEgAyADKAJgIAMoAlxqQYzEAGw2AmwgAygCDCADKAJsIAMoAmBBiypsakGAgAFqQQ91NgJAIAMoAgwgAygCbCADKAJcQaSyAWxrQYCAAWpBD3U2AsABIAMgAygCgAEgAygCcGo2AmwgAyADKAJ8IAMoAnRrNgJoIAMoAgwgAygCbCADKAJoayADKAJ4a0H20QBsQYCAAWpBD3U2AqABIAMgAygCeEH20QBsNgJ4IAMoAgwgAygCeCADKAKAAUG38gBsIAMoAnxBnecAbGpqIAMoAnRBzDRsaiADKAJwQZASbGpBgIABakEPdTYCICADIAMoAoABIAMoAnBrQfXNAGwgAygCfCADKAJ0akGTMGxrNgJkIAMgAygCbCADKAJoakGoGWwgAygCaEH7KGxqIAMoAnhrNgJgIAMoAgwgAygCZCADKAJgakGAgAFqQQ91NgJgIAMoAgwgAygCZCADKAJga0GAgAFqQQ91NgLgASADIAMoAgxBBGo2AgwgAyADKAIIQQRqNgIIIAMgAygCAEEBajYCAAwBCwsgA0GQAWokAAvrDAEBfyMAQdABayIDJAAgAyAANgLMASADIAE2AsgBIAMgAjYCxAEgAygCzAFBAEGAAhBlGiADIAMoAswBNgIMIANBADYCAANAAkAgAyADKALIASADKAIAQQJ0aigCACADKALEAWo2AgQgAyADKAIELQAAIAMoAgQtAAVqNgLAASADIAMoAgQtAAEgAygCBC0ABGo2AqQBIAMgAygCBC0AAiADKAIELQADajYCuAEgAyADKALAASADKAK4AWo2AqgBIAMgAygCwAEgAygCuAFrNgKgASADIAMoAgQtAAAgAygCBC0ABWs2AsABIAMgAygCBC0AASADKAIELQAEazYCvAEgAyADKAIELQACIAMoAgQtAANrNgK4ASADKAIMIAMoAqgBIAMoAqQBakGABmtBAnQ2AgAgAygCDCADKAKgAUGxzgBsQYAIakELdTYCCCADKAIMIAMoAqgBIAMoAqQBayADKAKkAWtBoS1sQYAIakELdTYCECADIAMoAsABIAMoArgBakG2F2xBgAhqQQt1NgKoASADKAIMIAMoAqgBIAMoAsABIAMoArwBakECdGo2AgQgAygCDCADKALAASADKAK8AWsgAygCuAFrQQJ0NgIMIAMoAgwgAygCqAEgAygCuAEgAygCvAFrQQJ0ajYCFCADIAMoAgBBAWo2AgACQCADKAIAQQhHBEAgAygCAEEMRg0CIAMgAygCDEEgajYCDAwBCyADIANBEGo2AgwLDAELCyADIAMoAswBNgIMIAMgA0EQajYCCCADQQA2AgADQCADKAIAQQZORQRAIAMgAygCDCgCACADKAIIKAJgajYCwAEgAyADKAIMKAIgIAMoAggoAkBqNgK8ASADIAMoAgwoAkAgAygCCCgCIGo2ArgBIAMgAygCDCgCYCADKAIIKAIAajYCtAEgAyADKAIMKAKAASADKAIMKALgAWo2ArABIAMgAygCDCgCoAEgAygCDCgCwAFqNgKsASADIAMoAsABIAMoAqwBajYCqAEgAyADKALAASADKAKsAWs2ApwBIAMgAygCvAEgAygCsAFqNgKkASADIAMoArwBIAMoArABazYCmAEgAyADKAK4ASADKAK0AWo2AqABIAMgAygCuAEgAygCtAFrNgKUASADIAMoAgwoAgAgAygCCCgCYGs2AsABIAMgAygCDCgCICADKAIIKAJAazYCvAEgAyADKAIMKAJAIAMoAggoAiBrNgK4ASADIAMoAgwoAmAgAygCCCgCAGs2ArQBIAMgAygCDCgCgAEgAygCDCgC4AFrNgKwASADIAMoAgwoAqABIAMoAgwoAsABazYCrAEgAygCDCADKAKgASADKAKoASADKAKkAWpqQfI4bEGAgAFqQQ91NgIAIAMoAgwgAygCnAEgAygCmAFrIAMoApQBa0HyOGxBgIABakEPdTYCwAEgAygCDCADKAKoASADKAKgAWtB1sUAbEGAgAFqQQ91NgKAASADKAIMIAMoApgBIAMoApQBa0HyOGwgAygCnAEgAygClAFqQdvNAGxqQYCAAWpBD3U2AkAgAyADKAK8ASADKAKwAWpB5R5sNgKoASADIAMoAqgBIAMoArwBQcUrbGo2ApgBIAMgAygCqAEgAygCsAFBj+kAbGs2ApQBIAMgAygCwAEgAygCuAFqQeo/bDYCoAEgAyADKALAASADKAK0AWpB/TBsNgKcASADIAMoApgBIAMoAqABIAMoApwBamogAygCwAFBhSFsayADKAKsAUHACmxqNgKoASADIAMoArgBIAMoArQBakHAdWw2AqQBIAMgAygCoAEgAygCpAEgAygClAFrIAMoArgBQYyFAWxrIAMoAqwBQf0wbGpqNgKgASADIAMoApwBIAMoAqQBIAMoApgBayADKAK0AUGlKWxqIAMoAqwBQeo/bGtqNgKcASADIAMoApQBIAMoAsABIAMoArQBa0GqygBsaiADKAK4ASADKAKsAWpB5R5sazYCpAEgAygCDCADKAKoAUGAgAFqQQ91NgIgIAMoAgwgAygCpAFBgIABakEPdTYCYCADKAIMIAMoAqABQYCAAWpBD3U2AqABIAMoAgwgAygCnAFBgIABakEPdTYC4AEgAyADKAIMQQRqNgIMIAMgAygCCEEEajYCCCADIAMoAgBBAWo2AgAMAQsLIANB0AFqJAALvhABAX8jAEGgAmsiAyQAIAMgADYCnAIgAyABNgKYAiADIAI2ApQCIAMoApwCQQBBgAIQZRogAyADKAKcAjYCDCADQQA2AgADQAJAIAMgAygCmAIgAygCAEECdGooAgAgAygClAJqNgIEIAMgAygCBC0AACADKAIELQAGajYCkAIgAyADKAIELQABIAMoAgQtAAVqNgKMAiADIAMoAgQtAAIgAygCBC0ABGo2AogCIAMgAygCBC0AAzYChAIgAyADKAIELQAAIAMoAgQtAAZrNgL0ASADIAMoAgQtAAEgAygCBC0ABWs2AvABIAMgAygCBC0AAiADKAIELQAEazYC7AEgAyADKAKQAiADKAKIAmo2AtgBIAMoAgwgAygChAIgAygC2AEgAygCjAJqakGAB2tBAnQ2AgAgAyADKAKEAiADKAKEAmo2AoQCIAMgAygC2AEgAygChAJrNgLYASADIAMoAtgBIAMoAoQCazYC2AEgAyADKALYAUHQFmw2AtgBIAMgAygCkAIgAygCiAJrQfY6bDYC1AEgAyADKAKMAiADKAKIAmtBkhRsNgLQASADKAIMIAMoAtABIAMoAtgBIAMoAtQBampBgAhqQQt1NgIIIAMgAygC2AEgAygC1AFrNgLYASADIAMoApACIAMoAowCa0G3OGw2AtQBIAMoAgwgAygC1AEgAygC0AFqIAMoAowCIAMoAoQCa0GhLWxrQYAIakELdTYCECADKAIMIAMoAtgBIAMoAtQBakGACGpBC3U2AhggAyADKAL0ASADKALwAWpB7ztsNgKMAiADIAMoAvQBIAMoAvABa0HzCmw2AogCIAMgAygCjAIgAygCiAJrNgKQAiADIAMoAogCIAMoAowCajYCjAIgAyADKALwASADKALsAWpB4ad/bDYCiAIgAyADKAKIAiADKAKMAmo2AowCIAMgAygC9AEgAygC7AFqQaMnbDYChAIgAyADKAKEAiADKAKQAmo2ApACIAMgAygCiAIgAygChAIgAygC7AFB3vcAbGpqNgKIAiADKAIMIAMoApACQYAIakELdTYCBCADKAIMIAMoAowCQYAIakELdTYCDCADKAIMIAMoAogCQYAIakELdTYCFCADIAMoAgBBAWo2AgACQCADKAIAQQhHBEAgAygCAEEORg0CIAMgAygCDEEgajYCDAwBCyADIANBEGo2AgwLDAELCyADIAMoApwCNgIMIAMgA0EQajYCCCADQQA2AgADQCADKAIAQQdORQRAIAMgAygCDCgCACADKAIIKAKgAWo2ApACIAMgAygCDCgCICADKAIIKAKAAWo2AowCIAMgAygCDCgCQCADKAIIKAJgajYCiAIgAyADKAIMKAJgIAMoAggoAkBqNgLoASADIAMoAgwoAoABIAMoAggoAiBqNgKAAiADIAMoAgwoAqABIAMoAggoAgBqNgL8ASADIAMoAgwoAsABIAMoAgwoAuABajYC+AEgAyADKAKQAiADKAL4AWo2AvQBIAMgAygCkAIgAygC+AFrNgLkASADIAMoAowCIAMoAvwBajYC8AEgAyADKAKMAiADKAL8AWs2AuABIAMgAygCiAIgAygCgAJqNgLsASADIAMoAogCIAMoAoACazYC3AEgAyADKAIMKAIAIAMoAggoAqABazYCkAIgAyADKAIMKAIgIAMoAggoAoABazYCjAIgAyADKAIMKAJAIAMoAggoAmBrNgKIAiADIAMoAgwoAmAgAygCCCgCQGs2AoQCIAMgAygCDCgCgAEgAygCCCgCIGs2AoACIAMgAygCDCgCoAEgAygCCCgCAGs2AvwBIAMgAygCDCgCwAEgAygCDCgC4AFrNgL4ASADKAIMIAMoAugBIAMoAuwBIAMoAvQBIAMoAvABampqQeYpbEGAgAFqQQ91NgIAIAMgAygC6AEgAygC6AFqNgLoASADKAIMIAMoAvQBIAMoAugBa0GhNWwgAygC8AEgAygC6AFrQZQNbGogAygC7AEgAygC6AFrQe0kbGtBgIABakEPdTYCgAEgAyADKALkASADKALgAWpBmy5sNgL0ASADKAIMIAMoAvQBIAMoAuQBQbULbGogAygC3AFB0xlsakGAgAFqQQ91NgJAIAMoAgwgAygC9AEgAygC4AFB7scAbGsgAygC3AFB0Dlsa0GAgAFqQQ91NgLAASADIAMoAowCIAMoAogCajYC9AEgAyADKAL8ASADKAKAAms2AvABIAMoAgwgAygChAIgAygCkAIgAygC9AFraiADKALwAWsgAygC+AFrQeYpbEGAgAFqQQ91NgLgASADIAMoAoQCQeYpbDYChAIgAyADKAL0AUGxeWw2AvQBIAMgAygC8AFB3jpsNgLwASADIAMoAvQBIAMoAvABIAMoAoQCa2o2AvQBIAMgAygCkAIgAygCiAJqQYYybCADKAKAAiADKAL4AWpBuR9sajYC8AEgAygCDCADKAL0ASADKALwAWogAygCiAJBnOMAbGsgAygCgAJB6C5sakGAgAFqQQ91NgKgASADIAMoApACIAMoAowCakHlN2wgAygC/AEgAygC+AFrQcMTbGo2AuwBIAMoAgwgAygC9AEgAygC7AFqIAMoAowCQd0RbGsgAygC/AFBp4ABbGtBgIABakEPdTYCYCADKAIMIAMoAoQCIAMoAvABIAMoAuwBamogAygCkAJBjS9sayADKAL4AUGnBWxrQYCAAWpBD3U2AiAgAyADKAIMQQRqNgIMIAMgAygCCEEEajYCCCADIAMoAgBBAWo2AgAMAQsLIANBoAJqJAALuxIBAX8jAEHgAmsiAyQAIAMgADYC3AIgAyABNgLYAiADIAI2AtQCIAMgAygC3AI2AgwgA0EANgIAA0ACQCADIAMoAtgCIAMoAgBBAnRqKAIAIAMoAtQCajYCBCADIAMoAgQtAAAgAygCBC0AB2o2AtACIAMgAygCBC0AASADKAIELQAGajYCzAIgAyADKAIELQACIAMoAgQtAAVqNgLIAiADIAMoAgQtAAMgAygCBC0ABGo2AsQCIAMgAygC0AIgAygCxAJqNgKwAiADIAMoAtACIAMoAsQCazYCqAIgAyADKALMAiADKALIAmo2AqwCIAMgAygCzAIgAygCyAJrNgKkAiADIAMoAgQtAAAgAygCBC0AB2s2AtACIAMgAygCBC0AASADKAIELQAGazYCzAIgAyADKAIELQACIAMoAgQtAAVrNgLIAiADIAMoAgQtAAMgAygCBC0ABGs2AsQCIAMoAgwgAygCsAIgAygCrAJqQYAIa0ECdDYCACADKAIMIAMoArACIAMoAqwCa0ECdDYCECADIAMoAqgCIAMoAqQCakHRImw2ApACIAMoAgwgAygCkAIgAygCqAJB/jBsakGACGpBC3U2AgggAygCDCADKAKQAiADKAKkAkGh9gBsa0GACGpBC3U2AhggAyADKALQAiADKALEAmo2ArACIAMgAygCzAIgAygCyAJqNgKsAiADIAMoAtACIAMoAsgCajYCqAIgAyADKALMAiADKALEAmo2AqQCIAMgAygCqAIgAygCpAJqQaHLAGw2ApACIAMgAygC0AJBi+AAbDYC0AIgAyADKALMAkHUxAFsNgLMAiADIAMoAsgCQbODAWw2AsgCIAMgAygCxAJBjhNsNgLEAiADIAMoArACQbNGbDYCsAIgAyADKAKsAkH9235sNgKsAiADIAMoAqgCQYRnbDYCqAIgAyADKAKkAkG7gn9sNgKkAiADIAMoApACIAMoAqgCajYCqAIgAyADKAKQAiADKAKkAmo2AqQCIAMoAgwgAygCqAIgAygC0AIgAygCsAJqakGACGpBC3U2AgQgAygCDCADKAKkAiADKALMAiADKAKsAmpqQYAIakELdTYCDCADKAIMIAMoAqgCIAMoAsgCIAMoAqwCampBgAhqQQt1NgIUIAMoAgwgAygCpAIgAygCxAIgAygCsAJqakGACGpBC3U2AhwgAyADKAIAQQFqNgIAAkAgAygCAEEIRwRAIAMoAgBBEEYNAiADIAMoAgxBIGo2AgwMAQsgAyADQRBqNgIMCwwBCwsgAyADKALcAjYCDCADIANBEGo2AgggA0EHNgIAA0AgAygCAEEASEUEQCADIAMoAgwoAgAgAygCCCgC4AFqNgLQAiADIAMoAgwoAiAgAygCCCgCwAFqNgLMAiADIAMoAgwoAkAgAygCCCgCoAFqNgLIAiADIAMoAgwoAmAgAygCCCgCgAFqNgLEAiADIAMoAgwoAoABIAMoAggoAmBqNgLAAiADIAMoAgwoAqABIAMoAggoAkBqNgK8AiADIAMoAgwoAsABIAMoAggoAiBqNgK4AiADIAMoAgwoAuABIAMoAggoAgBqNgK0AiADIAMoAtACIAMoArQCajYCsAIgAyADKALQAiADKAK0Ams2AqACIAMgAygCzAIgAygCuAJqNgKsAiADIAMoAswCIAMoArgCazYCnAIgAyADKALIAiADKAK8Amo2AqgCIAMgAygCyAIgAygCvAJrNgKYAiADIAMoAsQCIAMoAsACajYCpAIgAyADKALEAiADKALAAms2ApQCIAMgAygCDCgCACADKAIIKALgAWs2AtACIAMgAygCDCgCICADKAIIKALAAWs2AswCIAMgAygCDCgCQCADKAIIKAKgAWs2AsgCIAMgAygCDCgCYCADKAIIKAKAAWs2AsQCIAMgAygCDCgCgAEgAygCCCgCYGs2AsACIAMgAygCDCgCoAEgAygCCCgCQGs2ArwCIAMgAygCDCgCwAEgAygCCCgCIGs2ArgCIAMgAygCDCgC4AEgAygCCCgCAGs2ArQCIAMoAgwgAygCpAIgAygCqAIgAygCsAIgAygCrAJqampBBGpBA3U2AgAgAygCDCADKAKwAiADKAKkAmtBz9MAbCADKAKsAiADKAKoAmtB0SJsakGAgAJqQRB1NgKAASADIAMoApQCIAMoApwCa0HUEWwgAygCoAIgAygCmAJrQePYAGxqNgKwAiADKAIMIAMoArACIAMoApwCQfXcAGxqIAMoApgCQYeLAWxqQYCAAmpBEHU2AkAgAygCDCADKAKwAiADKAKgAkHCDWxrIAMoApQCQfnDAGxrQYCAAmpBEHU2AsABIAMgAygC0AIgAygCzAJqQc7WAGwgAygCuAIgAygCtAJrQaMabGo2AqwCIAMgAygC0AIgAygCyAJqQenPAGwgAygCvAIgAygCtAJqQdUqbGo2AqgCIAMgAygC0AIgAygCxAJqQfzFAGwgAygCwAIgAygCtAJrQbY5bGo2AqQCIAMgAygCzAIgAygCyAJqQfAIbCADKAK4AiADKAK8AmtBidoAbGo2AqACIAMgAygCzAIgAygCxAJqQatVbCADKALAAiADKAK4AmpBl7B/bGo2ApwCIAMgAygCyAIgAygCxAJqQbKpf2wgAygCvAIgAygCwAJrQaMabGo2ApgCIAMgAygCpAIgAygCrAIgAygCqAJqaiADKALQAkGqkgFsayADKAK0AkHzMWxqNgKwAiADIAMoAqwCIAMoAqACIAMoApwCaiADKALMAkHNBGxqIAMoArgCQb/qAGxrajYCrAIgAyADKAKoAiADKAKgAiADKAKYAmogAygCyAJBhsgAbGsgAygCvAJBx84AbGpqNgKoAiADIAMoAqQCIAMoApwCIAMoApgCaiADKALEAkGYxABsaiADKALAAkHgigFsamo2AqQCIAMoAgwgAygCsAJBgIACakEQdTYCICADKAIMIAMoAqwCQYCAAmpBEHU2AmAgAygCDCADKAKoAkGAgAJqQRB1NgKgASADKAIMIAMoAqQCQYCAAmpBEHU2AuABIAMgAygCDEEEajYCDCADIAMoAghBBGo2AgggAyADKAIAQX9qNgIADAELCyADQeACaiQAC5MBAQF/IwBBIGsiAyQAIAMgADYCHCADIAE2AhggAyACNgIUIAMoAhxBAEGAAhBlGiADIAMoAhgoAgAgAygCFGo2AgggAyADKAIILQAANgIQIAMgAygCCC0AATYCDCADKAIcIAMoAhAgAygCDGpBgAJrQQV0NgIAIAMoAhwgAygCECADKAIMa0EFdDYCBCADQSBqJAAL8gMBAX8jAEEwayIDJAAgAyAANgIsIAMgATYCKCADIAI2AiQgAygCLEEAQYACEGUaIAMgAygCLDYCECADQQA2AggDQCADKAIIQQJORQRAIAMgAygCKCADKAIIQQJ0aigCACADKAIkajYCDCADIAMoAgwtAAAgAygCDC0AA2o2AiAgAyADKAIMLQABIAMoAgwtAAJqNgIcIAMgAygCDC0AACADKAIMLQADazYCGCADIAMoAgwtAAEgAygCDC0AAms2AhQgAygCECADKAIgIAMoAhxqQYAEa0EFdDYCACADKAIQIAMoAiAgAygCHGtBBXQ2AgggAyADKAIYIAMoAhRqQdEibDYCICADIAMoAiBBgAFqNgIgIAMoAhAgAygCICADKAIYQf4wbGpBCHU2AgQgAygCECADKAIgIAMoAhRBofYAbGtBCHU2AgwgAyADKAIQQSBqNgIQIAMgAygCCEEBajYCCAwBCwsgAyADKAIsNgIQIANBADYCCANAIAMoAghBBE5FBEAgAyADKAIQKAIAQQJqNgIgIAMgAygCECgCIDYCHCADKAIQIAMoAiAgAygCHGpBAnU2AgAgAygCECADKAIgIAMoAhxrQQJ1NgIgIAMgAygCEEEEajYCECADIAMoAghBAWo2AggMAQsLIANBMGokAAvNBQEBfyMAQTBrIgMkACADIAA2AiwgAyABNgIoIAMgAjYCJCADKAIsQQBBgAIQZRogAyADKAIsNgIIIANBADYCAANAIAMoAgBBA05FBEAgAyADKAIoIAMoAgBBAnRqKAIAIAMoAiRqNgIEIAMgAygCBC0AACADKAIELQAFajYCICADIAMoAgQtAAEgAygCBC0ABGo2AhAgAyADKAIELQACIAMoAgQtAANqNgIYIAMgAygCICADKAIYajYCFCADIAMoAiAgAygCGGs2AgwgAyADKAIELQAAIAMoAgQtAAVrNgIgIAMgAygCBC0AASADKAIELQAEazYCHCADIAMoAgQtAAIgAygCBC0AA2s2AhggAygCCCADKAIUIAMoAhBqQYAGa0EDdDYCACADKAIIIAMoAgxBsc4AbEGABGpBCnU2AgggAygCCCADKAIUIAMoAhBrIAMoAhBrQaEtbEGABGpBCnU2AhAgAyADKAIgIAMoAhhqQbYXbEGABGpBCnU2AhQgAygCCCADKAIUIAMoAiAgAygCHGpBA3RqNgIEIAMoAgggAygCICADKAIcayADKAIYa0EDdDYCDCADKAIIIAMoAhQgAygCGCADKAIca0EDdGo2AhQgAyADKAIIQSBqNgIIIAMgAygCAEEBajYCAAwBCwsgAyADKAIsNgIIIANBADYCAANAIAMoAgBBBk5FBEAgAyADKAIIKAIAIAMoAggoAkBqNgIgIAMgAygCCCgCIDYCHCADIAMoAggoAgAgAygCCCgCQGs2AhggAygCCCADKAIgIAMoAhxqQeTxAGxBgIABakEPdTYCACADKAIIIAMoAiAgAygCHGsgAygCHGtButAAbEGAgAFqQQ91NgJAIAMoAgggAygCGEGtiwFsQYCAAWpBD3U2AiAgAyADKAIIQQRqNgIIIAMgAygCAEEBajYCAAwBCwsgA0EwaiQAC4wJAQF/IwBBQGoiAyQAIAMgADYCPCADIAE2AjggAyACNgI0IAMoAjxBgAFqQQBBgAEQZRogAyADKAI8NgIMIANBADYCBANAIAMoAgRBBE5FBEAgAyADKAI4IAMoAgRBAnRqKAIAIAMoAjRqNgIIIAMgAygCCC0AACADKAIILQAHajYCMCADIAMoAggtAAEgAygCCC0ABmo2AiwgAyADKAIILQACIAMoAggtAAVqNgIoIAMgAygCCC0AAyADKAIILQAEajYCJCADIAMoAjAgAygCJGo2AiAgAyADKAIwIAMoAiRrNgIYIAMgAygCLCADKAIoajYCHCADIAMoAiwgAygCKGs2AhQgAyADKAIILQAAIAMoAggtAAdrNgIwIAMgAygCCC0AASADKAIILQAGazYCLCADIAMoAggtAAIgAygCCC0ABWs2AiggAyADKAIILQADIAMoAggtAARrNgIkIAMoAgwgAygCICADKAIcakGACGtBA3Q2AgAgAygCDCADKAIgIAMoAhxrQQN0NgIQIAMgAygCGCADKAIUakHRImw2AhAgAyADKAIQQYAEajYCECADKAIMIAMoAhAgAygCGEH+MGxqQQp1NgIIIAMoAgwgAygCECADKAIUQaH2AGxrQQp1NgIYIAMgAygCMCADKAIkajYCICADIAMoAiwgAygCKGo2AhwgAyADKAIwIAMoAihqNgIYIAMgAygCLCADKAIkajYCFCADIAMoAhggAygCFGpBocsAbDYCECADIAMoAhBBgARqNgIQIAMgAygCMEGL4ABsNgIwIAMgAygCLEHUxAFsNgIsIAMgAygCKEGzgwFsNgIoIAMgAygCJEGOE2w2AiQgAyADKAIgQbNGbDYCICADIAMoAhxB/dt+bDYCHCADIAMoAhhBhGdsNgIYIAMgAygCFEG7gn9sNgIUIAMgAygCECADKAIYajYCGCADIAMoAhAgAygCFGo2AhQgAygCDCADKAIYIAMoAjAgAygCIGpqQQp1NgIEIAMoAgwgAygCFCADKAIsIAMoAhxqakEKdTYCDCADKAIMIAMoAhggAygCKCADKAIcampBCnU2AhQgAygCDCADKAIUIAMoAiQgAygCIGpqQQp1NgIcIAMgAygCDEEgajYCDCADIAMoAgRBAWo2AgQMAQsLIAMgAygCPDYCDCADQQc2AgQDQCADKAIEQQBIRQRAIAMgAygCDCgCACADKAIMKAJgakECajYCMCADIAMoAgwoAiAgAygCDCgCQGo2AiwgAyADKAIMKAIAIAMoAgwoAmBrNgIgIAMgAygCDCgCICADKAIMKAJAazYCHCADKAIMIAMoAjAgAygCLGpBAnU2AgAgAygCDCADKAIwIAMoAixrQQJ1NgJAIAMgAygCICADKAIcakHRImw2AjAgAyADKAIwQYCAAWo2AjAgAygCDCADKAIwIAMoAiBB/jBsakEPdTYCICADKAIMIAMoAjAgAygCHEGh9gBsa0EPdTYCYCADIAMoAgxBBGo2AgwgAyADKAIEQX9qNgIEDAELCyADQUBrJAAL/gkBAX8jAEFAaiIDJAAgAyAANgI8IAMgATYCOCADIAI2AjQgAygCPEGgAWpBAEHgABBlGiADIAMoAjw2AgggA0EANgIAA0AgAygCAEEFTkUEQCADIAMoAjggAygCAEECdGooAgAgAygCNGo2AgQgAyADKAIELQAAIAMoAgQtAAlqNgIwIAMgAygCBC0AASADKAIELQAIajYCLCADIAMoAgQtAAIgAygCBC0AB2o2AhQgAyADKAIELQADIAMoAgQtAAZqNgIkIAMgAygCBC0ABCADKAIELQAFajYCICADIAMoAjAgAygCIGo2AhwgAyADKAIwIAMoAiBrNgIQIAMgAygCLCADKAIkajYCGCADIAMoAiwgAygCJGs2AgwgAyADKAIELQAAIAMoAgQtAAlrNgIwIAMgAygCBC0AASADKAIELQAIazYCLCADIAMoAgQtAAIgAygCBC0AB2s2AiggAyADKAIELQADIAMoAgQtAAZrNgIkIAMgAygCBC0ABCADKAIELQAFazYCICADKAIIIAMoAhQgAygCHCADKAIYampBgAprQQJ0NgIAIAMgAygCFCADKAIUajYCFCADKAIIIAMoAhwgAygCFGtBnckAbCADKAIYIAMoAhRrQfwbbGtBgAhqQQt1NgIQIAMgAygCECADKAIMakGaNWw2AhwgAygCCCADKAIcIAMoAhBB8SBsakGACGpBC3U2AgggAygCCCADKAIcIAMoAgxBpIsBbGtBgAhqQQt1NgIYIAMgAygCMCADKAIgajYCHCADIAMoAiwgAygCJGs2AhggAygCCCADKAIcIAMoAhhrIAMoAihrQQJ0NgIUIAMgAygCKEENdDYCKCADKAIIIAMoAiggAygCMEGz2QBsIAMoAixB09AAbGpqIAMoAiRBjClsaiADKAIgQZQObGpBgAhqQQt1NgIEIAMgAygCMCADKAIga0HvPGwgAygCLCADKAIkakHPJWxrNgIUIAMgAygCHCADKAIYakHjE2wgAygCGEEMdGogAygCKGs2AhAgAygCCCADKAIUIAMoAhBqQYAIakELdTYCDCADKAIIIAMoAhQgAygCEGtBgAhqQQt1NgIcIAMgAygCCEEgajYCCCADIAMoAgBBAWo2AgAMAQsLIAMgAygCPDYCCCADQQc2AgADQCADKAIAQQBIRQRAIAMgAygCCCgCACADKAIIKAKAAWo2AjAgAyADKAIIKAIgIAMoAggoAmBqNgIsIAMgAygCCCgCQDYCKCADIAMoAjAgAygCLGo2AhwgAyADKAIwIAMoAixrNgIYIAMgAygCCCgCACADKAIIKAKAAWs2AjAgAyADKAIIKAIgIAMoAggoAmBrNgIsIAMoAgggAygCHCADKAIoakH20QBsQYCAAWpBD3U2AgAgAyADKAIYQeLAAGw2AhggAyADKAIcIAMoAihBAnRrNgIcIAMgAygCHEH7HGw2AhwgAygCCCADKAIYIAMoAhxqQYCAAWpBD3U2AkAgAygCCCADKAIYIAMoAhxrQYCAAWpBD3U2AoABIAMgAygCMCADKAIsakGMxABsNgIcIAMoAgggAygCHCADKAIwQYsqbGpBgIABakEPdTYCICADKAIIIAMoAhwgAygCLEGksgFsa0GAgAFqQQ91NgJgIAMgAygCCEEEajYCCCADIAMoAgBBf2o2AgAMAQsLIANBQGskAAvrCwEBfyMAQdAAayIDIAA2AkwgAyABNgJIIAMgAjYCRCADKAJMIgBCADcAwAEgAEIANwD4ASAAQgA3APABIABCADcA6AEgAEIANwDgASAAQgA3ANgBIABCADcA0AEgAEIANwDIASADIAMoAkw2AhAgA0EANgIIA0AgAygCCEEGTkUEQCADIAMoAkggAygCCEECdGooAgAgAygCRGo2AgwgAyADKAIMLQAAIAMoAgwtAAtqNgJAIAMgAygCDC0AASADKAIMLQAKajYCPCADIAMoAgwtAAIgAygCDC0ACWo2AjggAyADKAIMLQADIAMoAgwtAAhqNgI0IAMgAygCDC0ABCADKAIMLQAHajYCMCADIAMoAgwtAAUgAygCDC0ABmo2AiwgAyADKAJAIAMoAixqNgIoIAMgAygCQCADKAIsazYCHCADIAMoAjwgAygCMGo2AiQgAyADKAI8IAMoAjBrNgIYIAMgAygCOCADKAI0ajYCICADIAMoAjggAygCNGs2AhQgAyADKAIMLQAAIAMoAgwtAAtrNgJAIAMgAygCDC0AASADKAIMLQAKazYCPCADIAMoAgwtAAIgAygCDC0ACWs2AjggAyADKAIMLQADIAMoAgwtAAhrNgI0IAMgAygCDC0ABCADKAIMLQAHazYCMCADIAMoAgwtAAUgAygCDC0ABms2AiwgAygCECADKAIgIAMoAiggAygCJGpqQYAMa0ECdDYCACADKAIQIAMoAhwgAygCGGsgAygCFGtBAnQ2AhggAygCECADKAIoIAMoAiBrQbHOAGxBgAhqQQt1NgIQIAMoAhAgAygCGCADKAIUayADKAIcIAMoAhRqQbbXAGxqQYAIakELdTYCCCADIAMoAjwgAygCMGpB0SJsNgIoIAMgAygCKCADKAI8Qf4wbGo2AhggAyADKAIoIAMoAjBBofYAbGs2AhQgAyADKAJAIAMoAjhqQefHAGw2AiAgAyADKAJAIAMoAjRqQY03bDYCHCADIAMoAhggAygCICADKAIcamogAygCQEGWJWxrIAMoAixB6AtsajYCKCADIAMoAjggAygCNGpBmHRsNgIkIAMgAygCICADKAIkIAMoAhRrIAMoAjhB3ZUBbGsgAygCLEGNN2xqajYCICADIAMoAhwgAygCJCADKAIYayADKAI0QboubGogAygCLEHnxwBsa2o2AhwgAyADKAIUIAMoAkAgAygCNGtBz9MAbGogAygCOCADKAIsakHRImxrNgIkIAMoAhAgAygCKEGACGpBC3U2AgQgAygCECADKAIkQYAIakELdTYCDCADKAIQIAMoAiBBgAhqQQt1NgIUIAMoAhAgAygCHEGACGpBC3U2AhwgAyADKAIQQSBqNgIQIAMgAygCCEEBajYCCAwBCwsgAyADKAJMNgIQIANBBzYCCANAIAMoAghBAEhFBEAgAyADKAIQKAIAIAMoAhAoAqABajYCQCADIAMoAhAoAiAgAygCECgCgAFqNgIkIAMgAygCECgCQCADKAIQKAJgajYCOCADIAMoAkAgAygCOGo2AiggAyADKAJAIAMoAjhrNgIgIAMgAygCECgCACADKAIQKAKgAWs2AkAgAyADKAIQKAIgIAMoAhAoAoABazYCPCADIAMoAhAoAkAgAygCECgCYGs2AjggAygCECADKAIoIAMoAiRqQeTxAGxBgIACakEQdTYCACADKAIQIAMoAiBBrYsBbEGAgAJqQRB1NgJAIAMoAhAgAygCKCADKAIkayADKAIka0G60ABsQYCAAmpBEHU2AoABIAMgAygCQCADKAI4akHTKWw2AiggAygCECADKAIoIAMoAkAgAygCPGpB5PEAbGpBgIACakEQdTYCICADKAIQIAMoAkAgAygCPGsgAygCOGtB5PEAbEGAgAJqQRB1NgJgIAMoAhAgAygCKCADKAI4IAMoAjxrQeTxAGxqQYCAAmpBEHU2AqABIAMgAygCEEEEajYCECADIAMoAghBf2o2AggMAQsLC98OAQF/IwBB4ABrIgMgADYCXCADIAE2AlggAyACNgJUIAMoAlwiAEIANwDgASAAQgA3APgBIABCADcA8AEgAEIANwDoASADIAMoAlw2AgwgA0EANgIEA0AgAygCBEEHTkUEQCADIAMoAlggAygCBEECdGooAgAgAygCVGo2AgggAyADKAIILQAAIAMoAggtAA1qNgJQIAMgAygCCC0AASADKAIILQAMajYCTCADIAMoAggtAAIgAygCCC0AC2o2AkggAyADKAIILQADIAMoAggtAApqNgIoIAMgAygCCC0ABCADKAIILQAJajYCQCADIAMoAggtAAUgAygCCC0ACGo2AjwgAyADKAIILQAGIAMoAggtAAdqNgI4IAMgAygCUCADKAI4ajYCNCADIAMoAlAgAygCOGs2AiQgAyADKAJMIAMoAjxqNgIwIAMgAygCTCADKAI8azYCICADIAMoAkggAygCQGo2AiwgAyADKAJIIAMoAkBrNgIcIAMgAygCCC0AACADKAIILQANazYCUCADIAMoAggtAAEgAygCCC0ADGs2AkwgAyADKAIILQACIAMoAggtAAtrNgJIIAMgAygCCC0AAyADKAIILQAKazYCRCADIAMoAggtAAQgAygCCC0ACWs2AkAgAyADKAIILQAFIAMoAggtAAhrNgI8IAMgAygCCC0ABiADKAIILQAHazYCOCADKAIMIAMoAiggAygCLCADKAI0IAMoAjBqampBgA5rQQJ0NgIAIAMgAygCKCADKAIoajYCKCADKAIMIAMoAjQgAygCKGtBxtEAbCADKAIwIAMoAihrQZIUbGogAygCLCADKAIoa0G3OGxrQYAIakELdTYCECADIAMoAiQgAygCIGpB4sYAbDYCNCADKAIMIAMoAjQgAygCJEG9EWxqIAMoAhxBoydsakGACGpBC3U2AgggAygCDCADKAI0IAMoAiBBhO4AbGsgAygCHEGf2ABsa0GACGpBC3U2AhggAyADKAJMIAMoAkhqNgI0IAMgAygCPCADKAJAazYCMCADKAIMIAMoAkQgAygCUCADKAI0a2ogAygCMGsgAygCOGtBAnQ2AhwgAyADKAJEQQ10NgJEIAMgAygCNEHvdWw2AjQgAyADKAIwQfjZAGw2AjAgAyADKAI0IAMoAjAgAygCRGtqNgI0IAMgAygCUCADKAJIakHSzABsIAMoAkAgAygCOGpBlDBsajYCMCADKAIMIAMoAjQgAygCMGogAygCSEH3lwFsayADKAJAQdfHAGxqQYAIakELdTYCFCADIAMoAlAgAygCTGpBt9UAbCADKAI8IAMoAjhrQfIdbGo2AiwgAygCDCADKAI0IAMoAixqIAMoAkxBkhtsayADKAI8QbzEAWxrQYAIakELdTYCDCADKAIMIAMoAjggAygCRCADKAIwIAMoAixqamogAygCUCADKAI4akGQyABsa0GACGpBC3U2AgQgAyADKAIMQSBqNgIMIAMgAygCBEEBajYCBAwBCwsgAyADKAJcNgIMIANBBzYCBANAIAMoAgRBAEhFBEAgAyADKAIMKAIAIAMoAgwoAsABajYCUCADIAMoAgwoAiAgAygCDCgCoAFqNgJMIAMgAygCDCgCQCADKAIMKAKAAWo2AkggAyADKAIMKAJgNgJEIAMgAygCDCgCACADKAIMKALAAWs2AjQgAyADKAIMKAIgIAMoAgwoAqABazYCMCADIAMoAgwoAkAgAygCDCgCgAFrNgIsIAMgAygCUCADKAJIajYCGCADKAIMIAMoAkQgAygCGCADKAJMampBzNMAbEGAgAJqQRB1NgIAIAMgAygCRCADKAJEajYCRCADIAMoAhggAygCRGs2AhggAyADKAIYIAMoAkRrNgIYIAMgAygCGEHHHWw2AhggAyADKAJQIAMoAkhrQfrMAGw2AhQgAyADKAJMIAMoAkhrQacabDYCECADKAIMIAMoAhAgAygCGCADKAIUampBgIACakEQdTYCQCADIAMoAhggAygCFGs2AhggAyADKAJQIAMoAkxrQdrJAGw2AhQgAygCDCADKAIUIAMoAhBqIAMoAkwgAygCRGtBjjtsa0GAgAJqQRB1NgKAASADKAIMIAMoAhggAygCFGpBgIACakEQdTYCwAEgAyADKAI0IAMoAjBqQZnOAGw2AkwgAyADKAI0IAMoAjBrQZ4ObDYCSCADIAMoAkwgAygCSGs2AlAgAyADKAJIIAMoAkxqNgJMIAMgAygCMCADKAIsakHgjH9sNgJIIAMgAygCSCADKAJMajYCTCADIAMoAjQgAygCLGpBpTNsNgJEIAMgAygCRCADKAJQajYCUCADIAMoAkggAygCRCADKAIsQbGcAWxqajYCSCADKAIMIAMoAlBBgIACakEQdTYCICADKAIMIAMoAkxBgIACakEQdTYCYCADKAIMIAMoAkhBgIACakEQdTYCoAEgAyADKAIMQQRqNgIMIAMgAygCBEF/ajYCBAwBCwsLshABAX8jAEHgAGsiAyAANgJcIAMgATYCWCADIAI2AlQgAyADKAJcNgIMIANBADYCBCADQQA2AgQDQCADKAIEQQhORQRAIAMgAygCWCADKAIEQQJ0aigCACADKAJUajYCCCADIAMoAggtAAAgAygCCC0AD2o2AlAgAyADKAIILQABIAMoAggtAA5qNgJMIAMgAygCCC0AAiADKAIILQANajYCSCADIAMoAggtAAMgAygCCC0ADGo2AkQgAyADKAIILQAEIAMoAggtAAtqNgJAIAMgAygCCC0ABSADKAIILQAKajYCPCADIAMoAggtAAYgAygCCC0ACWo2AjggAyADKAIILQAHIAMoAggtAAhqNgI0IAMgAygCUCADKAI0ajYCMCADIAMoAlAgAygCNGs2AiAgAyADKAJMIAMoAjhqNgIsIAMgAygCTCADKAI4azYCHCADIAMoAkggAygCPGo2AiggAyADKAJIIAMoAjxrNgIYIAMgAygCRCADKAJAajYCJCADIAMoAkQgAygCQGs2AhQgAyADKAIILQAAIAMoAggtAA9rNgJQIAMgAygCCC0AASADKAIILQAOazYCTCADIAMoAggtAAIgAygCCC0ADWs2AkggAyADKAIILQADIAMoAggtAAxrNgJEIAMgAygCCC0ABCADKAIILQALazYCQCADIAMoAggtAAUgAygCCC0ACms2AjwgAyADKAIILQAGIAMoAggtAAlrNgI4IAMgAygCCC0AByADKAIILQAIazYCNCADKAIMIAMoAiQgAygCKCADKAIwIAMoAixqampBgBBrQQJ0NgIAIAMoAgwgAygCMCADKAIka0HP0wBsIAMoAiwgAygCKGtB0SJsakGACGpBC3U2AhAgAyADKAIUIAMoAhxrQdQRbCADKAIgIAMoAhhrQePYAGxqNgIwIAMoAgwgAygCMCADKAIcQfXcAGxqIAMoAhhBh4sBbGpBgAhqQQt1NgIIIAMoAgwgAygCMCADKAIgQcINbGsgAygCFEH5wwBsa0GACGpBC3U2AhggAyADKAJQIAMoAkxqQc7WAGwgAygCOCADKAI0a0GjGmxqNgIsIAMgAygCUCADKAJIakHpzwBsIAMoAjwgAygCNGpB1SpsajYCKCADIAMoAlAgAygCRGpB/MUAbCADKAJAIAMoAjRrQbY5bGo2AiQgAyADKAJMIAMoAkhqQfAIbCADKAI4IAMoAjxrQYnaAGxqNgIgIAMgAygCTCADKAJEakGrVWwgAygCQCADKAI4akGXsH9sajYCHCADIAMoAkggAygCRGpBsql/bCADKAI8IAMoAkBrQaMabGo2AhggAyADKAIkIAMoAiwgAygCKGpqIAMoAlBBqpIBbGsgAygCNEHzMWxqNgIwIAMgAygCLCADKAIgIAMoAhxqIAMoAkxBzQRsaiADKAI4Qb/qAGxrajYCLCADIAMoAiggAygCICADKAIYaiADKAJIQYbIAGxrIAMoAjxBx84AbGpqNgIoIAMgAygCJCADKAIcIAMoAhhqIAMoAkRBmMQAbGogAygCQEHgigFsamo2AiQgAygCDCADKAIwQYAIakELdTYCBCADKAIMIAMoAixBgAhqQQt1NgIMIAMoAgwgAygCKEGACGpBC3U2AhQgAygCDCADKAIkQYAIakELdTYCHCADIAMoAgxBIGo2AgwgAyADKAIEQQFqNgIEDAELCyADIAMoAlw2AgwgA0EHNgIEA0AgAygCBEEASEUEQCADIAMoAgwoAgAgAygCDCgC4AFqNgJQIAMgAygCDCgCICADKAIMKALAAWo2AkwgAyADKAIMKAJAIAMoAgwoAqABajYCSCADIAMoAgwoAmAgAygCDCgCgAFqNgJEIAMgAygCUCADKAJEajYCMCADIAMoAlAgAygCRGs2AiggAyADKAJMIAMoAkhqNgIsIAMgAygCTCADKAJIazYCJCADIAMoAgwoAgAgAygCDCgC4AFrNgJQIAMgAygCDCgCICADKAIMKALAAWs2AkwgAyADKAIMKAJAIAMoAgwoAqABazYCSCADIAMoAgwoAmAgAygCDCgCgAFrNgJEIAMoAgwgAygCMCADKAIsakEEakEDdTYCACADKAIMIAMoAjAgAygCLGtBBGpBA3U2AoABIAMgAygCKCADKAIkakHRImw2AhAgAygCDCADKAIQIAMoAihB/jBsakGAgAJqQRB1NgJAIAMoAgwgAygCECADKAIkQaH2AGxrQYCAAmpBEHU2AsABIAMgAygCUCADKAJEajYCMCADIAMoAkwgAygCSGo2AiwgAyADKAJQIAMoAkhqNgIoIAMgAygCTCADKAJEajYCJCADIAMoAiggAygCJGpBocsAbDYCECADIAMoAlBBi+AAbDYCUCADIAMoAkxB1MQBbDYCTCADIAMoAkhBs4MBbDYCSCADIAMoAkRBjhNsNgJEIAMgAygCMEGzRmw2AjAgAyADKAIsQf3bfmw2AiwgAyADKAIoQYRnbDYCKCADIAMoAiRBu4J/bDYCJCADIAMoAhAgAygCKGo2AiggAyADKAIQIAMoAiRqNgIkIAMoAgwgAygCKCADKAJQIAMoAjBqakGAgAJqQRB1NgIgIAMoAgwgAygCJCADKAJMIAMoAixqakGAgAJqQRB1NgJgIAMoAgwgAygCKCADKAJIIAMoAixqakGAgAJqQRB1NgKgASADKAIMIAMoAiQgAygCRCADKAIwampBgIACakEQdTYC4AEgAyADKAIMQQRqNgIMIAMgAygCBEF/ajYCBAwBCwsLjhYBAX8jAEHgAmsiAyQAIAMgADYC3AIgAyABNgLYAiADIAI2AtQCIAMgAygC3AI2AgwgA0EANgIAA0ACQCADIAMoAtgCIAMoAgBBAnRqKAIAIAMoAtQCajYCBCADIAMoAgQtAAAgAygCBC0AD2o2AtACIAMgAygCBC0AASADKAIELQAOajYCzAIgAyADKAIELQACIAMoAgQtAA1qNgLIAiADIAMoAgQtAAMgAygCBC0ADGo2AsQCIAMgAygCBC0ABCADKAIELQALajYCwAIgAyADKAIELQAFIAMoAgQtAApqNgK8AiADIAMoAgQtAAYgAygCBC0ACWo2ArgCIAMgAygCBC0AByADKAIELQAIajYCtAIgAyADKALQAiADKAK0Amo2ArACIAMgAygC0AIgAygCtAJrNgKgAiADIAMoAswCIAMoArgCajYCrAIgAyADKALMAiADKAK4Ams2ApwCIAMgAygCyAIgAygCvAJqNgKoAiADIAMoAsgCIAMoArwCazYCmAIgAyADKALEAiADKALAAmo2AqQCIAMgAygCxAIgAygCwAJrNgKUAiADIAMoAgQtAAAgAygCBC0AD2s2AtACIAMgAygCBC0AASADKAIELQAOazYCzAIgAyADKAIELQACIAMoAgQtAA1rNgLIAiADIAMoAgQtAAMgAygCBC0ADGs2AsQCIAMgAygCBC0ABCADKAIELQALazYCwAIgAyADKAIELQAFIAMoAgQtAAprNgK8AiADIAMoAgQtAAYgAygCBC0ACWs2ArgCIAMgAygCBC0AByADKAIELQAIazYCtAIgAygCDCADKAKkAiADKAKoAiADKAKwAiADKAKsAmpqakGAEGtBAnQ2AgAgAygCDCADKAKwAiADKAKkAmtBz9MAbCADKAKsAiADKAKoAmtB0SJsakGACGpBC3U2AhAgAyADKAKUAiADKAKcAmtB1BFsIAMoAqACIAMoApgCa0Hj2ABsajYCsAIgAygCDCADKAKwAiADKAKcAkH13ABsaiADKAKYAkGHiwFsakGACGpBC3U2AgggAygCDCADKAKwAiADKAKgAkHCDWxrIAMoApQCQfnDAGxrQYAIakELdTYCGCADIAMoAtACIAMoAswCakHO1gBsIAMoArgCIAMoArQCa0GjGmxqNgKsAiADIAMoAtACIAMoAsgCakHpzwBsIAMoArwCIAMoArQCakHVKmxqNgKoAiADIAMoAtACIAMoAsQCakH8xQBsIAMoAsACIAMoArQCa0G2OWxqNgKkAiADIAMoAswCIAMoAsgCakHwCGwgAygCuAIgAygCvAJrQYnaAGxqNgKgAiADIAMoAswCIAMoAsQCakGrVWwgAygCwAIgAygCuAJqQZewf2xqNgKcAiADIAMoAsgCIAMoAsQCakGyqX9sIAMoArwCIAMoAsACa0GjGmxqNgKYAiADIAMoAqQCIAMoAqwCIAMoAqgCamogAygC0AJBqpIBbGsgAygCtAJB8zFsajYCsAIgAyADKAKsAiADKAKgAiADKAKcAmogAygCzAJBzQRsaiADKAK4AkG/6gBsa2o2AqwCIAMgAygCqAIgAygCoAIgAygCmAJqIAMoAsgCQYbIAGxrIAMoArwCQcfOAGxqajYCqAIgAyADKAKkAiADKAKcAiADKAKYAmogAygCxAJBmMQAbGogAygCwAJB4IoBbGpqNgKkAiADKAIMIAMoArACQYAIakELdTYCBCADKAIMIAMoAqwCQYAIakELdTYCDCADKAIMIAMoAqgCQYAIakELdTYCFCADKAIMIAMoAqQCQYAIakELdTYCHCADIAMoAgBBAWo2AgACQCADKAIAQQhHBEAgAygCAEEQRg0CIAMgAygCDEEgajYCDAwBCyADIANBEGo2AgwLDAELCyADIAMoAtwCNgIMIAMgA0EQajYCCCADQQc2AgADQCADKAIAQQBIRQRAIAMgAygCDCgCACADKAIIKALgAWo2AtACIAMgAygCDCgCICADKAIIKALAAWo2AswCIAMgAygCDCgCQCADKAIIKAKgAWo2AsgCIAMgAygCDCgCYCADKAIIKAKAAWo2AsQCIAMgAygCDCgCgAEgAygCCCgCYGo2AsACIAMgAygCDCgCoAEgAygCCCgCQGo2ArwCIAMgAygCDCgCwAEgAygCCCgCIGo2ArgCIAMgAygCDCgC4AEgAygCCCgCAGo2ArQCIAMgAygC0AIgAygCtAJqNgKwAiADIAMoAtACIAMoArQCazYCoAIgAyADKALMAiADKAK4Amo2AqwCIAMgAygCzAIgAygCuAJrNgKcAiADIAMoAsgCIAMoArwCajYCqAIgAyADKALIAiADKAK8Ams2ApgCIAMgAygCxAIgAygCwAJqNgKkAiADIAMoAsQCIAMoAsACazYClAIgAyADKAIMKAIAIAMoAggoAuABazYC0AIgAyADKAIMKAIgIAMoAggoAsABazYCzAIgAyADKAIMKAJAIAMoAggoAqABazYCyAIgAyADKAIMKAJgIAMoAggoAoABazYCxAIgAyADKAIMKAKAASADKAIIKAJgazYCwAIgAyADKAIMKAKgASADKAIIKAJAazYCvAIgAyADKAIMKALAASADKAIIKAIgazYCuAIgAyADKAIMKALgASADKAIIKAIAazYCtAIgAygCDCADKAKkAiADKAKoAiADKAKwAiADKAKsAmpqakEIakEEdTYCACADKAIMIAMoArACIAMoAqQCa0HP0wBsIAMoAqwCIAMoAqgCa0HRImxqQYCABGpBEXU2AoABIAMgAygClAIgAygCnAJrQdQRbCADKAKgAiADKAKYAmtB49gAbGo2ArACIAMoAgwgAygCsAIgAygCnAJB9dwAbGogAygCmAJBh4sBbGpBgIAEakERdTYCQCADKAIMIAMoArACIAMoAqACQcINbGsgAygClAJB+cMAbGtBgIAEakERdTYCwAEgAyADKALQAiADKALMAmpBztYAbCADKAK4AiADKAK0AmtBoxpsajYCrAIgAyADKALQAiADKALIAmpB6c8AbCADKAK8AiADKAK0AmpB1SpsajYCqAIgAyADKALQAiADKALEAmpB/MUAbCADKALAAiADKAK0AmtBtjlsajYCpAIgAyADKALMAiADKALIAmpB8AhsIAMoArgCIAMoArwCa0GJ2gBsajYCoAIgAyADKALMAiADKALEAmpBq1VsIAMoAsACIAMoArgCakGXsH9sajYCnAIgAyADKALIAiADKALEAmpBsql/bCADKAK8AiADKALAAmtBoxpsajYCmAIgAyADKAKkAiADKAKsAiADKAKoAmpqIAMoAtACQaqSAWxrIAMoArQCQfMxbGo2ArACIAMgAygCrAIgAygCoAIgAygCnAJqIAMoAswCQc0EbGogAygCuAJBv+oAbGtqNgKsAiADIAMoAqgCIAMoAqACIAMoApgCaiADKALIAkGGyABsayADKAK8AkHHzgBsamo2AqgCIAMgAygCpAIgAygCnAIgAygCmAJqIAMoAsQCQZjEAGxqIAMoAsACQeCKAWxqajYCpAIgAygCDCADKAKwAkGAgARqQRF1NgIgIAMoAgwgAygCrAJBgIAEakERdTYCYCADKAIMIAMoAqgCQYCABGpBEXU2AqABIAMoAgwgAygCpAJBgIAEakERdTYC4AEgAyADKAIMQQRqNgIMIAMgAygCCEEEajYCCCADIAMoAgBBf2o2AgAMAQsLIANB4AJqJAAL3BMBAX8jAEHQAmsiAyQAIAMgADYCzAIgAyABNgLIAiADIAI2AsQCIAMgAygCzAI2AgwgA0EANgIAA0ACQCADIAMoAsgCIAMoAgBBAnRqKAIAIAMoAsQCajYCBCADIAMoAgQtAAAgAygCBC0ADmo2AsACIAMgAygCBC0AASADKAIELQANajYCvAIgAyADKAIELQACIAMoAgQtAAxqNgK4AiADIAMoAgQtAAMgAygCBC0AC2o2ArQCIAMgAygCBC0ABCADKAIELQAKajYCsAIgAyADKAIELQAFIAMoAgQtAAlqNgKsAiADIAMoAgQtAAYgAygCBC0ACGo2AqgCIAMgAygCBC0ABzYCpAIgAyADKAIELQAAIAMoAgQtAA5rNgKgAiADIAMoAgQtAAEgAygCBC0ADWs2ApwCIAMgAygCBC0AAiADKAIELQAMazYCmAIgAyADKAIELQADIAMoAgQtAAtrNgKUAiADIAMoAgQtAAQgAygCBC0ACms2ApACIAMgAygCBC0ABSADKAIELQAJazYCjAIgAyADKAIELQAGIAMoAgQtAAhrNgKIAiADIAMoAqwCIAMoAsACIAMoArACamo2AoQCIAMgAygCqAIgAygCvAIgAygCtAJqajYCgAIgAyADKAK4AiADKAKkAmo2AvwBIAMoAgwgAygC/AEgAygChAIgAygCgAJqakGAD2s2AgAgAyADKAL8ASADKAL8AWo2AvwBIAMoAgwgAygChAIgAygC/AFrQZ3JAGwgAygCgAIgAygC/AFrQfwbbGtBgCBqQQ11NgIYIAMgAygCuAIgAygCvAIgAygCsAJqQQF1IAMoAqQCayADKAKkAmtqNgK4AiADIAMoArQCIAMoArgCa0H/4QBsIAMoAqgCIAMoArgCa0GgjwFsazYChAIgAyADKAKsAiADKAK4AmtBjTNsIAMoAsACIAMoArgCa0HsBWxrNgKAAiADIAMoAsACIAMoArQCa0HE2ABsIAMoAqgCIAMoAqwCa0HIPGxqIAMoArwCIAMoArACa0HMMmxqNgL8ASADKAIMIAMoAoQCIAMoAvwBakGAIGpBDXU2AgggAygCDCADKAKAAiADKAL8AWpBgCBqQQ11NgIQIAMgAygCiAIgAygCjAIgAygCoAIgAygCmAJrIAMoApQCa2pqQbHOAGw2ArgCIAMgAygCoAIgAygCkAJrIAMoAowCa0GK1gBsIAMoApwCIAMoApQCayADKAKIAmtBmjVsajYCvAIgAyADKAKYAkGxzgBsNgKYAiADIAMoAqACIAMoAogCa0GC2gBsIAMoApwCIAMoApACakGK1gBsaiADKAKUAiADKAKMAmpB6CRsajYCsAIgAyADKAKYAiADKAKwAiADKAKUAkG5HmwgAygCkAJB8SBsayADKAKIAkHq7ABsampqNgLAAiADIAMoArACIAMoAqACQaBpbCADKAKcAkGkiwFsayADKAKMAkHRN2xraiADKAKYAms2ArQCIAMoAgwgAygCwAJBgCBqQQ11NgIEIAMoAgwgAygCvAJBgCBqQQ11NgIMIAMoAgwgAygCuAJBgCBqQQ11NgIUIAMoAgwgAygCtAJBgCBqQQ11NgIcIAMgAygCAEEBajYCAAJAIAMoAgBBCEcEQCADKAIAQQ9GDQIgAyADKAIMQSBqNgIMDAELIAMgA0EQajYCDAsMAQsLIAMgAygCzAI2AgwgAyADQRBqNgIIIANBBzYCAANAIAMoAgBBAEhFBEAgAyADKAIMKAIAIAMoAggoAsABajYCwAIgAyADKAIMKAIgIAMoAggoAqABajYCvAIgAyADKAIMKAJAIAMoAggoAoABajYCuAIgAyADKAIMKAJgIAMoAggoAmBqNgK0AiADIAMoAgwoAoABIAMoAggoAkBqNgKwAiADIAMoAgwoAqABIAMoAggoAiBqNgKsAiADIAMoAgwoAsABIAMoAggoAgBqNgKoAiADIAMoAgwoAuABNgKkAiADIAMoAgwoAgAgAygCCCgCwAFrNgKgAiADIAMoAgwoAiAgAygCCCgCoAFrNgKcAiADIAMoAgwoAkAgAygCCCgCgAFrNgKYAiADIAMoAgwoAmAgAygCCCgCYGs2ApQCIAMgAygCDCgCgAEgAygCCCgCQGs2ApACIAMgAygCDCgCoAEgAygCCCgCIGs2AowCIAMgAygCDCgCwAEgAygCCCgCAGs2AogCIAMgAygCrAIgAygCwAIgAygCsAJqajYChAIgAyADKAKoAiADKAK8AiADKAK0AmpqNgKAAiADIAMoArgCIAMoAqQCajYC/AEgAygCDCADKAL8ASADKAKEAiADKAKAAmpqQenIAGxBgIABakEPdTYCACADIAMoAvwBIAMoAvwBajYC/AEgAygCDCADKAKEAiADKAL8AWtBqNMAbCADKAKAAiADKAL8AWtB6R9sa0GAgAFqQQ91NgLAASADIAMoArgCIAMoArwCIAMoArACakEBdSADKAKkAmsgAygCpAJrajYCuAIgAyADKAK0AiADKAK4AmtBv+8AbCADKAKoAiADKAK4AmtB/qIBbGs2AoQCIAMgAygCrAIgAygCuAJrQZI6bCADKALAAiADKAK4AmtB1AZsazYCgAIgAyADKALAAiADKAK0AmtB3eQAbCADKAKoAiADKAKsAmtB9MQAbGogAygCvAIgAygCsAJrQck5bGo2AvwBIAMoAgwgAygChAIgAygC/AFqQYCAAWpBD3U2AkAgAygCDCADKAKAAiADKAL8AWpBgIABakEPdTYCgAEgAyADKAKIAiADKAKMAiADKAKgAiADKAKYAmsgAygClAJrampBl9kAbDYCuAIgAyADKAKgAiADKAKQAmsgAygCjAJrQfjhAGwgAygCnAIgAygClAJrIAMoAogCa0HEPGxqNgK8AiADIAMoApgCQZfZAGw2ApgCIAMgAygCoAIgAygCiAJrQbXmAGwgAygCnAIgAygCkAJqQfjhAGxqIAMoApQCIAMoAowCakHxKWxqNgKwAiADIAMoApgCIAMoArACIAMoApQCQdIibCADKAKQAkG0JWxrIAMoAogCQer7AGxqamo2AsACIAMgAygCsAIgAygCoAJBjmZsIAMoApwCQbyeAWxrIAMoAowCQaY/bGtqIAMoApgCazYCtAIgAygCDCADKALAAkGAgAFqQQ91NgIgIAMoAgwgAygCvAJBgIABakEPdTYCYCADKAIMIAMoArgCQYCAAWpBD3U2AqABIAMoAgwgAygCtAJBgIABakEPdTYC4AEgAyADKAIMQQRqNgIMIAMgAygCCEEEajYCCCADIAMoAgBBf2o2AgAMAQsLIANB0AJqJAAL+hIBAX8jAEGgAmsiAyQAIAMgADYCnAIgAyABNgKYAiADIAI2ApQCIAMgAygCnAI2AgwgA0EANgIAA0ACQCADIAMoApgCIAMoAgBBAnRqKAIAIAMoApQCajYCBCADIAMoAgQtAAAgAygCBC0ADWo2ApACIAMgAygCBC0AASADKAIELQAMajYCjAIgAyADKAIELQACIAMoAgQtAAtqNgKIAiADIAMoAgQtAAMgAygCBC0ACmo2AugBIAMgAygCBC0ABCADKAIELQAJajYCgAIgAyADKAIELQAFIAMoAgQtAAhqNgL8ASADIAMoAgQtAAYgAygCBC0AB2o2AvgBIAMgAygCkAIgAygC+AFqNgL0ASADIAMoApACIAMoAvgBazYC5AEgAyADKAKMAiADKAL8AWo2AvABIAMgAygCjAIgAygC/AFrNgLgASADIAMoAogCIAMoAoACajYC7AEgAyADKAKIAiADKAKAAms2AtwBIAMgAygCBC0AACADKAIELQANazYCkAIgAyADKAIELQABIAMoAgQtAAxrNgKMAiADIAMoAgQtAAIgAygCBC0AC2s2AogCIAMgAygCBC0AAyADKAIELQAKazYChAIgAyADKAIELQAEIAMoAgQtAAlrNgKAAiADIAMoAgQtAAUgAygCBC0ACGs2AvwBIAMgAygCBC0ABiADKAIELQAHazYC+AEgAygCDCADKALoASADKALsASADKAL0ASADKALwAWpqakGADms2AgAgAyADKALoASADKALoAWo2AugBIAMoAgwgAygC9AEgAygC6AFrQcbRAGwgAygC8AEgAygC6AFrQZIUbGogAygC7AEgAygC6AFrQbc4bGtBgCBqQQ11NgIQIAMgAygC5AEgAygC4AFqQeLGAGw2AvQBIAMoAgwgAygC9AEgAygC5AFBvRFsaiADKALcAUGjJ2xqQYAgakENdTYCCCADKAIMIAMoAvQBIAMoAuABQYTuAGxrIAMoAtwBQZ/YAGxrQYAgakENdTYCGCADIAMoAowCIAMoAogCajYC9AEgAyADKAL8ASADKAKAAms2AvABIAMoAgwgAygChAIgAygCkAIgAygC9AFraiADKALwAWsgAygC+AFrNgIcIAMgAygChAJBDXQ2AoQCIAMgAygC9AFB73VsNgL0ASADIAMoAvABQfjZAGw2AvABIAMgAygC9AEgAygC8AEgAygChAJrajYC9AEgAyADKAKQAiADKAKIAmpB0swAbCADKAKAAiADKAL4AWpBlDBsajYC8AEgAygCDCADKAL0ASADKALwAWogAygCiAJB95cBbGsgAygCgAJB18cAbGpBgCBqQQ11NgIUIAMgAygCkAIgAygCjAJqQbfVAGwgAygC/AEgAygC+AFrQfIdbGo2AuwBIAMoAgwgAygC9AEgAygC7AFqIAMoAowCQZIbbGsgAygC/AFBvMQBbGtBgCBqQQ11NgIMIAMoAgwgAygC+AEgAygChAIgAygC8AEgAygC7AFqamogAygCkAIgAygC+AFqQZDIAGxrQYAgakENdTYCBCADIAMoAgBBAWo2AgACQCADKAIAQQhHBEAgAygCAEEORg0CIAMgAygCDEEgajYCDAwBCyADIANBEGo2AgwLDAELCyADIAMoApwCNgIMIAMgA0EQajYCCCADQQc2AgADQCADKAIAQQBIRQRAIAMgAygCDCgCACADKAIIKAKgAWo2ApACIAMgAygCDCgCICADKAIIKAKAAWo2AowCIAMgAygCDCgCQCADKAIIKAJgajYCiAIgAyADKAIMKAJgIAMoAggoAkBqNgLoASADIAMoAgwoAoABIAMoAggoAiBqNgKAAiADIAMoAgwoAqABIAMoAggoAgBqNgL8ASADIAMoAgwoAsABIAMoAgwoAuABajYC+AEgAyADKAKQAiADKAL4AWo2AvQBIAMgAygCkAIgAygC+AFrNgLkASADIAMoAowCIAMoAvwBajYC8AEgAyADKAKMAiADKAL8AWs2AuABIAMgAygCiAIgAygCgAJqNgLsASADIAMoAogCIAMoAoACazYC3AEgAyADKAIMKAIAIAMoAggoAqABazYCkAIgAyADKAIMKAIgIAMoAggoAoABazYCjAIgAyADKAIMKAJAIAMoAggoAmBrNgKIAiADIAMoAgwoAmAgAygCCCgCQGs2AoQCIAMgAygCDCgCgAEgAygCCCgCIGs2AoACIAMgAygCDCgCoAEgAygCCCgCAGs2AvwBIAMgAygCDCgCwAEgAygCDCgC4AFrNgL4ASADKAIMIAMoAugBIAMoAuwBIAMoAvQBIAMoAvABampqQeYpbEGAQGtBDnU2AgAgAyADKALoASADKALoAWo2AugBIAMoAgwgAygC9AEgAygC6AFrQaE1bCADKALwASADKALoAWtBlA1saiADKALsASADKALoAWtB7SRsa0GAQGtBDnU2AoABIAMgAygC5AEgAygC4AFqQZsubDYC9AEgAygCDCADKAL0ASADKALkAUG1C2xqIAMoAtwBQdMZbGpBgEBrQQ51NgJAIAMoAgwgAygC9AEgAygC4AFB7scAbGsgAygC3AFB0Dlsa0GAQGtBDnU2AsABIAMgAygCjAIgAygCiAJqNgL0ASADIAMoAvwBIAMoAoACazYC8AEgAygCDCADKAKEAiADKAKQAiADKAL0AWtqIAMoAvABayADKAL4AWtB5ilsQYBAa0EOdTYC4AEgAyADKAKEAkHmKWw2AoQCIAMgAygC9AFBsXlsNgL0ASADIAMoAvABQd46bDYC8AEgAyADKAL0ASADKALwASADKAKEAmtqNgL0ASADIAMoApACIAMoAogCakGGMmwgAygCgAIgAygC+AFqQbkfbGo2AvABIAMoAgwgAygC9AEgAygC8AFqIAMoAogCQZzjAGxrIAMoAoACQegubGpBgEBrQQ51NgKgASADIAMoApACIAMoAowCakHlN2wgAygC/AEgAygC+AFrQcMTbGo2AuwBIAMoAgwgAygC9AEgAygC7AFqIAMoAowCQd0RbGsgAygC/AFBp4ABbGtBgEBrQQ51NgJgIAMoAgwgAygChAIgAygC8AEgAygC7AFqaiADKAKQAkGNL2xrIAMoAvgBQacFbGtBgEBrQQ51NgIgIAMgAygCDEEEajYCDCADIAMoAghBBGo2AgggAyADKAIAQX9qNgIADAELCyADQaACaiQAC+cUAQF/IwBBgAJrIgMkACADIAA2AvwBIAMgATYC+AEgAyACNgL0ASADIAMoAvwBNgIMIANBADYCAANAAkAgAyADKAL4ASADKAIAQQJ0aigCACADKAL0AWo2AgQgAyADKAIELQAAIAMoAgQtAAxqNgLwASADIAMoAgQtAAEgAygCBC0AC2o2AuwBIAMgAygCBC0AAiADKAIELQAKajYC6AEgAyADKAIELQADIAMoAgQtAAlqNgLkASADIAMoAgQtAAQgAygCBC0ACGo2AuABIAMgAygCBC0ABSADKAIELQAHajYC3AEgAyADKAIELQAGNgLYASADIAMoAgQtAAAgAygCBC0ADGs2AtQBIAMgAygCBC0AASADKAIELQALazYC0AEgAyADKAIELQACIAMoAgQtAAprNgLMASADIAMoAgQtAAMgAygCBC0ACWs2AsgBIAMgAygCBC0ABCADKAIELQAIazYCxAEgAyADKAIELQAFIAMoAgQtAAdrNgLAASADKAIMIAMoAtgBIAMoAtwBIAMoAuABIAMoAuQBIAMoAugBIAMoAvABIAMoAuwBampqampqQYANazYCACADIAMoAtgBIAMoAtgBajYC2AEgAyADKALwASADKALYAWs2AvABIAMgAygC7AEgAygC2AFrNgLsASADIAMoAugBIAMoAtgBazYC6AEgAyADKALkASADKALYAWs2AuQBIAMgAygC4AEgAygC2AFrNgLgASADIAMoAtwBIAMoAtgBazYC3AEgAygCDCADKALwAUHx1wBsIAMoAuwBQeDDAGxqIAMoAugBQYwgbGogAygC5AFB9ApsayADKALgAUG1M2xrIAMoAtwBQZLQAGxrQYAgakENdTYCCCADIAMoAvABIAMoAugBa0H5yQBsIAMoAuQBIAMoAuABa0HyG2xrIAMoAuwBIAMoAtwBa0GgFGxrNgK8ASADIAMoAvABIAMoAugBakGZBmwgAygC5AEgAygC4AFqQf47bGsgAygC7AEgAygC3AFqQZUfbGo2ArgBIAMoAgwgAygCvAEgAygCuAFqQYAgakENdTYCECADKAIMIAMoArwBIAMoArgBa0GAIGpBDXU2AhggAyADKALUASADKALQAWpB0NQAbDYC7AEgAyADKALUASADKALMAWpBvsoAbDYC6AEgAyADKALUASADKALIAWpBgjxsIAMoAsQBIAMoAsABakHVFWxqNgLkASADIAMoAuQBIAMoAuwBIAMoAugBamogAygC1AFBpYEBbGsgAygCxAFBsxRsajYC8AEgAyADKALEASADKALAAWtBgjxsIAMoAtABIAMoAswBakHVFWxrNgLgASADIAMoAtABIAMoAsgBakHCtX9sNgLcASADIAMoAuwBIAMoAuABIAMoAtwBaiADKALQAUHLNWxqIAMoAsQBQe+VAWxrajYC7AEgAyADKALMASADKALIAWpB+FVsNgLYASADIAMoAugBIAMoAuABIAMoAtgBaiADKALMAUHP5ABsayADKALAAUHTkAFsamo2AugBIAMgAygC5AEgAygC3AEgAygC2AFqIAMoAsgBQZSNAWxqIAMoAsABQcHvAGxrajYC5AEgAygCDCADKALwAUGAIGpBDXU2AgQgAygCDCADKALsAUGAIGpBDXU2AgwgAygCDCADKALoAUGAIGpBDXU2AhQgAygCDCADKALkAUGAIGpBDXU2AhwgAyADKAIAQQFqNgIAAkAgAygCAEEIRwRAIAMoAgBBDUYNAiADIAMoAgxBIGo2AgwMAQsgAyADQRBqNgIMCwwBCwsgAyADKAL8ATYCDCADIANBEGo2AgggA0EHNgIAA0AgAygCAEEASEUEQCADIAMoAgwoAgAgAygCCCgCgAFqNgLwASADIAMoAgwoAiAgAygCCCgCYGo2AuwBIAMgAygCDCgCQCADKAIIKAJAajYC6AEgAyADKAIMKAJgIAMoAggoAiBqNgLkASADIAMoAgwoAoABIAMoAggoAgBqNgLgASADIAMoAgwoAqABIAMoAgwoAuABajYC3AEgAyADKAIMKALAATYC2AEgAyADKAIMKAIAIAMoAggoAoABazYC1AEgAyADKAIMKAIgIAMoAggoAmBrNgLQASADIAMoAgwoAkAgAygCCCgCQGs2AswBIAMgAygCDCgCYCADKAIIKAIgazYCyAEgAyADKAIMKAKAASADKAIIKAIAazYCxAEgAyADKAIMKAKgASADKAIMKALgAWs2AsABIAMoAgwgAygC2AEgAygC3AEgAygC4AEgAygC5AEgAygC6AEgAygC8AEgAygC7AFqampqampBvTBsQYBAa0EOdTYCACADIAMoAtgBIAMoAtgBajYC2AEgAyADKALwASADKALYAWs2AvABIAMgAygC7AEgAygC2AFrNgLsASADIAMoAugBIAMoAtgBazYC6AEgAyADKALkASADKALYAWs2AuQBIAMgAygC4AEgAygC2AFrNgLgASADIAMoAtwBIAMoAtgBazYC3AEgAygCDCADKALwAUHIwgBsIAMoAuwBQagzbGogAygC6AFBqBhsaiADKALkAUGiCGxrIAMoAuABQfkmbGsgAygC3AFB2jxsa0GAQGtBDnU2AkAgAyADKALwASADKALoAWtBgThsIAMoAuQBIAMoAuABa0GQFWxrIAMoAuwBIAMoAtwBa0GrD2xrNgK8ASADIAMoAvABIAMoAugBakHZBGwgAygC5AEgAygC4AFqQbgtbGsgAygC7AEgAygC3AFqQc0XbGo2ArgBIAMoAgwgAygCvAEgAygCuAFqQYBAa0EOdTYCgAEgAygCDCADKAK8ASADKAK4AWtBgEBrQQ51NgLAASADIAMoAtQBIAMoAtABakGMwABsNgLsASADIAMoAtQBIAMoAswBakG1OGw2AugBIAMgAygC1AEgAygCyAFqQbstbCADKALEASADKALAAWpBtBBsajYC5AEgAyADKALkASADKALsASADKALoAWpqIAMoAtQBQfbhAGxrIAMoAsQBQboPbGo2AvABIAMgAygCxAEgAygCwAFrQbstbCADKALQASADKALMAWpBtBBsazYC4AEgAyADKALQASADKALIAWpBy0dsNgLcASADIAMoAuwBIAMoAuABIAMoAtwBaiADKALQAUHLKGxqIAMoAsQBQcHxAGxrajYC7AEgAyADKALMASADKALIAWpBkmBsNgLYASADIAMoAugBIAMoAuABIAMoAtgBaiADKALMAUGazABsayADKALAAUHH7QBsamo2AugBIAMgAygC5AEgAygC3AEgAygC2AFqIAMoAsgBQfXqAGxqIAMoAsABQbvUAGxrajYC5AEgAygCDCADKALwAUGAQGtBDnU2AiAgAygCDCADKALsAUGAQGtBDnU2AmAgAygCDCADKALoAUGAQGtBDnU2AqABIAMoAgwgAygC5AFBgEBrQQ51NgLgASADIAMoAgxBBGo2AgwgAyADKAIIQQRqNgIIIAMgAygCAEF/ajYCAAwBCwsgA0GAAmokAAuCEQEBfyMAQdABayIDJAAgAyAANgLMASADIAE2AsgBIAMgAjYCxAEgAyADKALMATYCDCADQQA2AgADQAJAIAMgAygCyAEgAygCAEECdGooAgAgAygCxAFqNgIEIAMgAygCBC0AACADKAIELQALajYCwAEgAyADKAIELQABIAMoAgQtAApqNgK8ASADIAMoAgQtAAIgAygCBC0ACWo2ArgBIAMgAygCBC0AAyADKAIELQAIajYCtAEgAyADKAIELQAEIAMoAgQtAAdqNgKwASADIAMoAgQtAAUgAygCBC0ABmo2AqwBIAMgAygCwAEgAygCrAFqNgKoASADIAMoAsABIAMoAqwBazYCnAEgAyADKAK8ASADKAKwAWo2AqQBIAMgAygCvAEgAygCsAFrNgKYASADIAMoArgBIAMoArQBajYCoAEgAyADKAK4ASADKAK0AWs2ApQBIAMgAygCBC0AACADKAIELQALazYCwAEgAyADKAIELQABIAMoAgQtAAprNgK8ASADIAMoAgQtAAIgAygCBC0ACWs2ArgBIAMgAygCBC0AAyADKAIELQAIazYCtAEgAyADKAIELQAEIAMoAgQtAAdrNgKwASADIAMoAgQtAAUgAygCBC0ABms2AqwBIAMoAgwgAygCoAEgAygCqAEgAygCpAFqakGADGs2AgAgAygCDCADKAKcASADKAKYAWsgAygClAFrNgIYIAMoAgwgAygCqAEgAygCoAFrQbHOAGxBgCBqQQ11NgIQIAMoAgwgAygCmAEgAygClAFrIAMoApwBIAMoApQBakG21wBsakGAIGpBDXU2AgggAyADKAK8ASADKAKwAWpB0SJsNgKoASADIAMoAqgBIAMoArwBQf4wbGo2ApgBIAMgAygCqAEgAygCsAFBofYAbGs2ApQBIAMgAygCwAEgAygCuAFqQefHAGw2AqABIAMgAygCwAEgAygCtAFqQY03bDYCnAEgAyADKAKYASADKAKgASADKAKcAWpqIAMoAsABQZYlbGsgAygCrAFB6AtsajYCqAEgAyADKAK4ASADKAK0AWpBmHRsNgKkASADIAMoAqABIAMoAqQBIAMoApQBayADKAK4AUHdlQFsayADKAKsAUGNN2xqajYCoAEgAyADKAKcASADKAKkASADKAKYAWsgAygCtAFBui5saiADKAKsAUHnxwBsa2o2ApwBIAMgAygClAEgAygCwAEgAygCtAFrQc/TAGxqIAMoArgBIAMoAqwBakHRImxrNgKkASADKAIMIAMoAqgBQYAgakENdTYCBCADKAIMIAMoAqQBQYAgakENdTYCDCADKAIMIAMoAqABQYAgakENdTYCFCADKAIMIAMoApwBQYAgakENdTYCHCADIAMoAgBBAWo2AgACQCADKAIAQQhHBEAgAygCAEEMRg0CIAMgAygCDEEgajYCDAwBCyADIANBEGo2AgwLDAELCyADIAMoAswBNgIMIAMgA0EQajYCCCADQQc2AgADQCADKAIAQQBIRQRAIAMgAygCDCgCACADKAIIKAJgajYCwAEgAyADKAIMKAIgIAMoAggoAkBqNgK8ASADIAMoAgwoAkAgAygCCCgCIGo2ArgBIAMgAygCDCgCYCADKAIIKAIAajYCtAEgAyADKAIMKAKAASADKAIMKALgAWo2ArABIAMgAygCDCgCoAEgAygCDCgCwAFqNgKsASADIAMoAsABIAMoAqwBajYCqAEgAyADKALAASADKAKsAWs2ApwBIAMgAygCvAEgAygCsAFqNgKkASADIAMoArwBIAMoArABazYCmAEgAyADKAK4ASADKAK0AWo2AqABIAMgAygCuAEgAygCtAFrNgKUASADIAMoAgwoAgAgAygCCCgCYGs2AsABIAMgAygCDCgCICADKAIIKAJAazYCvAEgAyADKAIMKAJAIAMoAggoAiBrNgK4ASADIAMoAgwoAmAgAygCCCgCAGs2ArQBIAMgAygCDCgCgAEgAygCDCgC4AFrNgKwASADIAMoAgwoAqABIAMoAgwoAsABazYCrAEgAygCDCADKAKgASADKAKoASADKAKkAWpqQfI4bEGAQGtBDnU2AgAgAygCDCADKAKcASADKAKYAWsgAygClAFrQfI4bEGAQGtBDnU2AsABIAMoAgwgAygCqAEgAygCoAFrQdbFAGxBgEBrQQ51NgKAASADKAIMIAMoApgBIAMoApQBa0HyOGwgAygCnAEgAygClAFqQdvNAGxqQYBAa0EOdTYCQCADIAMoArwBIAMoArABakHlHmw2AqgBIAMgAygCqAEgAygCvAFBxStsajYCmAEgAyADKAKoASADKAKwAUGP6QBsazYClAEgAyADKALAASADKAK4AWpB6j9sNgKgASADIAMoAsABIAMoArQBakH9MGw2ApwBIAMgAygCmAEgAygCoAEgAygCnAFqaiADKALAAUGFIWxrIAMoAqwBQcAKbGo2AqgBIAMgAygCuAEgAygCtAFqQcB1bDYCpAEgAyADKAKgASADKAKkASADKAKUAWsgAygCuAFBjIUBbGsgAygCrAFB/TBsamo2AqABIAMgAygCnAEgAygCpAEgAygCmAFrIAMoArQBQaUpbGogAygCrAFB6j9sa2o2ApwBIAMgAygClAEgAygCwAEgAygCtAFrQarKAGxqIAMoArgBIAMoAqwBakHlHmxrNgKkASADKAIMIAMoAqgBQYBAa0EOdTYCICADKAIMIAMoAqQBQYBAa0EOdTYCYCADKAIMIAMoAqABQYBAa0EOdTYCoAEgAygCDCADKAKcAUGAQGtBDnU2AuABIAMgAygCDEEEajYCDCADIAMoAghBBGo2AgggAyADKAIAQX9qNgIADAELCyADQdABaiQAC5ITAQF/IwBBwAFrIgMkACADIAA2ArwBIAMgATYCuAEgAyACNgK0ASADIAMoArwBNgIMIANBADYCAANAAkAgAyADKAK4ASADKAIAQQJ0aigCACADKAK0AWo2AgQgAyADKAIELQAAIAMoAgQtAApqNgKwASADIAMoAgQtAAEgAygCBC0ACWo2AqwBIAMgAygCBC0AAiADKAIELQAIajYCqAEgAyADKAIELQADIAMoAgQtAAdqNgKkASADIAMoAgQtAAQgAygCBC0ABmo2AqABIAMgAygCBC0ABTYCnAEgAyADKAIELQAAIAMoAgQtAAprNgKYASADIAMoAgQtAAEgAygCBC0ACWs2ApQBIAMgAygCBC0AAiADKAIELQAIazYCkAEgAyADKAIELQADIAMoAgQtAAdrNgKMASADIAMoAgQtAAQgAygCBC0ABms2AogBIAMoAgwgAygCnAEgAygCoAEgAygCpAEgAygCqAEgAygCsAEgAygCrAFqampqakGAC2tBAXQ2AgAgAyADKAKcASADKAKcAWo2ApwBIAMgAygCsAEgAygCnAFrNgKwASADIAMoAqwBIAMoApwBazYCrAEgAyADKAKoASADKAKcAWs2AqgBIAMgAygCpAEgAygCnAFrNgKkASADIAMoAqABIAMoApwBazYCoAEgAyADKAKwASADKAKkAWpB7NYAbCADKAKoASADKAKgAWpB8QxsajYChAEgAyADKAKsASADKAKkAWtBoztsNgKAASADIAMoArABIAMoAqwBa0GSzABsNgJ8IAMoAgwgAygChAEgAygCgAFqIAMoAqQBQZbBAGxrIAMoAqABQYPZAGxrQYAQakEMdTYCCCADKAIMIAMoAoABIAMoAnxqIAMoAqwBQf8DbGogAygCqAFB7NYAbGsgAygCoAFBzSVsakGAEGpBDHU2AhAgAygCDCADKAKEASADKAJ8aiADKAKwAUHb5wBsayADKAKoAUG9MmxrQYAQakEMdTYCGCADIAMoApgBIAMoApQBakGq0gBsNgKsASADIAMoApgBIAMoApABakG0xABsNgKoASADIAMoApgBIAMoAowBakH3MGw2AqQBIAMgAygCpAEgAygCrAEgAygCqAFqaiADKAKYAUGK7gBsayADKAKIAUHAGWxqNgKwASADIAMoApQBIAMoApABakGJT2w2AqABIAMgAygClAEgAygCjAFqQbWmf2w2ApwBIAMgAygCrAEgAygCoAEgAygCnAFqIAMoApQBQdjRAGxqIAMoAogBQbTEAGxrajYCrAEgAyADKAKQASADKAKMAWpBwBlsNgKYASADIAMoAqgBIAMoAqABIAMoApgBaiADKAKQAUGm/wBsayADKAKIAUHL2QBsamo2AqgBIAMgAygCpAEgAygCnAEgAygCmAFqIAMoAowBQcfTAGxqIAMoAogBQarSAGxrajYCpAEgAygCDCADKAKwAUGAEGpBDHU2AgQgAygCDCADKAKsAUGAEGpBDHU2AgwgAygCDCADKAKoAUGAEGpBDHU2AhQgAygCDCADKAKkAUGAEGpBDHU2AhwgAyADKAIAQQFqNgIAAkAgAygCAEEIRwRAIAMoAgBBC0YNAiADIAMoAgxBIGo2AgwMAQsgAyADQRBqNgIMCwwBCwsgAyADKAK8ATYCDCADIANBEGo2AgggA0EHNgIAA0AgAygCAEEASEUEQCADIAMoAgwoAgAgAygCCCgCQGo2ArABIAMgAygCDCgCICADKAIIKAIgajYCrAEgAyADKAIMKAJAIAMoAggoAgBqNgKoASADIAMoAgwoAmAgAygCDCgC4AFqNgKkASADIAMoAgwoAoABIAMoAgwoAsABajYCoAEgAyADKAIMKAKgATYCnAEgAyADKAIMKAIAIAMoAggoAkBrNgKYASADIAMoAgwoAiAgAygCCCgCIGs2ApQBIAMgAygCDCgCQCADKAIIKAIAazYCkAEgAyADKAIMKAJgIAMoAgwoAuABazYCjAEgAyADKAIMKAKAASADKAIMKALAAWs2AogBIAMoAgwgAygCnAEgAygCoAEgAygCpAEgAygCqAEgAygCsAEgAygCrAFqampqakHawwBsQYCAAWpBD3U2AgAgAyADKAKcASADKAKcAWo2ApwBIAMgAygCsAEgAygCnAFrNgKwASADIAMoAqwBIAMoApwBazYCrAEgAyADKAKoASADKAKcAWs2AqgBIAMgAygCpAEgAygCnAFrNgKkASADIAMoAqABIAMoApwBazYCoAEgAyADKAKwASADKAKkAWpB79sAbCADKAKoASADKAKgAWpB0A1sajYChAEgAyADKAKsASADKAKkAWtB2j5sNgKAASADIAMoArABIAMoAqwBa0HG0ABsNgJ8IAMoAgwgAygChAEgAygCgAFqIAMoAqQBQfnEAGxrIAMoAqABQZbeAGxrQYCAAWpBD3U2AkAgAygCDCADKAKAASADKAJ8aiADKAKsAUGcBGxqIAMoAqgBQe/bAGxrIAMoAqABQeMnbGpBgIABakEPdTYCgAEgAygCDCADKAKEASADKAJ8aiADKAKwAUHb7QBsayADKAKoAUGzNWxrQYCAAWpBD3U2AsABIAMgAygCmAEgAygClAFqQYzXAGw2AqwBIAMgAygCmAEgAygCkAFqQa7IAGw2AqgBIAMgAygCmAEgAygCjAFqQeIzbDYCpAEgAyADKAKkASADKAKsASADKAKoAWpqIAMoApgBQbn0AGxrIAMoAogBQf0abGo2ArABIAMgAygClAEgAygCkAFqQZ5MbDYCoAEgAyADKAKUASADKAKMAWpBnaF/bDYCnAEgAyADKAKsASADKAKgASADKAKcAWogAygClAFBtdYAbGogAygCiAFBrsgAbGtqNgKsASADIAMoApABIAMoAowBakH9Gmw2ApgBIAMgAygCqAEgAygCoAEgAygCmAFqIAMoApABQdWGAWxrIAMoAogBQePeAGxqajYCqAEgAyADKAKkASADKAKcASADKAKYAWogAygCjAFBstgAbGogAygCiAFBjNcAbGtqNgKkASADKAIMIAMoArABQYCAAWpBD3U2AiAgAygCDCADKAKsAUGAgAFqQQ91NgJgIAMoAgwgAygCqAFBgIABakEPdTYCoAEgAygCDCADKAKkAUGAgAFqQQ91NgLgASADIAMoAgxBBGo2AgwgAyADKAIIQQRqNgIIIAMgAygCAEF/ajYCAAwBCwsgA0HAAWokAAvJDQEBfyMAQZABayIDJAAgAyAANgKMASADIAE2AogBIAMgAjYChAEgAyADKAKMATYCDCADQQA2AgADQAJAIAMgAygCiAEgAygCAEECdGooAgAgAygChAFqNgIEIAMgAygCBC0AACADKAIELQAJajYCgAEgAyADKAIELQABIAMoAgQtAAhqNgJ8IAMgAygCBC0AAiADKAIELQAHajYCZCADIAMoAgQtAAMgAygCBC0ABmo2AnQgAyADKAIELQAEIAMoAgQtAAVqNgJwIAMgAygCgAEgAygCcGo2AmwgAyADKAKAASADKAJwazYCYCADIAMoAnwgAygCdGo2AmggAyADKAJ8IAMoAnRrNgJcIAMgAygCBC0AACADKAIELQAJazYCgAEgAyADKAIELQABIAMoAgQtAAhrNgJ8IAMgAygCBC0AAiADKAIELQAHazYCeCADIAMoAgQtAAMgAygCBC0ABms2AnQgAyADKAIELQAEIAMoAgQtAAVrNgJwIAMoAgwgAygCZCADKAJsIAMoAmhqakGACmtBAXQ2AgAgAyADKAJkIAMoAmRqNgJkIAMoAgwgAygCbCADKAJka0GdyQBsIAMoAmggAygCZGtB/Btsa0GAEGpBDHU2AhAgAyADKAJgIAMoAlxqQZo1bDYCbCADKAIMIAMoAmwgAygCYEHxIGxqQYAQakEMdTYCCCADKAIMIAMoAmwgAygCXEGkiwFsa0GAEGpBDHU2AhggAyADKAKAASADKAJwajYCbCADIAMoAnwgAygCdGs2AmggAygCDCADKAJsIAMoAmhrIAMoAnhrQQF0NgIUIAMgAygCeEENdDYCeCADKAIMIAMoAnggAygCgAFBs9kAbCADKAJ8QdPQAGxqaiADKAJ0QYwpbGogAygCcEGUDmxqQYAQakEMdTYCBCADIAMoAoABIAMoAnBrQe88bCADKAJ8IAMoAnRqQc8lbGs2AmQgAyADKAJsIAMoAmhqQeMTbCADKAJoQQx0aiADKAJ4azYCYCADKAIMIAMoAmQgAygCYGpBgBBqQQx1NgIMIAMoAgwgAygCZCADKAJga0GAEGpBDHU2AhwgAyADKAIAQQFqNgIAAkAgAygCAEEIRwRAIAMoAgBBCkYNAiADIAMoAgxBIGo2AgwMAQsgAyADQRBqNgIMCwwBCwsgAyADKAKMATYCDCADIANBEGo2AgggA0EHNgIAA0AgAygCAEEASEUEQCADIAMoAgwoAgAgAygCCCgCIGo2AoABIAMgAygCDCgCICADKAIIKAIAajYCfCADIAMoAgwoAkAgAygCDCgC4AFqNgJkIAMgAygCDCgCYCADKAIMKALAAWo2AnQgAyADKAIMKAKAASADKAIMKAKgAWo2AnAgAyADKAKAASADKAJwajYCbCADIAMoAoABIAMoAnBrNgJgIAMgAygCfCADKAJ0ajYCaCADIAMoAnwgAygCdGs2AlwgAyADKAIMKAIAIAMoAggoAiBrNgKAASADIAMoAgwoAiAgAygCCCgCAGs2AnwgAyADKAIMKAJAIAMoAgwoAuABazYCeCADIAMoAgwoAmAgAygCDCgCwAFrNgJ0IAMgAygCDCgCgAEgAygCDCgCoAFrNgJwIAMoAgwgAygCZCADKAJsIAMoAmhqakH20QBsQYCAAWpBD3U2AgAgAyADKAJkIAMoAmRqNgJkIAMoAgwgAygCbCADKAJka0Hd3QBsIAMoAmggAygCZGtB5iNsa0GAgAFqQQ91NgKAASADIAMoAmAgAygCXGpBjMQAbDYCbCADKAIMIAMoAmwgAygCYEGLKmxqQYCAAWpBD3U2AkAgAygCDCADKAJsIAMoAlxBpLIBbGtBgIABakEPdTYCwAEgAyADKAKAASADKAJwajYCbCADIAMoAnwgAygCdGs2AmggAygCDCADKAJsIAMoAmhrIAMoAnhrQfbRAGxBgIABakEPdTYCoAEgAyADKAJ4QfbRAGw2AnggAygCDCADKAJ4IAMoAoABQbfyAGwgAygCfEGd5wBsamogAygCdEHMNGxqIAMoAnBBkBJsakGAgAFqQQ91NgIgIAMgAygCgAEgAygCcGtB9c0AbCADKAJ8IAMoAnRqQZMwbGs2AmQgAyADKAJsIAMoAmhqQagZbCADKAJoQfsobGogAygCeGs2AmAgAygCDCADKAJkIAMoAmBqQYCAAWpBD3U2AmAgAygCDCADKAJkIAMoAmBrQYCAAWpBD3U2AuABIAMgAygCDEEEajYCDCADIAMoAghBBGo2AgggAyADKAIAQX9qNgIADAELCyADQZABaiQAC+wLAQF/IwBB8ABrIgMgADYCbCADIAE2AmggAyACNgJkIAMgAygCbDYCDCADQQA2AgADQAJAIAMgAygCaCADKAIAQQJ0aigCACADKAJkajYCBCADIAMoAgQtAAAgAygCBC0ACGo2AmAgAyADKAIELQABIAMoAgQtAAdqNgJcIAMgAygCBC0AAiADKAIELQAGajYCWCADIAMoAgQtAAMgAygCBC0ABWo2AlQgAyADKAIELQAENgJQIAMgAygCBC0AACADKAIELQAIazYCTCADIAMoAgQtAAEgAygCBC0AB2s2AkggAyADKAIELQACIAMoAgQtAAZrNgJEIAMgAygCBC0AAyADKAIELQAFazYCQCADIAMoAlQgAygCYCADKAJYamo2AjwgAyADKAJcIAMoAlBqNgI4IAMoAgwgAygCPCADKAI4akGACWtBAXQ2AgAgAygCDCADKAI8IAMoAjhrIAMoAjhrQaEtbEGAEGpBDHU2AhggAyADKAJgIAMoAlhrQYfVAGw2AjwgAyADKAJcIAMoAlBrIAMoAlBrQaEtbDYCOCADKAIMIAMoAjggAygCPCADKAJYIAMoAlRrQavFAGxqakGAEGpBDHU2AgggAygCDCADKAI8IAMoAlQgAygCYGtB3A9saiADKAI4a0GAEGpB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AhxrQbrQAGxBgIABakEPdTYCQCADKAIUIAMoAhhBrYsBbEGAgAFqQQ91NgIgIAMgAygCFEEEajYCFCADIAMoAgxBAWo2AgwMAQsLIANBMGokAAuIBQEBfyMAQTBrIgMkACADIAA2AiwgAyABNgIoIAMgAjYCJCADKAIsQQBBgAIQZRogAyADKAIsNgIQIANBADYCCANAIAMoAghBBE5FBEAgAyADKAIoIAMoAghBAnRqKAIAIAMoAiRqNgIMIAMgAygCDC0AACADKAIMLQADajYCICADIAMoAgwtAAEgAygCDC0AAmo2AhwgAyADKAIMLQAAIAMoAgwtAANrNgIYIAMgAygCDC0AASADKAIMLQACazYCFCADKAIQIAMoAiAgAygCHGpBgARrQQR0NgIAIAMoAhAgAygCICADKAIca0EEdDYCCCADIAMoAhggAygCFGpB0SJsNgIgIAMgAygCIEGAAmo2AiAgAygCECADKAIgIAMoAhhB/jBsakEJdTYCBCADKAIQIAMoAiAgAygCFEGh9gBsa0EJdTYCDCADIAMoAhBBIGo2AhAgAyADKAIIQQFqNgIIDAELCyADIAMoAiw2AhAgA0EANgIIA0AgAygCCEEETkUEQCADIAMoAhAoAgAgAygCECgCYGpBAmo2AiAgAyADKAIQKAIgIAMoAhAoAkBqNgIcIAMgAygCECgCACADKAIQKAJgazYCGCADIAMoAhAoAiAgAygCECgCQGs2AhQgAygCECADKAIgIAMoAhxqQQJ1NgIAIAMoAhAgAygCICADKAIca0ECdTYCQCADIAMoAhggAygCFGpB0SJsNgIgIAMgAygCIEGAgAFqNgIgIAMoAhAgAygCICADKAIYQf4wbGpBD3U2AiAgAygCECADKAIgIAMoAhRBofYAbGtBD3U2AmAgAyADKAIQQQRqNgIQIAMgAygCCEEBajYCCAwBCwsgA0EwaiQAC/8GAQF/IwBBMGsiAyQAIAMgADYCLCADIAE2AiggAyACNgIkIAMoAixBAEGAAhBlGiADIAMoAiw2AgwgA0EANgIEA0AgAygCBEEFTkUEQCADIAMoAiggAygCBEECdGooAgAgAygCJGo2AgggAyADKAIILQAAIAMoAggtAARqNgIgIAMgAygCCC0AASADKAIILQADajYCHCADIAMoAggtAAI2AhggAyADKAIgIAMoAhxqNgIUIAMgAygCICADKAIcazYCECADIAMoAggtAAAgAygCCC0ABGs2AiAgAyADKAIILQABIAMoAggtAANrNgIcIAMoAgwgAygCFCADKAIYakGABWtBA3Q2AgAgAyADKAIQQcwybDYCECADIAMoAhQgAygCGEECdGs2AhQgAyADKAIUQdAWbDYCFCADKAIMIAMoAhAgAygCFGpBgARqQQp1NgIIIAMoAgwgAygCECADKAIUa0GABGpBCnU2AhAgAyADKAIgIAMoAhxqQZo1bDYCFCADKAIMIAMoAhQgAygCIEHxIGxqQYAEakEKdTYCBCADKAIMIAMoAhQgAygCHEGkiwFsa0GABGpBCnU2AgwgAyADKAIMQSBqNgIMIAMgAygCBEEBajYCBAwBCwsgAyADKAIsNgIMIANBADYCBANAIAMoAgRBBU5FBEAgAyADKAIMKAIAIAMoAgwoAoABajYCICADIAMoAgwoAiAgAygCDCgCYGo2AhwgAyADKAIMKAJANgIYIAMgAygCICADKAIcajYCFCADIAMoAiAgAygCHGs2AhAgAyADKAIMKAIAIAMoAgwoAoABazYCICADIAMoAgwoAiAgAygCDCgCYGs2AhwgAygCDCADKAIUIAMoAhhqQfbRAGxBgIABakEPdTYCACADIAMoAhBB4sAAbDYCECADIAMoAhQgAygCGEECdGs2AhQgAyADKAIUQfscbDYCFCADKAIMIAMoAhAgAygCFGpBgIABakEPdTYCQCADKAIMIAMoAhAgAygCFGtBgIABakEPdTYCgAEgAyADKAIgIAMoAhxqQYzEAGw2AhQgAygCDCADKAIUIAMoAiBBiypsakGAgAFqQQ91NgIgIAMoAgwgAygCFCADKAIcQaSyAWxrQYCAAWpBD3U2AmAgAyADKAIMQQRqNgIMIAMgAygCBEEBajYCBAwBCwsgA0EwaiQAC8QHAQF/IwBBMGsiAyQAIAMgADYCLCADIAE2AiggAyACNgIkIAMoAixBAEGAAhBlGiADIAMoAiw2AgggA0EANgIAA0AgAygCAEEGTkUEQCADIAMoAiggAygCAEECdGooAgAgAygCJGo2AgQgAyADKAIELQAAIAMoAgQtAAVqNgIgIAMgAygCBC0AASADKAIELQAEajYCECADIAMoAgQtAAIgAygCBC0AA2o2AhggAyADKAIgIAMoAhhqNgIUIAMgAygCICADKAIYazYCDCADIAMoAgQtAAAgAygCBC0ABWs2AiAgAyADKAIELQABIAMoAgQtAARrNgIcIAMgAygCBC0AAiADKAIELQADazYCGCADKAIIIAMoAhQgAygCEGpBgAZrQQJ0NgIAIAMoAgggAygCDEGxzgBsQYAIakELdTYCCCADKAIIIAMoAhQgAygCEGsgAygCEGtBoS1sQYAIakELdTYCECADIAMoAiAgAygCGGpBthdsQYAIakELdTYCFCADKAIIIAMoAhQgAygCICADKAIcakECdGo2AgQgAygCCCADKAIgIAMoAhxrIAMoAhhrQQJ0NgIMIAMoAgggAygCFCADKAIYIAMoAhxrQQJ0ajYCFCADIAMoAghBIGo2AgggAyADKAIAQQFqNgIADAELCyADIAMoAiw2AgggA0EANgIAA0AgAygCAEEGTkUEQCADIAMoAggoAgAgAygCCCgCoAFqNgIgIAMgAygCCCgCICADKAIIKAKAAWo2AhAgAyADKAIIKAJAIAMoAggoAmBqNgIYIAMgAygCICADKAIYajYCFCADIAMoAiAgAygCGGs2AgwgAyADKAIIKAIAIAMoAggoAqABazYCICADIAMoAggoAiAgAygCCCgCgAFrNgIcIAMgAygCCCgCQCADKAIIKAJgazYCGCADKAIIIAMoAhQgAygCEGpB5PEAbEGAgAFqQQ91NgIAIAMoAgggAygCDEGtiwFsQYCAAWpBD3U2AkAgAygCCCADKAIUIAMoAhBrIAMoAhBrQbrQAGxBgIABakEPdTYCgAEgAyADKAIgIAMoAhhqQdMpbDYCFCADKAIIIAMoAhQgAygCICADKAIcakHk8QBsakGAgAFqQQ91NgIgIAMoAgggAygCICADKAIcayADKAIYa0Hk8QBsQYCAAWpBD3U2AmAgAygCCCADKAIUIAMoAhggAygCHGtB5PEAbGpBgIABakEPdTYCoAEgAyADKAIIQQRqNgIIIAMgAygCAEEBajYCAAwBCwsgA0EwaiQAC5AMAQF/IwBBQGoiAyQAIAMgADYCPCADIAE2AjggAyACNgI0IAMoAjxBAEGAAhBlGiADIAMoAjw2AgggA0EANgIAA0AgAygCAEEHTkUEQCADIAMoAjggAygCAEECdGooAgAgAygCNGo2AgQgAyADKAIELQAAIAMoAgQtAAZqNgIwIAMgAygCBC0AASADKAIELQAFajYCLCADIAMoAgQtAAIgAygCBC0ABGo2AiggAyADKAIELQADNgIkIAMgAygCBC0AACADKAIELQAGazYCICADIAMoAgQtAAEgAygCBC0ABWs2AhwgAyADKAIELQACIAMoAgQtAARrNgIYIAMgAygCMCADKAIoajYCFCADKAIIIAMoAiQgAygCFCADKAIsampBgAdrQQJ0NgIAIAMgAygCJCADKAIkajYCJCADIAMoAhQgAygCJGs2AhQgAyADKAIUIAMoAiRrNgIUIAMgAygCFEHQFmw2AhQgAyADKAIwIAMoAihrQfY6bDYCECADIAMoAiwgAygCKGtBkhRsNgIMIAMoAgggAygCDCADKAIUIAMoAhBqakGACGpBC3U2AgggAyADKAIUIAMoAhBrNgIUIAMgAygCMCADKAIsa0G3OGw2AhAgAygCCCADKAIQIAMoAgxqIAMoAiwgAygCJGtBoS1sa0GACGpBC3U2AhAgAygCCCADKAIUIAMoAhBqQYAIakELdTYCGCADIAMoAiAgAygCHGpB7ztsNgIsIAMgAygCICADKAIca0HzCmw2AiggAyADKAIsIAMoAihrNgIwIAMgAygCKCADKAIsajYCLCADIAMoAhwgAygCGGpB4ad/bDYCKCADIAMoAiggAygCLGo2AiwgAyADKAIgIAMoAhhqQaMnbDYCJCADIAMoAiQgAygCMGo2AjAgAyADKAIoIAMoAiQgAygCGEHe9wBsamo2AiggAygCCCADKAIwQYAIakELdTYCBCADKAIIIAMoAixBgAhqQQt1NgIMIAMoAgggAygCKEGACGpBC3U2AhQgAyADKAIIQSBqNgIIIAMgAygCAEEBajYCAAwBCwsgAyADKAI8NgIIIANBADYCAANAIAMoAgBBB05FBEAgAyADKAIIKAIAIAMoAggoAsABajYCMCADIAMoAggoAiAgAygCCCgCoAFqNgIsIAMgAygCCCgCQCADKAIIKAKAAWo2AiggAyADKAIIKAJgNgIkIAMgAygCCCgCACADKAIIKALAAWs2AiAgAyADKAIIKAIgIAMoAggoAqABazYCHCADIAMoAggoAkAgAygCCCgCgAFrNgIYIAMgAygCMCADKAIoajYCFCADKAIIIAMoAiQgAygCFCADKAIsampBzNMAbEGAgAFqQQ91NgIAIAMgAygCJCADKAIkajYCJCADIAMoAhQgAygCJGs2AhQgAyADKAIUIAMoAiRrNgIUIAMgAygCFEHHHWw2AhQgAyADKAIwIAMoAihrQfrMAGw2AhAgAyADKAIsIAMoAihrQacabDYCDCADKAIIIAMoAgwgAygCFCADKAIQampBgIABakEPdTYCQCADIAMoAhQgAygCEGs2AhQgAyADKAIwIAMoAixrQdrJAGw2AhAgAygCCCADKAIQIAMoAgxqIAMoAiwgAygCJGtBjjtsa0GAgAFqQQ91NgKAASADKAIIIAMoAhQgAygCEGpBgIABakEPdTYCwAEgAyADKAIgIAMoAhxqQZnOAGw2AiwgAyADKAIgIAMoAhxrQZ4ObDYCKCADIAMoAiwgAygCKGs2AjAgAyADKAIoIAMoAixqNgIsIAMgAygCHCADKAIYakHgjH9sNgIoIAMgAygCKCADKAIsajYCLCADIAMoAiAgAygCGGpBpTNsNgIkIAMgAygCJCADKAIwajYCMCADIAMoAiggAygCJCADKAIYQbGcAWxqajYCKCADKAIIIAMoAjBBgIABakEPdTYCICADKAIIIAMoAixBgIABakEPdTYCYCADKAIIIAMoAihBgIABakEPdTYCoAEgAyADKAIIQQRqNgIIIAMgAygCAEEBajYCAAwBCwsgA0FAayQAC/0MAQF/IwBBQGoiAyAANgI8IAMgATYCOCADIAI2AjQgAyADKAI8NgIMIANBADYCBANAIAMoAgRBCE5FBEAgAyADKAI4IAMoAgRBAnRqKAIAIAMoAjRqNgIIIAMgAygCCC0AACADKAIILQAHajYCMCADIAMoAggtAAEgAygCCC0ABmo2AiwgAyADKAIILQACIAMoAggtAAVqNgIoIAMgAygCCC0AAyADKAIILQAEajYCJCADIAMoAjAgAygCJGo2AiAgAyADKAIwIAMoAiRrNgIYIAMgAygCLCADKAIoajYCHCADIAMoAiwgAygCKGs2AhQgAyADKAIILQAAIAMoAggtAAdrNgIwIAMgAygCCC0AASADKAIILQAGazYCLCADIAMoAggtAAIgAygCCC0ABWs2AiggAyADKAIILQADIAMoAggtAARrNgIkIAMoAgwgAygCICADKAIcakGACGtBAnQ2AgAgAygCDCADKAIgIAMoAhxrQQJ0NgIQIAMgAygCGCADKAIUakHRImw2AhAgAyADKAIQQYAIajYCECADKAIMIAMoAhAgAygCGEH+MGxqQQt1NgIIIAMoAgwgAygCECADKAIUQaH2AGxrQQt1NgIYIAMgAygCMCADKAIkajYCICADIAMoAiwgAygCKGo2AhwgAyADKAIwIAMoAihqNgIYIAMgAygCLCADKAIkajYCFCADIAMoAhggAygCFGpBocsAbDYCECADIAMoAhBBgAhqNgIQIAMgAygCMEGL4ABsNgIwIAMgAygCLEHUxAFsNgIsIAMgAygCKEGzgwFsNgIoIAMgAygCJEGOE2w2AiQgAyADKAIgQbNGbDYCICADIAMoAhxB/dt+bDYCHCADIAMoAhhBhGdsNgIYIAMgAygCFEG7gn9sNgIUIAMgAygCECADKAIYajYCGCADIAMoAhAgAygCFGo2AhQgAygCDCADKAIYIAMoAjAgAygCIGpqQQt1NgIEIAMoAgwgAygCFCADKAIsIAMoAhxqakELdTYCDCADKAIMIAMoAhggAygCKCADKAIcampBC3U2AhQgAygCDCADKAIUIAMoAiQgAygCIGpqQQt1NgIcIAMgAygCDEEgajYCDCADIAMoAgRBAWo2AgQMAQsLIAMgAygCPDYCDCADQQc2AgQDQCADKAIEQQBIRQRAIAMgAygCDCgCACADKAIMKALgAWo2AjAgAyADKAIMKAIgIAMoAgwoAsABajYCLCADIAMoAgwoAkAgAygCDCgCoAFqNgIoIAMgAygCDCgCYCADKAIMKAKAAWo2AiQgAyADKAIwIAMoAiRqQQJqNgIgIAMgAygCMCADKAIkazYCGCADIAMoAiwgAygCKGo2AhwgAyADKAIsIAMoAihrNgIUIAMgAygCDCgCACADKAIMKALgAWs2AjAgAyADKAIMKAIgIAMoAgwoAsABazYCLCADIAMoAgwoAkAgAygCDCgCoAFrNgIoIAMgAygCDCgCYCADKAIMKAKAAWs2AiQgAygCDCADKAIgIAMoAhxqQQJ1NgIAIAMoAgwgAygCICADKAIca0ECdTYCgAEgAyADKAIYIAMoAhRqQdEibDYCECADIAMoAhBBgIABajYCECADKAIMIAMoAhAgAygCGEH+MGxqQQ91NgJAIAMoAgwgAygC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zQoBAX8jAEHwAGsiAyAANgJsIAMgATYCaCADIAI2AmQgAyADKAJsNgIUIANBADYCDANAIAMoAgxBCE5FBEAgAyADKAJoIAMoAgxBAnRqKAIAIAMoAmRqNgIQIAMgAygCEC0AACADKAIQLQAHarI4AmAgAyADKAIQLQAAIAMoAhAtAAdrsjgCRCADIAMoAhAtAAEgAygCEC0ABmqyOAJcIAMgAygCEC0AASADKAIQLQAGa7I4AkggAyADKAIQLQACIAMoAhAtAAVqsjgCWCADIAMoAhAtAAIgAygCEC0ABWuyOAJMIAMgAygCEC0AAyADKAIQLQAEarI4AlQgAyADKAIQLQADIAMoAhAtAARrsjgCUCADIAMqAmAgAyoCVJI4AkAgAyADKgJgIAMqAlSTOAI0IAMgAyoCXCADKgJYkjgCPCADIAMqAlwgAyoCWJM4AjggAygCFCADKgJAIAMqAjySQwAAgESTOAIAIAMoAhQgAyoCQCADKgI8kzgCECADIAMqAjggAyoCNJJD8wQ1P5Q4AjAgAygCFCADKgI0IAMqAjCSOAIIIAMoAhQgAyoCNCADKgIwkzgCGCADIAMqAlAgAyoCTJI4AkAgAyADKgJMIAMqAkiSOAI8IAMgAyoCSCADKgJEkjgCOCADIAMqAkAgAyoCOJNDFe/DPpQ4AiAgA0PUiwo/IAMqAkCUIAMqAiCSOAIsIANDdT2nPyADKgI4lCADKgIgkjgCJCADIAMqAjxD8wQ1P5Q4AiggAyADKgJEIAMqAiiSOAIcIAMgAyoCRCADKgIokzgCGCADKAIUIAMqAhggAyoCLJI4AhQgAygCFCADKgIYIAMqAiyTOAIMIAMoAhQgAyoCHCADKgIkkjgCBCADKAIUIAMqAhwgAyoCJJM4AhwgAyADKAIUQSBqNgIUIAMgAygCDEEBajYCDAwBCwsgAyADKAJsNgIUIANBBzYCDANAIAMoAgxBAEhFBEAgAyADKAIUKgIAIAMoAhQqAuABkjgCYCADIAMoAhQqAgAgAygCFCoC4AGTOAJEIAMgAygCFCoCICADKAIUKgLAAZI4AlwgAyADKAIUKgIgIAMoAhQqAsABkzgCSCADIAMoAhQqAkAgAygCFCoCoAGSOAJYIAMgAygCFCoCQCADKAIUKgKgAZM4AkwgAyADKAIUKgJgIAMoAhQqAoABkjgC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ASgCHCgCQEEARwtBAXE2AhQgASgCHCABKAIUEMApIAEoAhwoAkRFBEAgASgCHBC4KQsgASgCHCABKAIcKAIEKAIYEQAAIAEoAhwgASgCHCgCyAMoAggRAAACQCABKAIcKAIIRQ0AIAEoAhwoAkANACABKAIcKALIAygCEEUNAAJAIAEoAhwoAuABBEAgASABKAIcKAIkQQNsQQJqNgIIDAELIAEgASgCHCgCJDYCCAsgASgCHCgCCEEANgIEIAEoAhwoAgggASgCHCgCyAIgASgCCGw2AgggASgCHCgCCEEANgIMIAEoAhwoAghBA0ECIAEoAhwoAmwbNgIQIAEoAhgiACAAKAIMQQFqNgIMCyABQSBqJAALXwEBfyABKAIAIQECQCAAKAIAIgIQTC4BACABEEwuAQBrIgANACACEEwuAQQgARBMLgEEayIADQAgAhBMLgECIAEQTC4BAmsiAA0AIAIQTC4BBiABEEwuAQZrIQALIAAL2QQBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDCgCuAM2AggCQCABKAIIKAIIBEAgASgCCEEANgIIIAEoAgxBACABKAIMKALgAygCABECACABKAIMQQIgASgCDCgCxAMoAgARAgAgASgCDEECIAEoAgwoArwDKAIAEQIADAELAkAgASgCDCgCVEUNACABKAIMKAKIAQ0AAkACQCABKAIMKAJcRQ0AIAEoAgwoAmxFDQAgASgCDCABKAIIKAIYNgLgAyABKAIIQQE2AggMAQsCQCABKAIMKAJkBEAgASgCDCABKAIIKAIUNgLgAwwBCyABKAIMKAIAQS82AhQgASgCDCABKAIMKAIAKAIAEQAACwsLIAEoAgwgASgCDCgC1AMoAgARAAAgASgCDCABKAIMKALAAygCCBEAACABKAIMKAJERQRAIAEoAggoAhBFBEAgASgCDCABKAIMKALcAygCABEAAAsgASgCDCABKAIMKALYAygCABEAACABKAIMKAJUBEAgASgCDCABKAIIKAIIIAEoAgwoAuADKAIAEQIACyABKAIMQQNBACABKAIIKAIIGyABKAIMKALEAygCABECACABKAIMQQAgASgCDCgCvAMoAgARAgALCyABKAIMKAIIBEAgASgCDCgCCCABKAIIKAIMNgIMIAEoAgwoAgggASgCCCgCDEECQQEgASgCCCgCCBtqNgIQAkAgASgCDCgCQEUNACABKAIMKALIAygCFA0AIAEoAgwoAggiACAAKAIQQQJBASABKAIMKAJsG2o2AhALCyABQRBqJAALWgEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMKAK4AzYCCCABKAIMKAJUBEAgASgCDCABKAIMKALgAygCCBEAAAsgASgCCCIAIAAoAgxBAWo2AgwgAUEQaiQAC20BAX8jAEEQayIBJAAgASAANgIMIAEgASgCDEEBQRwgASgCDCgCBCgCABEEADYCCCABKAIMIAEoAgg2ArgDIAEoAghB3wQ2AgAgASgCCEHeBDYCBCABKAIIQQA2AgggASgCDBCrKSABQRBqJAALvQMBAX8jAEEwayIBIAA2AiwgASABKAIsKAK8AzYCKCABIAEoAiwoAsQCNgIYIAFBADYCJCABIAEoAiwoAtgBNgIUA0AgASgCJCABKAIsKAIkTkUEQCABIAEoAhQoAgwgASgCFCgCKGwgASgCLCgCxAJtNgIcIAEgASgCKCgCOCABKAIkQQJ0aigCADYCECABIAEoAigoAjwgASgCJEECdGooAgA2AgwgAUEANgIgA0AgASgCICABKAIcTkUEQCABKAIQIAEoAiAgASgCHGtBAnRqIAEoAhAgASgCICABKAIcIAEoAhhBAWpsakECdGooAgA2AgAgASgCDCABKAIgIAEoAhxrQQJ0aiABKAIMIAEoAiAgASgCHCABKAIYQQFqbGpBAnRqKAIANgIAIAEoAhAgASgCICABKAIcIAEoAhhBAmpsakECdGogASgCECABKAIgQQJ0aigCADYCACABKAIMIAEoAiAgASgCHCABKAIYQQJqbGpBAnRqIAEoAgwgASgCIEECdGooAgA2AgAgASABKAIgQQFqNgIgDAELCyABIAEoAiRBAWo2AiQgASABKAIUQdgAajYCFAwBCwsL1AIBAX8jAEEwayIBIAA2AiwgASABKAIsKAK8AzYCKCABQQA2AiQgASABKAIsKALYATYCEANAIAEoAiQgASgCLCgCJEgEQCABIAEoAhAoAgwgASgCECgCKGw2AhggASABKAIYIAEoAiwoAsQCbTYCHCABIAEoAhAoAjAgASgCGHA2AhQgASgCFEUEQCABIAEoAhg2AhQLIAEoAiRFBEAgASgCKCABKAIUQQFrIAEoAhxtQQFqNgJICyABIAEoAihBOGogASgCKCgCQEECdGooAgAgASgCJEECdGooAgA2AgwgAUEANgIgA0AgASgCICABKAIcQQF0TkUEQCABKAIMIAEoAhQgASgCIGpBAnRqIAEoAgwgASgCFEEBa0ECdGooAgA2AgAgASABKAIgQQFqNgIgDAELCyABIAEoAiRBAWo2AiQgASABKAIQQdgAajYCEAwBCwsLWQEBfyMAQRBrIgQkACAEIAA2AgwgBCABNgIIIAQgAjYCBCAEIAM2AgAgBCgCDEEAQQBBACAEKAIIIAQoAgQgBCgCACAEKAIMKALEAygCBBEMACAEQRBqJAAL4AEBAX8jAEEgayIEJAAgBCAANgIcIAQgATYCGCAEIAI2AhQgBCADNgIQIAQgBCgCHCgCvAM2AgwCQCAEKAIMKAIwRQRAIAQoAhwgBCgCDEEIaiAEKAIcKALAAygCDBEDAEUNASAEKAIMQQE2AjALIAQgBCgCHCgCxAI2AgggBCgCHCAEKAIMQQhqIAQoAgxBNGogBCgCCCAEKAIYIAQoAhQgBCgCECAEKAIcKALEAygCBBEMACAEKAIMKAI0IAQoAghJDQAgBCgCDEEANgIwIAQoAgxBADYCNAsgBEEgaiQAC7IEAQF/IwBBMGsiASAANgIsIAEgASgCLCgCvAM2AiggASABKAIsKALEAjYCGCABQQA2AiQgASABKAIsKALYATYCFANAIAEoAiQgASgCLCgCJE5FBEAgASABKAIUKAIMIAEoAhQoAihsIAEoAiwoAsQCbTYCHCABIAEoAigoAjggASgCJEECdGooAgA2AgwgASABKAIoKAI8IAEoAiRBAnRqKAIANgIIIAEgASgCKEEIaiABKAIkQQJ0aigCADYCECABQQA2AiADQCABKAIgIAEoAhwgASgCGEECamxORQRAIAEoAgggASgCIEECdGogASgCECABKAIgQQJ0aigCACIANgIAIAEoAgwgASgCIEECdGogADYCACABIAEoAiBBAWo2AiAMAQsLIAFBADYCIANAIAEoAiAgASgCHEEBdE5FBEAgASgCCCABKAIgIAEoAhwgASgCGEECa2xqQQJ0aiABKAIQIAEoAiAgASgCHCABKAIYbGpBAnRqKAIANgIAIAEoAgggASgCICABKAIcIAEoAhhsakECdGogASgCECAB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QQAhAAJAIAIoArgCKAKQASACKAK4AigCmAFMBH8gAigCuAIoAsgDKAIUQQBHQX9zBUEAC0EBcUUNACACKAK4AigCkAEgAigCuAIoApgBRgRAIAJBAEEBIAIoArgCKAKYAxs2AgwgAigCuAIoApQBIAIoArgCKAKcASACKAIMaksNAQsgAigCuAIgAigCuAIoAsgDKAIAEQEARQRAIAJBADYCvAIMAwsMAQsLIAJBADYCoAIgAiACKAK4AigC2AE2AvgBA0AgAigCoAIgAigCuAIoAiRIBEAgAigC+AEoAjQEQAJAIAIoArgCKAKcASACKAKsAkkEQCACIAIoAvgBKAIMNgKYAiACIAIoApgCQQF0NgKUAiACQQA2AuwBDAELIAIgAigC+AEoAiAgAigC+AEoAgxwNgKYAiACKAKYAkUEQCACIAIoAvgBKAIMNgKYAgsgAiACKAKYAjYClAIgAkEBNgLsAQsCQCACKAK4AigCnAFBAEsEQCACIAIoAvgBKAIMIAIoApQCajYClAIgAiACKAK4AiACKAKwAkHIAGogAigCoAJBAnRqKAIAIAIoAvgBKAIMIAIoArgCKAKcAUEBa2wgAigClAJBACACKAK4AigCBCgCIBEJADYCkAIgAiACKAKQAiACKAL4ASgCDEECdGo2ApACIAJBADYC8AEMAQsgAiACKAK4AiACKAKwAkHIAGogAigCoAJBAnRqKAIAQQAgAigClAJBACACKAK4AigCBCgCIBEJADYCkAIgAkEBNgLwAQsgAiACKAKwAigCcCACKAKgAkEGbEECdGo2AlwgAiACKAL4ASgCUDYCWCACIAIoAlgvAQA2AlQgAiACKAJYLwECNgJQIAIgAigCWC8BEDYCSCACIAIoAlgvASA2AkAgAiACKAJYLwESNgJEIAIgAigCWC8BBDYCTCACIAIoArgCKALUA0EEaiACKAKgAkECdGooAgA2AvQBIAIgAigCtAIgAigCoAJBAnRqKAIANgKAAiACQQA2ApwCA0AgAigCnAIgAigCmAJORQRAIAIgAigCkAIgAigCnAJBAnRqKAIANgKMAgJAAkAgAigC8AFFDQAgAigCnAINACACIAIoAowCNgKIAgwBCyACIAIoApACIAIoApwCQQFrQQJ0aigCADYCiAILAkACQCACKALsAUUNACACKAKcAiACKAKYAkEBa0cNACACIAIoAowCNgKEAgwBCyACIAIoApACIAIoApwCQQFqQQJ0aigCADYChAILIAIgAigCiAIuAQAiADYCMCACIAA2AjQgAiAANgI4IAIgAigCjAIuAQAiADYCJCACIAA2AiggAiAANgIsIAIgAigChAIuAQAiADYCGCACIAA2AhwgAiAANgIgIAJBADYC/AEgAiACKAL4ASgCHEEBazYCpAIgAkEANgKoAgNAIAIoAqgCIAIoAqQCTQRAIAIoAowCIAJB4ABqEK0oIAIoAqgCIAIoAqQCSQRAIAIgAigCiAIuAYABNgIwIAIgAigCjAIuAYABNgIkIAIgAigChAIuAYABNgIYCyACIAIoAlwoAgQiADYCFAJAIABFDQAgAi4BYg0AIAIgAigCLCACKAIkayACKAJUQSRsbDYCPAJAIAIoAjxBAE4EQCACIAIoAjwgAigCUEEHdGogAigCUEEIdG02AhACQCACKAIUQQBMDQAgAigCEEEBIAIoAhR0SA0AIAJBASACKAIUdEEBazYCEAsMAQsgAiACKAJQQQd0IAIoAjxrIAIoAlBBCHRtNgIQAkAgAigCFEEATA0AIAIoAhBBASACKAIUdEgNACACQQEgAigCFHRBAWs2AhALIAJBACACKAIQazYCEAsgAiACKAIQOwFiCyACIAIoAlwoAggiADYCFAJAIABFDQAgAi4BcA0AIAIgAigCNCACKAIcayACKAJUQSRsbDYCPAJAIAIoAjxBAE4EQCACIAIoAjwgAigCSEEHdGogAigCSEEIdG02AhACQCACKAIUQQBMDQAgAigCEEEBIAIoAhR0SA0AIAJBASACKAIUdEEBazYCEAsMAQsgAiACKAJIQQd0IAIoAjxrIAIoAkhBCHRtNgIQAkAgAigCFEEATA0AIAIoAhBBASACKAIUdEgNACACQQEgAigCFHRBAWs2AhALIAJBACACKAIQazYCEAsgAiACKAIQOwFwCyACIAIoAlwoAgwiADYCFAJAIABFDQAgAi4BgAENACACIAIoAjQgAigCHGogAigCKEEBdGsgAigCVEEJbGw2AjwCQCACKAI8QQBOBEAgAiACKAI8IAIoAkBBB3RqIAIoAkBBCHRtNgIQAkAgAigCFEEATA0AIAIoAhBBASACKAIUdEgNACACQQEgAigCFHRBAWs2AhALDAEL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AjwgAigCOEkEQCACKAIMKAI4DAELIAIoAgwoAkgLNgIcIAIgAigCRCACKAIMKAIEQQJ0aigCACACKAIgIAIoAgwoAihsQQJ0ajYCGCACIAIoAjwgAigCDCgCRGw2AhQgAkEANgIkA0AgAigCJCACKAIMKAI8TkUEQAJAIAIoAkgoApQBIAIoAjRPBEAgAigCICACKAIkaiACKAIMKAJMTg0BCyACIAIoAhQ2AhAgAkEANgIoA0AgAigCKCACKAIcTkUEQCACKAJIIAIoAgwgAigCQEEgaiACKAIwIAIoAihqQQJ0aigCACACKAIYIAIoAhAgAigCCBEIACACIAIoAgwoAiQgAigCEGo2AhAgAiACKAIoQQFqNgIoDAELCwsgAiACKAIMKAI4IAIoAjBqNgIwIAIgAigCGCACKAIMKAIoQQJ0ajYCGCACIAIoAiRBAWo2AiQMAQsLCyACIAIoAixBAWo2AiwMAQsLIAIgAigCPEEBajYCPAwCBSACKAJAIAIoAiA2AhggAigCQCACKAI8NgIUIAJBADYCTAwFCwALCyACKAJAQQA2AhQgAiACKAIgQQFqNgIgDAELCyACKAJIIgAgACgCnAFBAWo2ApwBIAIoAkgiASgClAFBAWohACABIAA2ApQBIAAgAigCSCgCyAJJBEAgAigCSBCvECACQQM2AkwMAQsgAigCSCACKAJIKALIAygCDBEAACACQQQ2AkwLIAIoAkwhACACQdAAaiQAIAAL+AUBA38jAEHQAGsiASQAIAEgADYCSCABIAEoAkgoAsADNgJEIAFBADYCOANAIAEoAjggASgCSCgC0AJORQRAIAEgASgCSEHUAmogASgCOEECdGooAgA2AgggASgCSCABKAJEQcgAaiABKAIIKAIEQQJ0aigCACABKAJIKAKUASABKAIIKAIMbCABKAIIKAIMQQEgASgCSCgCBCgCIBEJACEAIAFBEGogASgCOEECdGogADYCACABIAEoAjhBAWo2AjgMAQsLIAEgASgCRCgCGDYCLAJAA0AgASgCLCABKAJEKAIcSARAIAEgASgCRCgCFDYCQANAIAEoAkAgASgCSCgC5AJJBEAgAUEANgI8IAFBADYCOANAIAEoAjggASgCSCgC0AJORQRAIAEgASgCSEHUAmogASgCOEECdGooAgA2AgggASABKAJAIAEo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IAIgAkE4aiIAQQRqIAIoAhxBAnRqKAIAIAIoAixqNgIsIABBBGogAigCHEECdGogAigCLDYCACACKAI0IAIoAiw7AQADQCACKAIoIAIoAiBIBEACQAJAIAIoAmRBCEgEQCACQdAAaiACKAJoIAIoAmRBABDQAkUEQCACQQA2AnwMDAsgAiACKAJYNgJoIAIgAigCXDYCZCACKAJkQQhIBEAgAkEBNgIQDAILCyACQdDSIigCACACKAJoIAIoAmRBCGt1cTYCDCACIAIoAjBBkAFqIAIoAgxBAnRqKAIAIgA2AhAgAARAIAIgAigCZCACKAIQazYCZCACIAIoAgwgAigCMEGQCWpqLQAANgIsDAILIAJBCTYCEAsgAiACQdAAaiACKAJoIAIoAmQgAigCMCACKAIQEL4GIgA2AiwgAEEASARAIAJBADYCfAwKCyACIAIoAlg2AmggAiACKAJcNgJkCyACIAIoAixBBHU2AiQgAiACKAIsQQ9xNgIsAkAgAigCLARAIAIgAigCJCACKAIoajYCKCACKAJkIAIoAixIBEAgAkHQAGogAigCaCACKAJkIAIoAiwQ0AJFBEAgAkEANgJ8DAwLIAIgAigCWDYCaCACIAIoAlw2AmQLIAIoAmghACACIAIoAmQgAigCLGsiATYCZCACIAIoAixBAnRBsNIiaigCACAAIAF1cTYCJCACAn8gAigCJCACKAIsQQJ0QazSImooAgBMBEAgAigCJCACKAIsQQJ0QbDSImooAgBrDAELIAIoAiQLNgIsIAIoAjQgAigCKEECdEGA2SJqKAIAQQF0aiACKAIsOwEADAELIAIoAiRBD0cNBSACIAIoAihBD2o2AigLIAIgAigCKEEBajYCKAwBCwsMAQsgAigCLARAIAIoAmQgAigCLEgEQCACQdAAaiACKAJoIAIoAmQgAigCLBDQAkUEQCACQQA2AnwMCAsgAiACKAJYNgJoIAIgAigCXDYCZAsgAiACKAJkIAIoAixrNgJkCwsDQAJAIAIoAihBwABODQACQAJAIAIoAmRBCEgEQCACQdAAaiACKAJoIAIoAmRBABDQAkUEQCACQQA2AnwMCgsgAiACKAJYNgJoIAIgAigCXDYCZCACKAJkQQhIBEAgAkEBNgIIDAILCyACQdDSIigCACACKAJoIAIoAmRBCGt1cTYCBCAC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AigCcDYCCCACKAKAASACKAJsNgIMIAIoAoABIgAgAkFAayIBKQIANwIQIAAgASgCEDYCICAAIAEpAgg3AhgLIAIoAoABIgAgACgCKEF/ajYCKCACQQE2AowBCyACKAKMASEAIAJBkAFqJAAgAAuuDwEBfyMAQfACayICJAAgAiAANgLoAiACIAE2AuQCIAIgAigC6AIoAtADNgLgAgJAIAIoAugCKAKYAgRAIAIoAuACKAIoRQRAIAIoAugCEJ4JRQRAIAJBADYC7AIMAwsLCwJAIAIoAuACKAIkRQRAIAIgAigC6AIoApwDNgLMAiACQQEgAigC6AIoAqQDdDYCyAIgAkF/IAIoAugCKAKkA3Q2AsQCIAIgAigC6AIoAqwDNgLAAiACIAIoAugCNgKoAiACIAIoAugCKAIYKAIANgKYAiACIAIoAugCKAIYKAIENgKcAiACIAIoAuACKAIINgK0AiACIAIoAuACKAIMNgKwAiACIAIoAuACKAIQNgLQAiACIAIoAuQCKAIANgK8AiACIAIoAuACKAI8NgKUAiACQQA2ApACIAIgAigC6AIoApgDNgLYAiACKALQAkUEQANAAkAgAigC2AIgAigCzAJKDQACQAJAIAIoArACQQhIBEAgAkGYAmogAigCtAIgAigCsAJBABDQAkUNByACIAIoAqACNgK0AiACIAIoAqQCNgKwAiACKAKwAkEISARAIAJBATYCDAwCCwsgAkHQ0iIoAgAgAigCtAIgAigCsAJBCGt1cTYCCCACIAIoApQCQZABaiACKAIIQQJ0aigCACIANgIMIAAEQCACIAIoArACIAIoAgxrNgKwAiACIAIoAgggAigClAJBkAlqai0AADYC3AIMAgsgAkEJNgIMCyACIAJBmAJqIAIoArQCIAIoArACIAIoApQCIAIoAgwQvgYiADYC3AIgAEEASA0FIAIgAigCoAI2ArQCIAIgAigCpAI2ArACCyACIAIoAtwCQQR1NgLUAiACIAIoAtwCQQ9xNgLcAgJAIAIoAtwCBEAgAigC3AJBAUcEQCACKALoAigCAEH5ADYCFCACKALoAkF/IAIoAugCKAIAKAIEEQIACyACKAKwAkEBSARAIAJBmAJqIAIoArQCIAIoArACQQEQ0AJFDQcgAiACKAKgAjYCtAIgAiACKAKkAjYCsAILIAIoArQCIQAgAiACKAKwAkEBayIBNgKwAgJAQbTSIigCACAAIAF1cQRAIAIgAigCyAI2AtwCDAELIAIgAigCxAI2AtwCCwwBCyACKALUAkEPRwRAIAJBASACKALUAnQ2AtACIAIoAtQCBEAgAigCsAIgAigC1AJIBEAgAkGYAmogAigCtAIgAigCsAIgAigC1AIQ0AJFDQggAiACKAKgAjYCtAIgAiACKAKkAjYCsAILIAIoArQCIQAgAiACKAKwAiACKALUAmsiATYCsAIgAiACKALUAkECdEGw0iJqKAIAIAAgAXVxNgLUAiACIAIoAtQCIAIoAtACajYC0AILDAILCwNAAkAgAiACKAK8AiACKALAAiACKALYAkECdGooAgBBAXRqNgK4AgJAIAIoArgCLgEABEAgAigCsAJBAUgEQCACQZgCaiACKAK0AiACKAKwAkEBENACRQ0JIAIgAigCoAI2ArQCIAIgAigCpAI2ArACCyACKAK0AiEAIAIgAigCsAJBAWsiATYCsAJBtNIiKAIAIAAgAXVxBEAgAigCuAIuAQAgAigCyAJxRQRAAkAgAigCuAIuAQBBAE4EQCACKAK4AiIAIAIoAsgCIAAuAQBqOwEADAELIAIoArgCIgAgAigCxAIgAC4BAGo7AQALCwsMAQsgAiACKALUAkF/aiIANgLUAiAAQQBIDQELIAIgAigC2AJBAWo2AtgCIAIoAtgCIAIoAswCTA0BCwsgAigC3AIEQCACIAIoAsACIAIoAtgCQQJ0aigCADYCBCACKAK8AiACKAIEQQF0aiACKALcAjsBACACKAIEIQAgAiACKAKQAiIBQQFqNgKQAiACQRBqIAFBAnRqIAA2AgALIAIgAigC2AJBAWo2AtgCDAELCwsgAigC0AJBAEsEQANAIAIoAtgCIAIoAswCTARAIAIgAigCvAIgAigCwAIgAigC2AJBAnRqKAIAQQF0ajYCuAIgAigCuAIuAQAEQCACKAKwAkEBSARAIAJBmAJqIAIoArQCIAIoArACQQEQ0AJFDQYgAiACKAKgAjYCtAIgAiACKAKkAjYCsAILIAIoArQCIQAgAiACKAKwAkEBayIBNgKwAkG00iIoAgAgACABdXEEQCACKAK4Ai4BACACKALIAnFFBEACQCACKAK4Ai4BAEEATgRAIAIoArgCIgAgAigCyAIgAC4BAGo7AQAMAQsgAigCuAIiACACKALEAiAALgEAajsBAAsLCwsgAiACKALYAkEBajYC2AIMAQsLIAIgAigC0AJBf2o2AtACCyACKALoAigCGCACKAKYAjYCACACKALoAigCGCACKAKcAjYCBCACKALgAiACKAK0AjYCCCACKALgAiACKAKwAjYCDCACKALgAiACKALQAjYCEAsgAigC4AIiACAAKAIoQX9qNgIoIAJBATYC7AIMAQsDQCACKAKQAkEATEUEQCACKAK8AiEAIAIgAigCkAJBf2oiATYCkAIgAkEQaiABQQJ0aigCAEEBdCAAakEAOwEADAELCyACQQA2AuwCCyACKALsAiEAIAJB8AJqJAAgAAvNAwEBfyMAQUBqIgIkACACIAA2AjggAiABNgI0IAIgAigCOCgC0AM2AjAgAkEBIAIoAjgoAqQDdDYCLAJAIAIoAjgoApgCBEAgAigCMCgCKEUEQCACKAI4EJ4JRQRAIAJBADYCPAwDCwsLIAIgAigCODYCGCACIAIoAjgoAhgoAgA2AgggAiACKAI4KAIYKAIENgIMIAIgAigCMCgCCDYCICACIAIoAjAoAgw2AhwgAkEANgIoA0AgAigCKCACKAI4KALsAkgEQCACIAIoAjQgAigCKEECdGooAgA2AiQgAigCHEEBSARAIAJBCGogAigCICACKAIcQQEQ0AJFBEAgAkEANgI8DAQLIAIgAigCEDYCICACIAIoAhQ2AhwLIAIoAiAhACACIAIoAhxBAWsiATYCHEG00iIoAgAgACABdXEEQCACKAIkIgAgAigCLCAALgEAcjsBAAsgAiACKAIoQQFqNgIoDAELCyACKAI4KAIYIAIoAgg2AgAgAigCOCgCGCACKAIMNgIEIAIoAjAgAigCIDYCCCACKAIwIAIoAhw2AgwgAigCMCIAIAAoAihBf2o2AiggAkEBNgI8CyACKAI8IQAgAkFAayQAIAALqQkBAX8jAEHgAGsiAiQAIAIgADYCWCACIAE2AlQgAiACKAJYKALQAzYCUAJAIAIoAlgoApgCBEAgAigCUCgCKEUEQCACKAJYEJ4JRQRAIAJBADYCXAwDCwsLIAIoAlAoAiRFBEAgAiACKAJYKAKcAzYCPCACIAIoAlgoAqQDNgI4IAIgAigCWCgCrAM2AjQgAiACKAJQKAIQNgJAAkAg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CwJAIAEoAiRBAEoEQCABKAIkQQhMDQELIAFBCDYCJAsCQCABKAIYQQBKBEAgASgCGEEITA0BCyABQQg2AhgLIAEoAihBsAFqIAEoAiBBAnRqIAEoAiRBBXQgASgCGEECdGpBjNAiaigCAEEBajYCAAsMAQsgASgCKEGwAWogASgCIEECdGpBADYCAAsgASABKAIgQQFqNgIgDAELCwsgASgCKEEANgIMIAEoAihBADYCCCABKAIoQQA2AiQgASgCKCABKAIsKAKYAjYCKCABQTBqJAALkQMBAX8jAEEgayIBJAAgASAANgIcIAEgASgCHEEBQdgBIAEoAhwoAgQoAgARBAA2AhggASgCHCABKAIYNgLQAyABKAIYQcwENgIAAkAgASgCHCgC4AEEQCABKAIcQQEgASgCHCgCJEEIdCABKAIcKAIEKAIAEQQAIQAgASgCHCAANgKgASABIAEoAhwoAqABNgIQIAFBADYCDANAIAEoAgwgASgCHCgCJE5FBEAgAUEANgIUA0AgASgCFEHAAE5FBEAgASABKAIQIgBBBGo2AhAgAEF/NgIAIAEgASgCFEEBajYCFAwBCwsgASABKAIMQQFqNgIMDAELCyABQQA2AhQDQCABKAIUQQRORQRAIAEoAhhBLGogASgCFEECdGpBADYCACABIAEoAhRBAWo2AhQMAQsLDAELIAFBADYCFANAIAEoAhRBBE5FBEAgASgCGEHQAGogASgCFEECdGpBADYCACABKAIYQUBrIAEoAhRBAnRqQQA2AgAgASABKAIUQQFqNgIUDAELCwsgAUEgaiQAC4UMAQF/IwBBQGoiAiQAIAIgADYCOCACIAE2AjQgAiACKAI4KALQAzYCMCACKAI4KAKYAgRAIAIoAjAoAjRFBEAgAigCOBDaCgsgAigCMCIAIAAoAjRBf2o2AjQLAkAgAigCMCgCEEF/RgRADAELIAIgAigCOCgCrAM2AgQgAkEANgIgA0AgAigCICACKAI4KALsAkgEQCACIAIoAjQgAigCIEECdGooAgA2AiggAiACKAI4QfACaiACKAIgQQJ0aigCADYCHCACIAIoAjhB1AJqIAIoAhxBAnRqKAIANgIsIAIgAigCLCgCFDYCGCACIAIoAjBBOGogAigCGEECdGooAgAgAigCMEEkaiACKAIcQQJ0aigCAGo2AiQCQCACKAI4IAIoAiQQvAJFBEAgAigCMEEkaiACKAIcQQJ0akEANgIADAELIAIgAigCOCACKAIkQQFqELwCNgIUIAIgAigCJEECajYCJCACIAIoAhQgAigCJGo2AiQgAiACKAI4IAIoAiQQvAIiADYCCCAABEAgAiACKAIwQThqIAIoAhhBAnRqKAIAQRRqNgIkA0AgAigCOCACKAIkELwCBEAgAiACKAIIQQF0IgA2AgggAEGAgAJGBEAgAigCOCgCAEH1ADYCFCACKAI4QX8gAigCOCgCACgCBBECACACKAIwQX82AhAMBwUgAiACKAIkQQFqNgIkDAILAAsLCwJAIAIoAghBASACKAIYIAIoAjhB6AFqai0AAHRBAXVIBEAgAigCMEEkaiACKAIcQQJ0akEANgIADAELAkAgAigCCEEBIAIoAhggAigCOEH4AWpqLQAAdEEBdUoEQCACKAIwQSRqIAIoAhxBAnRqIAIoAhRBAnRBDGo2AgAMAQsgAigCMEEkaiACKAIcQQJ0aiACKAIUQQJ0QQRqNgIACwsgAiACKAIINgIMIAIgAigCJEEOajYCJANAAkAgAiACKAIIQQF1IgA2AgggAEUNACACKAI4IAIoAiQQvAIEQCACIAIoAgggAigCDHI2AgwLDAELCyACIAIoAgxBAWo2AgwgAigCFARAIAJBACACKAIMazYCDAsgAigCMEEUaiACKAIcQQJ0aiIAIAIoAgwgACgCAGo2AgALIAIoAiggAigCMEEUaiACKAIcQQJ0aigCADsBACACKAI4KAKwAwRAIAIgAigCLCgCGDYCGCACQQA2AhADQAJAIAIgAigCMEH4AGogAigCGEECdGooAgAgAigCEEEDbGo2AiQgAigCOCACKAIkELwCDQADQAJAIAIgAigCEEEBajYCECACKAI4IAIoAiRBAWoQvAINACACIAIoAiRBA2o2AiQgAigCECACKAI4KAKwA0gNASACKAI4KAIAQfUANgIUIAIoAjhBfyACKAI4KAIAKAIEEQIAIAIoAjBBfzYCEAwHCwsgAiACKAI4IAIoAjBBuAFqELwCNgIUIAIgAigCJEECajYCJCACIAIoAjggAigCJBC8AiIANgIIIAAEQCACKAI4IAIoAiQQvAIEQCACIAIoAghBAXQ2AgggAiACKAIwQfgAaiACKAIYQQJ0aigCAEG9AUHZASACKAIQIAIoAhggAigCOEGIAmpqLQAATBtqNgIkA0AgAigCOCACKAIkELwCBEAgAiACKAIIQQF0IgA2AgggAEGAgAJGBEAgAigCOCgCAEH1ADYCFCACKAI4QX8gAigCOCgCACgCBBECACACKAIwQX82AhAMCgUgAiACKAIkQQFqNgIkDAILAAsLCwsgAiACKAIINgIMIAIgAigCJEEOajYCJANAAkAgAiACKAIIQQF1IgA2AgggAEUNACACKAI4IAIoAiQQvAIEQCACIAIoAgggAigCDHI2AgwLDAELCyACIAIoAgxBAWo2AgwgAigCFARAIAJBACACKAIMazYCDAsgAigCKCACKAIEIAIoAhBBAnRqKAIAQQF0aiACKAIMOwEAIAIoAhAgAigCOCgCsANIDQELCwsgAiACKAIgQQFqNgIgDAELCwsgAkEBNgI8IAIoAjwhACACQUBrJAAgAAu3BQEBfyMAQUBqIgIkACACIAA2AjggAiABNgI0IAIgAigCOCgC0AM2AjAgAigCOCgCmAIEQCACKAIwKAI0RQRAIAIoAjgQ2goLIAIoAjAiACAAKAI0QX9qNgI0CwJAIAIoAjAoAhBBf0YEQAwBCyACIAIoAjgoAqwDNgIMIAIgAigCNCgCADYCLCACIAIoAjgoAtQCKAIYNgIgIAJBASACKAI4KAKkA3Q2AhQgAkF/IAIoAjgoAqQDdDYCECACIAIoAjgoApwDNgIYA0ACQCACKAIYQQBMDQAgAigCLCACKAIMIAIoAhhBAnRqKAIAQQF0ai8BAA0AIAIgAigCGEF/ajYCGAwBCwsgAiACKAI4KAKYAzYCHANAAkAgAigCHCACKAI4KAKcA0oNACACIAIoAjBB+ABqIAIoAiBBAnRqKAIAIAIoAhxBAWtBA2xqNgIkIAIoAhwgAigCGEoEQCACKAI4IAIoAiQQvAINAQsDQAJAIAIgAigCLCACKAIMIAIoAhxBAnRqKAIAQQF0ajYCKCACKAIoLwEABEAgAigCOCACKAIkQQJqELwCBEACQCACKAIoLgEAQQBIBEAgAigCKCIAIAIoAhAgAC4BAGo7AQAMAQsgAigCKCIAIAIoAhQgAC4BAGo7AQALCwwBCyACKAI4IAIoAiRBAWoQvAIEQCACKAI4IAIoAjBBuAFqELwCBEAgAigCKCACKAIQOwEADAILIAIoAiggAigCFDsBAAwBCyACIAIoAiRBA2o2AiQgAiACKAIcQQFqNgIcIAIoAhwgAigCOCgCnANMDQEgAigCOCgCAEH1ADYCFCACKAI4QX8gAigCOCgCACgCBBECACACKAIwQX82AhAMBAsLIAIgAigCHEEBajYCHAwBCwsLIAJBATYCPCACKAI8IQAgAkFAayQAIAAL3wEBAX8jAEEgayICJAAgAiAANgIcIAIgATYCGCACIAIoAhwoAtADNgIUIAIoAhwoApgCBEAgAigCFCgCNEUEQCACKAIcENoKCyACKAIUIgAgACgCNEF/ajYCNAsgAiACKAIUQbgBajYCECACQQEgAigCHCgCpAN0NgIMIAJBADYCCANAIAIoAgggAigCHCgC7AJIBEAgAigCHCACKAIQELwCBEAgAigCGCACKAIIQQJ0aigCACIAIAIoAgwgAC4BAHI7AQALIAIgAigCCEEBajYCCAwBCwsgAkEgaiQAQQELqwYBAX8jAEEwayICJAAgAiAANgIoIAIgATYCJCACIAIoAigoAtADNgIgIAIoAigoApgCBEAgAigCICgCNEUEQCACKAIoENoKCyACKAIgIgAgACgCNEF/ajYCNAsCQCACKAIgKAIQQX9GBEAMAQsgAiACKAIoKAKsAzYCACACIAIoAiQoAgA2AhwgAiACKAIoKALUAigCGDYCFCACIAIoAigoApgDNgIMA0ACQCACKAIMIAIoAigoApwDSg0AIAIgAigCIEH4AGogAigCFEECdGooAgAgAigCDEEBa0EDbGo2AhggAigCKCACKAIYELwCDQADQCACKAIoIAIoAhhBAWoQvAJFBEAgAiACKAIYQQNqNgIYIAIgAigCDEEBajYCDCACKAIMIAIoAigoApwDTA0BIAIoAigoAgBB9QA2AhQgAigCKEF/IAIoAigoAgAoAgQRAgAgAigCIEF/NgIQDAQLCyACIAIoAiggAigCIEG4AWoQvAI2AhAgAiACKAIYQQJqNgIYIAIgAigCKCACKAIYELwCIgA2AgQgAARAIAIoAiggAigCGBC8AgRAIAIgAigCBEEBdDYCBCACIAIoAiBB+ABqIAIoAhRBAnRqKAIAQb0BQdkBIAIoAgwgAigCFCACKAIoQYgCamotAABMG2o2AhgDQCACKAIoIAIoAhgQvAIEQCAC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NgIYIAEoAiwoAgAgASgCGDYCHCABKAIsQX8gASgCLCgCACgCBBECAAsgASgCECABKAIYQQJ0aiABKAIsKAKkAzYCACABIAEoAhhBAWo2AhgMAQsLIAEgASgCJEEBajYCJAwBCwsCQCABKAIsKAKgA0UEQCABKAIsKAKYA0UEQCABKAIoQccENgIEDAILIAEoAihByAQ2AgQMAQsCQCABKAIsKAKYA0UEQCABKAIoQckENgIEDAELIAEoAihBygQ2AgQLCwwBCwJAAkAgASgCLCgCmAMNACABKAIsKAKgAw0AIAEoAiwoAqQDDQAgASgCLCgCnANBwABODQEgASgCLCgCnAMgASgCLCgCsANGDQELIAEoAiwoAgBB/QA2AhQgASgCLEF/IAEoAiwoAgAoAgQRAgALIAEoAihBywQ2AgQLIAFBADYCJANAIAEoAiQgASgCLCgC0AJORQRAIAEgASgCLEHUAmogASgCJEECdGooAgA2AhwCQCABKAIsKALgAQRAIAEoAiwoApgDDQEgASgCLCgCoAMNAQsgASABKAIcKAIUNgIgAkAgASgCIEEATgRAIAEoAiBBEEgNAQsgASgCLCgCAEEyNgIUIAEoAiwoAgAgASgCIDYCGCABKAIsIAEoAiwoAgAoAgARAAALIAEoAihBOGogASgCIEECdGooAgBFBEAgASgCLEEBQcAAIAEoAiwoAgQoAgARBAAhACABKAIoQThqIAEoAiBBAnRqIAA2AgALIAEoAihBOGogASgCIEECdGooAgAiAEIANwAAIABCADcAOCAAQgA3ADAgAEIANwAoIABCADcAICAAQgA3ABggAEIANwAQIABCADcACCABKAIoQRRqIAEoAiRBAnRqQQA2AgAgASgCKEEkaiABKAIkQQJ0akEANgIACwJAAkAgASgCLCgC4AFFBEAgASgCLCgCsAMNAQsgASgCLCgC4AFFDQEgASgCLCgCmANFDQELIAEgASgCHCgCGDYCIAJAIAEoAiBBAE4EQCABKAIgQRBIDQELIAEoAiwoAgBBMjYCFCABKAIsKAIAIAEoAiA2AhggASgCLCABKAIsKAIAKAIAEQAACyABKAIoQfgAaiABKAIgQQJ0aigCAEUEQCABKAIsQQFBgAIgASgCLCgCBCgCABEEACEAIAEoAihB+ABqIAEoAiBBAnRqIAA2AgALIAEoAihB+ABqIAEoAiBBAnRqKAIAQQBBgAIQZRoLIAEgASgCJEEBajYCJAwBCwsgASgCKEEANgIIIAEoAihBADYCDCABKAIoQXA2AhAgASgCKCABKAIsKAKYAjYCNCABQTBqJAAL3QIBAX8jAEEgayIBJAAgASAANgIcIAEgASgCHEEBQbwBIAEoAhwoAgQoAgARBAA2AhggASgCHCABKAIYNgLQAyABKAIYQcYENgIAIAFBADYCFANAIAEoAhRBEE5FBEAgASgCGEE4aiABKAIUQQJ0akEANgIAIAEoAhhB+ABqIAEoAhRBAnRqQQA2AgAgASABKAIUQQFqNgIUDAELCyABKAIYQfEAOgC4ASABKAIcKALgAQRAIAEoAhxBASABKAIcKAIkQQh0IAEoAhwoAgQoAgARBAAhACABKAIcIAA2AqABIAEgASgCHCgCoAE2AhAgAUEANgIMA0AgASgCDCABKAIcKAIkTkUEQCABQQA2AhQDQCABKAIUQcAATkUEQCABIAEoAhAiAEEEajYCECAAQX82AgAgASABKAIUQQFqNgIUDAELCyABIAEoAgxBAWo2AgwMAQsLCyABQSBqJAAL/g0BAX8jAEFAaiIBJAAgASAANgI8IAEgASgCPCgC1AM2AjggAUEANgIoIAFBADYCJCABQQA2AjQgASABKAI8KALYATYCLANAIAEoAjQgASgCPCgCJE5FBEACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCLCIAKAIkQQh0IAAoAihqIgBBgQJHBEAgAEGCAkYNHiAAQYEERg0WIABBggRGDQEgAEGEBEYNHSAAQYMGRg0CIABBhgZGDRwgAEGCCEYNFSAAQYQIRg0DIABBiAhGDRsgAEGFCkYNBCAAQYoKRg0aIABBgwxGDRQgAEGGDEYNBSAAQYwMRg0ZIABBhw5GDQYgAEGODkYNGCAAQYQQRg0TIABBiBBGDR8gAEGQEEYNFyAAQYkSRg0HIABBhRRGDRIgAEGKFEYNCCAAQYsWRg0JIABBhhhGDREgAEGMGEYNCiAAQY0aRg0LIABBhxxGDRAgAEGOHEYNDCAAQY8eRg0NIABBiCBGDQ8gAEGQIEYNDgwgCyABQaQENgIkIAFBADYCKAwgCyABQaUENgIkIAFBADYCKAwfCyABQaYENgIkIAFBADYCKAweCyABQacENgIkIAFBADYCKAwdCyABQagENgIkIAFBADYCKAwcCyABQakENgIkIAFBADYCKAwbCyABQaoENgIkIAFBADYCKAwaCyABQasENgIkIAFBADYCKAwZCyABQawENgIkIAFBADYCKAwYCyABQa0ENgIkIAFBADYCKAwXCyABQa4ENgIkIAFBADYCKAwWCyABQa8ENgIkIAFBADYCKAwVCyABQbAENgIkIAFBADYCKAwUCyABQbEENgIkIAFBADYCKAwTCyABQbIENgIkIAFBADYCKAwSCyABQbMENgIkIAFBADYCKAwRCyABQbQENgIkIAFBADYCKAwQCyABQbUENgIkIAFBADYCKAwPCyABQbYENgIkIAFBADYCKAwOCyABQbcENgIkIAFBADYCKAwNCyABQbgENgIkIAFBADYCKAwMCyABQbkENgIkIAFBADYCKAwLCyABQboENgIkIAFBADYCKAwKCyABQbsENgIkIAFBADYCKAwJCyABQbwENgIkIAFBADYCKAwICyABQb0ENgIkIAFBADYCKAwHCyABQb4ENgIkIAFBADYCKAwGCyABQb8ENgIkIAFBADYCKAwFCyABQcAENgIkIAFBADYCKAwECyABQcEENgIkIAFBADYCKAwDCyABQcIENgIkIAFBADYCKAwCCwJAIAEoAjwoAkgiAEECTQRAAkACQAJAIABBAWsOAgECAAsgAUHDBDYCJCABQQA2AigMAwsgAUHEBDYCJCABQQE2AigMAgsgAUHFBDYCJCABQQI2AigMAQsgASgCPCgCAEExNgIUIAEoAjwgASgCPCgCACgCABEAAAsMAQsgASgCPCgCAEEHNgIUIAEoAjwoAgAgASgCLCgCJDYCGCABKAI8KAIAIAEoAiwoAig2AhwgASgCPCABKAI8KAIAKAIAEQAACyABKAI4QQRqIAEoAjRBAnRqIAEoAiQ2AgACQCABKAIsKAI0RQ0AIAEoAjhBLGogASgCNEECdGooAgAgASgCKEYEQAwBCyABIAEoAiwoAlA2AiAgASgCIEUNACABKAI4IAEoAjRBAnRqIAEoAig2AiwCQCABKAIoIgBBAk0EQAJAAkACQCAAQQFrDgIBAgALIAEgASgCLCgCVDYCHCABQQA2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CyABIAEoAgwoAgA2AgggASABKAIMKAIENgIECyABIAEoAgRBf2o2AgQgASABKAIIIgBBAWo2AgggASAALQAAQQh0NgIQIAEoAgRFBEAgASgCGCABKAIMKAIMEQEARQRAIAFBADYCHAwCCyABIAEoAgwoAgA2AgggASABKAIMKAIENgIECyABIAEoAgRBf2o2AgQgASABKAIIIgBBAWo2AgggASAALQAAIAEoAhBqNgIQIAEoAhgoAgBB1AA2AhQgASgCGCgCACABKAIQNgIYIAEoAhhBASABKAIYKAIAKAIEEQIAIAEoAhggASgCEDYCmAIgASgCDCABKAIINgIAIAEoAgwgASgCBDYCBCABQQE2AhwLIAEoAhwhACABQSBqJAAgAAvUDgEBfyMAQUBqIgEkACABIAA2AjggASABKAI4KAIYNgIUIAEgASgCFCgCADYCECABIAEoAhQoAgQ2AgwCQCABKAIMRQRAIAEoAjggASgCFCgCDBEBAEUEQCABQQA2AjwMAgsgASABKAIUKAIANgIQIAEgASgCFCgCBDYCDAsgASABKAIMQX9qNgIMIAEgASgCECIAQQFqNgIQIAEgAC0AAEEIdDYCNCABKAIMRQRAIAEoAjggASgCFCgCDBEBAEUEQCABQQA2AjwMAgsgASABKAIUKAIANgIQIAEgASgCFCgCBDYCDAsgASABKAIMQX9qNgIMIAEgASgCECIAQQFqNgIQIAEgAC0AACABKAI0ajYCNCABIAEoAjRBAms2AjQDQCABKAI0QQBKBEAgASABKAI0QX9qNgI0IAEoAgxFBEAgASgCOCABKAIUKAIMEQEARQRAIAFBADYCPAwECyABIAEoAhQoAgA2AhAgASABKAIUKAIENgIMCyABIAEoAgxBf2o2AgwgASABKAIQIgBBAWo2AhAgASAALQAANgIoIAEgASgCKEEEdTYCJCABIAEoAihBD3E2AiggASgCOCgCAEHTADYCFCABKAI4KAIAIAEoAig2AhggASgCOCgCACABKAIkNgIcIAEoAjhBASABKAI4KAIAKAIEEQIAIAEoAihBBE4EQCABKAI4KAIAQSA2AhQgASgCOCgCACABKAIoNgIYIAEoAjggASgCOCgCACgCABEAAAsgASgCOEGkAWogASgCKEECdGooAgBFBEAgASgCOBCcFyEAIAEoAjhBpAFqIAEoAihBAnRqIAA2AgALIAEgASgCOEGkAWogASgCKEECdGooAgA2AhwCQCABKAIkBEAgASgCNEGAAUgEQCABQQA2AiwDQCABKAIsQcAATkUEQCABKAIcIAEoAixBAXRqQQE7AQAgASABKAIsQQFqNgIsDAELCyABIAEoAjRBAXU2AjAMAgsgAUHAADYCMAwBCwJAIAEoAjRBwABIBEAgAUEANgIsA0AgASgCLEHAAE5FBEAgASgCHCABKAIsQQF0akEBOwEAIAEgASgCLEEBajYCLAwBCwsgASABKAI0NgIwDAELIAFBwAA2AjALCwJAAkAgASgCMEF8aiIAQS1LDQACQAJAAkACQAJAAkAgAEEBaw4tBgYGBgEGBgYGBgYCBgYGBgYGBgYDBgYGBgYGBgYGBgQGBgYGBgYGBgYGBgYFAAsgAUHA4iI2AhgMBgsgAUHQ4SI2AhgMBQsgAUHQ4CI2AhgMBAsgAUGg3yI2AhgMAwsgAUHQ3SI2AhgMAgsgAUHA2yI2AhgMAQsgAUGA2SI2AhgLIAFBADYCLANAIAEoAiwgASgCMEgEQAJAIAEoAiQEQCABKAIMRQRAIAEoAjggASgCFCgCDBEBAEUEQCABQQA2AjwMCAsgASABKAIUKAIANgIQIAEgASgCFCgCBDYCDAsgASABKAIMQX9qNgIMIAEgASgCECIAQQFqNgIQIAEgAC0AAEEIdDYCICABKAIMRQRAIAEoAjggASgCFCgCDBEBAEUEQCABQQA2AjwMCAsgASABKAIUKAIANgIQIAEgASgCFCgCBDYCDAsgASABKAIMQX9qNgIMIAEgASgCECIAQQFqNgIQIAEgAC0AACABKAIgajYCIAwBCyABKAIMRQRAIAEoAjggASgCFCgCDBEBAEUEQCABQQA2AjwMBwsgASABKAIUKAIANgIQIAEgASgCFCgCBDYCDAsgASABKAIMQX9qNgIMIAEgASgCECIAQQFqNgIQIAEgAC0AADYCIAsgASgCHCABKAIYIAEoAixBAnRqKAIAQQF0aiABKAIgOwEAIAEgASgCLEEBajYCLAwBCwsgASgCOCgCACgCaEECTgRAIAFBADYCLANAIAEoAixBwABORQRAIAEgASgCOCgCAEEYajYCCCABKAIIIAEoAhwgASgCLEEBdGovAQA2AgAgASgCCCABKAIcIAEoAixBAWpBAXRqLwEANgIEIAEoAgggASgCHCABKAIsQQJqQQF0ai8BADYCCCABKAIIIAEoAhwgASgCLEEDakEBdGovAQA2AgwgASgCCCABKAIcIAEoAixBBGpBAXRqLwEANgIQIAEoAgggASgCHCABKAIsQQVqQQF0ai8BADYCFCABKAIIIAEoAhwgASgCLEEGakEBdGovAQA2AhggASgCCCABKAIcIAEoAixBB2pBAXRqLwEANgIcIAEoAjgoAgBB3wA2AhQgASgCOEECIAEoAjgoAgAoAgQRAgAgASABKAIsQQhqNgIsDAELCwsgASABKAI0IAEoAjBrNgI0IAEoAiQEQCABIAEoAjQgASgCMGs2AjQLDAELCyABKAI0BEAgASgCOCgCAEEMNgIUIAEoAjggASgCOCgCACgCABEAAAsgASgCFCABKAIQNgIAIAEoAhQgASgCDDYCBCABQQE2AjwLIAEoAjwhACABQUBrJAAgAAu+DAECfyMAQdACayIBJAAgASAANgLIAiABIAEoAsgCKAIYNgIcIAEgASgCHCgCADYCGCABIAEoAhwoAgQ2AhQCQCABKAIURQRAIAEoAsgCIAEoAhwoAgwRAQBFBEAgAUEANgLMAgwCCyABIAEoAhwoAgA2AhggASABKAIcKAIENgIUCyABIAEoAhRBf2o2AhQgASABKAIYIgBBAWo2AhggASAALQAAQQh0NgLEAiABKAIURQRAIAEoAsgCIAEoAhwoAgwRAQBFBEAgAUEANgLMAgwCCyABIAEoAhwoAgA2AhggASABKAIcKAIENgIUCyABIAEoAhRBf2o2AhQgASABKAIYIgBBAWo2AhggASAALQAAIAEoAsQCajYCxAIgASABKALEAkECazYCxAIDQCABKALEAkEQSgRAIAEoAhRFBEAgASgCyAIgASgCHCgCDBEBAEUEQCABQQA2AswCDAQLIAEgASgCHCgCADYCGCABIAEoAhwoAgQ2AhQLIAEgASgCFEF/ajYCFCABIAEoAhgiAEEBajYCGCABIAAtAAA2AiggASgCyAIoAgBB0gA2AhQgASgCyAIoAgAgASgCKDYCGCABKALIAkEBIAEoAsgCKAIAKAIEEQIAIAFBADoAsAIgAUEANgIkIAFBATYCLANAIAEoAixBEEwEQCABKAIURQRAIAEoAsgCIAEoAhwoAgwRAQBFBEAgAUEANgLMAgwGCyABIAEoAhwoAgA2AhggASABKAIcKAIENgIUCyABIAEoAhRBf2o2AhQgASABKAIYIgBBAWo2AhggASgCLCABQbACamogAC0AADoAACABIAEoAiwgAUGwAmpqLQAAIAEoAiRqNgIkIAEgASgCLEEBajYCLAwBCwsgASABKALEAkERazYCxAIgASABKALIAigCAEEYajYCECABKAIQIAEtALECNgIAIAEoAhAgAS0AsgI2AgQgASgCECABLQCzAjYCCCABKAIQIAEtALQCNgIMIAEoAhAgAS0AtQI2AhAgASgCECABLQC2AjYCFCABKAIQIAEtALcCNgIYIAEoAhAgAS0AuAI2AhwgASgCyAIoAgBB2AA2AhQgASgCyAJBAiABKALIAigCACgCBBECACABIAEoAsgCKAIAQRhqNgIMIAEoAgwgAS0AuQI2AgAgASgCDCABLQC6AjYCBCABKAIMIAEtALsCNgIIIAEoAgwgAS0AvAI2AgwgASgCDCABLQC9AjYCECABKAIMIAEtAL4CNgIUIAEoAgwgAS0AvwI2AhggASgCDCABLQDAAjYCHCABKALIAigCAEHYADYCFCABKALIAkECIAEoAsgCKAIAKAIEEQIAAkAgASgCJEGAAkwEQCABKAIkIAEoAsQCTA0BCyABKALIAigCAEEJNgIUIAEoAsgCIAEoAsgCKAIAKAIAEQAACyABQQA2AiwDQCABKAIsIAEoAiRIBEAgASgCFEUEQCABKALIAiABKAIcKAIMEQEARQRAIAFBADYCzAIMBgsgASABKAIcKAIANgIYIAEgASgCHCgCBDYCFAsgASABKAIUQX9qNgIUIAEgASgCGCIAQQFqNgIYIAEoAiwgAUEwamogAC0AADoAACABIAEoAixBAWo2AiwMAQsLIAEgASgCxAIgASgCJGs2AsQCAkAgASgCKEEQcQRAIAEgASgCKEEQazYCKCABIAEoAsgCQcQBaiABKAIoQQJ0ajYCIAwBCyABIAEoAsgCQbQBaiABKAIoQQJ0ajYCIAsCQCABKAIoQQBOBEAgASgCKEEESA0BCyABKALIAigCAEEfNgIUIAEoAsgCKAIAIAEoAig2AhggASgCyAIgASgCyAIoAgAoAgARAAALIAEoAiAoAgBFBEAgASgCyAIQ9wwhACABKAIgIAA2AgALIAEoAiAoAgAiACABQbACaiICKQIANwIAIAAgAi0AEDoAECAAIAIpAgg3AgggASgCICgCAEERaiABQTBqQYACEFgaDAELCyABKALEAgRAIAEoAsgCKAIAQQw2AhQgASgCyAIgASgCyAIoAgAoAgARAAALIAEoAhwgASgCGDYCACABKAIcIAEoAhQ2AgQgAUEBNgLMAgsgASgCzAIhACABQdACaiQAIAALoAcBAX8jAEEgayIBJAAgASAANgIYIAEgASgCGCgCGDYCCCABIAEoAggoAgA2AgQgASABKAIIKAIENgIAAkAgASgCAEUEQCABKAIYIAEoAggoAgwRAQBFBEAgAUEANgIcDAILIAEgASgCCCgCADYCBCABIAEoAggoAgQ2AgALIAEgASgCAEF/ajYCACABIAEoAgQiAEEBajYCBCABIAAtAABBCHQ2AhQgASgCAEUEQCABKAIYIAEoAggoAgwRAQBFBEAgAUEANgIcDAILIAEgASgCCCgCADYCBCABIAEoAggoAgQ2AgALIAEgASgCAEF/ajYCACABIAEoAgQiAEEBajYCBCABIAAtAAAgASgCFGo2AhQgASABKAIUQQJrNgIUA0AgASgCFEEASgRAIAEoAgBFBEAgASgCGCABKAIIKAIMEQEARQRAIAFBADYCHAwECyABIAEoAggoAgA2AgQgASABKAIIKAIENgIACyABIAEoAgBBf2o2AgAgASABKAIEIgBBAWo2AgQgASAALQAANgIQIAEoAgBFBEAgASgCGCABKAIIKAIMEQEARQRAIAFBADYCHAwECyABIAEoAggoAgA2AgQgASABKAIIKAIENgIACyABIAEoAgBBf2o2AgAgASABKAIEIgBBAWo2AgQgASAALQAANgIMIAEgASgCFEECazYCFCABKAIYKAIAQdEANgIUIAEoAhgoAgAgASgCEDYCGCABKAIYKAIAIAEoAgw2AhwgASgCGEEBIAEoAhgoAgAoAgQRAgACQCABKAIQQQBOBEAgASgCEEEgSA0BCyABKAIYKAIAQR02AhQgASgCGCgCACABKAIQNgIYIAEoAhggASgCGCgCACgCABEAAAsCQCABKAIQQRBOBEAgASgCGCABKAIQakH4AWogASgCDDoAAAwBCyABKAIQIAEoAhhB6AFqaiABKAIMQQ9xOgAAIAEoAhAgASgCGEH4AWpqIAEoAgxBBHU6AAAgASgCECABKAIYQegBamotAAAgASgCECABKAIYQfgBamotAABKBEAgASgCGCgCAEEeNgIUIAEoAhgoAgAgASgCDDYCGCABKAIYIAEoAhgoAgAoAgARAAALCwwBCwsgASgCFARAIAEoAhgoAgBBDDYCFCABKAIYIAEoAhgoAgAoAgARAAALIAEoAgggASgCBDYCACABKAIIIAEoAgA2AgQgAUEBNgIcCyABKAIcIQAgAUEgaiQAIAALng0BAX8jAEFAaiIBJAAgASAANgI4IAEgASgCOCgCGDYCGCABIAEoAhgoAgA2AhQgASABKAIYKAIENgIQIAEoAjgoAswDKAIQRQRAIAEoAjgoAgBBwAA2AhQgASgCOCABKAI4KAIAKAIAEQAACwJAIAEoAhBFBEAgASgCOCABKAIYKAIMEQEARQRAIAFBADYCPAwCCyABIAEoAhgoAgA2AhQgASABKAIYKAIENgIQCyABIAEoAhBBf2o2AhAgASABKAIUIgBBAWo2AhQgASAALQAAQQh0NgI0IAEoAhBFBEAgASgCOCABKAIYKAIMEQEARQRAIAFBADYCPAwCCyABIAEoAhgoAgA2AhQgASABKAIYKAIENgIQCyABIAEoAhBBf2o2AhAgASABKAIUIgBBAWo2AhQgASAALQAAIAEoAjRqNgI0IAEoAhBFBEAgASgCOCABKAIYKAIMEQEARQRAIAFBADYCPAwCCyABIAEoAhgoAgA2AhQgASABKAIYKAIENgIQCyABIAEoAhBBf2o2AhAgASABKAIUIgBBAWo2AhQgASAALQAANgIoIAEoAjgoAgBB6QA2AhQgASgCOCgCACABKAIoNgIYIAEoAjhBASABKAI4KAIAKAIEEQIAAkACQCABKAI0IAEoAihBAXRBBmpHDQAgASgCKEEESg0AIAEoAigNASABKAI4KALgAQ0BCyABKAI4KAIAQQw2AhQgASgCOCABKAI4KAIAKAIAEQAACyABKAI4IAEoAig2AtACIAFBADYCMANAIAEoAjAgASgCKEgEQCABKAIQRQRAIAEoAjggASgCGCgCDBEBAEUEQCABQQA2AjwMBAsgASABKAIYKAIANgIUIAEgASgCGCgCBDYCEAsgASABKAIQQX9qNgIQIAEgASgCFCIAQQFqNgIUIAEgAC0AADYCICABKAIQRQRAIAEoAjggASgCGCgCDBEBAEUEQCABQQA2AjwMBAsgASABKAIYKAIANgIUIAEgASgCGCgCBDYCEAsgASABKAIQQX9qNgIQIAEgASgCFCIAQQFqNgIUIAEgAC0AADYCJCABQQA2AiwgASABKAI4KALYATYCHAJAA0AgASgCLCABKAI4KAIkSARAIAEoAiAgASgCHCgCAEYNAiABIAEoAixBAWo2AiwgASABKAIcQdgAajYCHAwBCwsgASgCOCgCAEEENgIUIAEoAjgoAgAgASgCIDYCGCABKAI4IAEoAjgoAgAoAgARAAALIAEoAjhB1AJqIAEoAjBBAnRqIAEoAhw2AgAgASgCHCABKAIkQQR1QQ9xNgIUIAEoAhwgASgCJEEPcTYCGCABIAEoAjgoAgBBGGo2AgwgASgCDCABKAIgNgIAIAEoAgwgASgCHCgCFDYCBCABKAIMIAEoAhwoAhg2AgggASgCOCgCAEHqADYCFCABKAI4QQEgASgCOCgCACgCBBECACABIAEoAjBBAWo2AjAMAQsLIAEoAhBFBEAgASgCOCABKAIYKAIMEQEARQRAIAFBADYCPAwCCyABIAEoAhgoAgA2AhQgASABKAIYKAIENgIQCyABIAEoAhBBf2o2AhAgASABKAIUIgBBAWo2AhQgASAALQAANgIkIAEoAjggASgCJDYCmAMgASgCEEUEQCABKAI4IAEoAhgoAgwRAQBFBEAgAUEANgI8DAILIAEgASgCGCgCADYCFCABIAEoAhgoAgQ2AhALIAEgASgCEEF/ajYCECABIAEoAhQiAEEBajYCFCABIAAtAAA2AiQgASgCOCABKAIkNgKcAyABKAIQRQRAIAEoAjggASgCGCgCDBEBAEUEQCABQQA2AjwMAgsgASABKAIYKAIANgIUIAEgASgCGCgCBDYCEAsgASABKAIQQX9qNgIQIAEgASgCFCIAQQFqNgIUIAEgAC0AADYCJCABKAI4IAEoAiRBBHVBD3E2AqADIAEoAjggASgCJEEPcTYCpAMgASABKAI4KAIAQRhqNgIIIAEoAgggASgCOCgCmAM2AgAgASgCCCABKAI4KAKcAzYCBCABKAIIIAEoAjgoAqADNgIIIAEoAgggASgCOCgCpAM2AgwgASgCOCgCAEHrADYCFCABKAI4QQEgASgCOCgCACgCBBECACABKAI4KALMA0EANgIUIAEoAigEQCABKAI4IgAgACgCkAFBAWo2ApABCyABKAIYIAEoAhQ2AgAgASgCGCABKAIQNgIEIAFBATYCPAsgASgCPCEAIAFBQGskACAAC9YCAQF/IwBBEGsiASQAIAEgADYCDCABKAIMKAIAQegANgIUIAEoAgxBASABKAIMKAIAKAIEEQIAIAEoAgwoAswDKAIMBEAgASgCDCgCAEE/NgIUIAEoAgwgASgCDCgCACgCABEAAAsgAUEANgIIA0AgASgCCEEQTkUEQCABKAIIIAEoAgxB6AFqakEAOgAAIAEoAgggASgCDEH4AWpqQQE6AAAgASgCCCABKAIMQYgCampBBToAACABIAEoAghBAWo2AggMAQsLIAEoAgxBADYCmAIgASgCDEEANgIoIAEoAgxBADYCsAIgASgCDEEANgKcAiABKAIMQQE6AKACIAEoAgxBAToAoQIgASgCDEEAOgCiAiABKAIMQQE7AaQCIAEoAgxBATsBpgIgASgCDEEANgKoAiABKAIMQQA6AKwCIAEoAgwoAswDQQE2AgwgAUEQaiQAQQELowMBAX8jAEEgayIBJAAgASAANgIYIAEgASgCGCgCGDYCDCABIAEoAgwoAgA2AgggASABKAIMKAIENgIEAkAgASgCBEUEQCABKAIYIAEoAgwoAgwRAQBFBEAgAUEANgIcDAILIAEgASgCDCgCADYCCCABIAEoAgwoAgQ2AgQLIAEgASgCBEF/ajYCBCABIAEoAggiAEEBajYCCCABIAAtAAA2AhQgASgCBEUEQCABKAIYIAEoAgwoAgwRAQBFBEAgAUEANgIcDAILIAEgASgCDCgCADYCCCABIAEoAgwoAgQ2AgQLIAEgASgCBEF/ajYCBCABIAEoAggiAEEBajYCCCABIAAtAAA2AhACQCABKAIUQf8BRgRAIAEoAhBB2AFGDQELIAEoAhgoAgBBNzYCFCABKAIYKAIAIAEoAhQ2AhggASgCGCgCACABKAIQNgIcIAEoAhggASgCGCgCACgCABEAAAsgASgCGCABKAIQNgK0AyABKAIMIAEoAgg2AgAgASgCDCABKAIENgIEIAFBATYCHAsgASgCHCEAIAFBIGokACAAC+8FAQF/IwBBMGsiASQAIAEgADYCKCABIAEoAigoAhg2AgggASABKAIIKAIANgIEIAEgASgCCCgCBDYCAAJAIAEoAgBFBEAgASgCKCABKAIIKAIMEQEARQRAIAFBADYCLAwCCyABIAEoAggoAgA2AgQgASABKAIIKAIENgIACyABIAEoAgBBf2o2AgAgASABKAIEIgBBAWo2AgQgASAALQAAQQh0NgIkIAEoAgBFBEAgASgCKCABKAIIKAIMEQEARQRAIAFBADYCLAwCCyABIAEoAggoAgA2AgQgASABKAIIKAIENgIACyABIAEoAgBBf2o2AgAgASABKAIEIgBBAWo2AgQgASAALQAAIAEoAiRqNgIkIAEgASgCJEECazYCJAJAIAEoAiRBDk4EQCABQQ42AgwMAQsCQCABKAIkQQBKBEAgASABKAIkNgIMDAELIAFBADYCDAsLIAFBADYCEANAIAEoAhAgASgCDEkEQCABKAIARQRAIAEoAiggASgCCCgCDBEBAEUEQCABQQA2AiwMBAsgASABKAIIKAIANgIEIAEgASgCCCgCBDYCAAsgASABKAIAQX9qNgIAIAEgASgCBCIAQQFqNgIEIAEoAhAgAUEWamogAC0AADoAACABIAEoAhBBAWo2AhAMAQsLIAEgASgCJCABKAIMazYCJAJAAkAgASgCKCgCtANBoH5qIgBBDksNAAJAAkAgAEEBaw4OAgICAgICAgICAgICAgEACyABKAIoIAFBFmogASgCDCABKAIkEN0pDAILIAEoAiggAUEWaiABKAIMIAEoAiQQ3CkMAQsgASgCKCgCAEHGADYCFCABKAIoKAIAIAEoAigoArQDNgIYIAEoAiggASgCKCgCACgCABEAAAsgASgCCCABKAIENgIAIAEoAgggASgCADYCBCABKAIkQQBKBEAgASgCKCABKAIkIAEoAigoAhgoAhARAgALIAFBATYCLAsgASgCLCEAIAFBMGokACAAC8wIAQF/IwBBEGsiASQAIAEgADYCCANAAkAgASgCCCgCtANFBEACQCABKAIIKALMAygCDEUEQCABKAIIEOQpRQRAIAFBADYCDAwECwwBCyABKAIIELAQRQRAIAFBADYCDAwDCwsLAkACQCABKAIIKAK0A0F/aiIAQf0BSw0AAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQQFrDv0BEREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQECAwYKBgYGBgQFBgkGBgYPDw8PDw8PDwAIBwsQDBERDQ0NDQ0NDQ0NDQ0NDQ0NDRERERERERERERERERERDg8LIAEoAggQ4ylFBEAgAUEANgIMDBMLDBELIAEoAghBAUEAQQAQ2wpFBEAgAUEANgIMDBILDBALIAEoAghBAEEAQQAQ2wpFBEAgAUEANgIMDBELDA8LIAEoAghBAEEBQQAQ2wpFBEAgAUEANgIMDBALDA4LIAEoAghBAEEAQQEQ2wpFBEAgAUEANgIMDA8LDA0LIAEoAghBAEEBQQEQ2wpFBEAgAUEANgIMDA4LDAwLIAEoAggoAgBBPjYCFCABKAIIKAIAIAEoAggoArQDNgIYIAEoAgggASgCCCgCACgCABEAAAwLCyABKAIIEOIpRQRAIAFBADYCDAwMCyABKAIIQQA2ArQDIAFBATYCDAwLCyABKAIIKAIAQdcANgIUIAEoAghBASABKAIIKAIAKAIEEQIAIAEoAghBADYCtAMgAUECNgIMDAoLIAEoAggQ4SlFBEAgAUEANgIMDAoLDAgLIAEoAggQ4ClFBEAgAUEANgIMDAkLDAcLIAEoAggQ3ylFBEAgAUEANgIMDAgLDAYLIAEoAggQ3ilFBEAgAUEANgIMDAcLDAULIAEoAgggASgCCCgCzAMgASgCCCgCtANBAnRqQaB5aigCABEBAEUEQCABQQA2AgwMBgsMBAsgASgCCCABKAIIKALMAygCHBEBAEUEQCABQQA2AgwMBQsMAwsgASgCCCgCAEHeADYCFCABKAIIKAIAIAEoAggoArQDNgIYIAEoAghBASABKAIIKAIAKAIEEQIADAILIAEoAggQlxdFBEAgAUEANgIMDAMLDAELIAEoAggoAgBBxgA2AhQgASgCCCgCACABKAIIKAK0AzYCGCABKAIIIAEoAggoAgAoAgARAAALIAEoAghBADYCtAMMAQsL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IAEoAgwoApgDNgIYIAEoAgwoAgAgASgCDCgCnAM2AhwgASgCDCgCACABKAIMKAKgAzYCICABKAIMKAIAIAEoAgwoAqQDNgIkIAEoAgwgASgCDCgCACgCABEAAAsLIAEoAgwgASgCDCgCqAM2AsACIAEoAgwgASgCDCgCqAM2AsQCIAFBADYCCCABIAEoAgwoAtgBNgIEA0AgASgCCCABKAIMKAIkTkUEQCABKAIEIAEoAgwoAqgDNgIkIAEoAgQgASgCDCgCqAM2AiggASgCDCgCHCABKAIEKAIIbCABKAIMKAK4AiABKAIMKAKoA2wQlgEhACABKAIEIAA2AhwgASgCDCgCICABKAIEKAIMbCABKAIMKAK8AiABKAIMKAKoA2wQlgEhACABKAIEIAA2AiAgASgCDCgCHCABKAIEKAIIbCABKAIMKAK4AhCWASEAIAEoAgQgADYCLCABKAIMKAIgIAEoAgQoAgxsIAEoAgwoArwCEJYBIQAgASgCBCAANgIwIAEoAgRBATYCNCABKAIEQQA2AlAgASABKAIIQQFqNgIIIAEgASgCBEHYAGo2AgQMAQsLIAEoAgwoAiAgASgCDCgCvAIgASgCDCgCqANsEJYBIQAgASgCDCAANgLIAgJAAkAgASgCDCgC0AIgASgCDCgCJE4EQCABKAIMKALgAUUNAQsgASgCDCgCyANBATYCEAwBCyABKAIMKALIA0EANgIQCyABQRBqJAALtQMBAX8jAEEQayIBJAAgASAANgIIIAEgASgCCCgCyAM2AgQCQCABKAIEKAIUBEAgAUECNgIMDAELA0AgASABKAIIIgAgACgCzAMoAgQRAQA2AgACQCABKAIAIgBBAk0EQAJAAkACQCAAQQFrDgIAAQILAkAgASgCBCgCGARAIAEoAgQoAhhBAUYEQCABKAIIEOwpCyABKAIIKALQAkUEQCABKAIEQQI2AhgMBgsgASgCBEEANgIYDAELIAEoAgQoAhBFBEAgASgCCCgCAEEkNgIUIAEoAgggASgCCCgCACgCABEAAAsgASgCCCgC0AJFDQQgASgCCBCYFwsgASABKAIANgIMDAULIAEoAgRBATYCFAJAIAEoAgQoAhgEQCABKAIIKALMAygCEARAIAEoAggoAgBBPTYCFCABKAIIIAEoAggoAgAoAgARAAALDAELIAEoAggo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IgAgAygCDCAAKAKMAWo2AowBIAMgAygCDDYCHAsgAygCHCEAIANBIGokACAAC+sCAQF/IwBBEGsiASQAIAEgADYCCCABKAIIKAIUQcwBRwRAIAEoAgggASgCCCgCuAMoAgARAAAgASgCCEEANgKMASABKAIIQcwBNgIUCwJAA0AgASgCCCgCuAMoAggEQANAIAEoAggoAowBIAEoAggoAnRJBEAgASgCCCgCCARAIAEoAggoAgggASgCCCgCjAE2AgQgASgCCCgCCCABKAIIKAJ0NgIIIAEoAgggASgCCCgCCCgCABEAAAsgASABKAIIKAKMATYCBCABKAIIQQAgASgCCEGMAWpBACABKAIIKAK8AygCBBEGACABKAIIKAKMASABKAIERw0BIAFBADYCDAwECwsgASgCCCABKAIIKAK4AygCBBEAACABKAIIIAEoAggoArgDKAIAEQAAIAEoAghBADYCjAEMAQsLIAEoAghBzgFBzQEgASgCCCgCRBs2AhQgAUEBNgIMCyABKAIMIQAgAUEQaiQAIAALqwMBAn8jAEEQayIBJAAgASAANgIIAkAgASgCCCgCFEHKAUYEQCABKAIIEK8pIAEoAggoAkAEQCABKAIIQc8BNgIUIAFBATYCDAwCCyABKAIIQcsBNgIUCwJAIAEoAggoAhRBywFGBEAgASgCCCgCyAMoAhAEQANAIAEoAggoAggEQCABKAIIIAEoAggoAggoAgARAAALIAEgASgCCCABKAIIKALIAygCABEBADYCBCABKAIERQRAIAFBADYCDAwFCyABKAIEQQJHBEAgASgCCCgCCEUNASABKAIEQQNHBEAgASgCBEEBRw0CCyABKAIIKAIIIgIoAgRBAWohACACIAA2AgQgACABKAIIKAIIKAIITgRAIAEoAggoAggiACABKAIIKALIAiAAKAIIajYCCAsMAQsLCyABKAIIIAEoAggoApABNgKYAQwBCyABKAIIKAIUQcwBRwRAIAEoAggoAgBBFTYCFCABKAIIKAIAIAEoAggoAhQ2AhggASgCCCABKAIIKAIAKAIAEQAACwsgASABKAIIEPwpNgIMCyABKAIMIQAgAUEQaiQAIAAL6AIBAX8jAEEQayIBJAAgASAANgIIAkACQCABKAIIKAIUQc0BRwRAIAEoAggoAhRBzgFHDQELIAEoAggo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KEEMaiABKAIkQQJ0akGFBDYCAAsMAQsCQAJAIAEoAhggASgCEEEBdEcNACABKAIUIAEoAgxHDQAgAUEANgIcIAEoAihBDGogASgCJEECdGpBhgQ2AgAMAQsCQAJAIAEoAhggASgCEEEBdEcNACABKAIUIAEoAgxBAXRHDQACQCABKAIsKALkAQRAIAEoAihBDGogASgCJEECdGpBhwQ2AgAgASgCKEEBNgIIDAELIAEoAihBDGogASgCJEECdGpBiAQ2AgALDAELAkACQCABKAIYIAEoAhBvDQAgASgCFCABKAIMbw0AIAFBADYCHCABKAIoQQxqIAEoAiRBAnRqQYkENgIAIAEoAiQgASgCKEHcAGpqIAEoAhggASgCEG06AAAgASgCJCABKAIoQeYAamogASgCFCABKAIMbToAAAwBCyABKAIsKAIAQSc2AhQgASgCLCABKAIsKAIAKAIAEQAACwsLCyABIAEoAiRBAWo2AiQgASABKAIgQdgAajYCIAwBCwsCQCABKAIsKALkAUUNACABKAIcDQAgASgCLCgCAEHlADYCFCABKAIsQQAgASgCLCgCACgCBBECAAsgAUEwaiQAC4UGAQF/IwBBMGsiByQAIAcgADYCLCAHIAE2AiggByACNgIkIAcgAzYCICAHIAQ2AhwgByAFNgIYIAcgBjYCFCAHIAcoAiwoAowDNgIQA0BBACEAAkAgBygCJCgCACAHKAIgSQR/IAcoAhgoAgAgBygCFEkFQQALQQFxRQ0AIAcgBygCICAHKAIkKAIAazYCBCAHIAcoAiwoApACIAcoAhAoAjRrNgIMIAcCfyAHKAIMIAcoAgRJBEAgBygCDAwBCyAHKAIECzYCDCAHKAIsIAcoAiggBygCJCgCAEECdGogBygCEEEIaiAHKAIQKAI0IAcoAgwgBygCLCgCmAMoAgQRCAAgBygCJCIAIAcoAgwgACgCAGo2AgAgBygCECIAIAcoAgwgACgCNGo2AjQgBygCECIAIAAoAjAgBygCDGs2AjACQCAHKAIQKAIwDQAgBygCECgCNCAHKAIsKAKQAk4NACAHQQA2AggDQCAHKAIIIAcoAiwoAkxORQRAIAcoAhBBCGogBygCCEECdGooAgAgBygCLCgCHCAHKAIQKAI0IAcoAiwoApACELIQIAcgBygCCEEBajYCCAwBCwsg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2BRBwABORQRAIAEgASgCjBQiAEEEajYCjBQgAEF/NgIAIAEgASgC2BRBAWo2AtgUDAELCyABIAEoAtwUQQFqNgLcFAwBCwsMAQsgASgC7BRBADYCiAIgAUEANgLcFANAIAEoAtwUIAEoAuwUKAJMTkUEQCABQZAUaiABKALcFEECdGpBADYCACABIAEoAtwUQQFqNgLcFAwBCwsLIAFBATYC5BQDQCABKALkFCABKALsFCgCyAFKRQRAIAEgASgC6BQoAgA2AuAUAkAgASgC4BRBAEoEQCABKALgFEEETA0BCyABKALsFCgCAEEbNgIUIAEoAuwUKAIAIAEoAuAUNgIYIAEoAuwUKAIAQQQ2AhwgASgC7BQgASgC7BQoAgAoAgARAAALIAFBADYC3BQDQCABKALcFCABKALgFE5FBEAgASABKALoFEEEaiABKALcFEECdGooAgA2AtQUAkAgASgC1BRBAE4EQCABKALUFCABKALsFCgCTEgNAQsgASgC7BQoAgBBFDYCFCABKALsFCgCACABKALkFDYCGCABKALsFCABKALsFCgCACgCABEAAAsCQCABKALcFEEATA0AIAEoAtQUIAEoAugUIAEoAtwUQQJ0aigCAEoNACABKALsFCgCAEEUNgIUIAEoAuwUKAIAIAEoAuQUNgIYIAEoAuwUIAEoAuwUKAIAKAIAEQAACyABIAEoAtwUQQFqNgLcFAwBCwsgASABKALoFCgCFDYC0BQgASABKALoFCgCGDYCzBQgASABKALoFCgCHDYCyBQgASABKALoFCgCIDYCxBQCQCABKALsFCgCiAIEQAJAAkAgASgC0BRBAEgNACABKALQFEHAAE4NACABKALMFCABKALQFEgNACABKALMFEHAAE4NACABKALIFEEASA0AIAEoAsgUQQpKDQAgASgCxBRBAEgNACABKALEFEEKTA0BCyABKALsFCgCAEESNgIUIAEoAuwUKAIAIAEoAuQUNgIYIAEoAuwUIAEoAuwUKAIAKAIAEQAACwJAIAEoAtAURQRAIAEoAswUBEAgASgC7BQoAgBBEjYCFCABKALsFCgCACABKALkFDYCGCABKALsFCABKALsFCgCACgCABEAAAsMAQsgASgC4BRBAUcEQCABKALsFCgCAEESNgIUIAEoAuwUKAIAIAEoAuQUNgIYIAEoAuwUIAEoAuwUKAIAKAIAEQAACwsgAUEANgLcFANAIAEoAtwUIAEoAuAUTkUEQCABIAEoAugUQQRqIAEoAtwUQQJ0aigCAEEIdCABajYCjBQCQCABKALQFEUNACABKAKMFCgCAEEATg0AIAEoAuwUKAIAQRI2AhQgASgC7BQoAgAgASgC5BQ2AhggASgC7BQgASgC7BQoAgAoAgARAAALIAEgASgC0BQ2AtgUA0AgASgC2BQgASgCzBRKRQRAAkAgASgCjBQgASgC2BRBAnRqKAIAQQBIBEAgASgCyBQEQCABKALsFCgCAEESNgIUIAEoAuwUKAIAIAEoAuQUNgIYIAEoAuwUIAEoAuwUKAIAKAIAEQAACwwBCwJAIAEoAsgUIAEoAowUIAEoAtgUQQJ0aigCAEYEQCABKALEFCABKALIFEEBa0YNAQsgASgC7BQoAgBBEjYCFCABKALsFCgCACABKALkFDYCGCABKALsFCABKALsFCgCACgCABEAAAsLIAEoAowUIAEoAtgUQQJ0aiABKALEFDYCACABIAEoAtgUQQFqNgLYFAwBCwsgASABKALcFEEBajYC3BQMAQsLDAELAkACQCABKALQFA0AIAEoAswUQT9HDQAgASgCyBQNACABKALEFEUNAQsgASgC7BQoAgBBEjYCFCABKALsFCgCACABKALkFDYCGCABKALsFCABKALsFCgCACgCABEAAAsgAUEANgLcFANAIAEoAtwUIAEoAuAUSARAIAEgASgC6BRBBGogASgC3BRBAnRqKAIANgLUFCABQZAUaiABKALUFEECdGooAgAEQCABKALsFCgCAEEUNgIUIAEoAuwUKAIAIAEoAuQUNgIYIAEoAuwUIAEoAuwUKAIAKAIAEQAACyABQZAUaiABKALUFEECdGpBATYCACABIAEoAtwUQQFqNgLcFAwBCwsLIAEgASgC6BRBJGo2AugUIAEgASgC5BRBAWo2AuQUDAELCwJAIAEoAuwUKAKIAgRAIAFBADYC3BQDQCABKALcFCABKALsFCgCTEgEQCABKALcFEEIdCABaigCAEEASARAIAEoAuwUKAIAQS42AhQgASgC7BQgASgC7BQoAgAoAgARAAALIAEgASgC3BRBAWo2AtwUDAELCwwBCyABQQA2AtwUA0AgASgC3BQgASgC7BQoAkxIBEAgAUGQFGog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bBCWASEAIAIoAhwgADYCnAIgAkEgaiQAC7EFAQF/IwBBEGsiASQAIAEgADYCDCABIAEoAgwoAoQDNgIIAkAgASgCCCgCFCIAQQJNBEACQAJAAkAgAEEBaw4CAQIACyABKAIMELQQIAEoAgwQsxAgASgCDCgC0AFFBEAgASgCDCABKAIMKAKYAygCABEAACABKAIMIAEoAgwoApwDKAIAEQAAIAEoAgxBACABKAIMKAKMAygCABECAAsgASgCDCABKAIMKAKgAygCABEAACABKAIMIAEoAgwoAtgBIAEoAgwoAqQDKAIAEQIAIAEoAgxBA0EAIAEoAggoAhxBAUobIAEoAgwoApADKAIAEQIAIAEoAgxBACABKAIMKAKIAygCABECAAJAIAEoAgwoAtgBBEAgASgCCEEANgIMDAELIAEoAghBATYCDAsMAwsgASgCDBC0ECABKAIMELMQAkAgASgCDCgC6AJFBEAgASgCDCgC8AINAQsgASgCDEEBIAEoAgwoAqQDKAIAEQIAIAEoAgxBAiABKAIMKAKQAygCABECACABKAIIQQA2AgwMAwsgASgCCEECNgIUIAEoAggiACAAKAIYQQFqNgIYCyABKAIMKALYAUUEQCABKAIMELQQIAEoAgwQsxALIAEoAgxBACABKAIMKAKkAygCABECACABKAIMQQIgASgCDCgCkAMoAgARAgAgASgCCCgCIEUEQCABKAIMIAEoAgwoApQDKAIEEQAACyABKAIMIAEoAgwoApQDKAIIEQAAIAEoAghBADYCDAwBCyABKAIMKAIAQTE2AhQgASgCDCABKAIMKAIAKAIAEQAACyABKAIIIAEoAggoAhggASgCCCgCHEEBa0Y2AhAgASgCDCgCCARAIAEoAgwoAgggASgCCCgCGDYCDCABKAIMKAIIIAEoAggoAhw2AhALIAFBEGokAAtRAQF/IwBBEGsiASQAIAEgADYCDCABKAIMKAKEA0EANgIMIAEoAgwgASgCDCgClAMoAgQRAAAgASgCDCABKAIMKAKUAygCCBEAACABQRBqJAAL0gEBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDCgChAM2AgggASgCDCIAIAAoAqQDKAIIEQAAAkAgASgCCCgCFCIAQQJLDQACQAJAAkAgAEEBaw4CAQIACyABKAIIQQI2AhQgASgCDCgC2AFFBEAgASgCCCIAIAAoAiBBAWo2AiALDAILIAEoAghBAjYCFAwBCyABKAIMKALYAQRAIAEoAghBATYCFAsgASgCCCIAIAAoAiBBAWo2AiALIAEoAggiACAAKAIYQQFqNgIYIAFBEGokAAuBAwEBfyMAQRBrIgEkACABIAA2AgwgAUEANgIIIAEgASgCDEEBQSQgASgCDCgCBCgCABEEADYCBCABKAIMIAEoAgQ2AoQDIAEoAgRB/gM2AgAgASgCBEH9AzYCBCABKAIEQfwDNgIIIAEoAgRBADYCECABKAIMIAEoAggQmSoCQCABKAIMKALMAQRAIAEoAgwQmCogASgCDCgC+AJBCEgEQCABKAIMEJcqCwwBCyABKAIMQQA2AogCIAEoAgxBATYCyAELAkAgASgCDCgCiAJFBEAgASgCDCgC+AJBCE4NAQsgASgCDCgC1AENACABKAIMQQE2AtgBCwJAIAEoAggEQCABKAIMKALYAQRAIAEoAgRBATYCFAwCCyABKAIEQQI2AhQMAQsgASgCBEEANgIUCyABKAIEQQA2AiAgASgCBEEANgIYAkAgASgCDCgC2AEEQCABKAIEIAEoAgwoAsgBQQF0NgIcDAELIAEoAgQgASgCDCgCyAE2AhwLIAFBEGokAAvPEAEBfyMAQRBrIgEkACABIAA2AgwCQCABKAIMKAIcQRh1RQRAIAEoAgwoAiBBGHVFDQELIAEoAgwoAgBBKjYCFCABKAIMKAIAQdz/AzYCGCABKAIMIAEoAgwoAgAoAgARAAALAkAgASgCDCgCOCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMIAEoAgwoAhwgASgCDCgC+AJsNgJAIAEoAgwgASgCDCgCICABKAIMKAL4Amw2AkQgASgCDEEBNgKUAiABKAIMQQE2ApgCDAELAkAgASgCDCgCOEEBdCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEECEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQIQlgEhACABKAIMIAA2AkQgASgCDEECNgKUAiABKAIMQQI2ApgCDAELAkAgASgCDCgCOEEDbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEDEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQMQlgEhACABKAIMIAA2AkQgASgCDEEDNgKUAiABKAIMQQM2ApgCDAELAkAgASgCDCgCOEECdCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEEEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQQQlgEhACABKAIMIAA2AkQgASgCDEEENgKUAiABKAIMQQQ2ApgCDAELAkAgASgCDCgCOEEFbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEFEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQUQlgEhACABKAIMIAA2AkQgASgCDEEFNgKUAiABKAIMQQU2ApgCDAELAkAgASgCDCgCOEEGbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEGEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQYQlgEhACABKAIMIAA2AkQgASgCDEEGNgKUAiABKAIMQQY2ApgCDAELAkAgASgCDCgCOEEHbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEHEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQcQlgEhACABKAIMIAA2AkQgASgCDEEHNgKUAiABKAIMQQc2ApgCDAELAkAgASgCDCgCOEEDdCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEIEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQgQlgEhACABKAIMIAA2AkQgASgCDEEINgKUAiABKAIMQQg2ApgCDAELAkAgASgCDCgCOEEJbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEJEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQkQlgEhACABKAIMIAA2AkQgASgCDEEJNgKUAiABKAIMQQk2ApgCDAELAkAgASgCDCgCOEEKbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEKEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQoQlgEhACABKAIMIAA2AkQgASgCDEEKNgKUAiABKAIMQQo2ApgCDAELAkAgASgCDCgCOEELbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEELEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQsQlgEhACABKAIMIAA2AkQgASgCDEELNgKUAiABKAIMQQs2ApgCDAELAkAgASgCDCgCOEEMbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEMEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQwQlgEhACABKAIMIAA2AkQgASgCDEEMNgKUAiABKAIMQQw2ApgCDAELAkAgASgCDCgCOEENbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEENEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQ0QlgEhACABKAIMIAA2AkQgASgCDEENNgKUAiABKAIMQQ02ApgCDAELAkAgASgCDCgCOEEObCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEOEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQ4QlgEhACABKAIMIAA2AkQgASgCDEEONgKUAiABKAIMQQ42ApgCDAELAkAgASgCDCgCOEEPbCABKAIMKAI8IAEoAgwoAvgCbE8EQCABKAIMKAIcIAEoAgwoAvgCbEEPEJYBIQAgASgCDCAANgJAIAEoAgwoAiAgASgCDCgC+AJsQQ8QlgEhACABKAIMIAA2AkQgASgCDEEPNgKUAiABKAIMQQ82ApgCDAELIAEoAgwoAhwgASgCDCgC+AJsQRAQlgEhACABKAIMIAA2AkAgASgCDCgCICABKAIMKAL4AmxBEBCWASEAIAEoAgwgADYCRCABKAIMQRA2ApQCIAEoAgxBEDYCmAILCwsLCwsLCwsLCwsLCwsgAUEQaiQAC8cCAQF/IwBBIGsiASQAIAEgADYCHCABKAIcQdoBELkEIAEoAhwgASgCHCgCoAJBAXRBBmoQwwMgASgCHCABKAIcKAKgAhDdASABQQA2AhgDQCABKAIYIAEoAhwoAqACTkUEQCABIAEoAhxBpAJqIAEoAhhBAnRqKAIANgIMIAEoAhwgASgCDCgCABDdASABAn8CQCABKAIcKALoAg0AIAEoAhwoAvACDQAgASgCDCgCFAwBC0EACzYCFCABAn8gASgCHCgC7AIEQCABKAIMKAIYDAELQQALNgIQIAEoAhwgASgCECABKAIUQQR0ahDdASABIAEoAhhBAWo2AhgMAQsLIAEoAhwgASgCHCgC6AIQ3QEgASgCHCABKAIcKALsAhDdASABKAIcIAEoAhwoAvQCIAEoAhwoAvACQQR0ahDdASABQSBqJAALQQEBfyMAQRBrIgEkACABIAA2AgwgASgCDEHdARC5BCABKAIMQQQQwwMgASgCDCABKAIMKALsARDDAyABQRBqJAALlwQBAX8jAEFAaiIBJAAgASAANgI8IAFBADYCCANAIAEoAghBEE5FBEAgASgCCCABQRBqakEAOgAAIAEoAgggAUEgampBADoAACABIAEoAghBAWo2AggMAQsLIAFBADYCCANAIAEoAgggASgCPCgCoAJIBEAgASABKAI8QaQCaiABKAIIQQJ0aigCADYCBAJAIAEoAjwoAugCDQAgASgCPCgC8AINACABKAIEKAIUIAFBIGpqQQE6AAALIAEoAjwoAuwCBEAgASgCBCgCGCABQRBqakEBOgAACyABIAEoAghBAWo2AggMAQsLIAFBADYCDCABQQA2AggDQCABKAIIQRBORQRAIAEgASgCDCABKAIIIAFBIGpqLAAAIAEoAgggAUEQamosAABqajYCDCABIAEoAghBAWo2AggMAQsLIAEoAgwEQCABKAI8QcwBELkEIAEoAjwgASgCDEEBdEECahDDAyABQQA2AggDQCABKAIIQRBIBEAgASgCCCABQSBqai0AAARAIAEoAjwgASgCCBDdASABKAI8IAEoAgggASgCPEGYAWpqLQAAIAEoAgggASgCPEGoAWpqLQAAQQR0ahDdAQsgASgCCCABQRBqai0AAARAIAEoAjwgASgCCEEQahDdASABKAI8IAEoAgggASgCPEG4AWpqLQAAEN0BCyABIAEoAghBAWo2AggMAQsLCyABQUBrJAALbAEBfyMAQRBrIgEkACABIAA2AgwgASgCDEHaARC5BCABKAIMQQYQwwMgASgCDEEAEN0BIAEoAgxBABDdASABKAIMIAEoAgwoAvgCIAEoAgwoAvgCbEEBaxDdASABKAIMQQAQ3QEgAUEQaiQAC9ABAQF/IwBBEGsiASQAIAEgADYCDCABKAIMQe4BELkEIAEoAgxBDhDDAyABKAIMQcEAEN0BIAEoAgxB5AAQ3QEgASgCDEHvABDdASABKAIMQeIAEN0BIAEoAgxB5QAQ3QEgASgCDEHkABDDAyABKAIMQQAQwwMgASgCDEEAEMMDAkACQCABKAIMKAJQQX1qIgBBAksNAAJAAkAgAEEBaw4CAgEACyABKAIMQQEQ3QEMAgsgASgCDEECEN0BDAELIAEoAgxBABDdAQsgAUEQaiQAC88BAQF/IwBBEGsiASQAIAEgADYCDCABKAIMQeABELkEIAEoAgxBEBDDAyABKAIMQcoAEN0BIAEoAgxBxgAQ3QEgASgCDEHJABDdASABKAIMQcYAEN0BIAEoAgxBABDdASABKAIMIAEoAgwtAPgBEN0BIAEoAgwgASgCDC0A+QEQ3QEgASgCDCABKAIMLQD6ARDdASABKAIMIAEoAgwvAfwBEMMDIAEoAgwgASgCDC8B/gEQwwMgASgCDEEAEN0BIAEoAgxBABDdASABQRBqJAALZgEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMKAKUAzYCCCABKAIMQdgBELkEIAEoAghBADYCHCABKAIMKAL0AQRAIAEoAgwQpCoLIAEoAgwoAoACBEAgASgCDBCjKgsgAUEQaiQAC44EAQF/IwBBIGsiASQAIAEgADYCHCABQQA2AhQgAUEANgIYIAEgASgCHCgCVDYCDANAIAEoAhggASgCHCgCTE5FBEAgASABKAIcIAEoAgwoAhAQnRcgASgCFGo2AhQgASABKAIYQQFqNgIYIAEgASgCDEHYAGo2AgwMAQsLAkACQAJAIAEoAhwoAtQBDQAgASgCHCgCiAINACABKAIcKAJIQQhHDQAgASgCHCgC+AJBCEYNAQsgAUEANgIQDAELIAFBATYCECABQQA2AhggASABKAIcKAJUNgIMA0AgASgCGCABKAIcKAJMTkUEQAJAIAEoAgwoAhRBAUwEQCABKAIMKAIYQQFMDQELIAFBADYCEAsgASABKAIYQQFqNgIYIAEgASgCDEHYAGo2AgwMAQsLAkAgASgCFEUNACABKAIQRQ0AIAFBADYCECABKAIcKAIAQc0ANgIUIAEoAhxBACABKAIcKAIAKAIEEQIACwsCQCABKAIcKALUAQRAIAEoAhwoAogCBEAgASgCHEHKARDfCgwCCyABKAIcQckBEN8KDAELAkAgASgCHCgCiAIEQCABKAIcQcIBEN8KDAELAkAgASgCEARAIAEoAhxBwAEQ3woMAQsgASgCHEHBARDfCgsLCwJAIAEoAhwoAogCRQ0AIAEoAhwoAvgCQQhGDQAgASgCHBCiKgsgAUEgaiQAC7EDAQh/IwBBIGsiAyQAIAFBACACG0UEQCADQdAKNgIEIANBq+YGNgIAQYydLEGo9wtBAkHlyAYgAxBFCyACEPwBIAEQTCEEIANC//////f/////ADcDEEH/////ByEGIAMgAEEAIAEQ+xYiCDYCGEH/////ByEHAkAgCEUEQEH/////ByEJDAELIAMgCBBMIgUgBBD+ASIJNgIQQf////8HIAUuAQBKBEAgBS4BACEGCyAFLgEEQQFIDQAgBS4BBCEKCyADIABBASABEPsWIgU2AhwCQCAFRQ0AIAMgBRBMIgEgBBD+ASIHNgIUIAYgAS4BAEoEQCABLgEAIQYLIAogAS4BBE4NACABLgEEIQoLIAUgCEYEQCADQQA2AhwgA0H/////ByIHNgIUC0EAIQECQCAGIAQuAQBKDQAgCiAELgEESA0AIAAgCSAHTkECdCIEIANBEGpyKAIAIANBGGogBGooAgAiBBD5FkUNACACIAQQXxpBASEBIAAgCSAHSEECdCIAIANBEGpyKAIAIANBGGogAGooAgAiABD5FkUNACACIAAQXxoLIANBIGokACABC4YCAQF/IwBBEGsiASQAIAEgADYCDCABIAEoAgwoApQDNgIIAkAgASgCDCgC1AEEQCABKAIMEKEqDAELIAFBADYCBANAIAEoAgQgASgCDCgCoAJIBEAgASABKAIMQaQCaiABKAIEQQJ0aigCADYCAAJAIAEoAgwoAugCDQAgASgCDCgC8AINACABKAIMIAEoAgAoAhRBABD4DAsgASgCDCgC7AIEQCABKAIMIAEoAgAoAhhBARD4DAsgASABKAIEQQFqNgIEDAELCwsgASgCDCgC7AEgASgCCCgCHEcEQCABKAIMEKAqIAEoAgggASgCDCgC7AE2AhwL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NgIwIAJBADYCKANAIAIoAiggAigCSCgCoAJORQRAIAIgAigCSEGkAmogAigCKEECdGooAgA2AhAgAiACKAJIKAKgA0EEaiACKAIQKAIEQQJ0aigCADYCDCACAn8gAigCPCACKAI4SQRAIAIoAhAoAjgMAQsgAigCECgCSAs2AhwgAiACKAI8IAIoAhAoAkRsNgIUIAIgAigCICACKAIQKAIobDYCGCACQQA2AiQDQCACKAIkIAIoAhAoAjxORQRAAkACQCACKAJAKAIIIAIoAjRPBEAgAigCICACKAIkaiACKAIQKAJMTg0BCyACKAJIIAIoAhAgAigCRCACKAIQKAIEQQJ0aigCACACKAJAQRhqIAIoAjBBAnRqKAIAIAIoAhggAigCFCACKAIcIAIoAgwRDAAgAigCHCACKAIQKAI4SARAIAIoAkBBGGogAigCMCACKAIcakECdGooAgBBACACKAIQKAI4IAIoAhxrQQd0EGUaIAIgAigCHDYCLANAIAIoAiwgAigCECgCOE5FBEAgAigCQEEYaiACKAIwIAIoAixqQQJ0aigCACACKAJAIAIoAjAgAigCLGpBAnRqQRRqKAIALwEAOwEAIAIgAigCLEEBajYCLAwBCwsLDAELIAIoAkBBGGogAigCMEECdGooAgBBACACKAIQKAI4QQd0EGUaIAJBADYCLANAIAIoAiwgAigCECgCOE5FBEAgAigCQEEYaiACKAIwIAIoAixqQQJ0aigCACACKAJAIAIoAjBBAnRqQRRqKAIALwEAOwEAIAIgAigCLEEBajYCLAwBCwsLIAIgAigCECgCOCACKAIwajYCMCACIAIoAhAoAiggAigCGGo2AhggAiACKAIkQQFqNgIkDAELCyACIAIoAihBAWo2AigMAQsLIAIoAkggAigCQEEYaiACKAJIKAKkAygCBBEDAARAIAIgAigCPEEBajYCPAwCBSACKAJAIAIoAiA2AhAgAigCQCACKAI8NgIMIAJBADYCTAwFCwALCyACKAJAQQA2AgwgAiACKAIgQQFqNgIgDAELCyACKAJAIgAgACgCCEEBajYCCCACKAJIELUQIAJBATYCTAsgAigCTCEAIAJB0ABqJAAgAAuyAgEBfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIAIgAigCDCgCkAM2AgQgAigCBEEANgII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AiACKAK8AigCpAM2ArQCIAIoArQCIAIoArwCKAIYKAIANgJwIAIoArQCIAIoArwCKAIYKAIENgJ0IAIoArwCKALsAQRAIAIoArQCKAIkRQRAIAIoArQCIAIoArQCKAIoEPsMCwsgAiACKAK8AigC7AI2ApgCIAIgAigCvAIoAvQCNgKUAiACIAIoArwCKAL8AjYCkAIgAiACKAK4AigCADYCjAIgAkEANgKkAiACIAIoArwCKALoAjYCqAIDQCACKAKoAiACKAKYAkwEQCACIAIoAowCIAIoApACIAIoAqgCQQJ0aigCAEEBdGouAQA2ArACIAIoArACQQBIBEAgAkEAIAIoArACazYCsAILIAIgAigCsAIgAigClAJ1NgKwAiACKAKoAkECdCACaiACKAKwAjYCACACKAKwAkEBRgRAIAIgAigCqAI2AqQCCyACIAIoAqgCQQFqNgKoAgwBCwsgAkEANgKsAiACQQA2ApwCIAIgAigCtAIoAogBIAIoArQCKAKEAWo2AqACIAIgAigCvAIoAugCNgKoAgNAIAIoAqgCIAIoApgCSkUEQCACIAIoAqgCQQJ0IAJqKAIAIgA2ArACAkAgAEUEQCACIAIoAqwCQQFqNgKsAgwBCwNAQQAhACACKAKsAkEPSgR/IAIoAqgCIAIoAqQCTAVBAAtBAXEEQCACKAK0AhCPByACKAK0AiACKAK0AigCfEHwARDgCiACIAIoAqwCQRBrNgKsAiACKAK0AiACKAKgAiACKAKcAhC2ECACIAIoArQCKAKIATYCoAIgAkEANgKcAgwBCwsgAigCsAJBAUoEQCACKAKwAkEBcSEAIAIoAqACIQEgAiACKAKcAiIDQQFqNgKcAiABIANqIAA6AAAMAQsgAigCtAIQjwcgAigCtAIgAigCtAIoAnwgAigCrAJBBHRBAWoQ4AogAkEAQQEgAigCjAIgAigCkAIgAigCqAJBAnRqKAIAQQF0ai4BAEEASBs2ArACIAIoArQCIAIoArACQQEQvwYgAigCtAIgAigCoAIgAigCnAIQthAgAiACKAK0AigCiAE2AqACIAJBADYCnAIgAkEANgKsAgsgAiACKAKoAkEBajYCqAIMAQsLAkAgAigCrAJBAEwEQCACKAKcAkEATQ0BCyACKAK0AiIAIAAoAoABQQFqNgKAASACKAK0AiIAIAIoApwCIAAoAoQBajYChAECQCACKAK0AigCgAFB//8BRwRAIAIoArQCKAKEAUGpB00NAQsgAigCtAIQjwcLCyACKAK8AigCGCACKAK0AigCcDYCACACKAK8AigCGCACKAK0AigCdDYCBCACKAK8AigC7AEEQCACKAK0AigCJEUEQCACKAK0AiACKAK8AigC7AE2AiQgAigCtAIiACAAKAIoQQFqNgIoIAIoArQCIgAgACgCKEEHcTYCKAsgAigCtAIiACAAKAIkQX9qNgIkCyACQcACaiQAQQEL9wIBAX8jAEEgayICJAAgAiAANgIcIAIgATYCGCACIAIoAhwoAqQDNgIUIAIgAigCHCgC9AI2AgggAigCFCACKAIcKAIYKAIANgJwIAIoAhQgAigCHCgCGCgCBDYCdCACKAIcKALsAQRAIAIoAhQoAiRFBEAgAigCFCACKAIUKAIoEPsMCwsgAkEANgIMA0AgAigCDCACKAIcKAK8Ak5FBEAgAiACKAIYIAIoAgxBAnRqKAIANgIEIAIgAigCBC4BADYCECACKAIUIAIoAhAgAigCCHVBARC/BiACIAIoAgxBAWo2AgwMAQsLIAIoAhwoAhggAigCFCgCcDYCACACKAIcKAIYIAIoAhQoAnQ2AgQgAigCHCgC7AEEQCACKAIUKAIkRQRAIAIoAhQgAigCHCgC7AE2AiQgAigCFCIAIAAoAihBAWo2AiggAigCFCIAIAAoAihBB3E2AigLIAIoAhQiACAAKAIkQX9qNgIkCyACQSBqJABBAQupBgEBfyMAQTBrIgIkACACIAA2AiwgAiABNgIoIAIgAigCLCgCpAM2AiQgAigCJCACKAIsKAIYKAIANgJwIAIoAiQgAigCLCgCGCgCBDYCdCACKAIsKALsAQRAIAIoAiQoAiRFBEAgAigCJCACKAIkKAIoEPsMCwsgAiACKAIsKALsAjYCDCACIAIoAiwoAvQCNgIIIAIgAigCLCgC/AI2AgQgAiACKAIoKAIANgIAIAJBADYCFCACIAIoAiwoAugCNgIQA0AgAigCECACKAIMSkUEQCACIAIoAgAgAigCBCACKAIQQQJ0aigCAEEBdGouAQAiADYCIAJAIABFBEAgAiACKAIUQQFqNgIUDAELAkAgAigCIEEASARAIAJBACACKAIgazYCICACIAIoAiAgAigCCHU2AiAgAiACKAIgQX9zNgIcDAELIAIgAigCICACKAIIdTYCICACIAIoAiA2AhwLIAIoAiBFBEAgAiACKAIUQQFqNgIUDAELIAIoAiQoAoABQQBLBEAgAigCJBCPBwsDQCACKAIUQQ9MRQRAIAIoAiQgAigCJCgCfEHwARDgCiACIAIoAhRBEGs2AhQMAQsLIAJBATYCGANAIAIgAigCIEEBdSIANgIgIAAEQCACIAIoAhhBAWo2AhgMAQsLIAIoAhhBCkoEQCACKAIsKAIAQQY2AhQgAigCLCACKAIsKAIAKAIAEQAACyACKAIkIAIoAiQoAnwgAigCGCACKAIUQQR0ahDgCiACKAIkIAIoAhwgAigCGBC/BiACQQA2AhQLIAIgAigCEEEBajYCEAwBCwsgAigCFEEASgRAIAIoAiQiACAAKAKAAUEBajYCgAEgAigCJCgCgAFB//8BRgRAIAIoAiQQjwcLCyACKAIsKAIYIAIoAiQoAnA2AgAgAigCLCgCGCACKAIkKAJ0NgIEIAIoAiwoAuwBBEAgAigCJCgCJEUEQCACKAIkIAIoAiwoAuwBNgIkIAIoAiQiACAAKAIoQQFqNgIoIAIoAiQiACAAKAIoQQdxNgIoCyACKAIkIgAgACgCJEF/ajYCJAsgAkEwaiQAQQELigUBAX8jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAiwoAqQDNgIkIAIgAigCLCgC9AI2AgwgAigCJCACKAIsKAIYKAIANgJwIAIoAiQgAigCLCgCGCgCBDYCdCACKAIsKALsAQRAIAIoAiQoAiRFBEAgAigCJCACKAIkKAIoEPsMCwsgAkEANgIUA0AgAigCFCACKAIsKAK8AkgEQCACIAIoAiggAigCFEECdGooAgA2AgggAiACKAIsQcACaiACKAIUQQJ0aigCADYCECACIAIoAixBpAJqIAIoAhBBAnRqKAIANgIEIAIgAigCCC4BACACKAIMdTYCHCACIAIoAhwgAigCJEEUaiACKAIQQQJ0aigCAGs2AiAgAigCJEEUaiACKAIQQQJ0aiACKAIcNgIAIAIgAigCIDYCHCACKAIgQQBIBEAgAkEAIAIoAiBrNgIgIAIgAigCHEF/ajYCHAsgAkEANgIYA0AgAigCIARAIAIgAigCGEEBajYCGCACIAIoAiBBAXU2AiAMAQsLIAIoAhhBC0oEQCACKAIsKAIAQQY2AhQgAigCLCACKAIsKAIAKAIAEQAACyACKAIkIAIoAgQoAhQgAigCGBC5KiACKAIYBEAgAigCJCACKAIcIAIoAhgQvwYLIAIgAigCFEEBajYCFAwBCwsgAigCLCgCGCACKAIkKAJwNgIAIAIoAiwoAhggAigCJCgCdDYCBCACKAIsKALsAQRAIAIoAiQoAiRFBEAgAigCJCACKAIsKALsATYCJCACKAIkIgAgACgCKEEBajYCKCACKAIkIgAgACgCKEEHcTYCKAsgAigCJCIAIAAoAiRBf2o2AiQLIAJBMGokAEEBC88CAQF/IwBBMGsiASQAIAEgADYCLCABIAEoAiwoAqQDNgIoAkAgASgCLCgCiAIEQCABKAIoIAEoAiwoAhgoAgA2AnAgASgCKCABKAIsKAIYKAIENgJ0IAEoAigQjwcgASgCKBChFyABKAIsKAIYIAEoAigoAnA2AgAgASgCLCgCGCABKAIoKAJ0NgIEDAELIAEgASgCLCgCGCgCADYCACABIAEoAiwoAhgoAgQ2AgQgASABKAIoIgApAgw3AgggASAAKQIcNwIYIAEgACkCFDcCECABIAEoAiw2AiAgARCgF0UEQCABKAIsKAIAQRk2AhQgASgCLCABKAIsKAIAKAIAEQAACyABKAIsKAIYIAEoAgA2AgAgASgCLCgCGCABKAIENgIEIAEoAigiACABKQIINwIMIAAgASkCGDcCHCAAIAEpAhA3AhQLIAFBMGokAAvkAwEBfyMAQUBqIgEkACABIAA2AjwgASABKAI8KAKkAzYCOCABKAI8KAKIAgRAIAEoAjgQjwcLIAFBEGoiAEIANwMAIABCADcDCCABQgA3AwAgAUIANwMIIAFBADYCNANAIAEoAjQgASgCPCgCoAJIBEAgASABKAI8QaQCaiABKAI0QQJ0aigCADYCLAJAIAEoAjwoAugCDQAgASgCPCgC8AINACABIAEoAiwoAhQ2AjAgAUEQaiABKAIwQQJ0aigCAEUEQCABIAEoAjxB+ABqIAEoAjBBAnRqNgIoIAEoAigoAgBFBEAgASgCPBD3DCEAIAEoAiggADYCAAsgASgCPCABKAIoKAIAIAEoAjhBzABqIAEoAjBBAnRqKAIAEKIXIAFBEGogASgCMEECdGpBATYCAAsLIAEoAjwoAuwCBEAgASABKAIsKAIYNgIwIAEoAjBBAnQgAWooAgBFBEAgASABKAI8QYgBaiABKAIwQQJ0ajYCKCABKAIoKAIARQRAIAEoAjwQ9wwhACABKAIoIAA2AgALIAEoAjwgASgCKCgCACABKAI4QdwAaiABKAIwQQJ0aigCABCiFyABKAIwQQJ0IAFqQQE2AgALCyABIAEoAjRBAWo2AjQMAQsLIAFBQGskAAsHACAAEO0hC90HAQF/IwBBIGsiAiQAIAIgADYCHCACIAE2AhggAiACKAIcKAKkAzYCFAJAIAIoAhgEQCACKAIUQecDNgIIDAELIAIoAhRB6AM2AggLAkAgAigCHCgCiAIEQCACKAIUIAIoAhw2AnggAigCFCACKAIYNgJsAkAgAigCHCgC8AJFBEAgAigCHCgC6AJFBEAgAigCFEHpAzYCBAwCCyACKAIUQeoDNgIEDAELAkAgAigCHCgC6AJFBEAgAigCFEHrAzYCBAwBCyACKAIUQewDNgIEIAIoAhQoAogBRQRAIAIoAhxBAUHoByACKAIcKAIEKAIAEQQAIQAgAigCFCAANgKIAQsLCyACKAIUIAIoAhwoAqQCKAIYNgJ8IAIoAhRBADYCgAEgAigCFEEANgKEAQwBCwJAIAIoAhgEQCACKAIUQe0DNgIEDAELIAIoAhRB7gM2AgQLCyACQQA2AhADQCACKAIQIAIoAhwoAqACSARAIAIgAigCHEGkAmogAigCEEECdGooAgA2AggCQCACKAIcKALoAg0AIAIoAhwoAvACDQAgAiACKAIIKAIUNgIMAkAgAigCGARAAkAgAigCDEEATgRAIAIoAgxBBEgNAQsgAigCHCgCAEE0NgIUIAIoAhwoAgAgAigCDDYCGCACKAIcIAIoAhwoAgAoAgARAAALIAIoAhRBzABqIAIoAgxBAnRqKAIARQRAIAIoAhxBAUGECCACKAIcKAIEKAIAEQQAIQAgAigCFEHMAGogAigCDEECdGogADYCAAsgAigCFEHMAGogAigCDEECdGooAgBBAEGECBBlGgwBCyACKAIcQQEgAigCDCACKAIUQSxqIAIoAgxBAnRqEKMXCyACKAIUQRRqIAIoAhBBAnRqQQA2AgALIAIoAhwoAuwCBEAgAiACKAIIKAIYNgIMAkAgAigCGARAAkAgAigCDEEATgRAIAIoAgxBBEgNAQsgAigCHCgCAEE0NgIUIAIoAhwoAgAgAigCDDYCGCACKAIcIAIoAhwoAgAoAgARAAALIAIoAhRB3ABqIAIoAgxBAnRqKAIARQRAIAIoAhxBAUGECCACKAIcKAIEKAIAEQQAIQAgAigCFEHcAGogAigCDEECdGogADYCAAsgAigCFEHcAGogAigCDEECdGooAgBBAEGECBBlGgwBCyACKAIcQQAgAigCDCACKAIUQTxqIAIoAgxBAnRqEKMXCwsgAiACKAIQQQFqNgIQDAELCyACKAIUQQA2AgwgAigCFEEANgIQIAIoAhQgAigCHCgC7AE2AiQgAigCFEEANgIoIAJBIGokAAvnAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMQQFBjAEgASgCDCgCBCgCABEEADYCCCABKAIMIAEoAgg2AqQDIAEoAghB5gM2AgAgAUEANgIEA0AgASgCBEEETkUEQCABKAIIQTxqIAEoAgRBAnRqQQA2AgAgASgCCEEsaiABKAIEQQJ0akEANgIAIAEoAghB3ABqIAEoAgRBAnRqQQA2AgAgASgCCEHMAGogASgCBEECdGpBADYCACABIAEoAgRBAWo2AgQMAQsLIAEoAgwoAogCBEAgASgCCEEANgKIAQsgAUEQaiQAC7MNAQJ/IwBBQGoiAiQAIAIgADYCPCACIAE2AjggAiACKAI8KAKkAzYCNCACKAI8KALsAQRAIAIoAjQoAkRFBEAgAigCPCACKAI0KAJIEOEKIAIoAjQgAigCPCgC7AE2AkQgAigCNCIAIAAoAkhBAWo2AkggAigCNCIAIAAoAkhBB3E2AkgLIAIoAjQiACAAKAJEQX9qNgJECyACIAIoAjwoAvwCNgIEIAJBADYCJANAIAIoAiQgAigCPCgCvAJIBEAgAiACKAI4IAIoAiRBAnRqKAIANgIsIAIgAigCPEHAAmogAigCJEECdGooAgA2AiAgAiACKAI8QaQCaiACKAIgQQJ0aigCADYCMCACIAIoAjAoAhQ2AhwgAiACKAI0QcwAaiACKAIcQQJ0aigCACACKAI0QTRqIAIoAiBBAnRqKAIAajYCKCACIAIoAiwuAQAgAigCNEEkaiACKAIgQQJ0aigCAGsiADYCEAJAIABFBEAgAigCPCACKAIoQQAQ1wEgAigCNEE0aiACKAIgQQJ0akEANgIADAELIAIoAjRBJGogAigCIEECdGogAigCLC4BADYCACACKAI8IAIoAihBARDXAQJAIAIoAhBBAEoEQCACKAI8IAIoAihBAWpBABDXASACIAIoAihBAmo2AiggAigCNEE0aiACKAIgQQJ0akEENgIADAELIAJBACACKAIQazYCECACKAI8IAIoAihBAWpBARDXASACIAIoAihBA2o2AiggAigCNEE0aiACKAIgQQJ0akEINgIACyACQQA2AgggAiACKAIQQQFrIgA2AhAgAARAIAIoAjwgAigCKEEBENcBIAJBATYCCCACIAIoAhA2AgwgAiACKAI0QcwAaiACKAIcQQJ0aigCAEEUajYCKANAIAIgAigCDEEBdSIANgIMIAAEQCACKAI8IAIoAihBARDXASACIAIoAghBAXQ2AgggAiACKAIoQQFqNgIoDAELCwsgAigCPCACKAIoQQAQ1wECQCACKAIIQQEgAigCHCACKAI8QZgBamotAAB0QQF1SARAIAIoAjRBNGogAigCIEECdGpBADYCAAwBCyACKAIIQQEgAigCHCACKAI8QagBamotAAB0QQF1SgRAIAIoAjRBNGogAigCIEECdGoiACAAKAIAQQhqNgIACwsgAiACKAIoQQ5qNgIoA0AgAiACKAIIQQF1IgA2AgggAARAIAIoAjwgAigCKEEBQQAgAigCCCACKAIQcRsQ1wEMAQsLCyACIAIoAjwoAoADIgA2AhQgAARAIAIgAigCMCgCGDYCHANAIAIoAiwgAigCBCACKAIUQQJ0aigCAEEBdGovAQBFBEAgAiACKAIUQX9qIgA2AhQgAA0BCwsgAkEANgIYA0AgAigCGCACKAIUSARAIAIgAigCNEGMAWogAigCHEECdGooAgAgAigCGEEDbGo2AiggAigCPCACKAIoQQAQ1wEDQCACKAIsIQAgAigCBCEBIAIgAigCGEEBaiIDNgIYIAIgA0ECdCABaigCAEEBdCAAai4BACIANgIQIABFBEAgAigCPCACKAIoQQFqQQAQ1wEgAiACKAIoQQNqNgIoDAELCyACKAI8IAIoAihBAWpBARDXAQJAIAIoAhBBAEoEQCACKAI8IAIoAjRBzAFqQQAQ1wEMAQsgAkEAIAIoAhBrNgIQIAIoAjwgAigCNEHMAWpBARDXAQsgAiACKAIoQQJqNgIoIAJBADYCCCACIAIoAhBBAWsiADYCECAABEAgAigCPCACKAIoQQEQ1wEgAkEBNgIIIAIgAigCEDYCDCACIAIoAgxBAXUiADYCDCAABEAgAigCPCACKAIoQQEQ1wEgAiACKAIIQQF0NgIIIAIgAigCNEGMAWogAigCHEECdGooAgBBvQFB2QEgAigCGCACKAIcIAIoAjxBuAFqai0AAEwbajYCKANAIAIgAigCDEEBdSIANgIMIAAEQCACKAI8IAIoAihBARDXASACIAIoAghBAXQ2AgggAiACKAIoQQFqNgIoDAELCwsLIAIoAjwgAigCKEEAENcBIAIgAigCKEEOajYCKANAIAIgAigCCEEBdSIANgIIIAAEQCACKAI8IAIoAihBAUEAIAIoAgggAigCEHEbENcBDAELCwwBCwsgAigCGCACKAI8KAKAA0gEQCACIAIoAjRBjAFqIAIoAhxBAnRqKAIAIAIoAhhBA2xqNgIoIAIoAjwgAigCKEEBENcBCwsgAiACKAIkQQFqNgIkDAELCyACQUBrJABBAQvLBwEBfyMAQTBrIgIkACACIAA2AiwgAiABNgIoIAIgAigCLCgCpAM2AiQgAigCLCgC7AEEQCACKAIkKAJERQRAIAIoAiwgAigCJCgCSBDhCiACKAIkIAIoAiwoAuwBNgJEIAIoAiQiACAAKAJIQQFqNgJIIAIoAiQiACAAKAJIQQdxNgJICyACKAIkIgAgACgCREF/ajYCRAsgAiACKAIsKAL8AjYCBCACIAIoAigoAgA2AiAgAiACKAIsKAKkAigCGDYCGCACIAIoAiwoAuwCNgIQA0ACQCACKAIQQQBMDQAgAiACKAIgIAIoAgQgAigCEEECdGooAgBBAXRqLgEAIgA2AggCQCAAQQBOBEAMAQsgAkEAIAIoAghrNgIICyACIAIoAgggAigCLCgC9AJ1IgA2AgggAA0AIAIgAigCEEF/ajYCEAwBCwsgAiACKAIQNgIMA0ACQCACKAIMQQBMDQAgAiACKAIgIAIoAgQgAigCDEECdGooAgBBAXRqLgEAIgA2AggCQCAAQQBOBEAMAQsgAkEAIAIoAghrNgIICyACIAIoAgggAigCLCgC8AJ1IgA2AgggAA0AIAIgAigCDEF/ajYCDAwBCwsgAiACKAIsKALoAjYCFANAIAIoAhQgAigCEEwEQCACIAIoAiRBjAFqIAIoAhhBAnRqKAIAIAIoAhRBAWtBA2xqNgIcIAIoAhQgAigCDEoEQCACKAIsIAIoAhxBABDXAQsDQAJAIAIgAigCICACKAIEIAIoAhRBAnRqKAIAQQF0ai4BACIANgIIAkAgAEEATgRAIAIgAigCCCACKAIsKAL0AnUiADYCCCAABEAgAigCCEEBdQRAIAIoAiwgAigCHEECaiACKAIIQQFxENcBDAQLIAIoAiwgAigCHEEBakEBENcBIAIoAiwgAigCJEHMAWpBABDXAQwDCwwBCyACQQAgAigCCGs2AgggAiACKAIIIAIoAiwoAvQCdSIANgIIIAAEQCACKAIIQQF1BEAgAigCLCACKAIcQQJqIAIoAghBAXEQ1wEMAwsgAigCLCACKAIcQQFqQQEQ1wEgAigCLCACKAIkQcwBakEBENcBDAILCyACKAIsIAIoAhxBAWpBABDXASACIAIoAhxBA2o2AhwgAiACKAIUQQFqNgIUDAELCyACIAIoAhRBAWo2AhQMAQsLIAIoAhQgAigCLCgC7AJMBEAgAiACKAIkQYwBaiACKAIYQQJ0aigCACACKAIUQQFrQQNsajYCHCACKAIsIAIoAhxBARDXAQsgAkEwaiQAQQELkwIBAX8jAEEgayICJAAgAiAANgIcIAIgATYCGCACIAIoAhwoAqQDNgIUIAIoAhwoAuwBBEAgAigCFCgCREUEQCACKAIcIAIoAhQoAkgQ4QogAigCFCACKAIcKALsATYCRCACKAIUIgAgACgCSEEBajYCSCACKAIUIgAgACgCSEEHcTYCSAsgAigCFCIAIAAoAkRBf2o2AkQLIAIgAigCFEHMAWo2AhAgAiACKAIcKAL0AjYCDCACQQA2AggDQCACKAIIIAIoAhwoArwCTkUEQCACKAIcIAIoAhAgAigCGCACKAIIQQJ0aigCAC4BACACKAIMdUEBcRDXASACIAIoAghBAWo2AggMAQsLIAJBIGokAEEBC7gIAQF/IwBBMGsiAiQAIAIgADYCLCACIAE2AiggAiACKAIsKAKkAzYCJCACKAIsKALsAQRAIAIoAiQoAkRFBEAgAigCLCACKAIkKAJIEOEKIAIoAiQgAigCLCgC7AE2AkQgAigCJCIAIAAoAkhBAWo2AkggAigCJCIAIAAoAkhBB3E2AkgLIAIoAiQiACAAKAJEQX9qNgJECyACIAIoAiwoAvwCNgIAIAIgAigCKCgCADYCICACIAIoAiwoAqQCKAIYNgIYIAIgAigCLCgC7AI2AhADQAJAIAIoAhBBAEwNACACIAIoAiAgAigCACACKAIQQQJ0aigCAEEBdGouAQAiADYCDAJAIABBAE4EQAwBCyACQQAgAigCDGs2AgwLIAIgAigCDCACKAIsKAL0AnUiADYCDCAADQAgAiACKAIQQX9qNgIQDAELCyACIAIoAiwoAugCNgIUA0AgAigCFCACKAIQTARAIAIgAigCJEGMAWogAigCGEECdGooAgAgAigCFEEBa0EDbGo2AhwgAigCLCACKAIcQQAQ1wEDQAJAIAIgAigCICACKAIAIAIoAhRBAnRqKAIAQQF0ai4BACIANgIMAkAgAEEATgRAIAIgAigCDCACKAIsKAL0AnUiADYCDCAABEAgAigCLCACKAIcQQFqQQEQ1wEgAigCLCACKAIkQcwBakEAENcBDAMLDAELIAJBACACKAIMazYCDCACIAIoAgwgAigCLCgC9AJ1IgA2AgwgAARAIAIoAiwgAigCHEEBakEBENcBIAIoAiwgAigCJEHMAWpBARDXAQwCCwsgAigCLCACKAIcQQFqQQAQ1wEgAiACKAIcQQNqNgIcIAIgAigCFEEBajYCFAwBCwsgAiACKAIcQQJqNgIcIAJBADYCBCACIAIoAgxBAWsiADYCDCAABEAgAigCLCACKAIcQQEQ1wEgAkEBNgIEIAIgAigCDDYCCCACIAIoAghBAXUiADYCCCAABEAgAigCLCACKAIcQQEQ1wEgAiACKAIEQQF0NgIEIAIgAigCJEGMAWogAigCGEECdGooAgBBvQFB2QEgAigCFCACKAIYIAIoAixBuAFqai0AAEwbajYCHANAIAIgAigCCEEBdSIANgIIIAAEQCACKAIsIAIoAhxBARDXASACIAIoAgRBAXQ2AgQgAiACKAIcQQFqNgIcDAELCwsLIAIoAiwgAigCHEEAENcBIAIgAigCHEEOajYCHANAIAIgAigCBEEBdSIANgIEIAAEQCACKAIsIAIoAhxBAUEAIAIoAgQgAigCDHEbENcBDAELCyACIAIoAhRBAWo2AhQMAQsLIAIoAhQgAigCLCgC7AJMBEAg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QQA2AhQMHgsgASgCKEEsaiABKAIkQQJ0akG+AzYCACABQQA2AhQMHQsgASgCKEEsaiABKAIkQQJ0akG/AzYCACABQQA2AhQMHAsgASgCKEEsaiABKAIkQQJ0akHAAzYCACABQQA2AhQMGwsgASgCKEEsaiABKAIkQQJ0akHBAzYCACABQQA2AhQMGgsgASgCKEEsaiABKAIkQQJ0akHCAzYCACABQQA2AhQMGQsgASgCKEEsaiABKAIkQQJ0akHDAzYCACABQQA2AhQMGAsgASgCKEEsaiABKAIkQQJ0akHEAzYCACABQQA2AhQMFwsgASgCKEEsaiABKAIkQQJ0akHFAzYCACABQQA2AhQMFgsgASgCKEEsaiABKAIkQQJ0akHGAzYCACABQQA2AhQMFQsgASgCKEEsaiABKAIkQQJ0akHHAzYCACABQQA2AhQMFAsgASgCKEEsaiABKAIkQQJ0akHIAzYCACABQQA2AhQMEwsgASgCKEEsaiABKAIkQQJ0akHJAzYCACABQQA2AhQMEgsgASgCKEEsaiABKAIkQQJ0akHKAzYCACABQQA2AhQMEQsgASgCKEEsaiABKAIkQQJ0akHLAzYCACABQQA2AhQMEAsgASgCKEEsaiABKAIkQQJ0akHMAzYCACABQQA2AhQMDwsgASgCKEEsaiABKAIkQQJ0akHNAzYCACABQQA2AhQMDgsgASgCKEEsaiABKAIkQQJ0akHOAzYCACABQQA2AhQMDQsgASgCKEEsaiABKAIkQQJ0akHPAzYCACABQQA2AhQMDAsgASgCKEEsaiABKAIkQQJ0akHQAzYCACABQQA2AhQMCwsgASgCKEEsaiABKAIkQQJ0akHRAzYCACABQQA2AhQMCgsgASgCKEEsaiABKAIkQQJ0akHSAzYCACABQQA2AhQMCQsgASgCKEEsaiABKAIkQQJ0akHTAzYCACABQQA2AhQMCAsgASgCKEEsaiABKAIkQQJ0akHUAzYCACABQQA2AhQMBwsgASgCKEEsaiABKAIkQQJ0akHVAzYCACABQQA2AhQMBgsgASgCKEEsaiABKAIkQQJ0akHWAzYCACABQQA2AhQMBQsgASgCKEEsaiABKAIkQQJ0akHXAzYCACABQQA2AhQMBAsgASgCKEEsaiABKAIkQQJ0akHYAzYCACABQQA2AhQMAwsgASgCKEEsaiABKAIkQQJ0akHZAzYCACABQQA2AhQMAgsCQCABKAIsKALoASIAQQJNBEACQAJAAkAgAEEBaw4CAQIACyABKAIoQSxqIAEoAiRBAnRqQdoDNgIAIAFBADYCFAwDCyABKAIoQSxqIAEoAiRBAnRqQdsDNgIAIAFBATYCFAwCCyABKAIoQeQAaiABKAIkQQJ0akHcAzYCACABQQI2AhQMAQsgASgCLCgCAEExNgIUIAEoAiwgASgCLCgCACgCABEAAAsMAQsgASgCLCgCAEEHNgIUIAEoAiwoAgAgASgCGCgCJDYCGCABKAIsKAIAIAEoAhgoAig2AhwgASgCLCABKAIsKAIAKAIAEQAACyABIAEoAhgoAhA2AiACQAJAIAEoAiBBAEgNACABKAIgQQRODQAgASgCLEHYAGogASgCIEECdGooAgANAQsgASgCLCgCAEE2NgIUIAEoAiwoAgAgASgCIDYCGCABKAIsIAEoAiwoAgAoAgARAAALIAEgASgCLCABKAIgQQJ0aigCWDYCEAJAIAEoAhQiAEECTQRAAkACQAJAIABBAWsOAgECAAsgASgCKEHUAGogASgCIEECdGooAgBFBEAgASgCLEEBQYACIAEoAiwoAgQoAgARBAAhACABKAIoQdQAaiABKAIgQQJ0aiAANgIACyABIAEoAihB1ABqIAEoAiBBAnRqKAIANgIMIAFBADYCHANAIAEoAhxBwABORQRAIAEoAgwgASgCHEECdGogASgCECABKAIcQQF0ai8BAEEDdDYCACABIAEoAhxBAWo2AhwMAQsLIAEoAihBBGogASgCJEECdGpB3QM2AgAMAwsgASgCKEHUAGogASgCIEECdGooAgBFBEAgASgCLEEBQYACIAEoAiwoAgQoAgARBAAhACABKAIoQdQAaiABKAIgQQJ0aiAANgIACyABIAEoAihB1ABqIAEoAiBBAnRqKAIANgIMIAFBADYCHANAIAEoAhxBwABORQRAIAEoAgwgASgCHEECdGogASgCECABKAIcQQF0ai8BACABKAIcQQF0QbC9ImouAQBsQYAIakELdTYCACABIAEoAhxBAWo2AhwMAQsLIAEoAihBBGogASgCJEECdGpB3QM2AgAMAgsgASgCKEGMAWogASgCIEECdGooAgBFBEAgASgCLEEBQYACIAEoAiwo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IAEgASgCFBDWBKw3AwggASgCFEEAQQIQnQMgASABKAIUENYErDcDACABKAIUIAEpAwinQQAQnQMgASABKQMAPgIcCyABKAIcIQAgAUEgaiQAIAALWAEBfyMAQRBrIgEkACABIAA2AgggASABKAIINgIEAkACQCABKAIIBEAgASgCBA0BCwwBCyABKAIEQQBBABCdAwsgAUEANgIMIAEoAgwhACABQRBqJAAgAAv8AQEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjYCECADIAMoAhg2AgwgA0IANwMAAkACQCADKAIYBEAgAygCDA0BCyADQX82AhwMAQsCQCADKAIQIgBBAksNAAJAAkACQCAAQQFrDgIBAgALIANCADcDAAwCCyADIAMoAgwQ1gSsNwMADAELIAMoAgxBAEECEJ0DIAMgAygCDBDWBKw3AwALIAMgAykDACADKAIUrXw3AwAgAygCDCADKQMAp0EAEJ0DIAMpAwAgAygCDBDWBKxRBEAgAyADKQMAPgIcDAELIANBfzYCHAsgAygCHCEAIANBIGokACAAC4gBAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGDYCDAJAAkACQCADKAIURQ0AIAMoAhhFDQAgAygCDA0BCyADQX82AhwMAQsgAyADKAIUQQEgAygCECADKAIMEIkBNgIIIAMgAygCCDYCHAsgAygCHCEAIANBIGokACAAC4gBAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGDYCDAJAAkACQCADKAIURQ0AIAMoAhhFDQAgAygCDA0BCyADQX82AhwMAQsgAyADKAIUQQEgAygCECADKAIMEIMCNgIIIAMgAygCCDYCHAsgAygCHCEAIANBIGokACAAC78BAQF/IwBBIGsiAiQAIAIgADYCGCACIAE2AhQCQCACKAIYRQRAIAICf0EFQeDzLCgCAE4EQEH3wABB4rMiQQAQOgwBC0EACzYCHAwBCyACIAIoAhgQhQUiADYCECAARQRAIAICf0EFQeDzLCgCAE4EQEGw/gBB4rMiQQAQOgwBC0EACzYCHAwBCyACIAIoAhAgAigCFBC5FzYCDCACKAIQENwBGiACIAIoAgw2AhwLIAIoAhwhACACQSBqJAAgAAvsAgEB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IAIoAiQgAigCWCACKAI4bEECdGo2AhwgAiACKAIgIAIoAjQgAigCWEEBdGxBAnRqNgIYIAJBADYCVANAIAIoAlQgAigCKE5FBEAgAiACKAIcIAIoAlRqQQNzLQAAOgBjIAIoAhggAigCVEEBdGpBAnMgAigCXCACLQBjQQF0ai8BADsBACACIAIoAlRBAWo2AlQMAQsLIAIoAhggAigCNEECdGogAigCGCACKAI0QQJ0EFgaIAIgAigCWEEBajYCWAwBCwsgAigCXBA9DAELAkAgAigCZEEERgRAIAIQtCs2AhQgAiACKAJMQQdqQQhtNgIoIAJBADYCWANAIAIoAlggAigCSE5FBEAgAiACKAIkIAIoAlggAigCOGxBAnRqNgIcIAIgAigCICACKAI0IAIoAlhBAnRsQQJ0ajYCGCACQQA2AlQDQCACKAJUIAIoAihORQRAIAIgAigCHCACKAJUakEDcy0AADoAYyACKAIYIAIoAlRBAnRqIAIoAhQgAi0AY0ECdGooAgA2AgAgAiACKAJUQQFqNgJUDAELCyACQQE2AlADQCACKAJQQQRORQRAIAIoAhggAigCUCACKAI0bEECdGogAigCGCACKAI0QQJ0EFgaIAIgAigCUEEBajYCUAwBCwsgAiACKAJYQQFqNgJYDAELCyACKAIUED0MAQsCQCACKAJkQQhGBEAgAhCzKzYCECACIAIoAkxBA2pBBG02AiwgAkEANgJYA0AgAigCWCACKAJITkUEQCACIAIoAiQgAigCWCACKAI4bEECdGo2AhwgAiACKAIgIAIoAjQgAigCWEEDdGxBAnRqNgIYIAJBADYCVANAIAIoAlQgAigCLEgEQCACIAIoAhwgAigCVEEDdUECdGooAgBBByACKAJUQQdxa0ECdHZBD3E6AGMgAi0AY0EPSgRAQQRB4PMsKAIATgRAQfjEKigCACEAIAIgAi0AYzYCBCACQeCrIjYCACAAQfzZAiACEFYaCwsgAigCGCACKAJUQQJ0aiACKAIQIAItAGNBAnRqKAIANgIAIAIgAigCVEEBajYCVAwBCwsgAkEBNgJQA0AgAigCUEEITkUEQCACKAIYIAIoAlAgAigCNGxBAnRqIAIoAhggAigCNEECdBBYGiACIAIoAlBBAWo2AlAMAQsLIAIgAigCWEEBajYCWAwBCwsgAigC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AgBBf3NycXI2AgAgCyALKAJcIAsoApgBQQJ0ajYCXCALIAsoAlggCygCfEECdGo2AlggCyALKAIMQQFqNgIMDAELCwsgCygCVARAIAtBADYCDANAIAsoAgwgCygCiAFORQRAIAtBADYCCANAIAsoAgggCygCUE5FBEAgCyALKAIcQX9zIAsoAkggCygCCEECdGooAgAgCygCJHRxIAsoAhwgCygCSCALKAIIQQJ0aigCBCALKAIgdnFyNgIwIAsoAkwgCygCCEECdGogCygCMCALKAJMIAsoAghBAnRqKAIAQX9zcjYCACALIAsoAghBAWo2AggMAQsLIAsgCygCTCALKAKYAUECdGo2AkwgCyALKAJIIAsoAnxBAnRqNgJIIAsgCygCDEEBajYCDAwBCwsLIAsoAkQEQCALQQA2AgwDQCALKAIMIAsoAogBSARAIAsgCygCNCgCACALKAIkdDYCMCALKAIQBEAgCyALKAIwIAsoAhxBf3NxIAsoAhwgCygCNCgCBCALKAIgdnFyNgIwCyALKAI4IAsoAjgoAgAgCygCQEF/c3EgCygCQCALKAIwIAsoAjgoAgBBf3NycXI2AgAgCyALKAI4IAsoApgBQQJ0ajYCOCALIAsoAjQgCygCfEECdGo2AjQgCyALKAIMQQFqNgIMDAELCwsMBQsgCygCcARAIAtBADYCDANAIAsoAgwgCygCiAFORQRAAkAgCygCGEUEQCALIAsoAlgoAgAgCygCJHQ2AjAgCygCFARAIAsgCygCMCALKAIcQX9zcSALKAIcIAsoAlgoAgQgCygCIHZxcjYCMAsMAQsgCyALKAJYKAIAIAsoAiB2NgIwCyALKAJcIAsoAlwoAgAgCygCaEF/c3EgCygCaCALKAIwIAsoAlwoAgBBf3NxcXI2AgAgCyALKAJcIAsoApgBQQJ0ajYCXCALIAsoAlggCygCfEECdGo2AlggCyALKAIMQQFqNgIMDAELCwsgCygCVARAIAtBADYCDANAIAsoAgwgCygCiAFORQRAIAtBADYCCANAIAsoAgggCygCUE5FBEAgCyALKAIcQX9zIAsoAkggCygCCEECdGooAgAgCygCJHRxIAsoAhwgCygCSCALKAIIQQJ0aigCBCALKAIgdnFyNgIwIAsoAkwgCygCCEECdGogCygCMCALKAJMIAsoAghBAnRqKAIAQX9zcTYCACALIAsoAghBAWo2AggMAQsLIAsgCygCTCALKAKYAUECdGo2AkwgCyALKAJIIAsoAnxBAnRqNgJIIAsgCygCDEEBajYCDAwBCwsLIAsoAkQEQCALQQA2AgwDQCALKAIMIAsoAogBSARAIAsgCygCNCgCACALKAIkdDYCMCALKAIQBEAgCyALKAIwIAsoAhxBf3NxIAsoAhwgCygCNCgCBCALKAIgdnFyNgIwCyALKAI4IAsoAjgoAgAgCygCQEF/c3EgCygCQCALKAIwIAsoAjgoAgBBf3NxcXI2AgAgCyALKAI4IAsoApgBQQJ0ajYCOCALIAsoAjQgCygCfEECdGo2AjQgCyALKAIMQQFqNgIMDAELCwsMBAsgCygCcARAIAtBADYCDANAIAsoAgwgCygCiAFORQRAAkAgCygCGEUEQCALIAsoAlgoAgAgCygCJHQ2AjAgCygCFARAIAsgCygCMCALKAIcQX9zcSALKAIcIAsoAlgoAgQgCygCIHZxcjYCMAsMAQsgCyALKAJYKAIAIAsoAiB2NgIwCyALKAJcIAsoAlwoAgAgCygCaEF/c3EgCygCaCALKAIwIAsoAlwoAgByQX9zcXI2AgAgCyALKAJcIAsoApgBQQJ0ajYCXCALIAsoAlggCygCfEECdGo2AlggCyALKAIMQQFqNgIMDAELCwsgCygCVARAIAtBADYCDANAIAsoAgwgCygCiAFORQRAIAtBADYCCANAIAsoAgggCygCUE5FBEAgCyALKAIcQX9zIAsoAkggCygCCEECdGooAgAgCygCJHRxIAsoAhwgCygCSCALKAIIQQJ0aigCBCALKAIgdnFyNgIwIAsoAkwgCygCCEECdGogCygCMCALKAJMIAsoAghBAnRqKAIAckF/czYCACALIAsoAghBAWo2AggMAQsLIAsgCygCTCALKAKYAUECdGo2AkwgCyALKAJIIAsoAnxBAnRqNgJIIAsgCygCDEEBajYCDAwBCwsLIAsoAkQEQCALQQA2AgwDQCALKAIMIAsoAogBSARAIAsgCygCNCgCACALKAIkdDYCMCALKAIQBEAgCyALKAIwIAsoAhxBf3NxIAsoAhwgCygCNCgCBCALKAIgdnFyNgIwCyALKAI4IAsoAjgoAgAgCygCQEF/c3EgCygCQCALKAIwIAso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f3NxIAsoAkggCygCPCgCACALKAJAKAIAcXFyNgIAIAsgCygCQCALKAJ4QQJ0ajYCQCALIAsoAjwgCygCXEECdGo2AjwgCyALKAIUQQFqNgIUDAELCwsgCygCOARAIAtBADYCFANAIAsoAhQgCygCaE5FBEAgC0EANgIQA0AgCygCECALKAI0TkUEQCALKAIwIAsoAhBBAnRqIgAgCygCLCALKAIQQQJ0aigCACAAKAIAcTYCACALIAsoAhBBAWo2AhAMAQsLIAsgCygCMCALKAJ4QQJ0ajYCMCALIAsoAiwgCygCXEECdGo2AiwgCyALKAIUQQFqNgIUDAELCwsgCygCKARAIAtBADYCFANAIAsoAhQgCygCaE5FBEAgCygCHCALKAIcKAIAIAsoAiRBf3NxIAsoAiQgCygCGCgCACALKAIcKAIAcXFyNgIAIAsgCygCHCALKAJ4QQJ0ajYCHCALIAsoAhggCygCXEECdGo2AhggCyALKAIUQQFqNgIUDAELCwsMCQsgCygCUARAIAtBADYCFANAIAsoAhQgCygCaE5FBEAgCygCQCALKAJAKAIAIAsoAkhBf3NxIAsoAkggCygCPCgCACALKAJAKAIAc3FyNgIAIAsgCygCQCALKAJ4QQJ0ajYCQCALIAsoAjwgCygCXEECdGo2AjwgCyALKAIUQQFqNgIUDAELCwsgCygCOARAIAtBADYCFANAIAsoAhQgCygCaE5FBEAgC0EANgIQA0AgCygCECALKAI0TkUEQCALKAIwIAsoAhBBAnRqIgAgCygCLCALKAIQQQJ0aigCACAAKAIAczYCACALIAsoAhBBAWo2AhAMAQsLIAsgCygCMCALKAJ4QQJ0ajYCMCALIAsoAiwgCygCXEECdGo2AiwgCyALKAIUQQFqNgIUDAELCwsgCygCKARAIAtBADYCFANAIAsoAhQgCygCaE5FBEAgCygCHCALKAIcKAIAIAsoAiRBf3NxIAsoAiQgCygCGCgCACALKAIcKAIAc3FyNgIAIAsgCygCHCALKAJ4QQJ0ajYCHCALIAsoAhggCygCXEECdGo2AhggCyALKAIUQQFqNgIUDAELCwsMCAsgCygCUARAIAtBADYCFANAIAsoAhQgCygCaE5FBEAgCygCQCALKAJAKAIAIAsoAkhBf3NxIAsoAkggCygCQCgCACAL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AQsLDAELAkACQAJAAkACQAJAIAIoAqACQQJGBEBBA0Hg8ywoAgBOBEBB+MQqKAIAIQFBoM4tQQA2AgAgAkHSniI2AoABQcYCIAFBxLkEIAJBgAFqEAUaQaDOLSgCACEBQaDOLUEANgIAIAFBAEdBpM4tKAIAIgRBAEdxDQIMAwsMBQsCQCACKAKgAkEDRwRAIAIoAqACQQRHDQELIAJBADYCwAIDQCACKALAAiACKALwAU9FBEAgAiACKAKQAiACKALAAiACKAKoAmxBAnRqNgKIAiACIAIoAtgBIAIoAsACQQJ0aigCADYC4AEgAkEANgK4AiACQQA2ArwCA0AgAigCvAIgAigC9AFJBEAgAigC4AEhASACIAIoArgCIgNBAWo2ArgCIAIoAogCQQNzIAEgA2otAAA6AAAgAigC4AEhASACIAIoArgCIgNBAWo2ArgCIAIoAogCQQFqQQNzIAEgA2otAAA6AAAgAigC4AEhASACIAIoArgCIgNBAWo2ArgCIAIoAogCQQJqQQNzIAEgA2otAAA6AAAgAigCoAJBBEYEQCACKALgASEBIAIgAigCuAIiA0EBajYCuAIgAigCiAJBA2pBA3MgASADai0AADoAAAsgAiACKAKIAkEEajYCiAIgAiACKAK8AkEBajYCvAIMAQsLIAIgAigCwAJBAWo2AsACDAELCwsMBQsgASgCACAIIAcQASIDRQ0XDAELQX8hAwwBCyAEEAILIAchARAAIQYgA0EBRg0GCyACQQA2AsACA0AgAigCwAIgAigC8AFPRQRAIAIgAigCkAIgAigCwAIgAigCqAJsQQJ0ajYCiAIgAiACKALYASACKALAAkECdGooAgA2AuABIAJBADYCuAIgAkEANgK8AgNAIAIoArwCIAIoAvQBT0UEQCACKAKIAkEDcyACKALgASACKAK4AmotAAA6AAAgAigCiAJBAWpBA3MgAigC4AEgAigCuAJqLQAAOgAAIAIoAuABIQEgAiACKAK4AiIDQQFqNgK4AiACKAKIAkECakEDcyABIANqLQAAOgAAIAIoAuABIQEgAiACKAK4AiIDQQFqNgK4AiACKAKIAkEDakEDcyABIANqLQAAOgAAIAIgAigCiAJBBGo2AogCIAIgAigCvAJBAWo2ArwCDAELCyACIAIoAsACQQFqNgLAAgwBCwsgAigCwAEhAUGgzi1BADYCAEH+AiABQQQQBxpBoM4tKAIAIQFBoM4tQQA2AgACQAJAIAFBAEdBpM4tKAIAIgRBAEdxBEAgASgCACAIIAcQASIDRQ0WDAELQX8hAwwBCyAEEAILIAchARAAIQYgA0EBRg0FCwsgByEBAkAgAigCoAJBAUcNACACKAKYAkUNAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAigCuAFFBEBBA0Hg8ywoAgBOBEBB+MQqKAIAIQFBoM4tQQA2AgAgAkHSniI2AnBBxgIgAUGa4wQgAkHwAGoQBRpBoM4tKAIAIQFBoM4tQQA2AgAgAUEAR0Gkzi0oAgAiBEEAR3ENAgwDCwwKC0EDQeDzLCgCAE4EQEH4xCooAgAhAUGgzi1BADYCACACQdKeIjYCUEHGAiABQcuxBSACQdAAahAFGkGgzi0oAgAhAUGgzi1BADYCACABQQBHQaTOLSgCACIEQQBHcQ0EDAULDAgLIAEoAgAgCCAHEAEiA0UNHAwBC0F/IQMMBQsgBBACDAQLIAEoAgAgCCAHEAEiA0UNGQwBC0F/IQMMAQsgBBACCyAHIQEQACEGIANBAUYNCAwBCyAHIQEQACEGIANBAUYNBwwBCyACKALUASEBIAIoAtABIQNBoM4tQQA2AgBB/wIgASADIAJB3AFqIAJB/AFqQQAQDxpBoM4tKAIAIQFBoM4tQQA2AgACQAJAIAFBAEdBpM4tKAIAIgRBAEdxBEAgASgCACAIIAcQASIDRQ0XDAELQX8hAwwBCyAEEAILIAchARAAIQYgA0EBRg0GAkACQAJAAkACQAJAAkACQAJAAkAgAigC3AFFBEBBoM4tQQA2AgBBwQIgAkHAAWoQCEGgzi0oAgAhBUGgzi1BADYCACAFQQBHQaTOLSgCACIDQQBHcQ0BDAILIAIoAsABIQNBoM4tQQA2AgBB2wIgAxAGIQlBoM4tKAIAIQRBoM4tQQA2AgAgBEEAR0Gkzi0oAgAiBkEAR3ENAwwECyAFKAIAIAggARABIgdFDRwMAQtBfyEHDAULIAMQAgwECyAEKAIAIAggARABIgNFDRgMAQtBfyEDDAELIAYQAgsQACEGIANBAUYNCQwBCxAAIQYgB0EBRg0IDAELQaDOLUEANgIAQYADIAkQBiEJQaDOLSgCACEEQaDOLUEANgIAAkACQCAEQQBHQaTOLSgCACIGQQBHcQRAIAQoAgAgCCABEAEiA0UNFgwBC0F/IQMMAQsgBhACCxAAIQYgA0EBRg0HIAIgCTYCuAEgAigCuAEhA0Ggzi1BADYCAEGBAyADEAYhCUGgzi0oAgAhBEGgzi1BADYCAAJAAkAgBEEAR0Gkzi0oAgAiBkEAR3EEQCAEKAIAIAggARABIgNFDRYMAQtBfyEDDAELIAYQAgsQACEGIANBAUYNByACIAk2ArACQaDOLUEANgIAQcECIAJBwAFqEAhBoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgZBAEdxBEAgBCgCACAIIAEQASIDRQ0WDAELQX8hAwwBCyAGEAILEAAhBiADQQFGDQcgAigC9AEhAyACKALwASEEQaDOLUEANgIAQcgCIAMgBEEgEAUhCUGgzi0oAgAhBEGgzi1BADYCAAJAAkAgBEEAR0Gkzi0oAgAiBkEAR3EEQCAEKAIAIAggARABIgNFDRYMAQtBfyEDDAELIAYQAgsQACEGIANBAUYNByACIAk2AsABIAIoAsABIQNBoM4tQQA2AgBBzgIgAxAGIQlBoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgZBAEdxBEAgBCgCACAIIAEQASIDRQ0WDAELQX8hAwwBCyAGEAILEAAhBiADQQFGDQcgAiAJNgKoAiACKALAASEDQaDOLUEANgIAQc8CIAMQBiEJQaDOLSgCACEEQaDOLUEANgIAAkACQCAEQQBHQaTOLSgCACIGQQBHcQRAIAQoAgAgCCABEAEiA0UNFgwBC0F/IQMMAQsgBhACCxAAIQYgA0EBRg0HIAIgCTYCkAIgAigCwAEhA0Ggzi1BADYCAEH+AiADQQQQBxpBoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgZBAEdxBEAgBCgCACAIIAEQASIDRQ0WDAELQX8hAwwBCyAGEAILEAAhBiADQQFGDQcCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACKAKkAkEBRgRAQQNB4PMsKAIATgRAQfjEKigCACEBQaDOLUEANgIAIAJB0p4iNgIgQcYCIAFB7PsFIAJBIGoQBRpBoM4tKAIAIQFBoM4tQQA2AgAgAUEAR0Gkzi0oAgAiBEEAR3ENAgwDCwwPCyACKAKkAkEIRgRAQQNB4PMsKAIATgRAQfjEKigCACEBQaDOLUEANgIAIAJB0p4iNgIwQcYCIAFBqsAGIAJBMGoQBRpBoM4tKAIAIQFBoM4tQQA2AgAgAUEAR0Gkzi0oAgAiBEEAR3ENBQwGCwwOC0EFQeDzLCgCAE4EQEH4xCooAgAhASACKAKkAiEDQaDOLUEANgIAIAIgAzYCRCACQdKeIjYCQEHGAiABQaLdBiACQUBrEAUaQaDOLSgCACEBQaDOLUEANgIAIAFBAEdBpM4tKAIAIgRBAEdxDQcMCAsMDwsgASgCACAIIAcQASIDRQ0kDAELQX8hAwwJCyAEEAIMCAsgASgCACAIIAcQASIDRQ0hDAELQX8hAwwFCyAEEAIMBAsgASgCACAIIAcQASIDRQ0eDAELQX8hAwwBCyAEEAILIAchARAAIQYgA0EBRg0NDAULIAchARAAIQYgA0EBRg0MDAILIAchARAAIQYgA0EBRg0LDAIACwAACyAAIQMgAkEANgLAAgNAIAIoAsACIAIoAvABSQRAIAIgAigCkAIgAigCwAIgAigCqAJsQQJ0ajYCiAIgAiACKALYASACKALAAkECdGooAgA2AuABIAJBADYCvAIDQAJAAkACQAJAIAIoArwCIAIoAvQBSQRAIAIgAigC4AEgAigCvAJqLQAANgK0AiACKAK4ASEAIAIoArQCIQFBoM4tQQA2AgBBggMgACABIAJBzAJqIAJByAJqIAJBxAJqEA8aQaDOLSgCACEAQaDOLUEANgIAIABBAEdBpM4tKAIAIgFBAEdxDQEMAgsgAiACKALAAkEBajYCwAIMBgsgACgCACAIIAcQASIERQ0eDAELQX8hBAwBCyABEAILIAchASADIQAQACEGIARBAUYNDCACKALMAiEEIAIoAsgCIQYgAigCxAIhCSACKAKIAiEKQaDOLUEANgIAQdUCIAQgBiAJIAoQDBpBoM4tKAIAIQZBoM4tQQA2AgACQAJAAkAgBkEAR0Gkzi0oAgAiCUEAR3EEQCAGKAIAIAggARABIgRFDQEMAgtBfyEEDAILIAYgCRAEAAsgCRACCxAAIQYgBEEBRg0MIAIoAogCQQNqQQNzAn8gAigCtAIgAigC/AFIBEAgAigC3AEgAigCtAJqLQAADAELQf8BCzoAACACIAIoAogCQQRqNgKIAiACIAIoArwCQQFqNgK8AgwAAAsACwsgAyEADAELIAAhAyACKAL8AUEBRgRAAkACQAJAAkACQEEDQeDzLCgCAE4EQEH4xCooAgAhAUGgzi1BADYCACACQdKeIjYCEEHGAiABQeCfBiACQRBqEAUaQaDOLSgCACEBQaDOLUEANgIAIAFBAEdBpM4tKAIAIgRBAEdxDQEMAgsMBAsgASgCACAIIAcQASIDRQ0bDAELQX8hAwwBCyAEEAILIAchARAAIQYgA0EBRg0KCyAAIQMLIAJBADYCwAIDQAJAIAIoAsACIAIoAvABSQRAIAIgAigCkAIgAigCwAIgAigCqAJsQQJ0ajYCiAIgAiACKALYASACKALAAkECdGooAgA2AuABIAJBADYCvAIgAkEANgK0AgNAIAIoArwCIAIoAuwBTw0CIAIgAigC4AEgAigCvAJqLQAAOgDTAiACQQA2ArgCA0BBACEAAkACQAJAAkAgAigCuAJBCEgEfyACKAK0AiACKAL0AUkFQQALQQFxBEAgAiACLQDTAkEHIAIoArgCa3VBAXE2AqwCIAIoArgBIQAgAigCrAIhAUGgzi1BADYCAEGCAyAAIAEgAkHMAmogAkHIAmogAkHEAmoQDxpBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiAUEAR3ENAQwCCyACIAIoArwCQQFqNgK8AgwFCyAAKAIAIAggBxABIgRFDR8MAQtBfyEEDAELIAEQAgsgByEBIAMhABAAIQYgBEEBRg0NIAIoAswCIQQgAigCyAIhBiACKALEAiEJIAIoAogCIQpBoM4tQQA2AgBB1QIgBCAGIAkgChAMGkGgzi0oAgAhBkGgzi1BADYCAAJAAkACQCAGQQBHQaTOLSgCACIJQQBHcQRAIAYoAgAgCCABEAEiBEUNAQwCC0F/IQQMAgsgBiAJEAQACyAJEAILEAAhBiAEQQFGDQ0gAigCiAJBA2pBA3MCfyACKAKsAiACKAL8AUgEQCACKALcASACKAKsAmotAAAMAQtB/wELOgAAIAIgAigCiAJBBGo2AogCIAIgAigCuAJBAWo2ArgCIAIgAigCtAJBAWo2ArQCDAAACwAACwALIAMhAAwCCyACIAIoAsACQQFqNgLAAgwAAAsAC0Ggzi1BADYCAEGDAyACQbgBahAIQaDOLSgCACEBQaDOLUEANgIAAkACQCABQQBHQaTOLSgCACIEQQBHcQRAIAEoAgAgCCAHEAEiA0UNGAwBC0F/IQMMAQsgBBACCyAHIQEMAgtBoM4tQQA2AgBB8AIgAkHUAWogAkHQAWogAkHMAWoQCkGgzi0oAgAhBUGgzi1BADYCAAJAAkAgBUEAR0Gkzi0oAgAiA0EAR3EEQCAFKAIAIAggARABIgdFDRYMAQtBfyEHDAELIAMQAgsQACEGIAdBAUYNBiACAn8CQAJAAkACQEEFQeDzLCgCAE4EQEGgzi1BADYCAEG9AkG62AVB0p4iQQAQBSEFQaDOLSgCACEDQaDOLUEANgIAIANBAEdBpM4tKAIAIgRBAEdxDQEMAgtBAAwECyADKAIAIAggARABIgdFDRUMAQtBfyEHDAELIAQQAgsQACEGIAdBAUYNByAFCzYC3AIgACEHDBALAkACQAJAAkACQEEDQeDzLCgCAE4EQEH4xCooAgAhAUGgzi1BADYCACACQdKeIjYCYEHGAiABQYaMBSACQeAAahAFGkGgzi0oAgAhAUGgzi1BADYCACABQQBHQaTOLSgCACIEQQBHcQ0BDAILDAQLIAEoAgAgCCAHEAEiA0UNFwwBC0F/IQMMAQsgBBACCyAHIQEQACEGIANBAUYNBgtBoM4tQQA2AgBBwQIgAkHAAWoQCEGgzi0oAgAhAUGgzi1BADYCAAJAAkAgAUEAR0Gkzi0oAgAiBEEAR3EEQCABKAIAIAggBxABIgNFDRYMAQtBfyEDDAELIAQQAgsgByEBEAAhBiADQQFGDQUgAigC9AEhAyACKALwASEEQaDOLUEANgIAQcgCIAMgBEEgEAUhCUGgzi0oAgAhBEGgzi1BADYCAAJAAkAgBEEAR0Gkzi0oAgAiBkEAR3EEQCAEKAIAIAggARABIgNFDRQMAQtBfyEDDAELIAYQAgsQACEGIANBAUYNBSACIAk2AsABIAIoAsABIQNBoM4tQQA2AgBB/gIgA0EEEAcaQaDOLSgCACEEQaDOLUEANgIAAkACQCAEQQBHQaTOLSgCACIGQQBHcQRAIAQoAgAgCCABEAEiA0UNFAwBC0F/IQMMAQsgBhACCwsQACEGIANBAUYNBAsgBSEAIAIoAsABIQVBoM4tQQA2AgBB4QIgBRAGIQlBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgRBAEdxBEAgAygCACAIIAcQASIFRQ0RDAELQX8hBQwBCyAEEAILEAAhBiAFQQFGDQMgCUEBRgRAAkACQAJAAkACQAJAAkACQAJAAkAgAigCuAFFBEAgAigCwAEhBSACKALAASEDQaDOLUEANgIAQYQDIAUgAxAHGkGgzi0oAgAhA0Ggzi1BADYCACADQQBHQaTOLSgCACIEQQBHcQ0BDAILIAIoAsABIQVBoM4tQQA2AgBB3gIgBUEEEAchCUGgzi0oAgAhA0Ggzi1BADYCACADQQBHQaTOLSgCACIEQQBHcQ0DDAQLIAMoAgAgCCAHEAEiBUUNGAwBC0F/IQUMBQsgBBACDAQLIAMoAgAgCCAHEAEiBUUNFQwBC0F/IQUMAQsgBBACCxAAIQYgBUEBRg0HDAELEAAhBiAFQQFGDQYMAQsgAiAJNgK8AUGgzi1BADYCAEHBAiACQcABahAIQaDOLSgCACEDQaDOLUEANgIAAkACQCADQQBHQaTOLSgCACIEQQBHcQRAIAMoAgAgCCAHEAEiBUUNEwwBC0F/IQUMAQsgBBACCxAAIQYgBUEBRg0FIAIgAigCvAE2AsABCwsgAigC1AEhBSACKALQASEDQaDOLUEANgIAQYUDIAUgAxAHIQlBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgRBAEdxBEAgAygCACAIIAcQASIFRQ0RDAELQX8hBQwBCyAEEAILEAAhBiAFQQFGDQMgAiAJNgLoASACKALUASEFIAIoAtABIQNBoM4tQQA2AgBBhgMgBSADEAchCUGgzi0oAgAhA0Ggzi1BADYCAAJAAkAgA0EAR0Gkzi0oAgAiBEEAR3EEQCADKAIAIAggBxABIgVFDREMAQtBfyEFDAELIAQQAgsQACEGIAVBAUYNAyACIAk2AuQBIAIoAsABIQMCfyACKALoAbO7RI/C9Shcr0NAo0QAAAAAAADgP6AiC5lEAAAAAAAA4EFjBEAgC6oMAQtBgICAgHgLIQVBoM4tQQA2AgBB0QIgAyAFEAcaQaDOLSgCACEDQaDOLUEANgIAAkACQCADQQBHQaTOLSgCACIEQQBHcQRAIAMoAgAgCCAHEAEiBUUNEQwBC0F/IQUMAQsgBBACCxAAIQYgBUEBRg0DIAIoAsABIQMCfyACKALkAbO7RI/C9Shcr0NAo0QAAAAAAADgP6AiC5lEAAAAAAAA4EFjBEAgC6oMAQtBgICAgHgLIQVBoM4tQQA2AgBB0gIgAyAFEAcaQaDOLSgCACEDQaDOLUEANgIAAkACQCADQQBHQaTOLSgCACIEQQBHcQRAIAMoAgAgCCAHEAEiBUUNEQwBC0F/IQUMAQsgBBACCxAAIQYgBUEBRg0DIAIoAtQBIQUgAigC0AEhA0Ggzi1BADYCAEGHAyAFIAMgAkHEAWogAkGAAmoQDBpBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgRBAEdxBEAgAygCACAIIAcQASIFRQ0RDAELQX8hBQwBCyAEEAILEAAhBiAFQQFGDQMCQCACKAKAAkUNACACKALEAUUNACACKALAASEFIAIoAsQBKAIIIQNBoM4tQQA2AgBBiAMgBSADEAcaQaDOLSgCACEDQaDOLUEANgIAAkACQCADQQBHQaTOLSgCACIEQQBHcQRAIAMoAgAgCCAHEAEiBUUNEgwBC0F/IQUMAQsgBBACCxAAIQYgBUEBRg0EC0Ggzi1BADYCAEHwAiACQdQBaiACQdABaiACQcwBahAKQaDOLSgCACEFQaDOLUEANgIAAkACQCAFQQBHQaTOLSgCACIDQQBHcQRAIAUoAgAgCCAHEAEiB0UNEwwBC0F/IQcMAQsgAxACCxAAIQYgB0EBRg0DIAIgAigCwAE2AtwCIAAhBwwNCyACAn8CQAJAAkACQEEFQeDzLCgCAE4EQEGgzi1BADYCAEG9AkGykARB0p4iQQAQBSEFQaDOLSgCACEDQaDOLUEANgIAIANBAEdBpM4tKAIAIgRBAEdxDQEMAgtBAAwECyADKAIAIAggARABIgdFDREMAQtBfyEHDAELIAQQAgsQACEGIAdBAUYNAyAFCzYC3AIgACEHDAwLQaDOLUEANgIAQfACIAJB1AFqIAJB0AFqIAJBzAFqEApBoM4tKAIAIQVBoM4tQQA2AgACQAJAIAVBAEdBpM4tKAIAIgNBAEdxBEAgBSgCACAAIAEQASIHRQ0RDAELQX8hBwwBCyADEAILEAAhBiAHQQFGDQEgAgJ/AkACQAJAAkACQEEFQeDzLCgCAE4EQEGgzi1BADYCAEG9AkHi5QNB0p4iQQAQBSEFQaDOLSgCACEAQaDOLUEANgIAIABBAEdBpM4tKAIAIgNBAEdxDQEMAgtBAAwFCyAAKAIAIAggARABIgdFDQEMAgtBfyEHDAILIAAgAxAEAAsgAxACCyAIIQAQACEGIAdBAUYNAiAFCzYC3AIgCCEHDAsLAkACQAJAAkACQEEFQeDzLCgCAE4EQEGgzi1BADYCAEG9AkGi1wJB0p4iQQAQBSEFQaDOLSgCACEAQaDOLUEANgIAIABBAEdBpM4tKAIAIgNBAEdxDQEMAgtBAAwGCyAAKAIAIAggARABIgdFDQEMAgtBfyEHDAILIAAgAxAEAAsgAxACCyAIIQAQACEGIAdBAUYNAAsgBQs2AtwCIAghBwwICyAFCzYC3AIMBgsgBQs2AtwCDAQLIAULNgLcAgwCCyAFCzYC3AILIAIoAtwCIQAgBxA9IAJB4AJqJAAgAA8LIAMgBBAEAAsgBCAGEAQACyAFIAMQBAALIAEgBBAEAAsgACABEAQAC84EAgl/AX0jAEHQAWsiBCQAIARB6ABqIAAoArTbCBBwIggQogEgBEHQAGoQayECIARBOGoQayEDIARBIGoQayEHIARBCGoQayEFIAgQkwEiAQRAA0ACQCABKAJIEMEERQ0AIAEQqDMgARC8K0EBcyIJQwAAgD4gARDDF0VyRQRAIAIgARBfGgwBCwJAIAkgACABEMIXIgYQwBBBAXNyDQBDzczMPSABEMMXRQ0AIAMgARBfGgwBCyAGQQFyQQNGDQAgARD3BUEVSA0AIAEQTCEBIAYQwBAEQCAHIAEuAQAQXxoLIAUgACABEL8QEIQICyAIEJMBIgENAAsLIAcQxAMgBRC6F0OamRk+IQogBRBNRQRAIAUgBSgCAEECbRA+KgIAu0SamZmZmZnpP6K2IQoLIAIoAgBBAU4EQCAAQcDbCGohBkEAIQEDQCACIAEQPigCABBMIQkCQAJAIAAgCiACIAEQPigCABCLK0UNACAAIAIgARA+KAIAEMIXEMAQBEAgACAHIAkuAQAQthdBAEoNAQsgAiABED4oAgBBBBDvAyAGIAIgARA+KAIAEF8aDAELIAIgARA+KAIAQQUQ7wMLIAFBAWoiASACKAIASA0ACwsgAygCAEEBTgRAIABBwNsIaiEGQQAhAQNAIAAgByAKIAMgARA+KAIAEPQqBEAgAyABED4oAgBBBBDvAyAGIAMgARA+KAIAEF8aCyABQQFqIgEgAygCAEgNAAsLIAUQ2gQaIAcQXRogAxBdGiACEF0aIAgQbhogBEHQAWokAAvhQQIJfwF8IwBBsANrIgIkAEEoEFwiBkEANgIAIAIgADYCqAMgAiABNgKkAyACQwAAAAA4AqADIAJBsJ4iKQAANwCYAwJAAkACQAJAAkACQCACAn8CQCACAn8CQCACAn8CQCACAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAigCqANFBEBBBUHg8ywoAgBOBEBBoM4tQQA2AgBB1gJBq5sKQcCeIkEBEAUhCEGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIBQQBHcQ0CDAMLQQEMFgsgAigCpANFBEBBBUHg8ywoAgBOBEBBoM4tQQA2AgBB1gJBoOwJQcCeIkEBEAUhCEGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIBQQBHcQ0FDAYLQQEMFAtBoM4tQQA2AgBBigNBnPkAQQBBAEEAEAwhCEGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIBQQBHcQ0GDAcLIAAoAgAgBkEEEAEiA0UNFgwBC0F/IQMMCQsgARACDAgLIAAoAgAgBkEEEAEiA0UNEwwBC0F/IQMMBQsgARACDAQLIAAoAgAgBkEEEAEiA0UNEAwBC0F/IQMMAQsgARACC0EEIQEgBiEAEAAhBSADQQFGDQMMAgtBBCEBIAYhABAAIQUgA0EBRg0CDAcLQQQhASAGIQAQACEFIANBAUYNAQwICyACIAg2AjQCQAJAAkACQAJAAkACQAJAAkAgCEUEQEEFQeDzLCgCAE4EQEGgzi1BADYCAEHWAkG/tAFBwJ4iQQEQBSEIQaDOLSgCACEAQaDOLUEANgIAIABBAEdBpM4tKAIAIgFBAEdxDQIMAwtBAQwOCyACKAI0IQBBoM4tQQA2AgBB7wIgABAGIQhBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiAUEAR3ENAwwECyAAKAIAIAZBBBABIgNFDRIMAQtBfyEDDAULIAEQAgwECyAAKAIAIAZBBBABIgNFDQ8MAQtBfyEDDAELIAEQAgtBBCEBIAYhABAAIQUgA0EBRg0CDAELQQQhASAGIQAQACEFIANBAUYNAQwECyACIAg2AjACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgCEUEQEGgzi1BADYCAEGLAyACQTRqQQAQCUGgzi0oAgAhAUGgzi1BADYCACABQQBHQaTOLSgCACIIQQBHcQ0BDAILIAIoAjQhAUGgzi1BADYCAEHxAiABQfICQZwBEAUhCEGgzi0oAgAhAUGgzi1BADYCACABQQBHQaTOLSgCACIDQQBHcQ0EDAULIAEoAgAgAEEEEAEiA0UNAQwCC0F/IQMMBwsgASAIEAQACyAIEAIMBQsgASgCACAAQQQQASIGRQ0BDAILQX8hBgwCCyABIAMQBAALIAMQAgtBBCEBEAAhBSAGQQFGDQMMAQtBBCEBEAAhBSADQQFGDQIMAQsgCEEBIABBBBALIQAQACEBQQAhBQwBCwJAAkACQAJAQQVB4PMsKAIATgRAQaDOLUEANgIAQdYCQejzAUHAniJBARAFIQhBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiAUEAR3ENAQwCC0EBDAYLIAAoAgAgBkEEEAEiA0UNDQwBC0F/IQMMAQsgARACC0EEIQEgBiEAEAAhBSADQQFHDQELIAICfwNAIAAhBiABIQgCQAJAAkACQAJAAkACQAJAAkACQCAFBEBBoM4tQQA2AgBBiwMgAkE0aiACQTBqEAlBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiAUEAR3ENAQwCCyACKAI0IQAgAigCqAMhAUGgzi1BADYCAEHzAiAAIAEQCUGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIBQQBHcQ0DDAQLIAAoAgAgBiAIEAEiA0UNFAwBC0F/IQMMBQsgARACDAQLIAAoAgAgBiAIEAEiA0UNEQwBC0F/IQMMAQsgARACCyAIIQEgBiEAEAAhBSADQQFGDQMMAQsgCCEBIAYhABAAIQUgA0EBRg0CDAELIAJBfzYC8AICQCACKAKkAygCJEEKSA0AIAIoAqQDKAIkQRRODQAgAiACKAKkAygCJEEKazYC8AILIAIoAjQhAyACKALwAiEEQaDOLUEANgIAQYwDIAMgBBAJQaDOLSgCACEEQaDOLUEANgIAAkACQCAEQQBHQaTOLSgCACIHQQBHcQRAIAQoAgAgACABEAEiA0UNEAwBC0F/IQMMAQsgBxACCxAAIQUgA0EBRg0BIAIoAqQDIQNBoM4tQQA2AgBBjQMgAxAGIQlBoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgdBAEdxBEAgBCgCACAAIAEQASIDRQ0QDAELQX8hAwwBCyAHEAILEAAhBSADQQFGDQEgAiAJNgJMIAIoAqQDIQNBoM4tQQA2AgBBjgMgAxAGIQlBoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgdBAEdxBEAgBCgCACAAIAEQASIDRQ0QDAELQX8hAwwBCyAHEAILEAAhBSADQQFGDQEgAiAJNgJIIAIoAqQDIQNBoM4tQQA2AgBB4QIgAxAGIQlBoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgdBAEdxBEAgBCgCACAAIAEQASIDRQ0QDAELQX8hAwwBCyAHEAILEAAhBSADQQFGDQEgAiAJNgKEAyACKAKkAyEDQaDOLUEANgIAQY8DIAMQBiEJQaDOLSgCACEEQaDOLUEANgIAAkACQCAEQQBHQaTOLSgCACIHQQBHcQRAIAQoAgAgACABEAEiA0UNEAwBC0F/IQMMAQsgBxACCxAAIQUgA0EBRg0BIAIgCTYCgAMgAigCpAMhA0Ggzi1BADYCAEHbAiADEAYhB0Ggzi0oAgAhBEGgzi1BADYCAAJAAkACQCAEQQBHQaTOLSgCACIFQQBHcQRAIAQoAgAgACABEAEiA0UNAQwCC0F/IQMMAgsgBCAFEAQACyAFEAILEAAhBSADQQFGDQEgAiAHNgIkAkAgBwRAIAJBATYC/AIMAQsgAkEANgL8AgsCQAJAIAIoAoQDQSBHDQAgAigCgANBBEcNACACQQg6ANcCIAJBBjoA1gIgAkEANgL8AgwBCwJAAkAgAigChANBGEcEQCACKAKEA0EgRw0BCyACQQg6ANcCIAJBAjoA1gIgAkEANgL8AgwBCyACIAIoAoQDOgDXAiACQQA6ANYCCwsgAigC/AIEQCACQQM6ANYCCyACKAI0IQMgAigCMCEEIAIoAkwhBSACKAJIIQcgAi0A1wIhCSACLQDWAiEKQaDOLUEANgIAQZADIAMgBCAFIAcgCSAKQQBBAEEAEB1BoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgdBAEdxBEAgBCgCACAAIAEQASIDRQ0QDAELQX8hAwwBCyAHEAILEAAhBSADQQFGDQEgAigCpAMhA0Ggzi1BADYCAEHjAiADEAYhCUGgzi0oAgAhBEGgzi1BADYCAAJAAkAgBEEAR0Gkzi0oAgAiB0EAR3EEQCAEKAIAIAAgARABIgNFDRAMAQtBfyEDDAELIAcQAgsQACEFIANBAUYNASACAn8gCbK7RI/C9Shcr0NAokQAAAAAAADgP6AiC0QAAAAAAADwQWMgC0QAAAAAAAAAAGZxBEAgC6sMAQtBAAs2AkQgAigCpAMhA0Ggzi1BADYCAEHkAiADEAYhCUGgzi0oAgAhBEGgzi1BADYCAAJAAkAgBEEAR0Gkzi0oAgAiB0EAR3EEQCAEKAIAIAAgARABIgNFDRAMAQtBfyEDDAELIAcQAgsQACEFIANBAUYNASACAn8gCbK7RI/C9Shcr0NAokQAAAAAAADgP6AiC0QAAAAAAADwQWMgC0QAAAAAAAAAAGZxBEAgC6sMAQtBAAs2AkACQAJAAkACQAJAAkACQAJAIAIoAkQEQCACKAJADQELIAIoAjQhAyACKAIwIQRBoM4tQQA2AgBBkQMgAyAEQQBBAEEAEBJBoM4tKAIAIQRBoM4tQQA2AgAgBEEAR0Gkzi0oAgAiB0EAR3ENAQwCCyACKAI0IQMgAigCMCEEIAIoAkQhBSACKAJAIQdBoM4tQQA2AgBBkQMgAyAEIAUgB0EBEBJBoM4tKAIAIQRBoM4tQQA2AgAgBEEAR0Gkzi0oAgAiB0EAR3ENAwwECyAEKAIAIAAgARABIgNFDRMMAQtBfyEDDAQLIAcQAgwDCyAEKAIAIAAgARABIgNFDRAMAQtBfyEDDAELIAcQAgsQACEFIANBAUYNASABIQMgAigC/AIEQCACKAIkIQBBoM4tQQA2AgBBkgMgACACQewCaiACQegCaiACQeQCaiACQeACahAPGkGgzi0oAgAhAEGgzi1BADYCAAJAAkAgAEEAR0Gkzi0oAgAiAUEAR3EEQCAAKAIAIAYgCBABIgNFDRAMAQtBfyEDDAELIAEQAgsgCCEBIAYhABAAIQUgA0EBRg0CIAIoAiQhA0Ggzi1BADYCAEGBAyADEAYhCUGgzi0oAgAhBEGgzi1BADYCAAJAAkAgBEEAR0Gkzi0oAgAiB0EAR3EEQCAEKAIAIAAgARABIgNFDREMAQtBfyEDDAELIAcQAgsQACEFIANBAUYNAiACIAk2AvQCIAIoAiQhA0Ggzi1BADYCAEGTAyADIAJB+AJqEAcaQaDOLSgCACEEQaDOLUEANgIAAkACQCAEQQBHQaTOLSgCACIHQQBHcQRAIAQoAgAgACABEAEiA0UNEQwBC0F/IQMMAQsgBxACCxAAIQUgA0EBRg0CIAIoAvQCIQNBoM4tQQA2AgBBxwIgA0EDEAchCUGgzi0oAgAhBEGgzi1BADYCAAJAAkAgBEEAR0Gkzi0oAgAiB0EAR3EEQCAEKAIAIAAgARABIgNFDREMAQtBfyEDDAELIAcQAgsQACEFIANBAUYNAiACIAk2AiwgAkEANgKUAwNAIAIoApQDIAIoAvQCSARAIAIoAiwgAigClANBA2xqIAIoAuwCIAIoApQDQQJ0aigCADoAACACKAIsIAIoApQDQQNsaiACKALoAiACKAKUA0ECdGooAgA6AAEgAigCLCACKAKUA0EDbGogAigC5AIgAigClANBAnRqKAIAOgACIAIoApQDIAJB0ABqaiACKALgAiACKAKUA0ECdGooAgA6AAAgAiACKAKUA0EBajYClAMMAQsLIAIoAjQhAyACKAIwIQQgAigCLCEFIAIoAvQCIQdBoM4tQQA2AgBBlAMgAyAEIAUgBxAOQaDOLSgCACEEQaDOLUEANgIAAkACQCAEQQBHQaTOLSgCACIHQQBHcQRAIAQoAgAgACABEAEiA0UNEQwBC0F/IQMMAQsgBxACCxAAIQUgA0EBRg0CIAIoAvgCRQRAIAIoAjQhACACKAIwIQEgAigC9AIhA0Ggzi1BADYCAEGVAyAAIAEgAkHQAGogA0EAEBJBoM4tKAIAIQBBoM4tQQA2AgACQAJAIABBAEdBpM4tKAIAIgFBAEdxBEAgACgCACAGIAgQASIDRQ0RDAELQX8hAwwBCyABEAILIAghASAGIQAQACEFIANBAUYNAwsgAigC7AIQPSACKALoAhA9IAIoAuQCED0gAigC4AIQPSAIIQMLIAMhASACKgKgA7tEAAAAAAAAAABkBEAgAigCNCEAIAIoAjAhASACKgKgA7shC0Ggzi1BADYCAEGWAyAAIAEgCxAcQaDOLSgCACEAQaDOLUEANgIAAkACQCAAQQBHQaTOLSgCACIBQQBHcQRAIAAoAgAgBiAIEAEiBEUNEAwBC0F/IQQMAQsgARACCyADIQEgBiEAEAAhBSAEQQFGDQILIAIoAqQDIQBBoM4tQQA2AgBB6AIgABAGIQdBoM4tKAIAIQBBoM4tQQA2AgACQAJAIABBAEdBpM4tKAIAIgVBAEdxBEAgACgCACAGIAgQASIERQ0TDAELQX8hBAwBCyAFEAILIAYhABAAIQUgBEEBRg0BIAIgBzYCICAHBEAgAkF/NgIAIAIgAkGYA2o2AgQgAiACKAIgNgIIIAIoAiAhAEGgzi1BADYCAEHpAiAAEAYhB0Ggzi0oAgAhAEGgzi1BADYCAAJAAkAgAEEAR0Gkzi0oAgAiBUEAR3EEQCAAKAIAIAYgCBABIgRFDRQMAQtBfyEEDAELIAUQAgsgBiEAEAAhBSAEQQFGDQIgAiAHNgIMIAIoAjQhBCACKAIwIQVBoM4tQQA2AgBBlwMgBCAFIAJBARAOQaDOLSgCACEFQaDOLUEANgIAAkACQAJAIAVBAEdBpM4tKAIAIgdBAEdxBEAgBSgCACAAIAgQASIERQ0BDAILQX8hBAwCCyAFIAcQBAALIAcQAgsQACEFIARBAUYNAgsgAigCNCEAIAIoAjAhBEGgzi1BADYCAEGYAyAAIAQQCUGgzi0oAgAhAEGgzi1BADYCAAJAAkAgAEEAR0Gkzi0oAgAiBUEAR3EEQCAAKAIAIAYgCBABIgRFDRMMAQtBfyEEDAELIAUQAgsgBiEAEAAhBSAEQQFGDQECQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAoQDQSBGDQAgAigChANBGEYNAAJAIAIoAoQDQQFHDQAgAigCJA0AIAIoAqQDIQBBoM4tQQA2AgBBhANBACAAEAchB0Ggzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIEQQBHcQ0CDAMLIAIoAqQDIQBBoM4tQQA2AgBBmQMgABAGIQdBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiBEEAR3ENBAwFCyAAIQQgAigCpAMhAEGgzi1BADYCAEHPAiAAEAYhCUGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIBQQBHcQ0GDAcLIAAoAgAgBiAIEAEiA0UNHQwBC0F/IQMMCQsgBBACDAgLIAAoAgAgBiAIEAEiA0UNGgwBC0F/IQMMBQsgBBACDAQLIAAoAgAgBiAIEAEiB0UNFQwBC0F/IQcMAQsgARACCyADIQEgBCEAEAAhBSAHQQFGDQcMAgsgBiEAEAAhBSADQQFGDQYMAgsgBiEAEAAhBSADQQFGDQUMAgsgAiAJNgLcAiACKAKkAyEFQaDOLUEANgIAQc4CIAUQBiEKQaDOLSgCACEFQaDOLUEANgIAAkACQAJAIAVBAEdBpM4tKAIAIglBAEdxBEAgBSgCACAGIAgQASIHRQ0BDAILQX8hBwwCCyAFIAkQBAALIAkQAgsQACEFIAdBAUYNBCACIAo2AogDAkAgAigChANBGEYEQCACQQA2ApQDA0ACQAJAAkACQCACKAKUAyACKAJISQRAIAIgAigC3AIgAigClAMgAigCiANsQQJ0ajYC2AIgAigCNCEAQaDOLUEANgIAQZoDIAAgAkHYAmpBARAKQaDOLSgCACEAQaDOLUEANgIAIABBAEdBpM4tKAIAIgFBAEdxDQEMAgsMBgsgACgCACAGIAgQASIHRQ0VDAELQX8hBwwBCyABEAILIAMhASAEIQAQACEFIAdBAUYNByACIAIoApQDQQFqNgKUAwwAAAsACyACKAJMIQBBoM4tQQA2AgBBxwIgAEEEEAchCUGgzi0oAgAhAEGgzi1BADYCAAJAAkAgAEEAR0Gkzi0oAgAiAUEAR3EEQCAAKAIAIAYgCBABIgdFDRMMAQtBfyEHDAELIAEQAgsgAyEBIAQhABAAIQUgB0EBRg0FIAIgCTYCOCACQQA2ApQDA0ACQAJAAkACQCACKAKUAyACKAJISQRAIAIgAigC3AIgAigClAMgAigCiANsQQJ0ajYC2AIgAkEANgKMAyACQQA2ApADA0AgAigCkAMgAigCTEkEQCACKALYAkEDcy0AACEAIAIoAjghASACIAIoAowDIgVBAWo2AowDIAEgBWogADoAACACKALYAkEBakEDcy0AACEAIAIoAjghASACIAIoAowDIgVBAWo2AowDIAEgBWogADoAACACKALYAkECakEDcy0AACEAIAIoAjghASACIAIoAowDIgVBAWo2AowDIAEgBWogADoAACACKAKAA0EERgRAIAIoAtgCQQNqQQNzLQAAIQAgAigCOCEBIAIgAigCjAMiBUEBajYCjAMgASAFaiAAOgAACyACIAIoAtgCQQRqNgLYAiACIAIoApADQQFqNgKQAwwBCwsgAigCNCEAQaDOLUEANgIAQZoDIAAgAkE4akEBEApBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiAUEAR3ENAQwCCyACKAI4ED0MBQsgACgCACAGIAgQASIHRQ0UDAELQX8hBwwBCyABEAILIAMhASAEIQAQACEFIAdBAUYNBiACIAIoApQDQQFqNgKUAwwAAAsACyAEIQAgAyEBIAIoAjQhAyACKAIwIQRBoM4tQQA2AgBBmwMgAyAEEAlBoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgdBAEdxBEAgBCgCACAGIAgQASIDRQ0TDAELQX8hAwwBCyAHEAILEAAhBSADQQFGDQQgAigC/AIEQCACKAIsED0LQaDOLUEANgIAQYsDIAJBNGogAkEwahAJQaDOLSgCACEDQaDOLUEANgIAAkACQCADQQBHQaTOLSgCACIEQQBHcQRAIAMoAgAgBiAIEAEiBkUNFQwBC0F/IQYMAQsgBBACCxAAIQUgBkEBRg0EIAJBADYCrAMgACEGDA4LIAIgBzYCKAwBCyACIAc2AiggAigCKCEDQaDOLUEANgIAQZwDIAMQBhpBoM4tKAIAIQRBoM4tQQA2AgACQAJAIARBAEdBpM4tKAIAIgdBAEdxBEAgBCgCACAAIAgQASIDRQ0RDAELQX8hAwwBCyAHEAILEAAhBSADQQFGDQILAkACQAJAAkACQAJAAkACQAJAAkAgAigCKEUEQEGgzi1BADYCAEGLAyACQTRqIAJBMGoQCUGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIEQQBHcQ0BDAILIAIoAkghAEGgzi1BADYCAEHHAiAAQQQQByEHQaDOLSgCACEAQaDOLUEANgIAIABBAEdBpM4tKAIAIgRBAEdxDQMMBAsgACgCACAGIAgQASIDRQ0XDAELQX8hAwwFCyAEEAIMBAsgACgCACAGIAgQASIDRQ0UDAELQX8hAwwBCyAEEAILIAYhABAAIQUgA0EBRg0EDAELIAYhABAAIQUgA0EBRg0DDAELIAIgBzYCPCACKAIoIQZBoM4tQQA2AgBBzgIgBhAGIQdBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgRBAEdxBEAgAygCACAAIAgQASIGRQ0TDAELQX8hBgwBCyAEEAILEAAhBSAGQQFGDQIgAiAHNgKIAyACKAIoIQZBoM4tQQA2AgBBzwIgBhAGIQdBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgRBAEdxBEAgAygCACAAIAgQASIGRQ0TDAELQX8hBgwBCyAEEAILEAAhBSAGQQFGDQIgAiAHNgLcAiACQQA2ApQDA0AgAigClAMgAigCSEkEQCACKAI8IAIoApQDQQJ0aiACKALcAiACKAKUAyACKAKIA2xBAnRqNgIAIAIgAigClANBAWo2ApQDDAELCyACKAI0IQYgAigCMCEDIAIoAjwhBEGgzi1BADYCAEGdAyAGIAMgBBAKQaDOLSgCACEDQaDOLUEANgIAAkACQCADQQBHQaTOLSgCACIEQQBHcQRAIAMoAgAgACAIEAEiBkUNEwwBC0F/IQYMAQsgBBACCxAAIQUgBkEBRg0CIAIoAjQhBiACKAI8IQNBoM4tQQA2AgBBngMgBiADEAlBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgRBAEdxBEAgAygCACAAIAgQASIGRQ0TDAELQX8hBgwBCyAEEAILEAAhBSAGQQFGDQIgAigCNCEGIAIoAjAhA0Ggzi1BADYCAEGbAyAGIAMQCUGgzi0oAgAhA0Ggzi1BADYCAAJAAkAgA0EAR0Gkzi0oAgAiBEEAR3EEQCADKAIAIAAgCBABIgZFDRMMAQtBfyEGDAELIAQQAgsQACEFIAZBAUYNAiACKAL8AgRAIAIoAiwQPQsgAigCPBA9QaDOLUEANgIAQcECIAJBKGoQCEGgzi0oAgAhA0Ggzi1BADYCAAJAAkAgA0EAR0Gkzi0oAgAiBEEAR3EEQCADKAIAIAAgCBABIgZFDRMMAQtBfyEGDAELIAQQAgsQACEFIAZBAUYNAkGgzi1BADYCAEGLAyACQTRqIAJBMGoQCUGgzi0oAgAhA0Ggzi1BADYCAAJAAkAgA0EAR0Gkzi0oAgAiBEEAR3EEQCADKAIAIAAgCBABIgZFDRMMAQtBfyEGDAELIAQQAgsQACEFIAZBAUYNAiACQQA2AqwDIAAhBgwMCyACKAL8AgRAIAIoAiwQPQsgAgJ/AkACQAJAAkBBBUHg8ywoAgBOBEBBoM4tQQA2AgBB1gJBhKsKQcCeIkEBEAUhB0Ggzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIEQQBHcQ0BDAILQQEMBAsgACgCACAGIAgQASIDRQ0SDAELQX8hAwwBCyAEEAILIAYhABAAIQUgA0EBRg0CIAcLNgKsAwwLCwJAAkACQAJAQQVB4PMsKAIATgRAQaDOLUEANgIAQdYCQaLXAkHAniJBARAFIQhBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiBEEAR3ENAQwCC0EBDAULIAAoAgAgBiABEAEiA0UNEAwBC0F/IQMMAQsgBBACCyAGIQAQACEFIANBAUYNAAsgCAs2AqwDDAgLIAgLNgKsAwwGCyAICzYCrAMMBAsgCAs2AqwDDAILIAgLNgKsAwsgAigCrAMhACAGED0gAkGwA2okACAADwsgACABEAQACyAEIAcQBAALIAAgBBAEAAsgAyAEEAQACyAAIAUQBAALsQIBAX8jAEFAaiICJAAgAiAANgI4IAIgATYCNAJAIAIoAjRFBEAgAgJ/QQVB4PMsKAIATgRAQdufCUGgniJBARA6DAELQQELNgI8DAELIAIoAjRBADYCACACKAI4RQRAIAICf0EFQeDzLCgCAE4EQEHL+wZBoJ4iQQEQOgwBC0EBCzYCPAwBCyACIAIoAjgQhQUiADYCDCAARQRAIAICf0EFQeDzLCgCAE4EQEGP+AhBoJ4iQQEQOgwBC0EBCzYCPAwBCyACQRBqQQFBICACKAIMEIMCQSBHBEAgAgJ/QQVB4PMsKAIATgRAQfG0CUGgniJBARA6DAELQQELNgI8DAELIAIoAgwQ3AEaIAIoAjRBAUEAIAItACwbNgIAIAJBADYCPAsgAigCPBogAkFAayQAC84UAgR/AXwjAEEgayIEJABBKBBcIgNBADYCACAEIAA2AhggBCABNgIUIAQgAjYCECAEKAIUBEAgBCgCFEEANgIACyAEKAIQBEAgBCgCEEEANgIACwJAAkACQAJAIAQCfwJAIAQCfwJAIAQCfwJAIAQCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEKAIYRQRAQQVB4PMsKAIATgRAQaDOLUEANgIAQdYCQY/4CEGAniJBARAFIQZBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiAUEAR3ENAgwDC0EBDBYLAkAgBCgCFARAIAQoAhANAQtBBUHg8ywoAgBOBEBBoM4tQQA2AgBB1gJBiowJQYCeIkEBEAUhBkGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIBQQBHcQ0FDAYLQQEMFAtBoM4tQQA2AgBB7gJBnPkAQQBBAEEAEAwhBkGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIBQQBHcQ0GDAcLIAAoAgAgA0EEEAEiAkUNFgwBC0F/IQIMCQsgARACDAgLIAAoAgAgA0EEEAEiAkUNEwwBC0F/IQIMBQsgARACDAQLIAAoAgAgA0EEEAEiAkUNEAwBC0F/IQIMAQsgARACC0EEIQEgAyEAEAAhBSACQQFGDQMMAgtBBCEBIAMhABAAIQUgAkEBRg0CDAcLQQQhASADIQAQACEFIAJBAUYNAQwICyAEIAY2AgQCQAJAAkACQAJAAkACQAJAAkAgBkUEQEEFQeDzLCgCAE4EQEGgzi1BADYCAEHWAkG/tAFBgJ4iQQEQBSEGQaDOLSgCACEAQaDOLUEANgIAIABBAEdBpM4tKAIAIgFBAEdxDQIMAwtBAQwOCyAEKAIEIQBBoM4tQQA2AgBB7wIgABAGIQZBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiAUEAR3ENAwwECyAAKAIAIANBBBABIgJFDRIMAQtBfyECDAULIAEQAgwECyAAKAIAIANBBBABIgJFDQ8MAQtBfyECDAELIAEQAgtBBCEBIAMhABAAIQUgAkEBRg0CDAELQQQhASADIQAQACEFIAJBAUYNAQwECyAEIAY2AgACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBkUEQEGgzi1BADYCAEHwAiAEQQRqQQBBABAKQaDOLSgCACEBQaDOLUEANgIAIAFBAEdBpM4tKAIAIgVBAEdxDQEMAgsgBCgCBCEBQaDOLUEANgIAQfECIAFB8gJBnAEQBSEGQaDOLSgCACEBQaDOLUEANgIAIAFBAEdBpM4tKAIAIgNBAEdxDQQMBQsgASgCACAAQQQQASICRQ0BDAILQX8hAgwHCyABIAUQBAALIAUQAgwFCyABKAIAIABBBBABIgJFDQEMAgtBfyECDAILIAEgAxAEAAsgAxACC0EEIQEQACEFIAJBAUYNAwwBC0EEIQEQACEFIAJBAUYNAgwBCyAGQQEgAEEEEAshABAAIQFBACEFDAELAkACQAJAAkBBBUHg8ywoAgBOBEBBoM4tQQA2AgBB1gJB6PMBQYCeIkEBEAUhBkGgzi0oAgAhAEGgzi1BADYCACAAQQBHQaTOLSgCACIBQQBHcQ0BDAILQQEMBgsgACgCACADQQQQASICRQ0NDAELQX8hAgwBCyABEAILQQQhASADIQAQACEFIAJBAUcNAQsgBAJ/A0AgACEDAkACQAJAAkACQAJAAkACQAJAAkAgBQRAQaDOLUEANgIAQfACIARBBGogBEEAEApBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiBUEAR3ENAQwCCyAEKAIYIQBBoM4tQQA2AgBBvgIgABAIQaDOLSgCACEAQaDOLUEANgIAIABBAEdBpM4tKAIAIgVBAEdxDQMMBAsgACgCACADIAEQASICRQ0WDAELQX8hAgwFCyAFEAIMBAsgACgCACADIAEQASICRQ0TDAELQX8hAgwBCyAFEAILIAMhABAAIQUgAkEBRg0DDAELIAMhABAAIQUgAkEBRg0CDAELIAQoAgQhAiAEKAIYIQNBoM4tQQA2AgBB8wIgAiADEAlBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgVBAEdxBEAgAygCACAAIAEQASICRQ0QDAELQX8hAgwBCyAFEAILEAAhBSACQQFGDQEgBCgCBCECIAQoAgAhA0Ggzi1BADYCAEGJAyACIAMQCUGgzi0oAgAhA0Ggzi1BADYCAAJAAkAgA0EAR0Gkzi0oAgAiBUEAR3EEQCADKAIAIAAgARABIgJFDRAMAQtBfyECDAELIAUQAgsQACEFIAJBAUYNASAEKAIEIQIgBCgCACEDQaDOLUEANgIAQYUDIAIgAxAHIQZBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgVBAEdxBEAgAygCACAAIAEQASICRQ0QDAELQX8hAgwBCyAFEAILEAAhBSACQQFGDQEgBCAGNgIMIAQoAgQhAiAEKAIAIQNBoM4tQQA2AgBBhgMgAiADEAchBkGgzi0oAgAhA0Ggzi1BADYCAAJAAkAgA0EAR0Gkzi0oAgAiBUEAR3EEQCADKAIAIAAgARABIgJFDRAMAQtBfyECDAELIAUQAgsQACEFIAJBAUYNASAEQQRqIQIgBCAGNgIIIAQoAhQCfyAEKAIMs7tEj8L1KFyvQ0CjRAAAAAAAAOA/oCIHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAs2AgAgBCgCEAJ/IAQoAgizu0SPwvUoXK9DQKNEAAAAAAAA4D+gIgeZRAAAAAAAAOBBYwRAIAeqDAELQYCAgIB4CzYCAEGgzi1BADYCAEHwAiACIARBABAKQaDOLSgCACEDQaDOLUEANgIAAkACQCADQQBHQaTOLSgCACIFQQBHcQRAIAMoAgAgACABEAEiAkUNEAwBC0F/IQIMAQsgBRACCxAAIQUgAkEBRg0BIAQoAhghAkGgzi1BADYCAEG+AiACEAhBoM4tKAIAIQNBoM4tQQA2AgACQAJAIANBAEdBpM4tKAIAIgVBAEdxBEAgAygCACAAIAEQASICRQ0QDAELQX8hAgwBCyAFEAILEAAhBSACQQFGDQEgBEEANgIcIAAhAwwLCwJAAkACQAJAQQVB4PMsKAIATgRAQaDOLUEANgIAQdYCQaLXAkGAniJBARAFIQZBoM4tKAIAIQBBoM4tQQA2AgAgAEEAR0Gkzi0oAgAiBUEAR3ENAQwCC0EBDAULIAAoAgAgAyABEAEiAkUNEAwBC0F/IQIMAQsgBRACCyADIQAQACEFIAJBAUYNAAsgBgs2AhwMCAsgBgs2AhwMBgsgBgs2AhwMBAsgBgs2AhwMAgsgBgs2AhwLIAQoAhwaIAMQPSAEQSBqJAAPCyAAIAEQBAALIAMgBRAEAAsgACAFEAQAC8YCAQF/IwBBMGsiAiQAIAIgADYCKCACQQA2AiQgAkEANgIgIAJBADYCHCACIAE2AhggAkEANgIUIAIoAiQEQCACKAIkQQA2AgALIAIoAiAEQCACKAIgQQA2AgALIAIoAhwEQCACKAIcQQA2AgALIAIoAhgEQCACKAIYQQA2AgALIAIoAhQEQCACKAIUQQA2AgALAkAgAigCKEUEQCACAn9BBUHg8ywoAgBOBEBBy/sGQcGdIkEBEDoMAQtBAQs2AiwMAQsgAiACKAIoEIUFIgA2AgwgAEUEQCACAn9BBUHg8ywoAgBOBEBB+ZcHQcGdIkEBEDoMAQtBAQs2AiwMAQsgAiACKAIMIAIoAiQgAigCICACKAIcIAIoAhggAigCFBDRFzYCECACKAIMENwBGiACIAIoAhA2AiwLIAIoAiwaIAJBMGokAAuOAQEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEGWO0HhnCJBABA6DAELQQALNgIMDAELAkAgASgCCBBqQSBHDQAgASgCCBCHA0EERw0AIAEgASgCCBCgLDYCDAwBCyABIAEoAggQzAE2AgwLIAEoAgwhACABQRBqJAAgAAvNAgEGfyMAQaABayICJAADQCACQYgBahBrIQMgAkEgaiAAKAK02wgQcCIGEKIBA0ACQAJAIAYQkwEiBQRAIAUoAkgQwQRFDQMgACAFIAJBCGoQayIEEMYXIAQQTQ0CIAAoArTbCCAFELADQQAhASAEKAIAQQBMDQEDQAJAIAQgARA+KAIABEAgBCABED4oAgAgBUcNAQsgAkG8AzYCBCACQavmBjYCAEGMnSxB+f8KQQJB5cgGIAIQRQsgBSAEIAEQPigCAEEAEKoHIAFBAWoiASAEKAIASA0ACwwBCyADEE1FBEBBACEBIAMoAgBBAU4EQANAIAAgAyABED4oAgAQxxAgAUEBaiIBIAMoAgBIDQALCyAGEG4aIAMQXRoMBAsgBhBuGiADEF0aIAJBoAFqJAAPCyAGEJQDIAMgBRBfGgsgBBBdGgwAAAsAAAsAC4QEAQF/IwBB0ABrIgEkACABIAA2AkgCQCABKAJIRQRAIAECf0EFQeDzLCgCAE4EQEGWO0HQnCJBABA6DAELQQALNgJMDAELIAEoAkggAUFAayABQTxqIAFBOGoQfhogASgCOEEYRwRAIAECf0EFQeDzLCgCAE4EQEGczwxB0JwiQQAQOgwBC0EACzYCTAwBCyABIAEoAkAgASgCPEEgELAJNgIIIAEgASgCSBBjNgIUIAEgASgCCBBjNgIQIAEgASgCSBBnNgIsIAEgASgCCBBnNgIoIAFBADYCNANAIAEoAjQgASgCPE5FBEAgASABKAIUIAEoAjQgASgCLGxBAnRqNgJEIAEgASgCECABKAI0IAEoAihsQQJ0ajYCDCABQQA2AjADQCABKAIwIAEoAkBORQRAIAEgASgCRCIAQQFqNgJEIAEgAC0AADYCJCABIAEoAkQiAEEBajYCRCABIAAtAAA2AiAgASABKAJEIgBBAWo2AkQgASAALQAANgIcIAEoAiQgASgCICABKAIcIAFBGGoQvwQaIAEoAgwgASgCMEECdGogASgCGDYCACABIAEoAjBBAWo2AjAMAQsLIAEgASgCNEEBajYCNAwBCwsgASgCCCABKAJIEIkCIAEoAgggASgCSBCxAiABIAEoAgg2AkwLIAEoAkwhACABQdAAaiQAIAALyAMBA38jAEEgayIFJAACfwJAAkAgACgCsNsIRQRAQeKvCkEAEDsMAQsgAUEAIAIbDQFBucEKQQAQOwtBfwwBCyAAQcDbCGoiAxD8ASAAIAI2ArjbCCAAIAE2ArTbCCAAIAAoArDbCCgC4MYINgLU2wggBUEYahCDASECIAAgACgC2NsIQQFqNgLY2whByvwsLQAABEAgAEG9zwogAhCYDSACEEogACgCsNsIKALIxghBCBCDCAsgABC7LCAAEPArIAAQ6isgABDtKiAAEOkqIABBASAAEOAqIgEQpxcgAEEAIAEQpxdB6vwsLQAABEAgAEHi3wogAhCYDSAAIAIQzhcLIAMQTUUEQANAQQAhASAFEGshBCADKAIAQQBKBEADQCAAIAMgARA+KAIAEOArBEAgBCADIAEQPigCABBfGgsgAUEBaiIBIAMoAgBIDQALC0EAIQEgBCgCAEEASgRAA0AgACAEIAEQPigCABDHECABQQFqIgEgBCgCAEgNAAsLIAMgBBDfAyAEEF0aIAMQTUUNAAsLIAAQ2CtB+vwsLQAABEAgAEGb8AogAhCYDSAAIAIQzhcLIAIQRhpBAAshACAFQSBqJAAgAAuaAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEGWO0HAmyJBABA6DAELQQALNgIMDAELIAEoAggQakEBRwRAIAECf0EFQeDzLCgCAE4EQEGAywpBwJsiQQAQOgwBC0EACzYCDAwBCyABIAEoAghBAEEBEJINIgA2AgQgAEUEQCABAn9BBUHg8ywoAgBOBEBBh6wCQcCbIkEAEDoMAQtBAAs2AgwMAQsgAUEIEP4FNgIAIAEoAgBB/wFB/wFB/wEQnAQaIAEoAgBBAEEAQQAQnAQaIAEoAgQgASgCABDFBhogASgCBCABKAIIELECIAEgASgCBDYCDAsgASgCDCEAIAFBEGokACAAC+gHAgF/AXwjAEHQAGsiASQAIAEgADYCSCABQwAAAAA4AkQgAUMAAAAAOAJAIAFDAAAAADgCPAJAIAEoAkhFBEAgAQJ/QQVB4PMsKAIATgRAQZY7QcCaIkEAEDoMAQtBAAs2AkwMAQsgASgCSBBqQSBHBEAgAQJ/QQVB4PMsKAIATgRAQarYBUHAmiJBABA6DAELQQALNgJMDAELAkACQCABKgJEu0QAAAAAAAAAAGMNACABKgJAu0QAAAAAAAAAAGMNACABKgI8u0QAAAAAAAAAAGNFDQELIAECf0EFQeDzLCgCAE4EQEHV+wVBwJoiQQAQOgwBC0EACzYCTAwBCwJAIAEqAkS7RAAAAAAAAAAAYg0AIAEqAkC7RAAAAAAAAAAAYg0AIAEqAjy7RAAAAAAAAAAAYg0AIAFDmpmZPjgCRCABQwAAAD84AkAgAUPNzEw+OAI8CyABIAEqAkQgASoCQJIgASoCPJI4AggCfCABKgIIu0QAAAAAAADwP6FEAAAAAAAAAABjBEBEAAAAAAAA8L8gASoCCLtEAAAAAAAA8D+hogwBCyABKgIIu0QAAAAAAADwP6ELRC1DHOviNho/ZARAQQRB4PMsKAIATgRAQfjEKigCACEAIAFBwJoiNgIAIABBpZ8GIAEQVhoLIAEgASoCRCABKgIIlTgCRCABIAEqAkAgASoCCJU4AkAgASABKgI8IAEqAgiVOAI8CyABKAJIIAFBMGogAUEsakEAEH4aIAEgASgCSBBjNgIYIAEgASgCSBBnNgIoIAEgASgCMCABKAIsQQgQtAEiADYCBCAARQRAIAECf0EFQeDzLCgCAE4EQEGHrAJBwJoiQQAQOgwBC0EACzYCTAwBCyABKAIEIAEoAkgQiQIgASgCBCABKAJIELECIAEgASgCBBBjNgIQIAEgASgCBBBnNgIkIAFBADYCOANAIAEoAjggASgCLEgEQCABIAEoAhggASgCOCABKAIobEECdGo2AhQgASABKAIQIAEoAjggASgCJGxBAnRqNgIMIAFBADYCNANAIAEoAjQgASgCMEgEQCABIAEoAhQgASgCNEECdGooAgA2AhwgAQJ/IAEqAkQgASgCHCIAQRh2s5QgASoCQCAAQRB2Qf8BcbOUkiABKgI8IABBCHZB/wFxs5SSu0QAAAAAAADgP6AiAplEAAAAAAAA4EFjBEAgAqoMAQtBgICAgHgLNgIgIAEoAgwgASgCNGpBA3MgASgCIDoAACABIAEoAjRBAWo2AjQMAQsLIAEgASgCOEEBajYCOAwBCwsgASABKAIENgJMCyABKAJMIQAgAUHQAGokACAAC7YDAQF/IwBBMGsiAyQAIAMgADYCKCADIAE4AiQgAyACNgIgAkAgAygCKEUEQCADAn9BBUHg8ywoAgBOBEBB9TpB4JkiQQEQOgwBC0EBCzYCLAwBCyADKAIoEGpBIEcEQCADAn9BBUHg8ywoAgBOBEBBz9wGQeCZIkEBEDoMAQtBAQs2AiwMAQsgAygCIEGAgICABEsEQCADQYCAgIAENgIgCyADKAIoIANBFGogA0EQakEAEH4aIAMgAygCKBBjNgIEIAMgAygCKBBnNgIMIANBADYCHANAIAMoAhwgAygCEEgEQCADIAMoAgQgAygCHCADKAIMbEECdGo2AgAgA0EANgIYA0AgAygCGCADKAIUSARAIAMgAygCACADKAIYQQJ0aigCACADKAIgazYCCCADAn8gAygCCLIgAyoCJJQiAYtDAAAAT10EQCABqAwBC0GAgICAeAs2AgggAyADKAIgIAMoAghqNgIIIAMoAgAgAygCGEECdGogAygCCDYCACADIAMoAhhBAWo2AhgMAQsLIAMgAygCHEEBajYCHAwBCwsgA0EANgIsCyADKAIsGiADQTBqJAALCwBBCBA/IAAQ+CELvggBAX8jAEFAaiIDJAAgAyAANgI4IAMgATYCNCADIAI2AjACQCADKAI4RQRAIAMCf0EFQeDzLCgCAE4EQEH1OkGwmSJBABA6DAELQQALNgI8DAELIAMoAjgQakEgRwRAIAMCf0EFQeDzLCgCAE4EQEHP3AZBsJkiQQAQOgwBC0EACzYCPAwBCwJAIAMoAjBBCEYNACADKAIwQRBGDQAgAygCMEEgRg0AIAMCf0EFQeDzLCgCAE4EQEHm+gZBsJkiQQAQOgwBC0EACzYCPAwBCyADKAI0QYCAgIAESwRAIANBgICAgAQ2AjQLIAMoAjggA0EkaiADQSBqQQAQfhogAyADKAIkIAMoAiAgAygCMBC0ASIANgIAIABFBEAgAwJ/QQVB4PMsKAIATgRAQea/BkGwmSJBABA6DAELQQALNgI8DAELIAMoAgAgAygCOBCJAiADIAMoAjgQYzYCECADIAMoAgAQYzYCDCADIAMoAjgQZzYCHCADIAMoAgAQZzYCGAJAIAMoAjBBCEYEQCADQQA2AiwDQCADKAIsIAMoAiBORQRAIAMgAygCECADKAIsIAMoAhxsQQJ0ajYCCCADIAMoAgwgAygCLCADKAIYbEECdGo2AgQgA0EANgIoA0AgAygCKCADKAIkTkUEQCADIAMoAgggAygCKEECdGooAgAgAygCNGs2AhQgAwJ/QQBBACADKAIUSg0AGiADKAIUCzYCFCADAn9B/wFB/wEgAygCFEgNABogAygCFAs2AhQgAygCBCADKAIoakEDcyADKAIUOgAAIAMgAygCKEEBajYCKAwBCwsgAyADKAIsQQFqNgIsDAELCwwBCwJAIAMoAjBBEEYEQCADQQA2AiwDQCADKAIsIAMoAiBORQRAIAMgAygCECADKAIsIAMoAhxsQQJ0ajYCCCADIAMoAgwgAygCLCADKAIYbEECdGo2AgQgA0EANgIoA0AgAygCKCADKAIkTkUEQCADIAMoAgggAygCKEECdGooAgAgAygCNGs2AhQgAwJ/QQBBACADKAIUSg0AGiADKAIUCzYCFCADAn9B//8DQf//AyADKAIUSA0AGiADKAIUCzYCFCADKAIEIAMoAihBAXRqQQJzIAMoAhQ7AQAgAyADKAIoQQFqNgIoDAELCyADIAMoAixBAWo2AiwMAQsLDAELIANBADYCLANAIAMoAiwgAygCIE5FBEAgAyADKAIQIAMoAiwgAygCHGxBAnRqNgIIIAMgAygCDCADKAIsIAMoAhhsQQJ0ajYCBCADQQA2AigDQCADKAIoIAMoAiRORQRAIAMoAgQgAygCKEECdGogAygCCCADKAIoQQJ0aigCACADKAI0azYCACADIAMoAihBAWo2AigMAQsLIAMgAygCLEEBajYCLAwBCwsLCyADIAMoAgA2AjwLIAMoAjwhACADQUBrJAAgAAuHCQEBfyMAQZABayIBJAAgASAANgKIASABQQM2AoQBIAFDAACAPzgCgAEgAUEUNgJ8IAFBAjYCeAJAIAEoAogBRQRAIAECf0EFQeDzLCgCAE4EQEHq5ANBkJkiQQAQOgwBC0EACzYCjAEMAQsgASgCeEEASARAIAFBADYCeAsgASoCgAG7RAAAAAAAAAAAZQRAIAFDAACAPzgCgAELIAEgASgCiAEQvAQiADYCaCAARQRAIAECf0EFQeDzLCgCAE4EQEHlgwNBkJkiQQAQOgwBC0EACzYCjAEMAQsgASABKAKIARD6KzYCGCABKAIYIAFByABqQQAQ2hcgASABKAJoELwFNgIUIAFBAUEAIAEoAkhBAUYbNgJAIAFBADYCdANAIAEoAnQgASgCaEgEQCABIAEoAhggASgCdEECEJ8DIgA2AiggAARAAkAgASoCgAG7RAAAAAAAAPA/YgRAIAEgASgCKCABKgKAASABKgKAARCTBzYCJAwBCyABIAEoAigQzAE2AiQLAkAgASgCeARAIAEgASgCJCABKAJ4IAEoAkAQ4xc2AiAMAQsgASABKAIkEMwBNgIgCyABKAJ0RQRAIAEgASgCIBD6BTYCPAsgASgCFCABKAIgQQAQvQIgAUEoahBLIAFBJGoQSwsgASABKAJ0QQFqNgJ0DAELCyABQRhqENQDIAEoAhQQvAQgASgCaEcEQCABIAEoAhQQvAQ2AmhBBEHg8ywoAgBOBEBB+MQqKAIAIQAgASABKAJoNgIEIAFBkJkiNgIAIABBoZ4GIAEQVhoLIAEoAmhFBEAgAUEUahDUAyABAn9BBUHg8ywoAgBOBEBB5YMDQZCZIkEAEDoMAQtBAAs2AowBDAILCyABIAEoAmgQiwU2AiwgASABKAJoIAEoAoQBakEBayABKAKEAW02AlwgASABKAJ8NgJgIAFBADYCdCABQQA2AmwDQCABKAJ0IAEoAlxIBEAgASABKAJ8NgJkIAFBADYCRCABQQA2AnADQCABKAJwIAEoAoQBSAR/IAEoAmwgASgCaEgFQQALQQFxBEAgASgCFCABKAJsIAFB2ABqIAFB1ABqQQAQ0hAaIAEgASgCZCABKAJgIAEoAlggASgCVBCXAjYCMCABKAIsIAEoAjBBABCKBSABAn8gASgCRCABKAJUIAEoAnxqSgRAIAEoAkQMAQsgASgCVCABKAJ8ags2AkQgASABKAJkIAEoAlggASgCfGpqNgJkIAEgASgCbEEBajYCbCABIAEoAnBBAWo2AnAMAQsLIAEgASgCRCABKAJgajYCYCABIAEoAnRBAWo2AnQMAQsLIAEoAhQgASgCLBCELCABKAIsIAFB0ABqIAFBzABqEKYYIAEgASgCFCABKAJQIAEoAnxqIAEoAkwgASgCfGoQ+Ss2AhwgASgCHCABKAI8IAEoAjwQ5xcgAUE0aiABQThqIAEoAiwQky0gASgCHCABKAI0EO4KGiABKAI0ED0gAUEUahDUAyABIAEoAhw2AowBCyABKAKMASEAIAFBkAFqJAAgAAuKBgEBfyMAQdAAayIDJAAgAyAANgJIIAMgATYCRCADIAI2AkACQCADKAJIRQRAIAMCf0EFQeDzLCgCAE4EQEHkOkH3mCJBABA6DAELQQALNgJMDAELIAMgAygCSBC8BDYCOAJAIAMoAjgNACADKAJEDQAgAygCQA0AIAMCf0EFQeDzLCgCAE4EQEG5+ABB95giQQAQOgwBC0EACzYCTAwBCyADKAI4RQRAQQRB4PMsKAIATgRAQfjEKigCACEAIANB95giNgIAIABBv7MBIAMQVhoLIAMgAygCRCADKAJAQQEQtAE2AkwMAQsCQCADKAJEBEAgAygCQA0BCyADIAMoAkgQhiw2AhwgAygCHCADQcQAaiADQUBrEKYYIANBHGoQoAMCQCADKAJEBEAgAygCQA0BCyADAn9BBUHg8ywoAgBOBEBB2PIBQfeYIkEAEDoMAQtBAAs2AkwMAgsLIAMgAygCSEEAQQIQnwM2AhggAyADKAIYEGo2AjQgAyADKAIYEPoFNgIgIANBGGoQSyADIAMoAkQgAygCQCADKAI0ELQBIgA2AhQgAEUEQCADAn9BBUHg8ywoAgBOBEBB1qsCQfeYIkEAEDoMAQtBAAs2AkwMAQsgAygCFCADKAIgIAMoAiAQ5xcgAygCNEEBSgRAIAMoAhQQ7AoLIANBADYCPANAIAMoAjwgAygCOE5FBEACQCADKAJIIAMoAjwgA0EwaiADQSxqIANBKGogA0EkahCFLARAQQRB4PMsKAIASA0BQfjEKigCACEAIANB95giNgIQIABBsNYCIANBEGoQVhoMAQsgAyADKAJIIAMoAjxBAhCfAzYCGAJAIAMoAjRBAUYEQCADKAIUIAMoAjAgAygCLCADKAIoIAMoAiRBDiADKAIYQQBBABCsAQwBCyADKAIUIAMoAjAgAygCLCADKAIoIAMoAiRBDCADKAIYQQBBABCsAQsgA0EYahBLCyADIAMoAjxBAWo2AjwMAQsLIAMgAygCFDYCTAsgAygCTCEAIANB0ABqJAAgAAvwAwEBfyMAQTBrIgEkACABIAA2AigCQCABKAIoRQRAIAECf0EFQeDzLCgCAE4EQEHEqwJB4JgiQQAQOgwBC0EACzYCLAwBCyABIAEoAigQvAQiADYCICAARQRAIAECf0EFQeDzLCgCAE4EQEHZ5QtB4JgiQQAQOgwBC0EACzYCLAwBCyABKAIoIAFBGGoQ+ysCQCABKAIYBEAgASABKAIgELwFNgIIIAFBADYCJANAIAEoAiQgASgCIE5FBEAgASABKAIoIAEoAiRBAhCfAzYCDCABIAEoAgwQlQc2AhAgASgCCCABKAIQQQAQvQIgAUEMahBLIAEgASgCJEEBajYCJAwBCwsMAQsgASABKAIoEN0XNgIICyABKAIIIAFBFGogAUEcahDaFwJAIAEoAhxFBEAgASABKAIgELwFNgIEIAFBADYCJANAIAEoAiQgASgCIE5FBEAgASABKAIIIAEoAiRBAhCfAzYCDAJAIAEoAhRBCEwEQCABIAEoAgxBABDwAzYCEAwBCyABIAEoAgwQlQc2AhALIAEoAgQgASgCEEEAEL0CIAFBDGoQSyABIAEoAiRBAWo2AiQMAQsLDAELIAEgASgCCBDdFzYCBAsgAUEIahDUAyABIAEoAgQ2AiwLIAEoAiwhACABQTBqJAAgAAuVAgEBfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkAgAigCFEUEQCACAn9BBUHg8ywoAgBOBEBBusgLQaCYIkEBEDoMAQtBAQs2AhwMAQsgAigCFEEANgIAIAIoAhhFBEAgAgJ/QQVB4PMsKAIATgRAQZ/WAkGgmCJBARA6DAELQQELNgIcDAELIAIgAigCGBC8BDYCDCACQQA2AhADQCACKAIQIAIoAgxIBEAgAiACKAIYIAIoAhBBAhCfAzYCCCACIAIoAggQyQE2AgQgAkEIahBLIAIoAgQEQCACKAIUQQE2AgAgAkEANgIcDAMFIAIgAigCEEEBajYCEAwCCwALCyACQQA2AhwLIAIoAhwaIAJBIGokAAt6AQF/IwBBEGsiAiQAIAIgADYCCCACIAE4AgQCQCACKAIIRQRAIAICf0EFQeDzLCgCAE4EQEGxqwJBkJgiQQEQOgwBC0EBCzYCDAwBCyACKAIIEJMNIAIqAgQgAigCCBDbFxD1KyACQQA2AgwLIAIoAgwaIAJBEGokAAukAQEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCCEUEQCACAn9BBUHg8ywoAgBOBEBBsasCQfqXIkEBEDoMAQtBAQs2AgwMAQsgAigCBEUEQCACAn9BBUHg8ywoAgBOBEBBorMBQfqXIkEBEDoMAQtBAQs2AgwMAQsgAigCCBCTDSACKAIEQQIQ2RcgAkEANgIMCyACKAIMGiACQRBqJAALewEBfyMAQRBrIgEkACABIAA2AgggAUEINgIEAkAgASgCCEUEQCABAn9BBUHg8ywoAgBOBEBBsasCQbuXIkEAEDoMAQtBAAs2AgwMAQsgASABKAIIEJMNIAEoAggQ2xcgASgCBBD3KzYCDAsgASgCDCEAIAFBEGokACAAC4EBAQF/IwBBEGsiASQAIAEgADYCDAJAIAEoAgxFBEBBBEHg8ywoAgBIDQFB+MQqKAIAIQAgAUGtlyI2AgAgAEGj8gEgARBWGgwBCyABIAEoAgwoAgAiADYCCCAARQ0AIAEoAghBDGoQSyABKAIIED0gASgCDEEANgIACyABQRBqJAALgwIBAX8jAEEgayICJAAgAiAANgIYIAIgATYCFCACQQE2AhAgAkEBQRAQdiIANgIMAkAgAEUEQCACAn9BBUHg8ywoAgBOBEBBwzpBoJciQQAQOgwBC0EACzYCHAwBCyACKAIMIAIoAhg2AgAgAigCDCACKAIUNgIEIAIoAhggAigCFEEgELQBIQAgAigCDCAANgIMIABFBEAgAgJ/QQVB4PMsKAIATgRAQZT4AEGglyJBABA6DAELQQALNgIcDAELIAIoAhAEQCACKAIMQYCAgIAENgIIIAIoAgwoAgwgAigCDCgCCBDrCgsgAiACKAIMNgIcCyACKAIcIQAgAkEgaiQAIAALwQUBAX8jAEHQAGsiASQAIAEgADYCSAJAIAEoAkhFBEAgAQJ/QQVB4PMsKAIATgRAQa3gCEGBlyJBABA6DAELQQALNgJMDAELIAEoAkghACABIAFBNGo2AiAgAEH6zgwgAUEgahC2BkEBRwRAIAECf0EFQeDzLCgCAE4EQEHR2gxBgZciQQAQOgwBC0EACzYCTAwBCyABKAI0QQJHBEAgAQJ/QQVB4PMsKAIATgRAQYzoDEGBlyJBABA6DAELQQALNgJMDAELIAEoAkghACABIAFBxABqNgIQIABB1vQMIAFBEGoQtgZBAUcEQCABAn9BBUHg8ywoAgBOBEBB0doMQYGXIkEAEDoMAQtBAAs2AkwMAQsgASABKAJIEJUtIgA2AiwgAEUEQCABAn9BBUHg8ywoAgBOBEBBlLMBQYGXIkEAEDoMAQtBAAs2AkwMAQsgASABKAJEELwFIgA2AiQgAEUEQCABQSxqEKADIAECf0EFQeDzLCgCAE4EQEG1OkGBlyJBABA6DAELQQALNgJMDAELIAEoAiRBEGoQoAMgASgCJCABKAIsNgIQIAFBADYCQANAIAEoAkAgASgCREgEQCABKAJIIQAgASABQThqNgIIIAEgAUE8ajYCBCABIAFBMGo2AgAgAEHt/wwgARC2BkEDRwRAIAFBJGoQ1AMgAQJ/QQVB4PMsKAIATgRAQYKMDUGBlyJBABA6DAELQQALNgJMDAMLIAEgASgCSBDSFyIANgIoIAAEQCABKAIoIAEoAjwQrgkaIAEoAiggASgCOBCsCRogASgCJCABKAIoQQAQvQIgASABKAJAQQFqNgJADAIFIAFBJGoQ1AMgAQJ/QQVB4PMsKAIATgRAQZeWDUGBlyJBABA6DAELQQALNgJMDAMLAAsLIAEgASgCJDYCTAsgASgCTCEAIAFB0ABqJAAgAAvrAQEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEHnqQxB+JYiQQAQOgwBC0EACzYCDAwBCyABIAEoAggQhQUiADYCBCAARQRAIAECf0EFQeDzLCgCAE4EQEHvtQxB+JYiQQAQOgwBC0EACzYCDAwBCyABIAEoAgQQgSwiADYCACAARQRAIAEoAgQQ3AEaIAECf0EFQeDzLCgCAE4EQEGNwgxB+JYiQQAQOgwBC0EACzYCDAwBCyABKAIEENwBGiABIAEoAgA2AgwLIAEoAgwhACABQRBqJAAgAAu1AQEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEGJuARB7pYiQQEQOgwBC0EBCzYCDAwBCyABIAEoAggQvAQ2AgAgAUEANgIEA0AgASgCBCABKAIASARAIAEoAggoAgwgASgCBEECdGoQSyABIAEoAgRBAWo2AgQMAQsLIAEoAghBADYCACABIAEoAggoAhAQli02AgwLIAEoAgwaIAFBEGokAAueAgEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEIAJBADYCAAJAIAIoAghFBEAgAgJ/QQVB4PMsKAIATgRAQYm4BEHTliJBARA6DAELQQELNgIMDAELIAIoAgRFBEAgAgJ/QQVB4PMsKAIATgRAQbSDA0HTliJBARA6DAELQQELNgIMDAELAkAgAigCAEUNACACKAIAQQFGDQAgAigCAEECRg0AIAICf0EFQeDzLCgCAE4EQEHWzQdB05YiQQEQOgwBC0EBCzYCDAwBCyACKAIIQRBqEKADAkAgAigCAEUEQCACKAIIIAIoAgQ2AhAMAQsgAigCBCACKAIAELYJIQAgAigCCCAANgIQCyACQQA2AgwLIAIoAgwaIAJBEGokAAvyAgEBfyMAQSBrIgYkACAGIAA2AhggBiABNgIUIAYgAjYCECAGIAM2AgwgBiAENgIIIAYgBTYCBCAGKAIQBEAgBigCEEEANgIACyAGKAIMBEAgBigCDEEANgIACyAGKAIIBEAgBigCCEEANgIACyAGKAIEBEAgBigCBEEANgIACwJAIAYoAhhFBEAgBgJ/QQVB4PMsKAIATgRAQYm4BEHAliJBARA6DAELQQELNgIcDAELAkAgBigCFEEATgRAIAYoAhQgBigCGCgCAEgNAQsgBgJ/QQVB4PMsKAIATgRAQam/BkHAliJBARA6DAELQQELNgIcDAELIAYgBigCGCAGKAIUQQIQ0xAiADYCACAARQRAIAYCf0EFQeDzLCgCAE4EQEG/sAdBwJYiQQEQOgwBC0EBCzYCHAwBCyAGKAIAIAYoAhAgBigCDCAGKAIIIAYoAgQQ8gMgBhDhASAGQQA2AhwLIAYoAhwhACAGQSBqJAAgAAvuAQEBfyMAQRBrIgEkACABIAA2AgggAUECNgIEAkAgASgCCEUEQCABAn9BBUHg8ywoAgBOBEBBibgEQYWWIkEAEDoMAQtBAAs2AgwMAQsgASgCCCgCEEUEQCABAn9BBUHg8ywoAgBOBEBBtIMDQYWWIkEAEDoMAQtBAAs2AgwMAQsCQCABKAIEQQFGDQAgASgCBEECRg0AIAEoAgRBA0YNACABAn9BBUHg8ywoAgBOBEBBx5YHQYWWIkEAEDoMAQtBAAs2AgwMAQsgASABKAIIKAIQIAEoAgQQtgk2AgwLIAEoAgwhACABQRBqJAAgAAvoAQEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCCEUEQCACAn9BBUHg8ywoAgBOBEBBibgEQaCVIkEBEDoMAQtBAQs2AgwMAQsgAigCBCACKAIIKAIESgRAIAIoAghBDGogAigCCCgCBEECdCACKAIEQQJ0EJQEIQAgAigCCCAANgIMIABFBEAgAgJ/QQVB4PMsKAIATgRAQfedBkGglSJBARA6DAELQQELNgIMDAILIAIoAgggAigCBDYCBAsgAiACKAIIKAIQIAIoAgQQqRg2AgwLIAIoAgwhACACQRBqJAAgAAtnAQF/IwBBEGsiASQAIAEgADYCCAJAIAEoAghFBEAgAQJ/QQVB4PMsKAIATgRAQYm4BEGgliJBABA6DAELQQALNgIMDAELIAEgASgCCCgCEBCxAzYCDAsgASgCDCEAIAFBEGokACAAC2wBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCEUEQCABAn9BBUHg8ywoAgBOBEBBibgEQZCXIkEBEDoMAQtBAQs2AgwMAQsgASABKAIIIAEoAggoAgRBAXQQhyw2AgwLIAEoAgwaIAFBEGokAAu+CQEBfyMAQdAAayIDJAAgAyAANgJIIAMgATYCRCADIAI2AkAgAygCRARAIAMoAkRBADYCAAsgAygCQARAIAMoAkBBADYCAAsCQAJAIAMoAkQNACADKAJADQAgAwJ/QQVB4PMsKAIATgRAQaE6QZCUIkEBEDoMAQtBAQs2AkwMAQsCQCADKAJIBEAgAygCSBBqQQFGDQELIAMCf0EFQeDzLCgCAE4EQEH08QFBkJQiQQEQOgwBC0EBCzYCTAwBCyADKAJIIANBPGogA0E4akEAEH4aIAMgAygCPEEgbTYCMCADIAMoAjxBH3E2AiwgA0EAIAMoAixrQQJ0QfCKImooAgBBf3M2AgwgAyADKAJIEGc2AjQgAyADKAJIEGM2AgggA0EANgIQIANBADYCKCADQQA2AhwDQAJAIAMoAiggAygCOE4NACADIAMoAgggAygCKCADKAI0bEECdGo2AgQgA0EANgIkA0AgAygCJCADKAIwTkUEQCADIAMoAgQgAygCJEECdGooAgAgAygCEHI2AhAgAyADKAIkQQFqNgIkDAELCyADKAIsBEAgAyADKAIQIAMoAgQgAygCJEECdGooAgAgAygCDHFyNgIQCyADKAIQDQAgAyADKAIoQQFqNgIoIAMgAygCHEEBajYCHAwBCwsgAygCHCADKAI4RgRAIANBATYCTAwBCyADQQA2AhAgAyADKAI4QQFrNgIoIAMgAygCOEEBazYCFANAAkAgAygCKEEASA0AIAMgAygCCCADKAIoIAMoAjRsQQJ0ajYCBCADQQA2AiQDQCADKAIkIAMoAjBORQRAIAMgAygCBCADKAIkQQJ0aigCACADKAIQcjYCECADIAMoAiRBAWo2AiQMAQsLIAMoAiwEQCADIAMoAhAgAygCBCADKAIkQQJ0aigCACADKAIMcXI2AhALIAMoAhANACADIAMoAihBf2o2AiggAyADKAIUQX9qNgIUDAELCyADQQA2AiAgA0EANgIkIANBADYCIANAAkAgAygCJCADKAI8Tg0AIANBADYCKANAIAMoAiggAygCOEgEQCADIAMoAgggAygCKCADKAI0bEECdGo2AgQgAygCBCADKAIkQQV1QQJ0aigCAEEfIAMoAiRBH3FrdkEBcQ0CIAMgAygCKEEBajYCKAwBCwsgAyADKAIkQQFqNgIkIAMgAygCIEEBajYCIAwBCwsgAyADKAI8QQFrNgIkIAMgAygCPEEBazYCGANAAkAgAygCJEEASA0AIANBADYCKANAIAMoAiggAygCOEgEQCADIAMoAgggAygCKCADKAI0bEECdGo2AgQgAygCBCADKAIkQQV1QQJ0aigCAEEfIAMoAiRBH3FrdkEBcQ0CIAMgAygCKEEBajYCKAwBCwsgAyADKAIkQX9qNgIkIAMgAygCGEF/ajYCGAwBCwsgAyADKAIgIAMoAhwgAygCGCADKAIga0EBaiADKAIUIAMoAhxrQQFqEJcCNgIAIAMoAkQEQCADKAJIIAMoAgAQ1QMhACADKAJEIAA2AgALAkAgAygCQARAIAMoAkAgAygCADYCAAwBCyADEOEBCyADQQA2AkwLIAMoAkwhACADQdAAaiQAIAALoQgBAX8jAEHQAGsiASQAIAEgADYCSCABQQE2AkQCQCABKAJIRQRAIAECf0EFQeDzLCgCAE4EQEGQOkHQkyJBABA6DAELQQALNgJMDAELIAEgASgCSBBqNgIwIAEoAjBBEEoEQCABAn9BBUHg8ywoAgBOBEBB1/cAQdCTIkEAEDoMAQtBAAs2AkwMAQsgASgC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IAJBADYCbANAIAIoAmwgAigCfEgEQAJAIAIoAmwgAigCqAFqQQBIDQAgAigCbCACKAKoAWogAigCoAFODQAgAiACKAI4IAIoAnggAigCbCACKAKoAWpsQQJ0ajYCLCACIAIoAjQgAigCbCACKAJ0bEECdGo2AiggAiACKAIwIAIoAmwgAigCcGxBAnRqNgIkIAJBADYCaANAIAIoAmggAigCgAFIBEACQCACKAJoIAIoAqwBakEASA0AIAIoAmggAigCrAFqIAIoAqQBTg0AIAIgAigCJCACKAJoakEDcy0AADYCZCACKAJkRQ0AIAIgAigCZLK7RAAAAAAA4G9Ao7Y4AiACQCACKAKcAUEIRgRAIAIgAigCLCACKAJoIAIoAqwBampBA3MtAAA2AmAgAiACKAIoIAIoAmhqQQNzLQAANgJcIAICf0QAAAAAAADwPyACKgIgIgO7oSACKAJgt6IgAyACKAJcspS7oCIEmUQAAAAAAADgQWMEQCAEqgwBC0GAgICAeAs2AmAgAigCLCACKAJoIAIoAqwBampBA3MgAigCYDoAAAwBCyACQUBrIQAgAiACKAIsIAIoAmhBAnRqIAIoAqwBQQJ0aigCADYCQCACIAIoAiggAigCaEECdGooAgA2AjwgAigCQCACQdgAaiACQdQAaiACQdAAahCWByACKAI8IAJBzABqIAJByABqIAJBxABqEJYHIAICf0QAAAAAAADwPyACKgIgIgO7oSACKAJYt6IgAyACKAJMspS7oCIEmUQAAAAAAADgQWMEQCAEqgwBC0GAgICAeAs2AlggAgJ/RAAAAAAAAPA/IAIqAiAiA7uhIAIoAlS3oiADIAIoAkiylLugIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CzYCVCACAn9EAAAAAAAA8D8gAioCICIDu6EgAigCULeiIAMgAigCRLKUu6AiBJlEAAAAAAAA4EFjBEAgBKoMAQtBgICAgHgLNgJQIAIoAlggAigCVCACKAJQIAAQvwQaIAIoAiwgAigCaEECdGogAigCrAFBAnRqIAIoAkA2AgALCyACIAIoAmhBAWo2AmgMAQsLCyACIAIoAmxBAWo2AmwMAQsLIAJBDGoQSyACQRBqEEsgAiACKAIINgK8AQsgAigCvAEhACACQcABaiQAIAALgAEBAX8jAEEQayIB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QEGLlghBgPwhQQAQOgwBC0EACzYCjAEMAQsgAkEQNgJwA0AgAigCcCACKAI4SQRAIAIgAigCgAEgAigCcEEIa2otAABBGHQ2AmggAiACKAJoIAIoAoABIAIoAnBBB2tqLQAAQRB0ajYCaCACIAIoAmggAigCgAEgAigCcEEGa2otAABBCHRqNgJoIAIgAigCgAEgAigCcEEFa2otAAAgAigCaGo2AmggAigCcCACKAJoaiACKAI4TwRAIAIoAoABED0gAigCfBA9IAJBKGoQtQlBBUHg8ywoAgBOBEBB+MQqKAIAIQAgAigCcCEBIAIoAmghAyACIAIoAjg2AgwgAiADNgIIIAIgATYCBCACQYD8ITYCACAAQeuvCCACEFYaCyACQQA2AowBDAMLIAIoAoABIAIoAnBqQXxqQfDGCEEEEIAFRQRAIAIoAnwgAigCPGogAigCgAEgAigCcGogAigCaBBYGiACIAIoAmggAigCPGo2AjwLAkAgAigCSEUNACACKAIoDQAgAigCgAEgAigCcGpBfGpBm98IQQQQgAUNACACKAJoQQNuQQEgAigCWHRLBEAgAigCgAEQPSACKAJ8ED0gAkEoahC1CUEFQeDzLCgCAE4EQEH4xCooAgAhACACKAJwIQEgAigCaCEDIAJBASACKAJYdDYCHCACIAM2AhggAiABNgIUIAJBgPwhNgIQIABBuvQIIAJBEGoQVhoLIAJBADYCjAEMBAsgAiACKAJYEP4FNgIoIAIgAigCcDYCbANAIAIoAmwgAigCcCACKAJoak9FBEAgAigCKCACKAKAASACKAJsai0AACACKAKAASACKAJsQQFqai0AACACKAKAASACKAJsQQJqai0AABCcBBogAiACKAJsQQNqNgJsDAELCwsgAiACKAJoIAIoAnBqNgJwIAIgAigCcEEMajYCcAwBCwsgAigCgAEQPSACKAI8RQRAIAIoAnwQPSACQShqELUJIAICf0EFQeDzLCgCAE4EQEHXiQlBgPwhQQAQOgwBC0EACzYCjAEMAQsgAkEANgJcIAIoAigEQCACKAIoQQMgAkHcAGogAkH4AGoQ4RAgAkEoahC1CSACKAJ4RQRAIAIoAnwQPSACAn9BBUHg8ywoAgBOBEBB1p0JQYD8IUEAEDoMAQtBAAs2AowBDAILIAIgAigCeCACKAJcEJkY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AygCYEEBajYCYAwBCwsLIAMoAhggAygCIBDfLCADQShqEL0FIAMgAygCZEEBajYCZAwBCwsgAyADKAIcEK4sNgJ0IANBiCcQmw02AkAgA0EAEIYINgIsIANBADYCZANAIAMoAmQgAygCVEgEQCADIAMoAogBIAMoAmQQjQ02AkQgAyADKAJEIANByABqELIJNgJsIAMgAygCJCADKAJkEP0XNgI0IAMgAygCGCADKAJkENssNgIgIAMgAygCNBD7BUEBazYCWCADIAMoAjQQxiw2AjAgAyADKAIwEPAKNgJQIAMgAygCNBDwCjYCTCADKAJkRQRAIAMoAkAgAygCbCADKAJQKAIAEIcIIAMoAkAgAygCbCADKAJMKAIEaiADKAJQKAIEEIcIIAMoAkAgAygCbCADKAJMKAIIaiADKAJQKAIIEIcIIAMoAkAgAygCdBD8BSADQQA2AmADQCADKAJgQQRIBEAgAygCLCADKAJMIAMoAmBBAnRqKAIAtxCVAyADIAMoAmBBAWo2AmAMAQsLCyADQQQ2AmADQCADKAJgIAMoAlhIBEAgAygCLCADKAJAEJoNuBCVAyADIAMoAmwgAygCTCADKAJgQQJ0aigCAGogAygCUCADKAJgQQJ0aigCABCHGDYCPCADIAMoAjwgAygCIBCtLDYCOCADIAMoAjggA0HIAGoQsgk2AmggAygCQCADKAJoIAMoAkgQhwggA0E8ahCzCSADQThqELMJIAMgAygCYEEBajYCYAwBCwsgAygCZCADKAJUQQFrRgRAIAMoAiwgAygCQBCaDbgQlQMLIAMoAlAQPSADKAJMED0gA0E0ahC9BSADQSBqEMUDIANBMGoQvQUgAyADKAJkQQFqNgJkDAELCyADIAMoAiwQ8xc2AnAgAygCQCADKAJwEPwFIAMoAkAgAygCfBCGGCEAIAMoAoABIAA2AgAgA0FAaxCzCSADQRxqEMUDIANBGGoQjRggA0EsahC9BSADQSRqEPwXIAMoAnQQPSADKAJwED0gA0EANgKMAQsgAygCjAEhACADQZABaiQAIAALzgcBAX8jAEFAaiIDJAAgAyAANgI4IAMgATYCNCADIAI2AjACQCADKAI4RQRAIAMCf0EFQeDzLCgCAE4EQEG8OUGAgCJBARA6DAELQQELNgI8DAELIAMoAjhBADYCACADKAI0RQRAIAMCf0EFQeDzLCgCAE4EQEHh9gBBgIAiQQEQOgwBC0EBCzYCPAwBCyADIAMoAjAoAkwgAygCMCgCLBByajYCECADKAI0IAMoAhA2AgAgAyADKAIQQQEQdiIANgIoIABFBEAgAwJ/QQVB4PMsKAIATgRAQZHhDkGAgCJBARA6DAELQQELNgI8DAELIAMoAjggAygCKDYCACADIAMoAjAoAkQQ8Ao2AhggAyADKAIwKAJIEPAKNgIUIAMoAiggAygCMCgCECADKAIYKAIAEFgaIAMoAiggAygCFCgCBGogAygCMCgCFCADKAIYKAIEEFgaIAMoAiggAygCFCgCCGogAygCMCgCGCADKAIYKAIIEFgaIAMoAiggAygCFCgCDGogAygCMCgCHCADKAIYKAIMEFgaIAMoAiggAygCFCgCEGogAygCMCgCICADKAIYKAIQEFgaIAMoAiggAygCFCgCFGogAygCMCgCJCADKAIYKAIUEFgaIAMgAygCMCgCBDYCJCADQQA2AiADQCADKAIgIAMoAiRIBEAgAyADKAIwIAMoAiAQ2hAiADYCDCAABEAgAyADKAIwKAI8IAMoAiAQlwQ2AiwgAyADKAIsEHI2AhwgAygCKCADKAIUIAMoAiBBBmpBAnRqKAIAaiADKAIsIAMoAhwQWBogAygCHCADKAIoIAMoAhQgAygCIEEGakECdGooAgBqaiADKAIMKAIEIAMoAgwoAggQWBogAygCDCgCCCADKAIcIAMoAiggAygCFCADKAIgQQZqQQJ0aigCAGpqaiADKAIwKAIoIAMoAjAoAigQchBYGiADIAMoAiBBAWo2AiAMAgUgAygCGBA9IAMoAhQQPSADAn9BBUHg8ywoAgBOBEBB6/cNQYCAIkEBEDoMAQtBAQs2AjwMAwsACwsgA0EANgIgA0AgAygCICADKAIwKAIITkUEQCADIAMoAjAoAkAgAygCIBCXBDYCLCADKAIoIAMoAhQgAygCICADKAIkQQZqakECdGooAgBqIAMoAiwgAygCLBByEFgaIAMgAygCIEEBajYCIAwBCwsgAygCKCADKAIwKAJMaiADKAIwKAIsIAMoAjAoAiwQchBYGiADKAIYED0gAygCFBA9IANBADYCPAsgAygCPCEAIANBQGskACAAC9kBAQF/IwBBIGsiASQAIAEgADYCHCAB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IQIgASgCOEEBaiEDIAEgASgCOEEGajYCBCABIAM2AgAgACACQdHLDSABENABGiABKAIsIAEoAkRBARCTAiABIAEoAjhBAWo2AjgMAQsLIAEgASgCLEEAEKQJNgJAIAFBLGoQhgMgASgCQEUEQCABKAJEED0gAQJ/QQVB4PMsKAIATgRAQYfUDUHw/iFBARA6DAELQQELNgJMDAELIAEoAkQhACABKAI8IQIgASgCNCEDIAEoAjAhBCABIAEoAkA2AiAgASAENgIcIAEgAzYCGCABQQA2AhQgAUEANgIQIAAgAkHF2w0gAUEQahDQARogASgCRBDYASEAIAEoAkggADYCICABKAJIIgAoAkQgACgCIBByuBCVAyABQSxqEIYDIAEoAkQQPSABKAJAED0gAUEANgJMCyABKAJMGiABQdAAaiQAC+ADAgF/AXwjAEEgayIBJAAgASAANgIcIAFDAAAAADgCACABQwAAAAA4AgQgAUEANgIYA0AgASgCGCABKAIcKAIETkUEQCABKAIcKAIwIAEoAhggAUEUaiABQRBqEKkJIAEoAhwoAjQgASgCGCABQQxqIAFBCGoQqQkgAQJ9IAEqAgQgASoCFCABKgIMkl4EQCABKgIEDAELIAEqAhQgASoCDJILOAIEIAECfSABKgIAIAEqAhAgASoCCJJeBEAgASoCAAwBCyABKgIQIAEqAgiSCzgCACABIAEoAhhBAWo2AhgMAQsLQQBBAAJ/IAEqAgS7RAAAAAAAAOA/oCICmUQAAAAAAADgQWMEQCACqgwBC0GAgICAeAsCfyABKgIAu0QAAAAAAADgP6AiAplEAAAAAAAA4EFjBEAgAqoMAQtBgICAgHgLEJcCIQAgASgCHCAANgI4IAFBADYCGANAIAEoAhggASgCHCgCBE5FBEAgASgCHCgCMCABKAIYIAFBFGogAUEQahCpCSABKAIcKAI0IAEoAhggAUEMaiABQQhqEKkJIAEoAhwoAjAgASgCGCABKgIUIAEqAgAgASoCEJMgASoCCJMQ4SsgASABKAIYQQFqNgIYDAELCyABQSBqJAALtAQBAX8jAEHgAmsiASQAIAEgADYC3AJByYwMENgBIQAgASgC3AIgADYCECABKALcAiIAKAJEIAAoAhAQcrgQlQNB9ZsMENgBIQAgASgC3AIgADYCFCABKALcAiIAKAJEIAAoAhQQcrgQlQMgAUEAENsENgJEIAEoAkRB+agMQQEQkwICQEHw8SwoAgAEQCABELMXNgJIIAEgASgCSDYCICABQdAAakGAAkGMtQwgAUEgahDQARogASgCRCABQdAAaiIAQQEQkwIgASgCSBA9IAEQ8yo2AkwgASABKAJMNgIwIABBgAJBxcEMIAFBMGoQ0AEaIAEoAkwQPQwBCyABQdAAakGAAkGPzgxBABDQARoLIAEoAkQgAUHQAGpBARCTAiABKALcAigCAARAIAEgASgC3AIoAgAQpywiADYCQAJAIAAEQCABIAEoAkA2AgAgAUHQAGpBgAJBhdoMIAEQ0AEaIAEoAkQgAUHQAGpBARCTAgwBC0EFQeDzLCgCAE4EQEH4xCooAgAhACABQbD+ITYCECAAQaXnDCABQRBqEFYaCwsgASgCQBA9CyABKAJEQe3zDEEBEJMCIAEoAkRBABCkCSEAIAEoAtwCIAA2AhggASgC3AIiACgCRCAAKAIYEHK4EJUDIAFBxABqEIYDQfL+DBDYASEAIAEoAtwCIAA2AhwgASgC3AIiACgCRCAAKAIcEHK4EJUDQa6LDRDYASEAIAEoAtwCIAA2AiggAUHgAmokAAvUAQEBfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkAgAigCGEUEQCACAn9BBUHg8ywoAgBOBEBBoOoKQZD+IUEAEDoMAQtBAAs2AhwMAQsgAigCGBBqQQFHBEAgAgJ/QQVB4PMsKAIATgRAQejxC0GQ/iFBABA6DAELQQALNgIcDAELIAIQrBc2AhAgAigCECACKAIYQQgQgwggAiACKAIQIAIoAhQQqCw2AgwgAigCEBCtFyACKAIQED0gAiACKAIMNgIcCyACKAIcIQAgAkEgaiQAIAALpgIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhACQCADKAIYRQRAIAMCf0EFQeDzLCgCAE4EQEGg6gpB8P0hQQAQOgwBC0EACzYCHAwBCyADKAIYEMkBBEAgAwJ/QQVB4PMsKAIATgRAQZPVC0Hw/SFBABA6DAELQQALNgIcDAELIAMgAygCGBBqNgIMAkAgAygCDEEIRg0AIAMoAgxBIEYNACADAn9BBUHg8ywoAgBOBEBB1uQLQfD9IUEAEDoMAQtBAAs2AhwMAQsgAxCsFzYCCCADKAIIIAMoAhggAygCEBDDLCADIAMoAgggAygCFBDyFzYCBCADKAIIEK0XIAMoAggQPSADIAMoAgQ2AhwLIAMoAhwhACADQSBqJAAgAAupAwEHfyMAQaABayICJAAgAEGoBGpBARCKAyAAQbgEakEAEIoDIAAoArDbCEHgC2ooAgwhBiAAKAKw2whBkAxqKAIMIQcgACgCsNsIQeALakEAEN4BIAAoArDbCEGQDGpBABDeASACQThqIAAoArTbCBBwIgQQogEgBBCTASIBBEADQCABKAJIEMEEBEAgARClLCACQSBqIAEQ0QIQQCEBIAJBCGoQayEDIAJBIGoQQSACQSBqEDxFBEADQCABEGYoAjBBBUcEQCADIAEQZhBCEE4QXxoLIAEQbBogAkEgahA8RQ0ACwsgAxDEAyADIAMoAgBBAm0QPigCAEEDbSEFIAJBIGoQQSACQSBqEDxFBEAgBUEBdCEFA0AgARBmKAIwQQVHBEAgACABEGYgBRCLLQsgARBsGiACQSBqEDxFDQALCyADEF0aCyAEEJMBIgENAAsLIAAoArDbCEHgC2ogBhDeASAAKAKw2whBkAxqIAcQ3gFB2vwsLQAABEAgAEGBgQogAkEgahCDASIBEJgNIAAgARCdLCABEEYaCyAEEG4aIAJBoAFqJAALowQBAX8jAEEgayIBJAAgASAANgIcAkAgASgCHEUEQEEEQeDzLCgCAEgNAUH4xCooAgAhACABQeqAIjYCACAAQeysCyABEFYaDAELIAEgASgCHCgCACIANgIQIABFDQAgASgCECgCAARAIAEoAhAoAgAQPQsgAUEANgIYA0AgASgCGCABKAIQKAIETkUEQCABIAEoAhAoAgwgASgCGBCnCTYCFCABQRRqELEJIAEgASgCGEEBajYCGAwBCwsgASgCEEEMahCODSABKAIQKAIQBEAgASgCECgCEBA9CyABKAIQKAIUBEAgASgCECgCFBA9CyABKAIQKAIYBEAgASgCECgCGBA9CyABKAIQKAIcBEAgASgCECgCHBA9CyABKAIQKAIgBEAgASgCECgCIBA9CyABKAIQKAIkBEAgASgCECgCJBA9CyABKAIQKAIoBEAgASgCECgCKBA9CyABKAIQKAIsBEAgASgCECgCLBA9CyABKAIQKAIwBEAgASgCEEEwahDcBAsg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RQ0AIAMoAsABIAMoArQBRw0AIAMgAygC2AEgAygC1AEgAygCzAEQ6Cw2AtwBDAELAkACQCADKAJURQ0AIAMoAlANACADKALYASADQZgBahCUGAJAIAMoApgBRQ0AIAMoArQBQQhKDQAgA0EANgLcAQwDCwJAIAMoArQBQQhIBEAgAyADKALUAUEAEPADNgJkDAELIAMgAygC1AEQzAE2AmQLAkAgAygCtAFBCEwEQCADIAMoAtgBQQEQ5wI2AmgMAQsgAyADKALYAUECEOcCNgJoCwwBCwJAAkAgAygCVA0AIAMoAlBFDQAgAygC1AEgA0GYAWoQlBgCQCADKAKYAUUNACADKALAAUEISg0AIANBADYC3AEMBAsCQCADKALAAUEISARAIAMgAygC2AFBABDwAzYCaAwBCyADIAMoAtgBEMwBNgJoCwJAIAMoAsABQQhMBEAgAyADKALUAUEBEOcCNgJkDAELIAMgAygC1AFBAhDnAjYCZAsMAQsCQAJAIAMoAlRFDQAgAygCUEUNACADIAMoAtgBQQIQ5wI2AmggAyADKALUAUECEOcCNgJkDAELIAMgAygC2AEQzAE2AmggAyADKALUARDMATYCZAsLCyADIAMoAmgQajYCwAEgAyADKAJkEGo2ArQBAkAgAygCwAEgAygCtAFHBEACQCADKALAAUEQRwRAIAMoArQBQRBHDQELQQNB4PMsKAIATgRAQfjEKigCACEAIANBkO4hNgIQIABB8/4CIANBEGoQVhoLIANB6ABqEEsgA0HkAGoQSyADQQA2AtwBDAMLIAMgAygCaBDUFzYCYCADIAMoAmQQ1Bc2AlwCQCADKAJgBEAgAygCXA0BC0EDQeDzLCgCAE4EQEH4xCooAgAhACADQZDuITYCICAAQeiwAyADQSBqEFYaCyADQegAahBLIANB5ABqEEsgA0HgAGoQSyADQdwAahBLIANBADYC3AEMAwsMAQsgAyADKAJoEMwBNgJgIAMgAygCZBDMATYCXAsgA0HoAGoQSyADQeQAahBLIAMgAygCYBBqNgLAASADIAMoAlwQajYCtAEgAyADKAJgEGc2ArABIAMgAygCXBBnNgKsASADIAMoAmAQYzYCeCADIAMoAlwQYzYCdAJAIAMoAsABQSBGBEACQAJAIAMoAtABRQ0AIAMoApQBDQAgA0GAfkF/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PCADKAJMSARAAkAgAygCREEIRgRAIAMgAygCDCADKAI8akEDcy0AADYCHAwBCwJAIAMoAkRBBEYEQCADIAMoAgwgAygCPEEDdUECdGooAgBBByADKAI8QQdxa0ECdHZBD3E2AhwMAQsgAyADKAIMIAMoAjxBBHVBAnRqKAIAQQ8gAygCPEEPcWtBAXR2QQNxNgIcCwsgAygCGCADKAIcQQJ0akEBNgIAIAMgAygCVCADKAI8ajYCPAwBCwsgAyADKAJUIAMoAkBqNgJADAELCyADQQA2AkADQCADKAJAQYACSARAIAMoAhggAygCQEECdGooAgAEQCADIAMoAjBBAWo2AjALIAMgAygCQEEBajYCQAwBCwsgAygCUCADKAIwNgIAIAMoAhgQPSADIAMoAlgQyQE2AggCQCADKAIIRQ0AIAMoAlRBAUcNACADIAMoAggQ8gI2AiwgAygCMCADKAIsRwRAQQRB4PMsKAIATgRAQfjEKigCACEAIAMgAygCLDYCBCADQZjnITYCACAAQZOaCSADEFYaCwsLIANBADYCXAwBCyADQYMrNgI0IAMgAygCNEEEEHY2AhggA0EANgJAA0AgAygCQCADKAJISARAIAMgAygCECADKAJAIAMoAjhsQQJ0ajYCDCADQQA2AjwDQCADKAI8IAMoAkxIBEAgAyADKAIMIAMoAjxBAnRqKAIANgIUIAMoAhQgA0EoaiADQSRqIANBIGoQlgcgAyADKAIoQYkBbCADKAIkQY0CbGogAygCIEHhAmxqIAMoAjRvNgIcIAMoAhggAygCHEECdGooAgBFBEAgAygCGCADKAIcQQJ0akEBNgIAIAMgAygCMEEBajYCMCADKAIwQYACSgRAIAMoAhgQPSADQQA2AlwMBgsLIAMgAygCVCADKAI8ajYCPAwBCwsgAyADKAJUIAMoAkBqNgJADAELCyADKAJQIAMoAjA2AgAgAygCGBA9IANBADYCXAsgAygCXBogA0HgAGokAAvvEAIDfwF8IwBBsAFrIgMkACADIAA2AqgBIAMgATYCpAEgAyACOAKgAQJAIAMoAqgBRQRAIAMCf0EFQeDzLCgCAE4EQEHNM0GA5yFBABA6DAELQQALNgKsAQwBCyADKAKoASADQZwBaiADQZgBaiADQZQBahB+GgJAIAMoApQBQQhGBEAgAygCqAEQyQFFDQELIAMCf0EFQeDzLCgCAE4EQEHtqwhBgOchQQAQOgwBC0EACzYCrAEMAQsCQCADKgKgAbtEAAAAAAAAAABlRQRAIAMoAqQBQQBKDQELQQRB4PMsKAIATgRAQfjEKigCACEAIANBgOchNgIAIABBkPsHIAMQVhoLIAMgAygCqAEQzAE2AqwBDAELAkAgAygCpAFBAUYNACADKAKkAUECRg0AIAMCf0EFQeDzLCgCAE4EQEH62ghBgOchQQAQOgwBC0EACzYCrAEMAQsgAyADKAKoASADKAKkASADKAKkASADKAKkASADKAKkARDkFzYCECADIAMoAhAQYzYCcCADIAMoAhAQZzYCjAEgAyADKAKoARBjNgJ0IAMgAygCqAEQZzYCkAEgAygCpAFBAUYEQCADQQA2AoQBA0AgAygChAFBCU5FBEAgA0EwaiADKAKEAUECdGogAyoCoAG7RAAAAAAAACLAo7Y4AgAgAyADKAKEAUEBajYChAEMAQsLIAMgAyoCoAG7RAAAAAAAACBAokQAAAAAAAAiQKNEAAAAAAAA8D+gtjgCQCADQQE2AoQBA0AgAygChAEgAygCmAFBAWtORQRAIAMgAygCdCADKAKQASADKAKEAUEBa2xBAnRqNgJoIAMgAygCdCADKAKEASADKAKQAWxBAnRqNgJkIAMgAygCdCADKAKQASADKAKEAUEBamxBAnRqNgJgIAMgAygCcCADKAKEASADKAKMAWxBAnRqNgJcIANBATYCgAEDQCADKAKAASADKAKcAUEBa05FBEAgAyADKgIwIAMoAmgiASADKAKAASIAQX9qIgRqQQNzLQAAspQgAyoCNCAAIAFqQQNzLQAAspSSIAMqAjggASAAQQFqIgFqQQNzLQAAspSSIAMqAjwgAygCZCIFIARqQQNzLQAAspSSIAMqAkAgACAFakEDcy0AALKUkiADKgJEIAEgBWpBA3MtAACylJIgAyoCSCAEIAMoAmAiBGpBA3MtAACylJIgAyoCTCAAIARqQQNzLQAAspSSIAMqAlAgASAEakEDcy0AALKUkjgCWCADAn8gAyoCWLtEAAAAAAAA4D+gIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CzYCfCADAn9BAEEAIAMoAnxKDQAaIAMoAnwLNgJ8IAMCf0H/AUH/ASADKAJ8SA0AGiADKAJ8CzYCfCADKAJcIAMoAoABakEDcyADKAJ8OgAAIAMgAygCgAFBAWo2AoABDAELCyADIAMoAoQBQQFqNgKEAQwBCwsgAyADKAIQNgKsAQwBCyADIAMoApwBIAMoApgBEIEtNgIMIAMgAygCDBChGDYCLCADIAMoAgwQ+yw2AogBIANBAjYChAEDQCADKAKEASADKAKYAUECa05FBEAgAyADKAJ0IAMoAoQBIAMoApABbEECdGo2AmwgAyADKAIsIAMoAoQBIAMoAogBbEECdGo2AiggA0ECNgKAAQNAIAMoAoABIAMoApwBQQJrTkUEQCADIAMoAmwgAygCgAFBAmpqQQNzLQAAIAMoAmwgAygCgAFBAWpqQQNzLQAAIAMoAmwgAygCgAFqQQNzLQAAIAMoAmwgAygCgAFBAmtqQQNzLQAAIAMoAmwgAygCgAFBAWtqQQNzLQAAampqarI4AlggAygCKCADKAKAAUECdGogAyoCWDgCACADIAMoAoABQQFqNgKAAQwBCwsgAyADKAKEAUEBajYChAEMAQsLIANBAjYChAEDQCADKAKEASADKAKYAUECa05FBEAgAyADKAIsIAMoAogBIAMoAoQBQQJrbEECdGo2AiQgAyADKAIsIAMoAogBIAMoAoQBQQFrbEECdGo2AiAgAyADKAIsIAMoAoQBIAMoAogBbEECdGo2AhwgAyADKAIsIAMoAogBIAMoAoQBQQFqbEECdGo2AhggAyADKAIsIAMoAogBIAMoAoQBQQJqbEECdGo2AhQgAyADKAJwIAMoAoQBIAMoAowBbEECdGo2AlwgAyADKAJ0IAMoAoQBIAMoApABbEECdGo2AmwgA0QAAAAAAADwPwJ/An9BBUEFIAMoAoQBQQFqSA0AGiADKAKEAUEBagsgAygCmAEgAygChAFrSARAAn9BBUEFIAMoAoQBQQFqSA0AGiADKAKEAUEBagsMAQsgAygCmAEgAygChAFrC7dEAAAAAAAAFECio7Y4AlQgA0ECNgKAAQNAIAMoAoABIAMoApwBQQJrTkUEQCADIAMqAlQgAygCgAFBAnQiACADKAIkaioCACADKAIgIABqKgIAkiADKAIcIABqKgIAkiADKAIYIABqKgIAkiADKAIUIABqKgIAkpQ4AlggAyADKAJsIAMoAoABakEDcy0AADYCeCAD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DAELQQALNgJsDAELIANBADYCOCADQQA2AjwgA0EANgJAIANBADYCRCADQQA2AiggA0EAELwFNgI0IANBADYCLCADKAJkIAMoAjQ2AgAgAygCaCADQdgAahDDBiADKAJYBEAgA0EBEIsFNgJsDAELIANBACADKAJoELwBNgJEIANBACADKAJoELwBNgJAAkACQCADKAJEBEAgAygCQA0BC0EFQeDzLCgCAE4EQEH4xCooAgAhACADQfDhITYCICAAQYPOAiADQSBqEFYaCyADKAJkENQDDAELIAMgAygCaBCGATYCXCADIAMoAlwQ9gUiADYCKCAARQRAQQVB4PMsKAIATgRAQfjEKigCACEAIANB8OEhNgIAIABB3PoCIAMQVhoLIAMoAmQQ1AMMAQsgA0EAEPYFNgIkIAMoAiggAygCJDYCDCADQQAQiwU2AiwgA0EANgJMIANBADYCSANAIAMoAkQgAygCTCADKAJIIANB1ABqIANB0ABqEOcQBEAgAyADKAJEIAMoAiggAygCVCADKAJQIAMoAmAQpRgiADYCMCAABEAgAygCLCADKAIwQQAQigUgAyADKAJEIAMoAjAQ1QM2AjwgAyADKAJAIAMoAjAQ1QM2AjggAygCPCADKAI8IAMoAjgQjiwgAygCQCADKAIwKAIAIAMoAjAoAgQgAygCMCgCCCADKAIwKAIMQQYgAygCPEEAQQAQrAEgAygCNCADKAI8QQAQvQIgA0E4ahBLIAMgAygCVDYCTCADIAMoAlA2AkgMAgUgA0EsahCgAyADKAJkENQDQQVB4PMsKAIATgRAQfjEKigCACEAIANB8OEhNgIQIABBwawDIANBEGoQVhoLDAMLAAsLIAMoAjRBEGoQoAMgAygCLEEBELYJIQAgAygCNCAANgIQIAMoAmQgAygCNDYCAAsgA0EoakEBEOMKIANBxABqEEsgA0FAaxBLIAMgAygCLDYCbAsgAygCbCEAIANB8ABqJAAgAAvfBAEBfyMAQdAAayICJAAgAiAANgJIIAIgATYCRAJAAkAgAigCSARAIAIoAkgQakEBRg0BCyACAn9BBUHg8ywoAgBOBEBBvKECQYDiIUEAEDoMAQtBAAs2AkwMAQsCQCACKAJEQQRGDQAgAigCREEIRg0AIAICf0EFQeDzLCgCAE4EQEGmqgFBgOIhQQAQOgwBC0EACzYCTAwBCyACQQA2AiAgAkEANgIoIAJBADYCHCACKAJIIAJBPGoQwwYgAigCPARAIAJBARCLBTYCTAwBCyACQQAgAigCSBC8ASIANgIoIABFBEAgAgJ/QQVB4PMsKAIATgRAQYzbA0GA4iFBABA6DAELQQALNgJMDAELIAIgAigCSBCGATYCQCACIAIoAkAQ9gUiADYCHAJAIABFBEBBBUHg8ywoAgBIDQFB+MQqKAIAIQAgAkGA4iE2AgAgAEHc+gIgAhBWGgwBCyACQQAQ9gU2AhggAigCHCACKAIYNgIMIAJBABCLBTYCICACQQA2AjAgAkEANgIsA0AgAigCKCACKAIwIAIoAiwgAkE4aiACQTRqEOcQBEAgAiACKAIoIAIoAhwgAigCOCACKAI0IAIoAkQQpRgiADYCJCAABEAgAigCICACKAIkQQAQigUgAiACKAI4NgIwIAIgAigCNDYCLAwCBUEFQeDzLCgCAE4EQEH4xCooAgAhACACQYDiITYCECAAQcGsAyACQRBqEFYaCyACQSBqEKADCwsLCyACQRxqQQEQ4wogAkEoahBLIAIgAigCIDYCTAsgAigCTCEAIAJB0ABqJAAgAAusBgEBfyMAQdAAayIEJAAgBCAANgJIIAQgATYCRCAEIAI2AkAgBCADNgI8IAQoAjwEQCAEKAI8QQA2AgALAkAgBCgCSEUEQCAEAn9BBUHg8ywoAgBOBEBB0DJBrOEhQQAQOgwBC0EACzYCTAwBCyAEIAQoAkgQsQMiADYCNCAARQRAQQRB4PMsKAIATgRAQfjEKigCACEAIARBrOEhNgIAIABBlawDIAQQVhoLIAQgBCgCSEEBELYJNgJMDAELAkAgBCgCREEBRg0AIAQoAkRBAkYNACAEKAJEQQVGDQAgBCgCREEGRg0AIAQoAkRBCUYNACAEAn9BBUHg8ywoAgBOBEBB6doDQazhIUEAEDoMAQtBAAs2AkwMAQsCQCAEKAJAQQFGDQAgBCgCQEECRg0AIAQCf0EFQeDzLCgCAE4EQEGkhQRBrOEhQQAQOgwBC0EACzYCTAwBCyAEIAQoAjQQiAUiADYCHCAARQRAIAQCf0EFQeDzLCgCAE4EQEHLrgRBrOEhQQAQOgwBC0EACzYCTAwBCyAEQQA2AjgDQCAEKAI4IAQoAjRORQRAIAQoAkggBCgCOCAEQTBqIARBLGogBEEoaiAEQSRqEIkIAkACQCAEKAJEQX9qIgBBCEsNAAJAAkACQAJAAkAgAEEBaw4IAQUFAgMFBQQACyAEKAIcIAQoAjCyENsCDAULIAQoAhwgBCgCLLIQ2wIMBAsgBCgCHCAEKAIoshDbAgwDCyAEKAIcIAQoAiSyENsCDAILIAQoAhwgBCgCKCAEKAIkarIQ2wIMAQtBBEHg8ywoAgBOBEBB+MQqKAIAIQAgBEGs4SE2AhAgAEGo2AQgBEEQahBWGgsLIAQgBCgCOEEBajYCOAwBCwsgBCAEKAIcIAQoAkAQ2CwiADYCGCAARQRAIAQCf0EFQeDzLCgCAE4EQEGSggVBrOEhQQAQOgwBC0EACzYCTAwBCyAEIAQoAkggBCgCGBCnGDYCIAJAIAQoAjwEQCAEKAI8IAQoAhg2AgAMAQsgBEEYahDFAwsgBEEcahDFAyAEIAQoAiA2AkwLIAQoAkwhACAEQdAAaiQAIAALsQkBAX8jAEHQAGsiASQAIAEgADYCSCABQQE2AkQgAUEBNgJAIAFBADYCPCABKAI8BEAgASgCPEEANgIACwJAIAEoAkhFBEAgAQJ/QQVB4PMsKAIATgRAQdAyQaPhIUEAEDoMAQtBAAs2AkwMAQsgASABKAJIELEDIgA2AjQgAEUEQEEEQeDzLCgCAE4EQEH4xCooAgAhACABQaPhITYCACAAQZWsAyABEFYaCyABIAEoAkhBARC2CTYCTAwBCwJAIAEoAkRBAUYNACABKAJEQQJGDQAgASgCREEDRg0AIAEoAkRBBEYNACABKAJEQQVGDQAgASgCREEGRg0AIAEoAkRBB0YNACABKAJEQQhGDQAgASgCREEJRg0AIAEoAkRBCkYNACABKAJEQQtGDQAgAQJ/QQVB4PMsKAIATgRAQenaA0Gj4SFBABA6DAELQQALNgJMDAELAkAgASgCQEEBRg0AIAEoAkBBAkYNACABAn9BBUHg8ywoAgBOBEBBpIUEQaPhIUEAEDoMAQtBAAs2AkwMAQsCQCABKAI0QcgBTA0AAkAgASgCREEBRg0AIAEoAkRBAkYNACABKAJEQQVGDQAgASgCREEGRg0AIAEoAkRBCUcNAQsgASABKAJIIAEoAkQgASgCQCABKAI8EJEtNgJMDAELIAEgASgCNBCIBSIANgIYIABFBEAgAQJ/QQVB4PMsKAIATgRAQcuuBEGj4SFBABA6DAELQQALNgJMDAELIAFBADYCOANAIAEoAjggASgCNEgEQCABKAJIIAEoAjggAUEwaiABQSxqIAFBKGogAUEkahCJCAJAIAEoAkRBf2oiAEEKTQRAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQQFrDgoBAgMEBQYHCAkKAAsgASgCGCABKAIwshDbAgwLCyABKAIYIAEoAiyyENsCDAoLIAEoAhggASgCMCABKAIoakEBa7IQ2wIMCQsgASgCGCABKAIsIAEoAiRqQQFrshDbAgwICyABKAIYIAEoAiiyENsCDAcLIAEoAhggASgCJLIQ2wIMBgsgAQJ/IAEoAiggASgCJEgEQCABKAIoDAELIAEoAiQLNgIgIAEoAhggASgCILIQ2wIMBQsgAQJ/IAEoAiggASgCJEoEQCABKAIoDAELIAEoAiQLNgIgIAEoAhggASgCILIQ2wIMBAsgASABKAIoIAEoAiRqNgIgIAEoAhggASgCILIQ2wIMAwsgASABKAIoIAEoAiRsNgIgIAEoAhggASgCILIQ2wIMAgsgASgCGCABKAIosiABKAIkspUQ2wIMAQtBBEHg8ywoAgBOBEBB+MQqKAIAIQAgAUGj4SE2AhAgAEGo2AQgAUEQahBWGgsLIAEgASgCOEEBajYCOAwBCwsgASABKAIYIAEoAkAQixgiADYCFCAARQRAIAECf0EFQeDzLCgCAE4EQEGSggVBo+EhQQAQOgwBC0EACzYCTAwBCyABIAEoAkggASgCFBCnGDYCHAJAIAEoAjwEQCABKAI8IAEoAhQ2AgAMAQsgAUEUahDFAwsgAUEYahDFAyABIAEoAhw2AkwLIAEoAkwhACABQdAAaiQAIAALjQMBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAygCGARAIAMoAhhBADYCAAsgAygCFARAIAMoAhRBADYCAAsCQCADKAIYRQRAIAMCf0EFQeDzLCgCAE4EQEGf0gtBgOEhQQEQOgwBC0EBCzYCHAwBCyADKAIURQRAIAMCf0EFQeDzLCgCAE4EQEHC4QtBgOEhQQEQOgwBC0EBCzYCHAwBCyADKAIQRQRAIAMCf0EFQeDzLCgCAE4EQEGvrgRBgOEhQQEQOgwBC0EBCzYCHAwBC0EDQeDzLCgCAE4EQEH4xCooAgAhACADQYDhITYCACAAQa/vCyADEFYaCyADEPAkIgA2AgggAEUEQCADAn9BBUHg8ywoAgBOBEBBpfsLQYDhIUEBEDoMAQtBAQs2AhwMAQsgAyADKAIIIAMoAhAQlC02AgwgAygCCBC0BiADKAIIIAMoAhQQ/wwhACADKAIYIAA2AgAgAygCCBDcARogAyADKAIMNgIcCyADKAIcGiADQSBqJAALsgMBBH8jAEHQAGsiAiQAIAIgADYCSCACIAE2AkQCQCACKAJIRQRAIAICf0EFQeDzLCgCAE4EQEHFhQpB8OAhQQEQOgwBC0EBCzYCTAwBCyACKAJERQRAIAICf0EFQeDzLCgCAE4EQEGvrgRB8OAhQQEQOgwBC0EBCzYCTAwBCyACIAIoAkQQsQM2AkAgAigCSCEAIAJBAjYCICAAQYSZDCACQSBqEFYaIAIoAkghACACIAIoAkA2AjAgAEH+sQwgAkEwahBWGiACQQA2AjwDQCACKAI8IAIoAkBIBEAgAiACKAJEIAIoAjxBAhDDBCIANgI4IAAEQCACKAJIIQAgAigCPCEBIAIoAjgoAgAhAyACKAI4KAIEIQQgAigCOCgCCCEFIAIgAigCOCgCDDYCECACIAU2AgwgAiAENgIIIAIgAzYCBCACIAE2AgAgAEHsvQwgAhBWGiACQThqEOEBIAIgAigCPEEBajYCPAwCBSACAn9BBUHg8ywoAgBOBEBB5vAMQfDgIUEBEDoMAQtBAQs2AkwMAwsACwsgAkEANgJMCyACKAJMIQAgAkHQAGokACAAC+MEAQF/IwBB8ABrIgEkACABIAA2AmgCQCABKAJoRQRAIAECf0EFQeDzLCgCAE4EQEHFhQpB2uAhQQAQOgwBC0EACzYCbAwBCyABKAJoIQAgASABQcwAajYCMCAAQYSZDCABQTBqELYGQQFHBEAgAQJ/QQVB4PMsKAIATgRAQf6lDEHa4CFBABA6DAELQQALNgJsDAELIAEoAkxBAkcEQCABAn9BBUHg8ywoAgBOBEBBgbYKQdrgIUEAEDoMAQtBAAs2AmwMAQsgASgCaCEAIAEgAUHkAGo2AiAgAEH+sQwgAUEgahC2BkEBRwRAIAECf0EFQeDzLCgCAE4EQEH+pQxB2uAhQQAQOgwBC0EACzYCbAwBCyABIAEoAmQQiwUiADYCQCAARQRAIAECf0EFQeDzLCgCAE4EQEHI2gNB2uAhQQAQOgwBC0EACzYCbAwBCyABQQA2AmADQCABKAJgIAEoAmRIBEAgASgCaCEAIAEgAUHQAGo2AhAgASABQdQAajYCDCABIAFB2ABqNgIIIAEgAUHcAGo2AgQgASABQcgAajYCACAAQey9DCABELYGQQVHBEAgAQJ/QQVB4PMsKAIATgRAQazLDEHa4CFBABA6DAELQQALNgJsDAMLIAEgASgCXCABKAJYIAEoAlQgASgCUBCXAiIANgJEIAAEQCABKAJAIAEoAkRBABCKBSABIAEoAmBBAWo2AmAMAgUgAQJ/QQVB4PMsKAIATgRAQe3nAUHa4CFBABA6DAELQQALNgJsDAMLAAsLIAEgASgCQDYCbAsgASgCbCEAIAFB8ABqJAAgAAuxAQEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEGvrgRB0OAhQQEQOgwBC0EBCzYCDAwBCyABIAEoAggQsQM2AgAgAUEANgIEA0AgASgCBCABKAIATkUEQCABKAIIKAIMIAEoAgRBAnRqEOEBIAEgASgCBEEBajYCBAwBCwsgASgCCEEANgIAIAFBADYCDAsgASgCDCEAIAFBEGokACAAC8kCAQF/IwBBIGsiASQAIAEgADYCGCABQQI2AhQCQCABKAIYRQRAIAECf0EFQeDzLCgCAE4EQEGvrgRBwuAhQQEQOgwBC0EBCzYCHAwBCyABIAEoAhgQsQM2AgwCQCABKAIUQQBOBEAgASgCFCABKAIMSA0BCyABAn9BBUHg8ywoAgBOBEBBgKkHQcLgIUEBEDoMAQtBAQs2AhwMAQsgASABKAIYKAIMNgIIIAEoAgggASgCFEECdGoQ4QEgASABKAIUQQFqNgIQA0AgASgCECABKAIMSARAIAEoAgggASgCEEEBa0ECdGogASgCCCABKAIQQQJ0aigCADYCACABIAEoAhBBAWo2AhAMAQsLIAEoAgggASgCDEEBa0ECdGpBADYCACABKAIYIgAgACgCAEF/ajYCACABQQA2AhwLIAEoAhwaIAFBIGokAAukAQECfyMAQTBrIgAkAAJ/IAFFBEBBiYgGQQAQO0F/DAELIABBGGoQayICIAFBBGoQXxogAiABQRRqEF8aIAIoAgBBAU4EQEEAIQEDQCAAIAIgARA+KAIAEEAhAyAAEEEgABA8RQRAA0AgAygCCEEAEIkFIAMQRBogABA8RQ0ACwsgAUEBaiIBIAIoAgBIDQALCyACEF0aQQALIQEgAEEwaiQAIAELbAEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIRQRAIAECf0EFQeDzLCgCAE4EQEGvrgRB4N8hQQEQOgwBC0EBCzYCDAwBCyABIAEoAgggASgCCCgCBEEBdBCpGDYCDAsgASgCDBogAUEQaiQACwkAIAAQqxgQPQtkAQF/IwBBEGsiASQAIAEgADYCCAJAIAEoAghFBEAgAQJ/QQVB4PMsKAIATgRAQcPNAkGH3yFBfxA6DAELQX8LNgIMDAELIAEgASgCCCgCEDYCDAsgASgCDCEAIAFBEGokACAAC9cBAQF/IwBBIGsiBSQAIAUgADYCGCAFIAE2AhQgBSACNgIQIAUgAzYCDCAFIAQ2AggCQCAFKAIYRQRAIAUCf0EFQeDzLCgCAE4EQEHDzQJB+N4hQQEQOgwBC0EBCzYCHAwBCyAFKAIUQX9HBEAgBSgCGCAFKAIUNgIACyAFKAIQQX9HBEAgBSgCGCAFKAIQNgIECyAFKAIMQX9HBEAgBSgCGCAFKAIMNgIICyAFKAIIQX9HBEAgBSgCGCAFKAIINgIMCyAFQQA2AhwLIAUoAhwaIAVBIGokAAuuAwEBfyMAQUBqIgMkACADIAA2AjggAyABNgI0IAMgAjYCMAJAIAMoAjhFBEAgAwJ/QQVB4PMsKAIATgRAQfblCUGwqR9BARA6DAELQQELNgI8DAELIAMoAjBFBEAgAwJ/QQVB4PMsKAIATgRAQZWlCkGwqR9BARA6DAELQQELNgI8DAELIAMoAjBBADYCAAJAIAMoAjRFBEAgAxDnCjYCEAwBCyADIAMoAjQ2AhALIAMgAygCOCADKAIQENUQNgIMIAMgAygCDBCaBDYCKCADQQA2AhggA0EANgIUIANBATYCLANAIAMoAiwgAygCKEgEQCADKAIMIAMoAixBAWsgA0EkahCZBCADKAIMIAMoAiwgA0EgahCZBCADAn9BAEEAIAMoAiQgAygCIGtKDQAaIAMoAiQgAygCIGsLNgIcIAMoAhwgAygCGEoEQCADIAMoAhw2AhggAyADKAIsQQFrNgIUCyADIAMoAixBAWo2AiwMAQsLIAMoAjAgAygCFDYCACADKAI0RQRAIAMoAhAQPQsgA0EMahDFAyADQQA2AjwLIAMoAjwaIANBQGskAAuuAgEBfyMAQSBrIgMkACADIAA2AhggAyABOgAXIAMgAjYCEAJAIAMoAhBFBEAgAwJ/QQVB4PMsKAIATgRAQZmuBEHepx9BARA6DAELQQELNgIcDAELIAMoAhBBADYCACADKAIYRQRAIAMCf0EFQeDzLCgCAE4EQEHx+QJB3qcfQQEQOgwBC0EBCzYCHAwBCyADIAMsABciADYCCCAAQQpGBEAgA0EANgIcDAELIAMgAygCGCgCLCADKAIIQQJ0aigCADYCDCADKAIMQX9GBEBBBUHg8ywoAgBOBEBB+MQqKAIAIQAgAyADKAIINgIEIANB3qcfNgIAIABBw6sDIAMQVhoLIANBATYCHAwBCyADKAIQIAMoAgw2AgAgA0EANgIcCyADKAIcGiADQSBqJAALsgkCAX8BfCMAQTBrIgEkACABIAA2AigCQCABKAIoRQRAIAECf0EFQeDzLCgCAE4EQEHx+QJBsN4hQQEQOgwBC0EBCzYCLAwBCyABQYABQQQQdiIANgIMIABFBEAgAQJ/QQVB4PMsKAIATgRAQZPmCkGw3iFBARA6DAELQQELNgIsDAELIAEoAiggASgCDDYCKCABQQA2AiQDQCABKAIkQYABSARAIAEoAgwgASgCJEECdGpBfzYCACABIAEoAiRBAWo2AiQMAQsLIAFBIDYCJANAIAEoAiRB/wBIBEAgASgCDCABKAIkQQJ0aiABKAIkQSBrNgIAIAEgASgCJEEBajYCJAwBCwsgAUGAAUEEEHYiADYCCCAARQRAIAECf0EFQeDzLCgCAE4EQEHz9QpBsN4hQQEQOgwBC0EBCzYCLAwBCyABKAIoIAEoAgg2AiwgAUEANgIkA0AgASgCJEGAAUgEQCABKAIIIAEoAiRBAnRqQX82AgAgASABKAIkQQFqNgIkDAELCyABQSA2AiQDQCABKAIkQTlMBEAgASgCCCABKAIkQQJ0aiABKAIoKAIMNgIAIAEgASgCJEEBajYCJAwBCwsgAUE6NgIkA0AgASgCJEHbAEwEQCABKAIIIAEoAiRBAnRqIAEoAigoAhA2AgAgASABKAIkQQFqNgIkDAELCyABKAIIIAEoAigoAgw2AvACIAFB3QA2AiQDQCABKAIkQf8ASARAIAEoAgggASgCJEECdGogASgCKCgCFDYCACABIAEoAiRBAWo2AiQMAQsLIAFBgAFBBBB2IgA2AgQgAEUEQCABAn9BBUHg8ywoAgBOBEBBl4cLQbDeIUEBEDoMAQtBAQs2AiwMAQsgASgCKCABKAIENgIwIAFBADYCJANAIAEoAiRBgAFIBEAgASgCBCABKAIkQQJ0akF/NgIAIAEgASgCJEEBajYCJAwBCwsgAUEgNgIkA0AgASgCJEH/AEgEQCABKAIoIAEoAiRBGHRBGHUgAUEYahD1CiABKAIEIAEoAiRBAnRqIAEoAhg2AgAgASABKAIkQQFqNgIkDAELCyABIAEoAihBIBClDTYCACABIAEoAgAQhgE2AiAgARBLIAEgASgCKEE6EKUNNgIAIAEgASgCABCGATYCHCABEEsgAQJ/IAEoAiAgASgCHEoEQCABKAIgDAELIAEoAhwLNgIgIAEgASgCKEHdABClDTYCACABIAEoAgAQhgE2AhwgARBLIAECfyABKAIgIAEoAhxKBEAgASgCIAwBCyABKAIcCzYCICABKAIoIAEoAiA2AhggASgCKEH4ACABQRRqEPUKIAECf0R7FK5H4Xq0PyABKAIUsruiRAAAAAAAAOA/oCICmUQAAAAAAADgQWMEQCACqgwBC0GAgICAeAs2AhAgASgCKAJ/QQFBASABKAIQSg0AGiABKAIQCzYCHCABKAIoQSAgAUEYahD1CiABKAIoIAEoAhg2AiAgASgCKAJ/IAEoAigoAhiyQ5qZmT6Uu0QAAAAAAADgP6AiAplEAAAAAAAA4EFjBEAgAqoMAQtBgICAgHgLNgIkIAFBADYCLAsgASgCLBogAUEwaiQAC80DAQF/IwBBMGsiBSQAIAUgADYCKCAFIAE2AiQgBSACNgIgIAUgAzYCHCAFIAQ2AhgCQAJAAkAgBSgCIEUNACAFKAIcRQ0AIAUoAhgNAQsgBQJ/QQVB4PMsKAIATgRAQeGBBUHwqB9BABA6DAELQQALNgIsDAELIAUoAhhBADYCACAFKAIcQQA2AgAgBSgCIEEANgIAIAUoAihFBEAgBQJ/QQVB4PMsKAIATgRAQb35B0HwqB9BABA6DAELQQALNgIsDAELIAUgBSgCJEECbUECazYCEAJAIAUoAhBBAE4EQCAFKAIQQQlIDQELIAUCf0EFQeDzLCgCAE4EQEHq1wRB8KgfQQAQOgwBC0EACzYCLAwBCyAFIAUoAiggBSgCEEECdEHA8SxqKAIAELkQNgIUIAUgBSgCFBCUBzYCDCAFKAIUED0gBSgCDEUEQEEFQeDzLCgCAE4EQEH4xCooAgAhACAFIAUoAiQ2AgQgBUHwqB82AgAgAEH8kAggBRBWGgsgBUEANgIsDAELIAUgBSgCDCAFKAIkIAUoAiAgBSgCHCAFKAIYEKwYNgIIIAVBDGoQSyAFIAUoAgg2AiwLIAUoAiwhACAFQTBqJAAgAAuMAwEBfyMAQTBrIgUkACAFIAA2AiggBSABNgIkIAUgAjYCICAFIAM2AhwgBSAENgIYIAUgBSgCJEECbUECazYCEAJAAkAgBSgCEEEATgRAIAUoAhBBCUgNAQsgBQJ/QQVB4PMsKAIATgRAQerXBEHtpx9BABA6DAELQQALNgIsDAELAkACQCAFKAIgRQ0AIAUoAhxFDQAgBSgCGA0BCyAFAn9BBUHg8ywoAgBOBEBB4YEFQe2nH0EAEDoMAQtBAAs2AiwMAQsgBSgCICAFKAIQQQxsQYCoH2ooAgA2AgAgBSgCHCAFKAIQQQxsQYCoH2ooAgQ2AgAgBSgCGCAFKAIQQQxsQYCoH2ooAgg2AgAgBSAFKAIoIAUoAhBBAnRBkPEsaigCABC5EDYCFCAFIAUoAhQQgiw2AgwgBSgCFBA9IAUoAgxFBEBBBEHg8ywoAgBOBEBB+MQqKAIAIQAgBUHtpx82AgAgAEHIpwUgBRBWGgsLIAUgBSgCDDYCLAsgBSgCLCEAIAVBMGokACAAC8gEAQJ/IwBBMGsiACQAIABBADYCKCAAQQ42AiQCQAJAAkAgACgCJEEESA0AIAAoAiRBFEoNACAAKAIkQQJvRQ0BCyAAAn9BBUHg8ywoAgBOBEBBgjJBs6cfQQAQOgwBC0EACzYCLAwBCyAAQQFBNBB2IgE2AiAgAUUEQCAAAn9BBUHg8ywoAgBOBEBB1e4AQbOnH0EAEDoMAQtBAAs2AiwMAQsCQCAAKAIoRQRAIAAgACgCJCAAKAIgQQxqIAAoAiBBEGogACgCIEEUahCuGDYCHAwBCyAAIAAoAiggACgCJCAAKAIgQQxqIAAoAiBBEGogACgCIEEUahChLTYCHCAAKAIcRQRAQQNB4PMsKAIATgRAQfjEKigCACEBIABBs6cfNgIQIAFBl6kBIABBEGoQVhoLIAAgACgCKCAAKAIkIAAoAiBBDGogACgCIEEQaiAAKAIgQRRqEKAtNgIcIAAoAhxFBEBBBUHg8ywoAgBOBEBB+MQqKAIAIQEgAEGzpx82AgAgAUG/5wEgABBWGgsgACAAKAIkIAAoAiBBDGogACgCIEEQaiAAKAIgQRRqEK4YNgIcCwsLIAAoAhxFBEAgAEEgahCtGCAAAn9BBUHg8ywoAgBOBEBB46ACQbOnH0EAEDoMAQtBAAs2AiwMAQsgACgCICAAKAIcNgIAIAAoAiAgACgCJDYCBCAAKAIoBEAgACgCKBDYASEBIAAoAiAgATYCCAsgACgCIBCfLSAAIAAoAiA2AiwLIAAoAiwhASAAQTBqJAAgAQstACABIAAoAghHBEADQCAAKAIQGiAAIAAoAghBf2o2AgggACgCCCABRw0ACwsLJgAgACgCABogACgCACAAELIIahogACgCABogACgCACAAEMkCahoLVAEBfyAAENsbIAAQQiAAKAIAIAAoAgQgAUEEaiICENMLIAAgAhDgASAAQQRqIAFBCGoQ4AEgABBCIAEQYhDgASABIAEoAgQ2AgAgACAAEMkCELkRCzMBAX8gACgCEBogACgCCCEDA0AgAyACEKgDIAAgACgCCEEBaiIDNgIIIAFBf2oiAQ0ACwtkAQJ/IwBBEGsiBCQAIARBADYCDCAAQQxqIARBDGogAxC/ByABBEAgACgCEBogARCSGSEFCyAAIAU2AgAgACACIAVqIgI2AgggACACNgIEIAAQYiABIAVqNgIAIARBEGokACAAC1sBAn8jAEEQayICJAAgAiABNgIMIAAQuhEiAyABTwRAIAAQsggiACADQQF2SQRAIAIgAEEBdDYCCCACQQhqIAJBDGoQxgIoAgAhAwsgAkEQaiQAIAMPCxC+AwALPAEBfyMAQRBrIgMkACAAEEIaA0AgACgCBCACEKgDIAAgACgCBEEBajYCBCABQX9qIgENAAsgA0EQaiQAC9QBAQZ/IAAoAhAhBQJAIAAoAgwiCEEBSA0AIAVBf2ohBiAFQQJOBEADQEEAIQUgACAEEIQCIQlBACEHA0AgAiAFaiwAACAFIAlqLAAAbCAHaiEHIAVBAWoiBSAGRw0ACyADIARBA3RqIAe3RAAAAAAAwF9AoyAGIAlqLAAAt6AgASAEEFErAwCiOQMAIARBAWoiBCAIRw0ADAIACwALA0AgACAEEIQCIAZqLAAAIQIgAyAEQQN0aiABIAQQUSsDACACt6I5AwAgBEEBaiIEIAhHDQALCwuTAQECfyMAQSBrIgQkAAJAIAAQQigCACAAKAIEayABTwRAIAAgASACEKktDAELIAAQQiEDIARBCGogACAAEMkCIAFqEKgtIAAQyQIgAxCnLSIDIAEgAhCmLSAAIAMQpS0gAyADKAIEEKMtIAMoAgAEQCADKAIQIAMoAgAgAxBiKAIAIAMoAgBrEL8ICwsgBEEgaiQACzUBAX8jAEHwA2siAiQAIAAgAUEAQYq/BUEAIAIQkB0iABDuEyEBIAAQpw0gAkHwA2okACABC0UBAX8gABDJAiIDIAFJBEAgACABIANrIAIQqy0PCyADIAFLBEAgACgCACABaiEBIAAQyQIhAiAAIAEQ2hsgACACEKQtCws6AgJ/AXwgAkEASgRAA0AgBSAAIANBA3QiBGorAwAgASAEaisDAKKgIQUgA0EBaiIDIAJHDQALCyAFCwkAQay5LRDMAgsJACAAELIYED0LkggBCH8jAEHwAWsiASQAIABBIGoiBxCWAygCACECIAdBAhA+IAI2AgAgAUHYAGogAUHgAGoQ1AUiAigCAEF0aigCACABQeAAamoQqwMQzQMgAUHYAGoQjgEgAkEIaiIGQQIQ6wNBg54NEFQaIAFBIGogAhCfAiAAIAFBIGoQfRDfBCABQSBqEGAaIAFBIGogAhCfAiABQSBqEFohBSABQSBqEGAaIABBNGoiBCgCAARAA0AgAiABQSBqQZqPBxCFAiIIEJ0EIAgQYBogBiAEIAMQPigCABDrA0Gnpw0QVBogAUEgaiACEJ8CIAAgAUEgahB9EN8EIAFBIGoQYBogAUEgaiACEJ8CIAFBIGoQWiAFaiEFIAFBIGoQYBogA0EBaiIDIAQoAgBJDQALCyACIAFBIGpBmo8HEIUCIgMQnQQgAxBgGiAGQZ6xDRBUIAQoAgAQugFBquAHEFQaIAFBIGogAhCfAiAAIAFBIGoQfRDfBCABQSBqEGAaIAFBIGogAhCfAiABQSBqEFohAyABQSBqEGAaIAcQlgMiBCAEKAIAIAMgBWpqNgIAIAFB0ABqQfy5DRB6IQUgAUFAayAAEJ4UEIwdIAEgAUFAaxCABDYCCCABIAFBQGsQ6gQ2AhggAUEIaiABQRhqEP8BBEADQCABKAIIKAIAIAFBIGoQthgEQCAFIAFBIGoQeAsgAUEIahDIBCABQQhqIAFBGGoQ/wENAAsLELMXIQMgAiABQQhqQZqPBxCFAiIEEJ0EIAQQYBogBiAAKAIcEOsDQdPCDRBUQZqqAxBUQc7KDRBUIAMQVEGG0w0QVCAFEEoQVEHD2g0QVBogAxD9DCABQQhqIAIQnwIgACABQQhqEH0QzAYgAUEIahBgGiACIAFBCGpBmo8HEIUCIgMQnQQgAxBgGiAGQa3iDRBUIAAoAhwQ6wNB7OgNEFQaIAFBCGogAhCfAiAAIAFBCGoQfRDfBCABQQhqEGAaIAAoAhxBAk4EQEEBIQMDQCACIAFBCGpBmo8HEIUCIgQQnQQgBBBgGiACKAIAQXRqKAIAIAFB4ABqakEKEIoKIAIoAgBBdGooAgAgAUHgAGpqIgQsAEwaIARBMDYCTCAGIAcgAxA+KAIAEOsDQeDwDRBUGiABQQhqIAIQnwIgACABQQhqEH0Q3wQgAUEIahBgGiADQQFqIgMgACgCHEgNAAsLIAIgAUEIakGajwcQhQIiAxCdBCADEGAaIAZBoPcNEFQgACgCHBDrA0HX/Q0QVCAAKAIcQX9qEOsDQciCDhBUIAcQlgMoAgAQ6wNBm4gOEFQaIAFBCGogAhCfAiAAIAFBCGoQfRDfBCABQQhqEGAaIAFBQGsQpgQgBRBGGiACELwDGiABQfABaiQAQQEL5QUCC38CfCMAQeACayICJAAgARCvDSEFIAEQxxghCyAFRSABEPMQIgRBAUhyRQRAIAUQqQEhAyAFEIYBIQYgAkHIAWogAkHQAWoQ1AUiBygCAEF0aigCACACQdABamoQqwMQzQMgA7dEAAAAAAAAUkCiIAS3Ig2jIQ4gAkHIAWoQjgEgAC0AVEUEQCAHQQhqQZrLDBBUIAAoAhxBAmoQ6wNBptcMEFQaCyACQTBqIAJBOGoQ1AUiBCgCAEF0aigCACACQThqahCrAxDNAyACQTBqEI4BIAQoAgBBdGooAgAgAkE4ampBAhDWC0EBIQkgBEEIaiIIQbcCELwOIAAoAhwQ6wNB7eMMEFQgDhDqA0HJqgMQVCAGt0QAAAAAAABSQKIgDaMiDRDqA0HX8AwQVCAAKAIcQQFqEOsDQYj8DBBUIQMgAkEgaiAHEJ8CIAMgAkEgahC0GEG6iA0QVBogAkEgahBgGiAAQTRqIAAoAhwQXxogAkEgaiAEEJ8CIAAgAkEgahB9EMwGIAJBIGoQYBogAkEYaiAAIAEgDiANELstEOkCIgYoAgAQciEDIAYoAgAgAyACQRRqELgQIQogAigCFCEDIAQgAkEgakGajwcQhQIiDBCdBCAMEGAaIAggACgCHBDrA0HYqAsQVCADEOsDQduQCBBUGiACQSBqIAQQnwIgACACQSBqEH0Q3wQgAkEgahBgGiACQSBqIAQQnwIgAkEgahBaIQggAkEgahBgGiAAIAogAxD4CiAKEP0MIABBhKoIEN8EIAIgAyAIakERaiIDNgIgIAAgAxD3CgJAIAAtAFQNACACQQA2AhAgAUG7kw0gAkEMahD8ChogBSALIAAoAhwgAkEQaiACQSBqIAIoAgwQsy0EQCAAIAIoAhAgAigCIBD4CiAAIAIoAiAQ9wogAigCECIARQ0BIAAQPQwBC0EAIQkLIAYQzgQgBBC8AxogBxC8AxoLIAJB4AJqJAAgCQuWCAEDfyMAQeADayIGJAACQCADRSAERXINACADQQA2AgAgBEEANgIAQQAgAEUgARsNACAGQQA2AtwDAkAgABDtCkEDRgRAIABBA0EAIAZB3ANqENwQIQggBigC3AMiBw0BCyABIAAgBSAGQdwDahCsLCEIIAYoAtwDIQcLIAhFQQAgBxtFBEAgBkHcA2oQsQlBACEHDAELIAcoAgBBf2oiB0EETwRAIAZB3ANqELEJQQAhBwwBCyAGQcACaiAGQcgCahDUBSIBKAIAQXRqKAIAIAZByAJqahCrAxDNAyAGQcACahCOAQJ/AkAgBigC3AMiBSgCHEEBTgRAIAFBCGpBj9UKEFQgBigC3AMoAhxBf2oQugFByaoDEFQgBigC3AMoAhgQVEGP5goQVBoMAQsCQAJAIAUoAixBf2oiCEECSw0AAkACQCAIQQFrDgICAQALIAUoAihBAUcNAiAAEO0KQQNHDQIgASAGQbABakHI9QoQhQIiABCdBCAAEGAaDAMLIAEgBkGwAWpBhJgLEIUCIgAQnQQgABBgGgwCCyAGQdwDahCxCUEADAILIAEgBkGwAWpB/IYLEIUCIgAQnQQgABBgGgsgBigC3AMoAjQhBSAGQagBaiAGQbABahDUBSIAKAIAQXRqKAIAIAZBsAFqahCrAxDNAyAGQagBahCOASAAQQhqIAIQ6wNB2KgLEFQgBigC3AMoAggQ8w9Bt7cLEFQaIAZBEGogBkEYahDUBSICKAIAQXRqKAIAIAZBGGpqEKsDEM0DIAZBEGoQjgEgAkEIakGvxAsQVCAGKALcAygCIBC6AUGT0gsQVCAGKALcAygCJBC6AUGs4QsQVCAGKALcAygCKBC6AUGj7wsQVCAHQQJ0IgdB5PAsaigCABBUQYD7CxBUQQ5BASAFGxC6AUHyiQwQVCAGKALcAygCLBC6AUGCmQwQVCAHQfTwLGooAgAQVEHwpQwQVCAGKALcAygCIBC6AUHmsQwQVCAGKALcAygCKBC6AUHbvQwQVBogBiAAEJ8CIAYQWiEFIAYQYBogBiACEJ8CIAYQWiEHIAYQYBogBiABEJ8CIAYQWiEIIAYQYBogBCAGKALcAygCCCAIIAUgB2pqakERaiIENgIAIAMgBBA/IgM2AgAgBiAAEJ8CIAMgBhB9IAUQWCEDIAYQYBogBiABEJ8CIAMgBWogBhB9IAgQWCEDIAYQYBogBiACEJ8CIAMgCGogBhB9IAcQWCEDIAYQYBogAyAHaiAGKALcAyIDKAIEIAMoAggQWCADKAIIaiIDQYSqCCkAADcAACADQZSqCC0AADoAECADQYyqCCkAADcACCAGQdwDahCxCSACELwDGiAAELwDGkEBCyEHIAEQvAMaCyAGQeADaiQAIAcLggEBAn8jAEEQayICJAAgAEG46Sw2AgAgAEGAoSw2AgAgAEEIahCdBiEDIABCADcCtNsIIABBwNsIahBrGiAAQgA3AtTbCCAAQQA2ArDbCCADIAEQrC0EQCACIAE2AgQgAkGKvwU2AgBB6uMFIAIQOwsgAEEANgK82wggAkEQaiQAIAALCQAgACABEIoiC7EHAQl/IwBBsARrIgEkACAAQfXUBhDMBiAAQa/zBhDMBiAAQZqPBxDMBiAAQdunBxDMBiABQZgDaiABQaADahDUBSIDKAIAQXRqKAIAIAFBoANqahCrAxDNAyABQZgDahCOASADQQhqIgZBicUHEFRB9AMQugFBquAHEFQaIAFBIGogAxCfAiAAIAFBIGoQfRDMBiABQSBqEGAaIAFBkANqQYCACBA/EOkCIQcDQCAHIAIQoQIgAkEBcToAACACQQFqIgJBgIAIRw0ACyAHKAIAQYCACCABQYwDahC4ECECIAMgAUEgakGajwcQhQIiBBCdBCAEEGAaIAZBp/kHEFQgASgCjAMQ8w9B25AIEFQaIAFBIGogAxCfAiAAIAFBIGoQfRDfBCABQSBqEGAaIAFBIGogAxCfAiABQSBqEFohBCABQSBqEGAaIAAgAiABKAKMAxD4CiABKAKMAyEFIAIQ/QwgAEGEqggQ3wQgACAEIAVqQRFqEPcKIAFBIGpB4KMfQeICEFgaIAMgAUEQakGajwcQhQIiAhCdBCACEGAaIAZB7cAIEFRB4QIQ8w9Bh9oIEFQgAUEgahBUQYSqCBBUGiABQRBqIAMQnwIgACABQRBqEH0QzAYgAUEQahBgGiADIAFBEGpBmo8HEIUCIgIQnQQgAhBgGiAGQdfuCBBUQfQDELoBQcGECRBUGiABQRBqIAMQnwIgACABQRBqEH0QzAYgAUEQahBgGiADIAFBEGpBmo8HEIUCIgIQnQQgAhBgGiAGIABByABqEH0QVEHjmAkQVBogAUEQaiADEJ8CIAFBEGoQfUHLrQkQ/AIhAiABQRBqEGAaAkAgAkUEQCABQRBqIAMQnwIgASABQRBqEH02AgBBtsAJIAEQOyABQRBqEGAaQQAhBQwBC0EAIQUgAkEAQQIQnQMgAhDWBCIEQX9MBEAgAhDcARoMAQsgAkEAQQAQnQMgAUEIaiAEED8Q6QIiCCgCAEEBIAQgAhCDAiAERiEJIAIQ3AEaIAkEQCADIAFBEGpBmo8HEIUCIgIQnQQgAhBgGiAGQZzUCRBUIAQQ6wNB6eUJEFQgBBDrA0Ga9QkQVBogAUEQaiADEJ8CIAAgAUEQahB9EN8EIAFBEGoQYBogAUEQaiADEJ8CIAFBEGoQWiECIAFBEGoQYBogACAIKAIAIAQQ+AogAEGEqggQ3wQgACACIARqQRFqEPcKQQEhBQsgCBDOBAsgBxDOBCADELwDGiABQbAEaiQAIAULWAECfCAFIAIgBGu3IAMgAWu3EIcJIgkQiQkiCjkDACAGIAkQiAkiCTkDACAHIAmaOQMAIAggCjkDACAAQQFGBEAgBSAFKwMAmjkDACAGIAYrAwCaOQMACwuRAgIBfwJ8IwBBEGsiDiQAIA4gBDYCCCAOIAM2AgwgDiAFNgIEIA4gBjYCACAAQQFGBEAgDkEMaiAOQQRqEKQKIA5BCGogDhCkCiAOKAIIIQQgDigCDCEDCwJ8IAcgCCAJIAoQsxgiAEUEQCAItyEQIAe3DAELIAogCGsiBSAEIAprbCAJIAdrIgYgAyAJa2xqtyAAt6MiDyAFt6IgCregIRAgDyAGt6IgCbegCyEPIA4oAgAhACAOKAIEIQUgCyAPRAAAAAAAAFJAoiABtyIPozkDACAMIAK3IBBEAAAAAAAAUkCiIA+joTkDACANIAMgBCAFIAAQsxi3n0QAAAAAAABSQKIgD6M5AwAgDkEQaiQAC3IAIAUgATYCACAGIAI2AgAgByADNgIAIAggBDYCAAJAIAQgAmsiBSAFQR91IgVqIAVzQcgAbCAAQQF0IgBODQAgACADIAFrIgAgAEEfdSIAaiAAc0HIAGxODQAgCCACIARqQQJtIgA2AgAgBiAANgIACwsIAEHw/CwQTwvdDAILfwd8IwBBwAJrIgQkACABEPMQIQwgBEEANgK8AiAEQoCAgICAgID4PzcDsAIgBEIANwOoAiAEQgA3A6ACIARCgICAgICAgPg/NwOYAiAEQYABaiAEQYgBahDUBSIIKAIAQXRqKAIAIARBiAFqahCrAxDNAyAEQYABahCOASAIKAIAQXRqKAIAIARBiAFqakEIENYLIAhBCGoiBkGz7gAQVCACEIEGEOoDQdWoARBUIAMQgQYQ6gNBn+cBEFQaIAAtAFRFBEAgBkG7oAIQVBoLIAZB/MwCEFQaIARBADYCfCAEQQA2AnggBEEANgJ0IARBADYCcAJAIAEQuQkiAEEAEKICDQACfyADmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAshDkQAAAAAAADwPyEQRAAAAAAAAPA/IRFEAAAAAAAAAAAhA0QAAAAAAAAAACECQQEhAQNAIABBACAAKAIAKAIYEQMABEAgBkG5+QIQVBpBACEJQQEhAQsgAEECIAAoAgAoAhgRAwAEQCAAQQIgBEEQaiAEQThqIARBKGogBEHgAGoQmAwaIAwgBCgCECAEKAI4IAQoAiggBCgCYCAEQfwAaiAEQfgAaiAEQfQAaiAEQfAAahC5LQsgAEEDEKICBEAgAEEDIAAoAgAoAhQRAwAaIABBABCiAkUNAQwCCyAAIARBEGogBEHsAGogBEE4aiAEQShqELMPAkAgBCgCbEECRg0AIAAQqgZBf2oiBUEBTQRAIAVBAWsEQCAEQQA2AmwMAgsgBEEBNgJsDAELIAQgDTYCbAsgAEEDIARBEGogBEE4aiAEQShqIARByABqEJgMGiAEKAJsIAwgDiAEKAIQIAQoAjggBCgCKCAEKAJIIAQoAnwiBSAEKAJ4IgcgBCgCdCIKIAQoAnAiCyAEQeAAaiAEQdgAaiAEQdAAahC4LQJ/IAFBf3MgBCgCbCIBIA1GcUUEQCABIAUgByAKIAsgBEGwAmogBEGoAmogBEGgAmogBEGYAmoQty0gBkHJqgMQVCAEKwOwAiIREIEGEOoDQcmqAxBUIAQrA6gCIhMQgQYQ6gNByaoDEFQgBCsDoAIiFBCBBhDqA0HJqgMQVCAEKwOYAiIQEIEGEOoDQcmqAxBUIAQrA2AiAxCBBhDqA0HJqgMQVCEBIAQrA1giEiECQc3ZAwwBCyAEKwNgIg8gA6EiFSAUoiAEKwNYIgMgAqEiAiAQoqAhEiAGQcmqAxBUIBUgEaIgAiAToqAQgQYQ6gNByaoDEFQhASADIQIgDyEDQeWEBAshBSABIBIQgQYQ6gMgBRBUGiAEKAJsIQ0gACAEQThqIARBKGogBEHIAGogBEEIaiAEIARBxwBqIARBvAJqIARBEGoQ4A8aIAQoArwCIgFBAEwEfyAEQQg2ArwCQQgFIAELIAlHBEAgBkGJrgQQVCAEKAK8AhC6AUHl1wQQVBogBCgCvAIhCQsgAEECQQMgACgCACgCHBEEACEKQQAhASAAQQBBAyAAKAIAKAIcEQQAIQsgBEE4ahDWASEFA0ACQCAEQcgAaiAAQQQgACgCACgCIBEDABDpAiIHEKwNRQ0AIAdBABChAi0AAEUNACAEQShqIAcoAgAQjB0gBCAEQShqEIAENgIIIAQgBEEoahDqBDYCACAEQQhqIAQQ/wEEQANAIAQoAggoAgAgBEEQahC2GARAIAUgBEEQahC1GCABQQFqIQELIARBCGoQyAQgBEEIaiAEEP8BDQALCyAEQShqEKYECyAAQQQgACgCACgCFBEDABogBxDOBCAAQQAQogJFBEAgAEEDIAAoAgAoAhgRAwBFDQELCyAAQQMgACgCACgCGBEDAARAIAVB3IEFELUYIAFBAWohAQsCQCABQQFIDQAgBCsDUCIPRAAAAAAAAAAAZEEBcw0AIAYgD0QAAAAAAABZQKIgBCgCvAIgAWy3oxCBBiIPIA+gEOoDQcSnBRBUQbrOBRBUIAUQtBhBkvMFEFQaCyAKBEAgBkG4lgYQVBoLIAsEQCAGQfy3BhBUGgsgBRBgGkEAIQEgAEEAEKICRQ0ACwsgBEEQaiAIEJ8CIARBEGoQWkEBahA/IARBEGoQfRDuByEBIAAEQCAAIAAoAgAoAgQRAAALIARBEGoQYBogCBC8AxogBEHAAmokACABC0YAIAAgARDCLSAAQcTwLDYCACAAQSBqEGshASAAQTRqEGsaIABByABqIAIQhQIaIAAgAzoAVCAAQQA2AhwgAUEAEF8aIAALMwEBfyMAQRBrIgEkACAAIAFBDGogAUEIaiABQQRqIAEQsw8gASgCDCEAIAFBEGokACAACykBAX8gACgCACEBIABBADYCACABBEAgAQRAIAEgASgCACgCBBEAAAsLC6sCAgZ/AnwjAEEgayICJAACQCAAEL0tIgMEQCABQQhqQa2IDRBUIANBpn9sQegCahC6ARoMAQsgAEECIAJBHGogAkEYaiACQRRqIAJBEGoQowYaIABBAiACQQxqIAJBCGogAkEEaiACEJgMRQ0AIAIgAigCDCIFIAIoAhwiA2siADYCDCACIAIoAgQiBiADayIHNgIEIAIgAigCCCACKAIQIgRrIgM2AgggAiACKAIAIARrIgQ2AgAgBSAGRg0AIAO3IAQgA2u3IAcgAGu3oyIIIAC3oqFEAAAAAABAj0CiEBQhCSAIRAAAAAAAQI9AohAUIQggAUEIakGvkw0QVCAIRAAAAAAAQI9AoxDqA0HjhAQQVCAJRAAAAAAAQI9AoxDqAxoLIAJBIGokAAufFQISfwF9IwBBgAJrIgIkAAJAIAAoAgRFDQAgACgCIEUEQCAAQQAQggZBAEgNAQsgAkEAOgD/ASACQQA6AP4BIABBkzEgAkH/AWoQsQ0aIABBoO4AIAJB/gFqELENGiAAKAIkRQRAIABBABD9EAsgAkHgAGogAkHoAGoQ1AUiCCgCAEF0aigCACACQegAamoQqwMQzQMgAkHgAGoQjgEgCCgCAEF0aigCACACQegAampBCBDWCyAIQQhqIgNBu6gBEFQaIANBlucBEFRBs6ACEFQgAUEBaiIHELoBQfbMAhBUGiADQan5AhBUGgJAIAAoAiQiBQRAIAJBGGogBRBKEO8QIAMgAkEYahBKEFQaIAJBGGoQRhoMAQsgA0HBqgMQVBoLIANBxNkDEFQgACgCQBC6AUHjhAQQVCAAKAJEELoBQeOEBBBUIAAoAkgQugFB44QEEFQgACgCTBC6AUH+rQQQVCABELoBQeHXBBBUGgJAIAJB2ABqIAAQuQkQ6QIiBSgCAEEAEKICDQBBASEMQQEhDUEBIQ5BASEJQQEhCgNAIAUoAgBBAxCiAiEGIAUoAgAiASgCACEEIAYEQCABQQMgBCgCFBEDABogBSgCAEEAEKICRQ0BDAILIAFBACAEKAIYEQMABEAgA0HCgQUQVEGW5wEQVEG9pwUQVCAHELoBQbjOBRBUIA0QugFB9swCEFQaIAUoAgBBACAIEOoQQQEhCgsgBSgCACIBQQEgASgCACgCGBEDAARAIANB+vIFEFQaIAUoAgAtAEQiCkUEQCADQa2WBhBUGgsgA0GW5wEQVEH3twYQVCAHELoBQbjOBRBUIA4QugFB9swCEFQaIAUoAgAQ3w8iDwRAIANB7dQGEFQgDxBUQfbMAhBUGgsgBSgCAEEBIAgQ6hALIAUoAgAiAUECIAEoAgAoAhgRAwAEQCADQZvzBhBUGiADAn9BoeAHIAUoAgAQmwxBfmoiAUEGSw0AGiABQQJ0QaDwLGooAgALEFQaIANBoPkHEFRB1ZAIEFQgBxC6AUG4zgUQVCAMELoBQfbMAhBUGiAFKAIAQQIgCBDqEAsCf0EAIAAoAgRBmMYIaigCDEUNABogBSgCACIBIAEoAgAoAiQRAQALIQEgA0HlqQgQVEGW5wEQVEHnwAgQVCAHELoBQbjOBRBUIAkQugFB9swCEFQaIAUoAgBBAyACQdQAaiACQdAAaiACQcwAaiACQcgAahCjBhogBSgCACACQccAaiACQcYAaiACQcUAaiACQcQAaiACQcMAaiACQcIAaiACQTxqIAJBOGoQ4A8hBCADQfnZCBBUIAIoAlQQugFB44QEEFQgAigCUBC6AUHjhAQQVCACKAJMELoBQeOEBBBUIAIoAkgQugFBzO4IEFQCfyAFKAIAQQMQswwiFItDAAAAT10EQCAUqAwBC0GAgICAeAsQugEaIAItAP8BBEAgBARAIANBt4QJEFQhBiACQRhqIAQQ7xAgBiACQRhqEEoQVBogAkEYahBGGgsgA0HYmAkQVCACKAI8ELoBGgsgA0H2zAIQVBoCQCAFKAIAEN8PIgRFDQAgDwRAIAQgDxCUAUUNAQsgA0Ht1AYQVCAEEFRB9swCEFQaCwJAIAUoAgAQqgZBf2oiBEEBSw0AIARBAWsEQCAKQQFxDQEgA0HArQkQVBoMAQsgCkEBcUUNACADQa2WBhBUGgsgA0G0wAkQVBogBSgCACIEQQJBAyAEKAIAKAIcEQQAIRAgBSgCACIEQQFBAyAEKAIAKAIcEQQAIREgBSgCACIEQQBBAyAEKAIAKAIcEQQAIRIgAi0ARwRAIANBk9QJEFQaCyACLQBGBEAgA0Hk5QkQVBoLA0ACQCACQRhqIAUoAgAiBEEEIAQoAgAoAiARAwAQ6QIiBBCsDUUNACAEQQAQoQItAABFDQAgAi0A/gEEQCAFKAIAQQQgAkHUAGogAkHQAGogAkHMAGogAkHIAGoQowYaIANB6PQJEFQgAigCVBC6AUHjhAQQVCACKAJQELoBQeOEBBBUIAIoAkwQugFB44QEEFQgAigCSBC6AUGZhQoQVCAFKAIAQQQQswwQgwlBm5QKEFQaCyACQTBqIAQoAgAQ7xAgAyACQTBqEEoQVBogAkEwahBGGiACLQD+AUUNACADQf2kChBUGgsgBSgCACIGQQQgBigCACgCFBEDABogBBDOBCAFKAIAQQAQogJFBEAgBSgCACIEQQMgBCgCACgCGBEDAEUNAQsLIAItAEYEQCADQd61ChBUGgsgAi0ARwRAIANB+sQKEFQaCwJAIAFFIAAoAgRBmMYIaigCDEEBR3JFBEAgAiABEIAENgIwIAIgARDqBDYCKEEBIQRBASEBIAJBMGogAkEoahD/AUUNAQNAIAJBGGogAigCMBD8ESEGIANB7tQKEFRBlucBEFRBheYKEFQgBxC6AUG4zgUQVCAJELoBQbjOBRBUIAQQugFB9swCEFRBtMAJEFQaIAIgBhCABDYCECACIAYQ6gQ2AgggAkEQaiACQQhqEP8BBEADQAJ/IAIoAhAiCyoCBEMAAMhClCIUi0MAAABPXQRAIBSoDAELQYCAgIB4CyETIAsoAgAhCyADQbD1ChBUQZbnARBUQfSGCxBUIAcQugFBuM4FEFQgCRC6AUG4zgUQVCABELoBQfbMAhBUQfOXCxBUIBMQugFBm5QKEFQgCxBUQf2kChBUGiABQQFqIQEgAkEQahCqCCACQRBqIAJBCGoQ/wENAAsLIANB/aQKEFQaIAYQzQcgBEEBaiEEIAJBMGoQtxggAkEwaiACQShqEP8BDQALDAELIAFFIAAoAgRBmMYIaigCDEECR3INACACIAEQgAQ2AjAgAiABEOoENgIoQQEhBEEBIQEgAkEwaiACQShqEP8BRQ0AA0AgAkEYaiACKAIwEPwRIgYQhwQEQCADQe7UChBUQZbnARBUQcqoCxBUIAcQugFBuM4FEFQgCRC6AUG4zgUQVCAEELoBQZuUChBUGiACIAYQgAQ2AhAgAiAGEOoENgIIIAJBEGogAkEIahD/AQRAA0AgAigCECELIANBsPUKEFRBlucBEFRB9IYLEFQgBxC6AUG4zgUQVCAJELoBQbjOBRBUIAEQugFB9swCEFRB85cLEFQCfyALKgIEQwAAyEKUIhSLQwAAAE9dBEAgFKgMAQtBgICAgHgLELoBQZuUChBUIAsoAgAQVEH9pAoQVBogAUEBaiEBIAJBEGoQqgggAkEQaiACQQhqEP8BDQALCyADQf2kChBUGiAEQQFqIQQLIAYQzQcgAkEwahC3GCACQTBqIAJBKGoQ/wENAAsLAkAgAi0A/gFFBEAgACgCBEGYxghqKAIMQQFIDQELIANBr7cLEFQaCyADQf2kChBUGiAQBEAgA0GhxAsQVBogDEEBaiEMCyARBEAgA0GI0gsQVBogDkEBaiEOQQEhCgsgEgRAIANBoeELEFQaIA1BAWohDQsgCUEBaiEJIAUoAgBBABCiAkUNAAsLIANBme8LEFQaIAJBGGogCBCfAiACQRhqEFpBAWoQPyACQRhqEH0Q7gchBCACQRhqEGAaIAUQvi0gCBC8AxoLIAJBgAJqJAAgBAsIAEHg/CwQTwvoAQEDfyMAQTBrIgIkACAAQaMxNgIEIABBhPAsNgIAIABBCGpBiS4QehogAEEBOgAYIABBADYCFCAAQYDFKigCADYCECAAQX82AgwCQCABQYvtABCUAUUNACABQcSnARCUAUUNACACQSBqIAJBGGogARB6IgEgAkEQakGA5wEQeiIDELQCIAJBKGogAkEgaiACQQhqIAAoAgQQeiIEELQCIAQQRhogAkEgahBGGiADEEYaIAEQRhogACACQShqEEpBrKACEPwCIgE2AhAgAUUEQCAAQQA6ABgLIAJBKGoQRhoLIAJBMGokAAsIAEHQ/CwQTwtPAQN/IAAoAgghASAAKAIEIAAoAgwiAkEBdWoiAyAAKAIQIAAoAhQgACgCGCAAKAIcIAAoAiAgAkEBcQR/IAMoAgAgAWooAgAFIAELEQoAC1QBA38gACgCCCEBIAAoAgQgACgCDCICQQF1aiIDIAAoAhAgACgCFCAAKAIYIAAoAhwgACgCICAAKAIkIAJBAXEEfyADKAIAIAFqKAIABSABCxEOAAtHAQF/IAAoAgBBf2oiAiABSgRAA0AgACgCCCABQQxsaiICIAJBDGoQuhIgAUEBaiIBIAAoAgBBf2oiAkgNAAsLIAAgAjYCAAtJAgF/AX4jAEEgayICJAAgAiAAKQMANwMIIAIgAikDCCACIAEQvBgpAwB8NwMQIAJBGGogAkEQahCkBykDACEDIAJBIGokACADCzYCAX8BfiMAQRBrIgEkACABIAApAwBCwIQ9fjcDACABQQhqIAEQpAcpAwAhAiABQRBqJAAgAgsuAgF/AX4jAEEQayIAJAAgAEIANwMAIABBCGogABCkBykDACEBIABBEGokACABC3IBAn8gAC0AXEEQcUUEQCAAQQBBAEEAEOMDAkAgACgCNCIBQQlPBEAgAC0AYgRAIAAgACgCICICIAEgAmpBf2oQpwUMAgsgACAAKAI4IgEgASAAKAI8akF/ahCnBQwBCyAAQQBBABCnBQsgAEEQNgJcCwukAwEGfyMAQRBrIgMkAAJ/QX8gACgCQEUNABogABDKLSAAKAIUIQUgACgCHCEGIAFBfxCQA0UEQCAAKAIYRQRAIAAgA0EPaiADQRBqEKcFCyABEKYFIQIgACgCGCACOgAAIABBARDYCAsCQCAAKAIYIAAoAhRHBEACQCAALQBiBEAgACgCFEEBIAAoAhggACgCFGsiAiAAKAJAEIkBIAJGDQFBfwwECyADIAAoAiA2AgggACgCRCICBEAgAEHIAGohBwNAIAIgByAAKAIUIAAoAhggA0EEaiAAKAIgIgIgAiAAKAI0aiADQQhqEPkKIQIgACgCFCADKAIERg0EIAJBA0YEQCAAKAIUQQEgACgCGCAAKAIUayICIAAoAkAQiQEgAkYNAwwFCyACQQFLDQQgACgCICIEQQEgAygCCCAEayIEIAAoAkAQiQEgBEcNBCACQQFHDQIgACADKAIEIAAoAhgQpwUgACAAKAIcIAAoAhRrENgIIAAoAkQiAg0ACwsQ+goACyAAIAUgBhCnBQsgARCjCgwBC0F/CyEAIANBEGokACAAC3IBAX8CQCAAKAJARQ0AIAAoAgggACgCDE8NACABQX8QkAMEQCAAQX8Q7BAgARCjCg8LIAAtAFhBEHFFBEAgARCmBSAAKAIMQX9qLAAAEJADRQ0BCyAAQX8Q7BAgARCmBSECIAAoAgwgAjoAACABDwtBfwthAQF/IAAtAFxBCHEEf0EABSAAQQBBABCnBQJAIAAtAGIEQCAAIAAoAiAiASABIAAoAjRqIgEgARDjAwwBCyAAIAAoAjgiASABIAAoAjxqIgEgARDjAwsgAEEINgJcQQELC/0EAQZ/IwBBEGsiAiQAAkACQCAAKAJARQRAQX8hBAwBCyAAEM0tIQQgACgCDEUEQCAAIAJBD2ogAkEQaiIBIAEQ4wMLQQAhASAERQRAIAAoAhAhASAAKAIIIQQgAkEENgIEIAIgASAEa0ECbTYCCCACQQhqIAJBBGoQyQQoAgAhAQtBfyEEAkAgACgCDCAAKAIQRgRAIAAoAgggACgCECABayABEIsEGiAALQBiBEAgASAAKAIIakEBIAAoAhAgAWsgACgCCGsgACgCQBCDAiIDRQ0CIAAgACgCCCABIAAoAghqIAEgACgCCGogA2oQ4wMgACgCDCwAABCrBCEEDAILIAAoAigiBSAAKAIkIgNHBEAgACgCICADIAUgA2sQiwQaIAAoAighBSAAKAIkIQMLIAAgACgCICIGIAUgA2tqIgM2AiQgACAAQSxqIAZGBH9BCAUgACgCNAsgBmoiBTYCKCACIAAoAjwgAWs2AgggAiAFIANrNgIEIAJBCGogAkEEahDJBCgCACEDIAAgACkCSDcCUCAAKAIkQQEgAyAAKAJAEIMCIgNFDQEgACgCRCIFRQ0DIAAgACgCJCADaiIDNgIoAkAgBSAAQcgAaiAAKAIgIAMgAEEkaiABIAAoAghqIAAoAgggACgCPGogAkEIahDtEEEDRgRAIAAgACgCICIBIAEgACgCKBDjAwwBCyACKAIIIAEgACgCCGpGDQIgACAAKAIIIAEgACgCCGogAigCCBDjAwsgACgCDCwAABCrBCEEDAELIAAoAgwsAAAQqwQhBAsgACgCCCACQQ9qRw0AIABBAEEAQQAQ4wMLIAJBEGokACAEDwsQ+goAC9oDAgV/AX4jAEEQayICJAACQCAAKAJARQ0AAkAgACgCRCIBBEACQCAAKAJcIgNBEHEEQCAAKAIYIAAoAhRHBEBBfyEBIABBfyAAKAIAKAI0EQMAQX9GDQULIABByABqIQUDQCAAKAJEIAUgACgCICIBIAEgACgCNGogAkEMahC9GCEDQX8hASAAKAIgIgRBASACKAIMIARrIgQgACgCQBCJASAERw0FIANBAUYNAAsgA0ECRg0EIAAoAkAQ7AVFDQEMBAsgA0EIcUUNACACIAApAlA3AwACfyAALQBiBEAgACgCECAAKAIMa6whBkEADAELIAEQigghASAAKAIoIAAoAiRrrCEGIAFBAU4EQCAAKAIQIAAoAgxrIAFsrCAGfCEGQQAMAQtBACAAKAIMIAAoAhBGDQAaIAAoAkQiASACIAAoAiAgACgCJCAAKAIMIAAoAghrIAEoAgAoAiARCQAhASAAKAIkIAFrIAAoAiBrrCAGfCEGQQELIQEgACgCQEIAIAZ9QQEQ0wwNAiABBEAgACACKQMANwJICyAAIAAoAiAiATYCKCAAIAE2AiQgAEEAQQBBABDjAyAAQQA2AlwLQQAhAQwCCxD6CgALQX8hAQsgAkEQaiQAIAELfgAjAEEQayIDJAACQAJAIAEoAkAEQCABIAEoAgAoAhgRAQBFDQELIABCfxDcBRoMAQsgASgCQCACKQMIQQAQ0wwEQCAAQn8Q3AUaDAELIAMgAikDADcCCCABIAMpAwg3AkggACACKQMINwMIIAAgAikDADcDAAsgA0EQaiQAC9sBAQF/IwBBIGsiBCQAIAEoAkQiBQRAIAUQigghBQJAAkAgASgCQEUgAlBFQQAgBUEBSBtyRQRAIAEgASgCACgCGBEBAEUNAQsgAEJ/ENwFGgwBCyADQQNPBEAgAEJ/ENwFGgwBCyABKAJAIAWsIAJ+QgAgBUEAShsgAxDTDARAIABCfxDcBRoMAQsgBEEQaiABKAJAEIsWENwFIQMgBCABKQJIIgI3AwAgBCACNwMIIAMgBCkCADcDACAAIAQpAxg3AwggACAEKQMQNwMACyAEQSBqJAAPCxD6CgALpAIBAn8jAEEQayIEJAAgBCACNgIMIABBAEEAQQAQ4wMgAEEAQQAQpwUCQCAALQBgRQ0AIAAoAiAiA0UNACADED0LAkAgAC0AYUUNACAAKAI4IgNFDQAgAxA9CyAAIAI2AjQgAAJ/AkACQCACQQlPBEAgAUUgAC0AYiIDRXJFBEAgAEEAOgBgIAAgATYCIAwDCyACED8hAiAAQQE6AGAgACACNgIgDAELIABBADoAYCAAQQg2AjQgACAAQSxqNgIgIAAtAGIhAwsgAw0AIARBCDYCCCAAIARBDGogBEEIahCHASgCACICNgI8IAEEQEEAIAJBB0sNAhoLIAIQPyEBQQEMAQtBACEBIABBADYCPEEACzoAYSAAIAE2AjggBEEQaiQAIAALiAIBAX8gACAAKAIAKAIYEQEAGiAAIAEQ+woiATYCRCAALQBiIQIgACABEJwHIgE6AGIgASACRwRAIABBAEEAQQAQ4wMgAEEAQQAQpwUgAC0AYCEBIAAtAGIEQAJAIAFFDQAgACgCICIBRQ0AIAEQPQsgACAALQBhOgBgIAAgACgCPDYCNCAAKAI4IQEgAEIANwI4IAAgATYCICAAQQA6AGEPCwJAIAENACAAKAIgIgEgAEEsakYNACAAQQA6AGEgACABNgI4IAAgACgCNCIBNgI8IAEQPyEBIABBAToAYCAAIAE2AiAPCyAAIAAoAjQiATYCPCABED8hASAAQQE6AGEgACABNgI4CwsJACAAEO4QED0LigEBAn8jAEEQayICJAAgACgCQCIBBEAgAkG5AjYCBCACQQhqIAEgAkEEahC/AiEBIAAgACgCACgCGBEBABogARCDBRDcAUUEQCAAQQA2AkALIABBAEEAIAAoAgAoAgwRBAAaIAEoAgAhACABQQA2AgAgAARAIAAgARBeKAIAEQEAGgsLIAJBEGokAAsTACAAIAAoAgBBdGooAgBqEL4YCxMAIAAgACgCAEF0aigCAGoQrQ0LNAEBfwJAIAAoAgRFDQAgABC/GCABTA0AIAAoAgQiACAAKAIAKAIIEQEAIAEQ5xghAgsgAgsIAEHA/CwQTwvvAwEDfyMAQUBqIgIkACABRQRAIAJB6g82AjQgAkHw7gs2AjBBuKAsQfnRC0ECQY3hCyACQTBqEEULIAEoAgAEQCABEEsLIAJBADYCPCAAQer6CyACQTxqEPwKGiAAKAIUELgJIQQgAigCPCIDRSADQbp/akGbEklyRQRAIAJCxoCAgICsAjcDIEGuhwwgAkEgahA7CwJAIANFBEAgBEG6f2pBmxJJDQEgAkHGADYCFCACIAQ2AhBB2pYMIAJBEGoQO0HGACEDCyAAKAIUIAMQzBgLQQAhAyAAKAIUIgQgACgCBEGApAhqKAIMIAEgBCgCACgCEBEEAARAIAAoAhQiASAAQUBrIABBxABqIABByABqIABBzABqIABB0ABqIABB1ABqIAEoAgAoAgwRDAAgACgCFBDgCCEDIAAoAgQhAQJAIANFBEAgASAAKAIUIgEgASgCACgCFBEBABDBGCAAKAIEIAAoAhQiASABKAIAKAIYEQEAEMAYDAELIAFBABDBGCAAKAIEQQAQwBgLIAIgACgCFBDwEDYCOCACQThqQdCgH0HUoB8QsQEiASAAKAIUEPAQRwRAIAAoAhQQ8BAhAyACIAE2AgQgAiADNgIAQYalDCACEDsLIAAoAgQgARDIGEEBIQMLIAJBQGskACADCzEBAX8jAEFAaiICJAAgACACIAEgABCEARCeEyIAEKUIIQEgABCgAhogAkFAayQAIAELYAEDfyAAQRxqIgIoAgAiAEEASgRAA0AgAiAAQX9qIgMQmwEoAghBAEwEQCACIAMQmwEoAgQiAQRAIAEgASgCACgCBBEAAAsgAiADEMYtCyAAQQFKIQEgAyEAIAENAAsLC/wDAQd/IwBB8AJrIgMkACADQQA2AuwCIABB5YYLIANB7AJqEPwKGiAAENAYIQggACABEPsQIABB2pcLQcioCxCyDRogA0HoAmogABD6EBDpAiEEIAMoAuwCBEAgBCgCACEBIAMgAjYCBCADIAE2AgBBkbcLIAMQOwsCQCAEEKwNRQ0AIANByAFqIAAoAiAQ+AIoAhAiB0UNACAHKAIEIAIQyw4CQCAEQQAQoQItAABFBEBBACEBDAELQQAhAQNAAkAgBCAFEKECLQAAQQpGDQAgBCAFEKECLQAAQSBGDQADQCABIgZBAWohASACIAZqIgktAABBIEYNAAsgBCAFEKECLQAAIAktAABGDQAgBiEBDAILIAQgBUEBaiIFEKECLQAADQALCwJAAn8CQAJAIAQgBRChAi0AAEUEQCABIAJqLQAARQ0BCyAAKAIgIgEEQCABEP0KED0LIANBsAFqENkFIQEgACAAKAIEIAEgACgCHBCfEyICNgIgIAAoAgQgAhDRHSAAKAIEIAAoAiAQyh0gA0EQaiAAKAIgEPgCIgIoAhANAUEBDAILIAcQ9h0MAgsgAigCECEHQQALIQIgARDQBUEAIQYgAg0BC0EBIQYgACgCBCIBQQE6AOSbCCABQQAgBxDbEgsgACAIEPsQIAQQzgQgA0HwAmokACAGC2ABBH8gABDCGCIBRQRAQQAPCwJAIAEoAgAiAEEASA0AIAEhAwNAIAAgAmohAiADKAIEIQAgA0EEaiIEIQMgAEF/Sg0ACyABIARGDQAgAiAEIAFrQQJ1bSECCyABED0gAgsOACAAQQRBhAIQ4xIgAAvdAgECfyMAQcABayICJAAgACACQbwBaiACQbgBaiACQbQBaiACQbABahDhLQRAIAIgAigCvAFB2gBtNgIgAn8gAigCICIAQQNNBEAgAEECdEGs7w5qKAIADAELQX8LIQMgAkEYaiACQSBqENQFIgAoAgBBdGooAgAgAkEgamoQqwMQzQMgAkEYahCOASAAKAIAQXRqKAIAIAJBIGpqQQIQ1gsgAEEIakG3AhC8DkHvpAoQVCABELoBQZeFChBUQcW1ChBUIAIoArwBELoBQZeFChBUQfHEChBUIAMQugFBl4UKEFRB1dQKEFQgAioCuAEQgwlBl4UKEFRB/OUKEFQgAigCtAEQVEGXhQoQVEGc9QoQVCACKgKwARCDCUGXhQoQVBogAkEIaiAAEJ8CIAJBCGoQWkEBahA/IAJBCGoQfRDuByEDIAJBCGoQYBogABC8AxoLIAJBwAFqJAAgAwuLAQEDfyMAQbAPayIGJAACQCAAIAZBCGoQ/g4iABDDGEUNACAAIAAoApQPIgUQzSEhByACBEAgAiAAQaAPaigCADYCAAsgAQRAIAEgBUHaAGw2AgALIAMEQCADIAAoApAPIAcQ8Qc2AgALQQEhBSAERQ0AIAQgAEGcD2ooAgA2AgALIAZBsA9qJAAgBQvWBgENfyMAQcABayIJJAACQCAAKAIERQ0AIAAtADhFBEAgAEEAEIIGQQBIDQELIABBABDEGCECIAlBIGogACgCIBD4AiEIIAIQPyEMIAgQwAIgDCEBIAgoAhAEQEEBIQcDQAJ/An8CQAJAAkACQAJAIAgoAhAiAygCnAIiBUEDSw0AIAQhAiAFQQFrDgMAAAIBCyAEQQFxBEBBASECIAVBAUcNAiADKAIELQAIRQ0CIAMoAgRBCxCjAQ0CIAMoAgRBChCjAQ0CCwJAIAMoAgRBAxCjAQ0AIAMoAgQtAAhFDQAgAygCBEELEKMBDQAgAygCBEEKEKMBDQAgAUEgOgAAIAFBAWohAQwDCyAEIQIgBkUNAgwBCyAAKAIEIAMQohQgAygCuAEQfxBKIQpBACECIAMoArgBEPMCIgsQ5wEhDUEAIQUCf0EAIAZFDQAaQQAgAygCBC0ACA0AGkEAIAotAABBIEcNABogC0EAEMYBLAAAIQVBAQsiBCANTg0AIAUgCmotAABFDQAgB0EBcUUEQCABQSA6AAAgAUEBaiEBCyADQYACaiEHA0ACfyAFIApqIgItAAAiBkH+AEdBACAGQSBHG0UEQCABQf4AOgAAQQEMAQsgByAEQRB0QRB1ELABEKcEBEAgAUHeADoAACABQQFqIQELAkACfyAJIAIgCyAEEMYBLAAAEIcKENQLIgJB7L9/aiIGQQ5LBEBBACACQazBAEYNARoMAgsCQAJAAkACQAJAAkAgBkEBaw4OBwcHAgMHBwABBwcHBwQFC0EBDAULQQIMBAtBAwwDC0EEDAILQQUMAQtBBgtBAnRBsKAfaigCACECCyABIAJB/gAgAkGAAkgbOgAAIAJB/wFKCyECIAFBAWohASAFIAsgBBDGASwAAGohBSAEQQFqIgQgDUcNAAsgAygCBEEEEKMBDQIgAkEARyEGQQAMAwsgAiADKAIEQQQQowFFDQMaIAdBAXEhBEEBIQcgAiAEDQMaDAELIAFB/gA6AABBASEGIAFBAWohAUEAIQdBASADKAIEQQQQowFFDQIaCyABQQo6AAAgAUEBaiEBQQAhBkEBCyEHQQALIQQgCBDKARogCCgCEA0ACwsgAUEKOwAACyAJQcABaiQAIAwL+wIBCX8jAEEwayICJAACQCAAKAIERQ0AIAAtADhFBEAgAEEAEIIGQQBIDQELIAAgAkEsahDEGCACKAIsQR9saiIIQYgBaiIJED8iB0EAOgAAIAAQ5i0hBAJAA0ACfyAEQQQgAkEoaiACQSRqIAJBIGogAkEcahCjBgRAQQAhAyACQRhqIAQQniMQ6QIiBUEAEKECLQAABEADQCAFIAMQoQItAABBIEYEQCAFIAMQoQJB/gA6AAALIAUgA0EBaiIDEKECLQAADQALCyAFKAIAIQogACgCVCEDIAIgATYCFCACIAMgAigCJGs2AhAgAiAKNgIAIAIgAigCKDYCBCACIAIoAiA2AgwgAiADIAIoAhxrNgIIIAYgB2oiAyAJIAZrQYiUCiACENABGiADEHIhAyAFEM4EQQAgAyAGaiIGIAhKDQEaC0EBCwRAIARBBCAEKAIAKAIUEQMADQEMAgsLIARFDQELIAQgBCgCACgCBBEAAAsgAkEwaiQAIAcLygcCCH8BfSMAQSBrIgMkAAJAIAAoAgRFDQAgACgCIEUEQCAAQQAQggZBAEgNAQsgA0EYakH/5gEQeiICQayECSABQQFqIgUQggEgAkHOmAlBABCCASACQc6YCUEAEIIBIAJBzpgJQQAQggEgAkHOmAlBABCCASACQc6YCSAAKAJAEIIBIAJBzpgJIAAoAkQQggEgAkHOmAkgACgCSBCCASACQc6YCSAAKAJMEIIBIAJBsq0JEHgCQCAAELkJIgBBABCiAg0AQQAhAQNAIABBAxCiAiEJIAAoAgAhBiAJBEAgAEEDIAYoAhQRAwAaIABBABCiAkUNAQwCCyAAQQAgBigCGBEDAARAIAJBr8AJIAUQggEgAkHOmAkgB0EBaiIHEIIBQQAhCCACQc6YCUEAEIIBIAJBzpgJQQAQggEgAkHOmAlBABCCASAAQQAgAhDxECACQbKtCRB4QQAhBEEAIQELIABBASAAKAIAKAIYEQMABEAgAkHM0wkgBRCCASACQc6YCSAHEIIBIAJBzpgJIAhBAWoiCBCCAUEAIQQgAkHOmAlBABCCASACQc6YCUEAEIIBIABBASACEPEQIAJBsq0JEHhBACEBCyAAQQIgACgCACgCGBEDAARAIAJB4eUJIAUQggEgAkHOmAkgBxCCASACQc6YCSAIEIIBIAJBzpgJIARBAWoiBBCCASACQc6YCUEAEIIBIABBAiACEPEQIAJBsq0JEHhBACEBCyAAQQMgA0EUaiADQRBqIANBDGogA0EIahCjBhogAkHl9AkgBRCCASACQc6YCSAHEIIBIAJBzpgJIAgQggEgAkHOmAkgBBCCASACQc6YCSABQQFqIgEQggEgAkHOmAkgAygCFBCCASACQc6YCSADKAIQEIIBIAJBzpgJIAMoAgwgAygCFGsQggEgAkHOmAkgAygCCCADKAIQaxCCASACQc6YCQJ/IABBAxCzDCIKi0MAAABPXQRAIAqoDAELQYCAgIB4CxCCASACQc6YCRB4IABBAkEDIAAoAgAoAhwRBAAaIABBAUEDIAAoAgAoAhwRBAAaIABBAEEDIAAoAgAoAhwRBAAaA0ACQCACIAMgAEEEIAAoAgAoAiARAwAQ6QIiBigCABB4IAYQzgQgAEEEIAAoAgAoAhQRAwAaIABBABCiAg0AIABBAyAAKAIAKAIYEQMARQ0BCwsgAkGXhQoQeCAAQQAQogJFDQALCyACEOcBQQFqED8gAhBKEO4HIQQgAARAIAAgACgCACgCBBEAAAsgAhBGGgsgA0EgaiQAIAQLRwEBfyMAQdAAayIJJAAgACAJQQhqIAEgAiADIAQgBSAGIAcgCBDlDyIBEJIfGiABELIEGiAAQeShLDYCACAJQdAAaiQAIAALTwEDfwJAIAAoAgQiAUUNACAAKAIgIgJFDQBBxAAQPyACIAEgACgCFCgCGCAAKAIUELgJIAAoAkAgACgCRCAAKAJIIAAoAkwQ5Q8hAwsgAwtDAgF/AX4jAEEgayICJAAgAiAAKQMANwMIIAIgAkEIaiABEMctNwMQIAJBGGogAkEQahCkBykDACEDIAJBIGokACADCysBAX8jAEEQayICJAAgAiABKQMANwMIIAAgAkEIahC8GBogAkEQaiQAIAALJAEBfyAAKAIMIgVFBEBBAQ8LIAAuAQIgASACIAMgBCAFEQkACzIBAX8gAEGQ7iwoAgAiATYCACAAIAFBdGooAgBqQZzuLCgCADYCACAAQQhqEO4QGiAACy0AAkAgACgCQA0AIAAgAUHRjQ4Q/AIiATYCQCABRQ0AIABBCDYCWCAADwtBAAu8AQEDfyMAQRBrIgEkACAAEMQKIQIgAEIANwI0IABBADYCKCAAQgA3AiAgAEHc7iw2AgAgAEIANwI8IABCADcCRCAAQgA3AkwgAEIANwJUIABCADcAWyABQQhqIAIQtwkgASgCCEGY2C0QsAIQghUhAyABQQhqEI4BIAMEQCABIAIQtwkgACABEPsKNgJEIAEQjgEgACAAKAJEEJwHOgBiCyAAQQBBgCAgACgCACgCDBEEABogAUEQaiQAIAALZgECfyAAQewAahDZCCECIABB9O0sNgIAIAJBiO4sNgIAIABBlO4sIABBCGoiAxDMEyAAQfTtLDYCACACQYjuLDYCACADEOwtIAEQ6y1FBEAgACAAKAIAQXRqKAIAakEEEIwDCyAACzoBAn8gACgCBCAAKAIMIgNBAXVqIQIgACgCCCEAIAIgASADQQFxBH8gAigCACAAaigCAAUgAAsRAgALBwAgABCVIgs6AQF/IwBBEGsiAyQAIAACfyADIAAQ/AsaIAMgASACEMUYIAMLEH0gAxBaENkPIAMQYBogA0EQaiQAC+IFAQZ/IwBBkAJrIgUkAAJ/QQEgAUGFjwcQlAFFDQAaIAFBt6cHEJQBRQshBgJAQYq5LS0AAARAIABB/MQqKAIAQQAgAiADIAQgACgCBEHowghqKAIMEMYYIQEMAQsgBUGAAmoQ1gEhCQJAAn8CQCAGRQRAAkAgAUHrxAdBBRCABQRAIAFBkeAHQQYQgAUNAQtB7fgHQSlBAUH4xCooAgAQiQEaQQAhAQwECyABQc2QCBD8AiIGBEAgBhDcARoMAgsgBUGEvS0oAgBBzPgsKAIAEIIlNgIEIAUgATYCAEH4xCooAgBBrKkIIAUQrwFBACEBDAMLIAVB+AFqQajOLRDKBCEGIAVB8AFqENQBIQcgCSAGKAIAIAcoAgAQ8C0gCRB9IgZFDQAgBiAFQewBahDlCiEHQQEMAQsgASAFQewBahDFECEHQQAhBkEACyEIAkAgB0UEQCAFKALsASIHDQELIAVB6AFqEIMBIQYCQCAIBEAgBiAJEH0Q2gEMAQsgBUEQaiAFQShqIAEQ7S0iBxDKBCEBIAVBCGoQ1AEhCCAGAn8gASgCACEKIAgoAgAhCCAFQRhqIgEQqgQgASAKIAgQxRggAQsQfRDaASABEGAaIAcQrQ0aCyAAQQAgBiACIAMgBCAAKAIEQejCCGooAgwQxhghASAGEEYaDAELIAVBADYCKAJAIAdBfGoiB0EHSQ0AIAUCfyAIBEAgBiAJEFoQiw0MAQsgARCUBwsiCDYCKCAIDQBBACEBDAELAkAgBEUNACAEQZC5LRDfAhCpDQ0AIAVBKGoQS0EAIQEMAQsCQCAHQQZNBEAgACAGIAkQWiABIAIgAyAEIAAoAgRB6MIIaigCDBDzLSEAIAVBKGoQS0EAIQEgAA0BDAILIAAgBSgCKCABIAIgAyAEEIsIIQAgBUEoahBLQQAhASAARQ0BCyAEBEAgBBCoDUUNAQtBASEBCyAJEGAaCyAFQZACaiQAIAELZAECfyMAQRBrIgUkAAJAIAAgASACIAMgBBDxLUUNAEEBIQYgACgCBEGwowhqLQAKRQ0AIAAoAgQgACgCKBCoOA0AIAUgACgCKBBKNgIAQfPyBiAFEDtBACEGCyAFQRBqJAAgBgvwAgEEfyMAQeAAayIIJAAgCEEANgJcIAhBADYCWAJAAkAgB0EASARAA0AgCAJ/IAEEQCABIAIgCEHYAGoQ9yoMAQsgAyAIQdgAahCGKwsiBzYCXEEBIQogB0UNAyAIIAlBAWoiBzYCMEGJlgYgCEEwahA7IAggCTYCICAIQUBrQRVB2rcGIAhBIGoQ0AEaIABBxNQGIAhBQGsQsg0aIAAgCCgCXCADIAQgBSAGEIsIIQsgCEHcAGoQSyAHIQkgCCgCWEVBAXRBASALGyIHRQ0ACyAHQQJGDQIMAQsgCAJ/IAEEQCABIAIgBxC1FwwBCyADIAcQkSsLIgk2AlxBASEKIAlFDQEgCCAHQQFqNgIQQYmWBiAIQRBqEDsgCCAHNgIAIAhBQGtBFUHatwYgCBDQARogAEHE1AYgCEFAaxCyDRogACAIKAJcIAMgBCAFIAYQiwghACAIQdwAahBLIAANAQtBACEKCyAIQeAAaiQAIAoLSAEBfyMAQSBrIgIkACACIAE2AhwgAUEBTgRAIAIQ6BU3AxAgAkEQaiACQQhqIAJBHGoQ8hAQ5y0gAEEYahCJEgsgAkEgaiQAC3gBAn8jAEEQayIBJAAgAEEAOgAFIABBADoABCAAQQA2AgAgAEIANwIgIABBADYCFCAAQgA3AgggAEEAOgAGIABBtgI2AhAgAEIANwIoIAECfyABQQhqIgIQyS03AwAgAgsQ6C0pAwAgAEEYahCJEiABQRBqJAAgAAvrAQEFfyMAQcABayIDJABBfyEEAkAgACgCBEUNAAJAIAAoAhQiAQRAIAEQmQ9FDQELQYSBBUEAEDsMAQsgACgCIARAIAAQugkLIAAQrg0NACAAKAIEQZDDCGotAAoNACAAQQE6ADhBACEEQTwQPyIBQQAgACgCHCAAKAIEQfCiCGoQ7wshAiAAIAE2AiAgA0EgaiACEPgCIgEoAhBFDQADQCABKAIQIQUgA0EIahDZBSECIAAoAgQgAiABKAIYKAIEIAEoAhQoAgQgBRCgHSABEMoBGiACENAFIAEoAhANAAsLIANBwAFqJAAgBAtPAQN/AkAgACgCBCIBRQ0AIAAoAiAiAkUNAEHIABA/IAIgASAAKAIUKAIYIAAoAhQQuAkgACgCQCAAKAJEIAAoAkggACgCTBDlLSEDCyADC0oBAX4gAikCACEIIAAQuxggACAHNgIgIAAgBjYCHCAAIAU2AhggACAENgIUIAAgAzYCECAAIAg3AgggACABNgIEIABB5O8sNgIAC1EBAX4gAikCACEJIAAQuxggACAINgIkIAAgBzYCICAAIAY2AhwgACAFNgIYIAAgBDYCFCAAIAM2AhAgACAJNwIIIAAgATYCBCAAQajvLDYCAAtGAgF/AX4jAEEQayIHJAAgASkCACEIQSQQPyEBIAcgCDcDCCAHIAg3AwAgASAAIAcgAiADIAQgBSAGEPgtIAdBEGokACABC0gCAX8BfiMAQRBrIggkACABKQIAIQlBKBA/IQEgCCAJNwMIIAggCTcDACABIAAgCCACIAMgBCAFIAYgBxD5LSAIQRBqJAAgAQtCAQJ/IAAoArgBEH8QSiEAA0ACQCAALQAAIgJBIEcEQCACDQEgAUEQdEEQdQ8LIAFBAWohAQsgAEEBaiEADAAACwALUgEBfwJAIAdBCkggBkEKSHINACAAKAIERQ0AIAAgASADQQN0IAJBA3RBASACG20gBSAHaiACIAMQzxggACAEIAUgBiAHEM4YIAAQ+hAhCAsgCAvBAQMFfwF9AXwjAEEQayICJAAgAkEIahBpIQMgAEHItghqKwMQIQggASgCAEEBTgRAIAhEAAAAAAAAYECitiEHA0AgASAEED4oAgAoAgAiAARAA0AgAiAAEI0PIAIgAikDADcDCCAFQQFqIQUgBgJ/IAMQTiADEFVKBEAgAxBODAELIAMQVQuyIAddaiEGIAAoAhQiAA0ACwsgBEEBaiIEIAEoAgBIDQALCyACQRBqJAAgBkEQdEEQdSAFQRB0QRB1TgsnAQF/IAAoAgRFBEBBqNsIED8iARCdBhogACABNgIEIAFBABDXEgsLXgECfyMAQfADayIEJAACQCAAKAIEIgNFBEBBqNsIED8iAxCdBhogACADNgIEDAELIAMQQxCZOQsgBBCQHSEDIAAoAgQgASACIAMQrTwhACADEKcNIARB8ANqJAAgAAsoAQF/IAAoAjAiAUUEQEH/5gEPCyABEEpFBEBB/+YBDwsgACgCMBBKC7IDAQR/IwBBgARrIgYkACAGQfgDagJ/IAJBz4QEIAIbIQIgAQsQeiEEAkACQAJAIAAoAgRFDQACQAJAIAAoAiwiAUUNACAAKAIwRQ0AIAEgBBD4Eg0AIAAoAjQgA0cNACAAKAIwIAIQwwhFDQEgACgCBEEMaiACEMMIRQ0BCyAAKAIEIgEEQCABIAEoAgAoAgQRAAALIABBADYCBAwBC0EBIQcgACgCBA0BC0Go2wgQPyIBEJ0GGiAAIAE2AgQgBkEIaiAAKAIQEI8dIQFBACEHIAAoAgQgBBBKIAAoAigiBQR/IAUQSgVBAAsgAiADIAEQ7hMhBSABEKcNQX8hASAFDQELAkAgACgCLCIBRQRAQQQQPyIFIAQQrgEhASAAIAU2AiwMAQsgASAEEPQBIAAoAiwhAQsCQCABEEotAAANACAAKAIEQQRqEEotAABFDQAgACgCLCAAKAIEQQRqEPQBCwJAIAAoAjAiAUUEQEEEED8iASACEHoaIAAgATYCMAwBCyABIAIQ2gELIAAgAzYCNEEAIQEgB0UNACAAKAIEEPUeCyAEEEYaIAZBgARqJAAgAQsrACABEFdBPGogACgCBBBDQTxqEJ8GIgBFBEBBAA8LIAIgACsDEDkDAEEBCyQAIAEQV0EoaiAAKAIEEENBKGoQnwYiAEUEQEEADwsgABDfAgsvAQF/IAAoAgQiA0UEQEGo2wgQPyIDEJ0GGiAAIAM2AgQLIAEgAkEBIAMQQxCDEwspAQF/IAAoAigiAkUEQEEEED8iAiABEHoaIAAgAjYCKA8LIAIgARDaAQsJACAAENYYED0LagAgAEIANwIEIABCADcCPCAAQQA6ADggAEEDNgI0IABB1O0sNgIAIABCADcCDCAAQgA3AhQgAEIANwIcIABCADcCJCAAQgA3AiwgAEIANwJEIABCADcCTCAAQQA2AlQgAEH/5gE2AlggAAsJAEGQuS0QzAILCABBgLktEE8LkAgBAn8gABCnOCEBIABB9OwsNgIAIABB6JsIakEBQd0tQabsAEEAIAAQQxBQIABB+JsIakEBQa+nAUHt5gFBACAAEEMQUCAAQYicCGpBAEGMoAJBsssCQQAgABBDEFAgAEGYnAhqQQFB+PgCQfypA0EAIAAQQxB1GiAAQbCcCGpEAAAAAAAAAsBBkNgDQb+EBCAAEEMQUyAAQdicCGpBAEG5rQRBnNcEQQAgABBDEHUaIABB8JwIakEBQfiABUGkpwVBACAAEEMQUCAAQYCdCGpBAEHmzQVB2/IFQQAgABBDEFAgAEGQnQhqQZDOAEH3lQZBzbcGQQAgABBDEHUaIABBqJ0IakECQbHUBkHl8gZBACAAEEMQdRogAEHAnQhqQQZB7Y4HQZenB0EAIAAQQxB1GiAAQdidCGpBlgFB18QHQfDfB0EAIAAQQxB1GiAAQfCdCGpBAUHa+AdBu5AIQQAgABBDEFAgAEGAnghqQU5BmqkIQa3ACEEAIAAQQxB1GiAAQZieCGpB0A9BztkIQY/uCEEAIAAQQxB1GiAAQbCeCGpEAAAAAAAA4D9Bl4QJQbaYCSAAEEMQUyAAQdieCGpEzczMzMzM7D9BoK0JQZbACSAAEEMQUyAAQYCfCGpEMzMzMzMzwz9Bu9MJQcnlCSAAEEMQUyAAQaifCGpB2gBBzvQJQbiECkEAIAAQQxB1GiAAQcCfCGpEuB6F61G4rj9B9JMKQdSkCiAAEEMQUyAAQeifCGpEAAAAAAAAFEBBrrUKQdnECiAAEEMQUyAAQZCgCGpEAAAAAAAAWUBBx9QKQe3lCiAAEEMQUyAAQbigCGpEAAAAAAAASUBBjPUKQdSGCyAAEEMQUyAAQeCgCGpBA0HKlwtBs6gLQQAgABBDEHUaIABB+KAIakEAQfG2C0G4wwtBACAAEEMQUCAAQYihCGpBAEHl0QtB9eALQQAgABBDEHUaIABBoKEIakEEQdjuC0HB+gtBACAAEEMQdRogAEG4oQhqQQBBkocMQZuWDEEAIAAQQxBQIABByKEIakEAQfGkDEGKsQxBACAAEEMQUCAAQdihCGpBAEGyvQxBlsoMQQAgABBDEFAgAEHooQhqQQBBq9YMQa3jDEEAIAAQQxB1GiAAQYCiCGpB0A9BmPAMQc77DEEAIAAQQxB1GiAAQZiiCGpBFEGDiA1BvZINQQAgABBDEHUaIABBsKIIakQAAAAAAAAAQEGcnQ1B+aYNIAAQQxBTIABB2KIIakEBQfywDUGruQ1BACAAEEMQUCAAQeiiCGoQtBEhAiAAQQA2AuyiCCAAQfSiCGoQaxogAEEANgLwogggAkHgBhA/IAEQ0gYgASAAKAIAKAIIEQEAENYuEPMeIABCADcDiKMICzUBAX8gACABENweIgAgASAAGyIAQQQQPxBJIgIQvQggAEUgACABRnJFBEAgABDKBhA9CyACC40BAQF/IwBBEGsiAiQAIAAgACgCACgCCBEBACABKAIEQQQQowEQtBIgACABEPAuIAEgACAAKAIAKAIIEQEAKALkB0EASiAAIAAoAgAoAggRAQBBmAhqEN8CEIAeIAEQ6w5FBEAgAkGCATYCBCACQYSnATYCAEG0oCxBxi1BAkGS7AAgAhBFCyACQRBqJAALSAAgAEGQoAhqIAAqAuyiCLsQghMgAEHooghqKAIAEJ4GQQEQjQIgAEEAOgDkmwggACAAKAIAKAIIEQEAIgAgACsD2Aa2OAIsC3QAIAEEQCAAQcQBaiABENoBCyAAQewRahDLHCAAIAIQ1xIgAwRAIAAgACgCACgCCBEBABChDhC4EiAAIAAoAgAoAggRAQAgAEEMaiADEI4cIAAgACgCACgCCBEBABC3EhoLIAAgAEGQoAhqKwMQtjgC7KIIC0QBA38gACgCCCEDIAAoAgQgACgCDCIEQQF1aiIFIAArAxAgACgCGCABIAIgBEEBcQR/IAUoAgAgA2ooAgAFIAMLEWQAC00BA38gAEEANgIAQTQQPyIBQQQ2AgAgAUEEaiICQTBqIQMgAiEBA0AgARDfGEEMaiIBIANHDQALIAAgAjYCCCAAQgA3AgwgAEEENgIECzkBAX4gAikCACEFIABBwO0sNgIAIAAgBDYCGCAAIAM5AxAgACAFNwMIIAAgATYCBCAAQZjtLDYCAAuKAQEDfyABQRhqIgQoAgBBAEoEQANAIAQgAxA+KAIAIgUQ+RggBUEANgIMIAVCgICAgPD//7//ADcCBCADQQFqIgMgBCgCAEgNAAsLIAAQ6wsgAUEANgIsIAJBABBRENsYQQEhAyACKAIAQQFKBEADQCACIAMQURDYGCADQQFqIgMgAigCAEgNAAsLC0ACAX8BfiMAQRBrIgQkACABKQIAIQVBIBA/IQEgBCAFNwMIIAQgBTcDACABIAAgBCACIAMQki4gBEEQaiQAIAELGQAgACADIARBAEMAAAAAQQAgAbYgAhC7CQvfAgEDfyMAQTBrIgQkACABKAK4ARB/EEohBSABKAK4ARDzAhBKIQYCf0EBIABBwLcIai0ACkUNABpBASABLgGEAkEDSA0AGiAAIAEoAkQgBSAGENEGRSADQQFzcQshBUEAIQMCQCAAQeCzCGorAxAgASgCuAEqAiQgAS4BhAIiBkEKIAZBCkgbspW7Y0EBcw0AQQEhAyAAQai4CGooAgxBA0gNACAEIAEoArgBEH8QSjYCIEHvlwUgBEEgahA7CwJAIAVFDQAgAEGItAhqKwMQIAEoArgBKgIou2RBAXMNACAAQai4CGooAgxBA04EQCAEIAEoArgBEH8QSjYCEEHtvgUgBEEQahA7CyADQQFqIQMLIAJBAUcEQCAAQai4CGooAgxBA04EQCAEIAEoArgBEH8QSjYCAEHP4wUgBBA7CyADQQFqIQMLIABBiLcIaigCDCEAIARBMGokACADIABOCyUBAX9BASEBAkAgAC0ABA0AIAAtAAUNACAAKAIAQX9KIQELIAELSAECfyAAIAEQ2A4gACABNgIAIAFBAU4EQANAIAAoAgggA0EDdGoiBCACKAIANgIAIAQgAi8BBDsBBCADQQFqIgMgAUcNAAsLC6YBAgF/AXwjAEEQayIFJAAgAhCtASACQRRqEK0BIAJBKGoQrQEgAkE8ahCtASAAQbCiCGorAxAhBiAFQQA2AgwgBUGxAjYCCCAFIAUpAwg3AwAgAiAFIAYgARCULiECIAMgASgCuAEgASgCtAEgACAAKAIAKAIIEQEAKAIwIABByKEIai0ACiAEIAIQgDwgAgRAIAIgAigCACgCBBEAAAsgBUEQaiQAC6sCAwN/AX0CfCMAQRBrIgUkAEEBIQMCQAJAIAEoArgBEH8Q5wFFDQAgASgCuAEQfxBKQaLEBBD9DyABKAK4ARB/EOcBRg0AIAEuAYQCIgQgAEHwtghqIgMoAgxKBEAgAygCDCEEC0ECIQMgAEHYsghqKwMQIAEoArgBKgIkIASylbsiCGMNAEEDIQMgAkEDRkEAIABBgLMIai0AChsNACABKAK4ASoCKCEGIABBkLMIaisDECEHIAJBAUYiAkUEQEEEIQMgByAGu2QNAQtBACEEIABBuLMIaisDECEHIAINAUEFIQMgByAIY0EBcw0BCyAAQai4CGooAgxBA04EQCAFIAEoArgBEH8QSjYCBCAFIAM2AgBB5+8EIAUQOwtBASEECyAFQRBqJAAgBAv/AQMBfwF9AXwjAEEQayIGJAAgAEHooQhqKAIMQQBKBEAgBkGkywJB9/gCIABB+JsIai0AChs2AgBB458CIAYQOyABKAK0ASAAIAAoAgAoAggRAQAQhAEQuRMLIAIgARCyLiAAIAAoAgAoAggRAQArA4gGIQggAEHooghqKAIAIAAoAvCiCCAAQfigCGotAAogAEGwoghqKwMQtiAImiAAQeAIaisDEKO2IgcQ0y4gBQRAIAUgASgCSCAAQcihCGotAAoQhDwLIAMgASgCtAEoAgwgBkEIahD1DhCYLiADQQAQURDbGCAAIAdBACADIAEgAiAEIAUQgBEgBkEQaiQAC0QAIAAQtA0gAEEUahC0DSAAQShqELQNIABBPGoQtA0gACAFNgJgIAAgBDYCXCAAIAM6AFggACACOAJUIAAgATYCUCAAC+4FAwl/AX0CfCMAQbABayIEJAAgBEHIAGogAEGAoghqKAIMIABBsKIIaisDELYgAEH4oAhqLQAKIAAgACgCACgCCBEBACAAQeihCGoiCSgCDBCcLiEFIAAgACgCACgCCBEBACsDiAYhDiAAQeAIaisDECEPIAAgASAFIARBMGoQnAoiByACIAMQmy4gDpogD6O2IQ0CQCAAQQAQghENAAJAIABB8JwIai0ACkUNACABKAJIRQ0AIAAgDSABIAIgAyAFIAcQ7S4LIABB2JwIaigCDARAIAFBzABqENU5CyADRQ0AIAMgASgCuAEQpgoNACADIAEgAEHIoQhqLQAKEIY8CyAEQShqENIBIQYgBEEgahCDASEKAkACQAJAIABB+JsIaiIMLQAKRQ0AA0AgACAIEIIRBEAgA0UNBCADLQBoRQ0DCwJAIAUgBiAEQSRqEOEYIgtBBEcEQANAIAYgASgCtAEQ2gVFBEAgASgCtAEgBigCBCAGKAIAa0EBahD0CwsgBiABKAK0ARDaBQRAIAEoArQBIAYoAgAgBigCBCAAIAAoAgAoAggRAQAoAjAQngpFDQMLIAUgBiAEQSRqEOEYIgtBBEcNAAsLIAkoAgxBAUgNAkH26wBBABA7DAILIAAgBCoCJCAGIAtBAnRB0OwsaigCACAHIAEgBSADEIERIAAgDSAGKAIAIAcgASAFIAIgAxCAESAIIAItAABBAXNqIQggCSgCDEEBTgRAIAQgCDYCEEHlpgEgBEEQahA7CyACQQA6AAACQCADRSAAIAgQghFFcg0AIAMgASgCuAEQgTxFDQAgACABIAUgAyAKEJkuCyAMLQAKDQALCyADRQ0BCyADIAEoArgBIABByKEIai0ACiAKEP87CyAJKAIMQQFOBEAgBCAAQeiiCGooAgAtAKwGNgIAQa7mASAEEDsLIAoQRhogBxCiAyAFQTxqELMNIAVBKGoQsw0gBUEUahCzDSAFELMNIARBsAFqJAALCABB8LgtEE8LCABB4LgtEE8LCQAgABDoExA9C30BAn8jAEEgayIHJAAgAyACTCIIRQRAIAEgBSACIAMQkxMLIAdBCGogACAFIAIQPigCACAGEP4QIgQQQCIAEEEgABA8RQRAA0AgACgCCCACIAMQ8gsgABBEGiAAEDxFDQALCyAIRQRAIAEgBSACIAMQlBMLIAdBIGokACAEC5cFAgJ/AX0jAEEQayIDJAAgAyAAQQhqIgIgACgCBEEUbGpBABA+KgIAIAEqAgCUQwAAAACSIAIgACgCBEEUbGpBARA+KgIAIAEqAgSUkiACIAAoAgRBFGxqQQIQPioCACABKgIIlJIgAiAAKAIEQRRsakEDED4qAgAgASoCDJSSIAIgACgCBEEUbGpBBBA+KgIAIAEqAhCUkiACIAAoAgRBFGxqQQUQPioCACABKgIUlJIgAiAAKAIEQRRsakEGED4qAgAgASoCGJSSIAIgACgCBEEUbGpBBxA+KgIAIAEqAhyUkiACIAAoAgRBFGxqQQgQPioCACABKgIglJIgAiAAKAIEQRRsakEJED4qAgAgASoCJJSSIAIgACgCBEEUbGpBChA+KgIAIAEqAiiUkiACIAAoAgRBFGxqQQsQPioCACABKgIslJIgAiAAKAIEQRRsakEMED4qAgAgASoCMJSSIAIgACgCBEEUbGpBDRA+KgIAIAEqAjSUkiACIAAoAgRBFGxqQQ4QPioCACABKgI4lJIgAiAAKAIEQRRsakEPED4qAgAgASoCPJSSIAIgACgCBEEUbGpBEBA+KgIAIAEqAkCUkiACIAAoAgRBFGxqQREQPioCACABKgJElJIgAiAAKAIEQRRsakESED4qAgAgASoCSJSSIAIgACgCBEEUbGpBExA+KgIAIAEqAkyUkiACIAAoAgRBFGxqQRQQPioCACABKgJQlJIgAiAAKAIEQRRsakEVED4qAgAgASoCVJSSIAIgACgCBEEUbGpBFhA+KgIAIAEqAliUkiACIAAoAgRBFGxqQRcQPioCACABKgJclJJDAADIwpU4AgwgA0EMakGonx9BrJ8fENMeIQQgA0EQaiQAIAQLmwEBBX8jAEEgayIDJAACQAJAIAAtAAAiBARAIARBI0YNAiAAIQUDQCAEQRh0QRh1QQBOBEAgBBC2BA0DCyAAIAZBAWoiBmoiBS0AACIEDQALCyADIAA2AgBBsKYBIAMQOwwBCyAFQQA6AAAgASAANgIAIAMgAjYCECAAIAZqQQFqQerlASADQRBqEPsCQQFGIQcLIANBIGokACAHC44JARN/IwBBMGsiCSQAIAEoArgBEH8QSiEFIAEoArgBEPMCEEohAwJAIAUtAABFDQBBfyENA0ACQCABKAJEIAUgAyIELAAAENsNBEAgEEEBaiEQAkAgBkF/aiIDQQNLDQACQAJAIANBAWsOAgIBAAsgESASSiEDIBEgEkEBaiISIAMbIREgASgCRCAFIAQsAAAQ/wMgDUYEQCAOIAtKIQMgDiALQQFqIgsgAxshDkEEIQYMBAtBASELQQQhBiABKAJEIAUgBCwAABD/AyENDAMLIAdBAWohBwtBASEGIAEoAkQgBSAELAAAEP8DIQ1BASELQQEhEgwBCyABKAJEIAUgBCwAABCSCwRAIBBBAWohEAJAIAZBfmoiA0EDSw0AAkACQCADQQFrDgIBAgALIBMgFEohAyATIBRBAWoiFCADGyETIAEoAkQgBSAELAAAEP8DIA1GBEAgDiALSiEDIA4gC0EBaiILIAMbIQ5BBSEGDAQLQQEhC0EFIQYgASgCRCAFIAQsAAAQ/wMhDQwDCyAHQQFqIQcLQQEhC0ECIQYgASgCRCAFIAQsAAAQ/wMhDUEBIRQMAQsgASgCRCAFIAQsAAAQjAgEQCAVQQFqIRUCQCAGQX9qIgNBBUsNAEEGIQYCQCADQQJrDgQDAQEDAAsgCkEBaiEKC0EDIQYMAQsCQAJAIAQtAABBAUcNACAFLQAAQSBHDQAgDEEBaiEMDAELIA9BAWohDwsgBkF/aiEDQQAhBiADQQJLDQAgA0ECa0UEQCAHQQFqIQcMAQsgCkEBaiEKCyAIQQFqIQggBEEBaiEDIAUgBCwAAGoiBS0AAA0ACyAGQX9qIgRBAksNACAEQQJrRQRAIAdBAWohBwwBCyAKQQFqIQoLAkACQAJAIABBoLcIai0ACkUgCEEESXIgECAKayAVIAdrQQAgAEHQtwhqLQAKG2pBAXQgCExyDQAgDiAAQZC4CGooAgxODQAgAEGwtwhqLQAKBEBBACEEIAAgASgCRCAFIAMQ0QYNAgtBACEEIBMgAEHgtwhqKAIMSg0BIBEgAEH4twhqKAIMSg0BCwJAIAEuAYQCQQJIDQAgBUGixAQQ0xgNAEEBIQQgASgCuAEtADRBCEYNASABKAK4AS0ANEELRg0BIAEoArgBLQA0QQpGDQEgASgCuAEtADRBBkYNASAAIAEoAkQgBSADENEGIAJyDQELIABBqLgIaigCDEEETgRAIAkgASgCuAEQfxBKNgIgQZGgByAJQSBqEDsgCSAMNgIQIAkgCjYCDCAJIAc2AgggCSAPNgIEIAkgCDYCAEHsugcgCRA7CyAMIA9yRQRAQQEhBCAIQQNJIAggByAKakpyDQELQQMhBCAMIAggD2sgDGsgB2sgCmtKIAxBAU5BACAMIA9qQQF0IAhKG3INACAMQQF0IA9qIQAgCEEFSQ0BQQIhBCAHIApqIABqIgBBBUogALIgCLKVQwAAAD9ecg0AQQEhBAsgCUEwaiQAIAQPCyAJQTBqJABBAUEBQQIgAEEDSBsgCEF9akEBSxtBAiAAIAhIGwsHACAAEJ8iC48EAgd/BH0jAEEQayIKJAAgCkEIahBvIQYgAy4BAiEJIAYCfyACLgEAIgiyIg4gAy4BACIHsiIPWwRAIAghBSABLwECDAELAn8gAi4BArIgCbIiDJMgDiAPk5UiDSABLgECsiAMIA0gD5STIg6TlCABLgEAspIgDSANlEMAAIA/kpUiDItDAAAAT10EQCAMqAwBC0GAgICAeAshBSAOIA0gBbKUkiIMi0MAAABPXQRAIAyoDAELQYCAgIB4CyILOwECIAYgBTsBACAEAn8CQCAIIAVMQQAgBSAHTBtFQQAgByAFSiAFIAhKchsNACACLgECIgQgC0EQdEEQdSIHTEEAIAcgCUwbRUEAIAkgB0ogC0EQdEEQdSAESnIbDQAgBSAIayIEIARBH3UiBGogBHMgAEGonQhqIgQoAgxIBEAgBi4BAiACLgECayIAIABBH3UiAGogAHMgBCgCDEgNAQsgBi4BACADLgEAayIAIABBH3UiAGogAHMgBCgCDEgEQCAGLgECIAMuAQJrIgAgAEEfdSIAaiAAcyAEKAIMSA0BC0EBIQUgBi4BACAGLgECIAMgAhCREwwBC0EAIQUgAiADIAIuAQIgAS4BAiIEayIAIABsIAIuAQAgAS4BACIBayIAIABsaiADLgECIARrIgAgAGwgAy4BACABayIAIABsakkbCzYCACAKQRBqJAAgBQsQACAABEAgABDoGCAAED0LC4YCAgZ/AX4CQCABQQFIDQAgACgCBCABTg0AQX9BfyABQQQgAUEEShsiBK1CDH4iCKciAUEEaiIDIAMgAUkbIAhCIIinGxA/IgEgBDYCACABQQRqIgMgBEEMbGohAiADIQEDQCABEN8YQQxqIgEgAkcNAAtBACEBIAAoAgghAgJAAkAgACgCACIFQQBKBEADQCADIAFBDGwiBmoiByACIAZqIgYpAgA3AgAgByAGKAIINgIIIAFBAWoiASAFRw0ADAIACwALIAJFDQELIAJBfGoiBSgCACIBBEAgAiABQQxsaiEBA0AgAiABQXRqIgFHDQALCyAFED0LIAAgBDYCBCAAIAM2AggLC8MBAQJ/IAAoAgBBAEoEQANAIAAgAhCbASABEPMLIAJBAWoiAiAAKAIASA0ACwtBACECIABBFGoiAygCAEEASgRAA0AgAyACEJsBIAEQ8wsgAkEBaiICIAMoAgBIDQALCyAAQShqIgMoAgBBAU4EQEEAIQIDQCADIAIQmwEgARDzCyACQQFqIgIgAygCAEgNAAsLIABBPGoiACgCAEEBTgRAQQAhAgNAIAAgAhCbASABEPMLIAJBAWoiAiAAKAIASA0ACwsLWQECfyABQQFIBEAgAQ8LA0AgAiAAIAEQ6gkiAxCbARCDEUUEQCABDwsgACADEJsBIQQgACABEJsBIgEgBCgCCDYCCCABIAQpAgA3AgAgAyIBQQBKDQALIAEL2wEBB38gACgCREHjyAYQ/QEhBCAAKAJEQaLEBBD9ASEFIAAoAkRBqeYGEP0BIQYgACgCREHygwcQ/QEhByAAQYACaiICLgEEQQFOBEADQAJAIAAoArgBIAEQeSAGRw0AIAAoArgBIAQgARDGAyACIAFBEHRBEHUiAxCwARD1A0UNACACIAMQsAEQzR0LAkAgACgCuAEgARB5IAdHDQAgACgCuAEgBSABEMYDIAIgAUEQdEEQdSIDELABEPUDRQ0AIAIgAxCwARDNHQsgAUEBaiIBIAIuAQRIDQALCwtYAQF/IAAoAgAiAiAAKAIERgRAIAAgACgCBCICQQF0QQQgAhsQqC4gACgCACECCyAAIAJBAWo2AgAgACgCCCACQQxsaiIAIAEoAgg2AgggACABKQIANwIAC1MBAn8gASgCAEEBTgRAA0AgASAEENYDIgUtAAgEQCAAIAUoAgAgBSgCBEF/akEBIAIqAhxBAUMAACBAIAMQuwkaCyAEQQFqIgQgASgCAEgNAAsLC2gCBH8BfSMAQSBrIgEkACAAQQAQ2B0gACgCKCECIAAuARwhAyAALgEeIQQgACoCPCEFIAEgACgCQDYCGCABIAW7OQMQIAEgBDYCCCABIAM2AgQgASACNgIAQbKDBCABEDsgAUEgaiQAC+oCAgV/BH0jAEEwayIEJAAgAigCCCIGBEAgAigCBCEFA0AgBRCNCCEHAkACQCAEQShqIAYoAgQQjQgiCCgCACAHKAIEEIECIAMoArQBENoFBEAgAygCtAEgCCgCACAHKAIEIAAoAlwoAjAQngoNAQsgBSoCICEKIAYoAgQqAiAhCyABIAUQhxEhCSABIAYoAgQQhxEhDCAAIAQoAiggBCgCLEECIAIqAjAgCSAMkpMiCUMAAAAAXkEBcwR8RAAAAAAAAAAABSACKgIgIAogC5KTIAmVuwu2QQEgACoCVCADELsJGgwBCyAAKAJgQQRIDQAgBCAEKQMoNwMAIARB06gDNgIIQZ4sIAQQOyAEQRBqIAMoArQBIAQoAiggBCgCLBDeAhBAIQUgBEEQahBBIARBEGoQPA0AA0AgBSgCCBCuLiAFEEQaIARBEGoQPEUNAAsLIAYoAgQhBSAGKAIIIgYNAAsLIARBMGokAAtxAQN/IwBBEGsiAiQAIAAoAgAhAyACIAEoAgg2AgggAiABKQIANwMAIAAgAhCsLiABIAAQmBwiBCkCADcCACABIAQoAgg2AgggACAAIAMgARCqLhCbASIAIAEoAgg2AgggACABKQIANwIAIAJBEGokAAs3AgF/AX4jAEEQayIDJAAgAyACKQIANwMIIAMpAgghBCAAIAE4AgggACAENwIAIANBEGokACAAC/ABAQZ/IwBBMGsiAyQAIAEoArQBIQIgA0EQahCGERogAigCDEEBTgRAA0AgAyACKAIMNgIAIAMgBSIGQQFqIgUgAigCEGo2AgwgBSIEIAMgA0EMahCfASgCACIHSARAA0ACQCADIAYgBBCBAiACENoFBEAgAiAGIAQQ3gINAQsgAiAGIARBf2ogACgCXCgCMBCeCkUEQCAFIAIoAgxODQEgAiAFIAQgACgCXCgCMBCeCkUNAQsgACAGIARBA0MAAAAAQQEgACoCVCABELsJGgsgBEEBaiIEIAdHDQALCyAFIAIoAgxIDQALCyADQTBqJAALjQEBBH8gACgCACEFQQAQjgYiAiAFTgRAQQAPCwNAIAACfyACQQFqIgMgBUgEQCADIAIgACADEJsBIAAgAhCbARCDERshAgsgAgsQmwEgARCDEUUEQCAEDwsgACACEJsBIQMgACAEEJsBIgQgAygCCDYCCCAEIAMpAgA3AgAgAiIEEI4GIgIgBUgNAAsgBAt+AQN/IwBBEGsiASQAIAAoAgAiAkEBTgRAIAJBf2ohAwJAIAJBAk4EQCABIAAgAxCbASICKAIINgIIIAEgAikCADcDACAAIAMQoAEgACAAIAEQsy4QmwEiACABKAIINgIIIAAgASkDADcCAAwBCyAAIAMQoAELCyABQRBqJAALOgEBfSAAKgIAIgQgAioCAF5BAXNFBEAgAiAEOAIACyABKgIAIgQgAyoCAF1BAXNFBEAgAyAEOAIACwu2AwMDfwN9AXwjAEEQayIEJABBAiEDIAAoAhxBAkcEQCAALgFUIQUgASoCPEMAAIA/XkUEQCABKgI8QwAAgL9dQQFzIQMLIAAgAzsBVCAAIANBAXRqIgMgAy8BSEEBajsBSCACBEAgACAALgFUQQF0aiICIAIvAU5BAWo7AU4LIAVBAEgiAkUEQCAAIAAvAVYgBSAALgFUayIDIANBH3UiA2ogA3NqOwFWCyAEIAEqAjQ4AgwgBCABKgI4OAIIQQIhASAEQQxqIARBCGogACAALgFUQQJ0aiIDQTBqIANBPGoQtS4CQCACRQRAIAAqAjAgACoCPCIHXg0BIAAqAjQiBiAAQUBrKgIAXg0BIAAqAjggACoCRCIIXg0BIAAuAUgiArdEmpmZmZmZ2T+iIAAuAU63Yw0BIAAuAUwiA7dEmpmZmZmZ2T+iIAAuAVK3Yw0BIAZDAAAAAF5BAXNFBEAgB7sgBrsiCaNEmpmZmZmZ2T9jIAi7IAmjRJqZmZmZmdk/Y3INAgsgAC4BVkEBSg0BIAIgA3JBAEchAQwBCyAALwFKQQFHIQELIAAgATYCHAsgBEEQaiQACzQBAX8CQCAAELYNDQAgABC8CQ0AIAAQtw0NACAALQBZDQAgAC0AWg0AIAAQuA1FIQELIAELUQEBfyMAQfAAayICJAAgABBNBEAgABDrHgsgABDdBSACQQhqIAEQnQ8iARCBHyABEOEIGiAAEN0FIgAoAgggACgCAEHoAGxqGiACQfAAaiQACzABAX8gAEHwAGogARA+KAIAIAIoAgBGBH8gAEGEAWogARA+KAIAIAIoAgRGBUEACwtJAQF/IwBBEGsiAiQAIAAoAhggAUgEQCACQfQCNgIEIAJBq7sPNgIAQaSgLEGWug9BAkGfqAsgAhBFCyAAIAE2AhwgAkEQaiQACzUAIAAQwAIgACgCEARAA0AgACgCEEGAAmoQ3zkgABDKARogACgCEA0ACwsgACgCAEEBOgAMCzEBAX9BASEBAkAgACgCEA0AIAAQ4hgNACAAKAIUIgBFBEBBAA8LIAAtAAhFIQELIAELjAgDCX8CfQF8IwBBQGoiByQAIAUEQCAFIAQEfyAEKAJwIAEoAixGBUEACzoAAAsgASgCBCEIIAAoAvAFEMELIQkgASoCqAEiEEMAAAAAXARAIAFBADYCqAEgASABKgKYASAQkzgCmAEgASoCpAEgASgCLLKVIQ8LQcAAED8gAigCRCABKAIsEMAIIgogASgCLBC6LiABKAIsIgxBf2ohCwJAAkACQCAMQQFIDQAgD7shESAERSAFRXJFBEAgASEGIAkhDANAAkAgBS0AAEUNACAEIAsgCBCNCBC5Lg0AIAVBADoAAAsgCiALIAgQjQgoAgQgCBCNCCgCAGtBAWoiDiAIEJsTAkAgD0MAAAAAWw0AAkAgASAGRwRAIAYoAggNAQsgACgC8AUQhAEgCCgCBBCbBA0BCyABIA8gBioCoAGTEI4RIAEqAqgBu6C2OAKoASAAKAIMQQNIDQAgBioCoAEhECAHIBE5AyAgByAQuzkDKEGE7A4gB0EgahA7CwJ/QQEgDEEBcQ0AGkEAIAYoAhAiCUUNABogCSgCFEEMRgshCSANIA5qIQ0gBigCCCIGRQ0CIAtBAEohDiAGKAIEIQggC0F/aiELIAkhDCAODQALDAILIAEhBiAJIQwDQEEBIQkgCiALIAgQjQgoAgQgCBCNCCgCAGtBAWoiBCAIEJsTAkAgD0MAAAAAWw0AAkAgASAGRwRAIAYoAggNAQsgACgC8AUQhAEgCCgCBBCbBA0BCyABIA8gBioCoAGTEI4RIAEqAqgBu6C2OAKoASAAKAIMQQNIDQAgBioCoAEhECAHIBE5AzAgByAQuzkDOEGE7A4gB0EwahA7CwJAIAxBAXENACAGKAIQIgVFBEBBACEJDAELIAUoAhRBDEYhCQsgBCANaiENIAYoAggiBkUNASALQQBKIQQgBigCBCEIIAtBf2ohCyAJIQwgBA0ACwwBCyALRQ0BCyAHQa8LNgIUIAdBvbYLNgIQQaSgLEGx+w5BAkGfqAsgB0EQahBFCyANIAIoArQBKAIMRwRAIAdBsAs2AgQgB0G9tgs2AgBBpKAsQaj9DkECQZ+oCyAHEEULIA9DAAAAAFwEQCABIAEqAqgBIAEqApgBkjgCmAELIAogASoCIBC8CCAKIAEqAiQQ5g8gAUE4aiIEIgUQuA0EfUMAAAAABSAFKgI0CyEPIAogBBC4DQR9QwD+/0YFIARBQGsqAgALOAIwIAogDzgCLCAKAn8gASgCECIEBEBBDCAJDQEaIAQoAhQMAQsCQCAALQAiRQ0AIAEoAhQtAAgNAEEFDAELIAEtALQBQQBHQQF0C0H/AXEQ5gYgCiAAKALwBSAKIAMgAigCtAEQ7DZBAXM6ADYgB0FAayQAIAoLrAEBAX0gAQRAIAAgAhC8CSAAKwPQA7YQ/wohAyACLQBZRQRAIANDAAAAAJIPCyADIAArA/gDtpIPCyAAIAIQtg0gACsDqAO2EP8KIAAgAhC8CSAAKwPQA7YQ/wqSIAAgAhC3DSAAKwOgBLYQ/wqSIAAgAigCLCAAKwPwBLYQ/wqSIAItAFkEfSAAKwP4A7YFQwAAAAALkiACLQBaBH0gACsDyAS2BUMAAAAAC5ILbAEDfyMAQRBrIgIkACAAEIQBIgQgARC2A0UEQCACQf4ANgIEIAJB+Y4PNgIAQaSgLEGkjA9BAkGfqAsgAhBFCyAEIAEQ9gkiASgCAEEBRgRAIAFBABA+KAIAIAAoAjRGIQMLIAJBEGokACADCycAIAAgARB6GiAAIAU4AhAgACAEOAIMIAAgAzoACCAAIAI2AgQgAAvdAwMIfwJ9AXwjAEHQAGsiCCQAAkACQCABEHIiCUEBTgRAIAEQ6wQiCkEBTg0BCyAEIQkMAQsgASAJaiEPIAEhCyAEIQkDQCAAKAIMQQJOBEAgCCAAKALwBSAJIAsgChDkGDkDSCAIIAk2AkQgCCALNgJAQaaYDiAIQUBrEDsLIAAoAvAFIAkgCyAKEOQYIRIgBSAFKAIAQQFqNgIAIBIgELugtiEQIAAtAMoBDQEgCiALaiIOIA9PDQEgDQR/IAwFIAQQciEMIAwgDhByIAogDGpqQQFqED8iDSAEIAwQWCIJagsgCyAKELYFIApqIgxBADoAACAOIgsQ6wQiCkEASg0ACwsgBwJ9IAArA4ABIBAgBSgCALKVIhC7IhJkQQFzRQRAIAAoAgxBAU4EQCAIIBI5AzBBz50OIAhBMGoQOwsgBkEBOgAAIAArA4ABtiEQCyAQCxCnFIw4AgAgACACELoNIAOVEKcUIREgACsD4AEgByoCALuiIBG7obYhESAAKAIMQQJOBEAgACACELoNIQIgCCARuzkDICAIIBC7OQMYIAggAiADlbs5AxAgCCAJNgIIIAggATYCBCAIIAE2AgBB8qMOIAgQOwsgDQRAIA0QPQsgCEHQAGokACARCxgAQX9BASAAKAIAKgIcIAEoAgAqAhxdGwvmCQIEfwF9IwBBgARrIgUkACAAIAEgAiADQQRqIAQgBUH/A2oQvS4hByAAKALwBSgC5AdBAU4EQCAHIAVBkANqEIMBIgZBABDMByABIAYQShC1DSAGEEYaCyAAKAIMQQFOBEAgB0Ht1g4Q7wQLIAVBkANqEJwRIQYCQAJAIARFDQAgASgCEARAIAEoAhAgBy0ANDYCFAsgASAGEOUYIAcgBkHgAGoiCEEAEMwHIAYgASgCHDYCZCAAKAIMQQFOBEAgCBBKIQggBioCZCEJIAUgCDYCgAMgBSAJuzkDiANB7NoOIAVBgANqEDsgBSAGKgIAuzkD8AJBvd4OIAVB8AJqEDsgBSAGKgIEuzkD4AJBvd4OIAVB4AJqEDsgBSAGKgIIuzkD0AJBvd4OIAVB0AJqEDsgBSAGKgIMuzkDwAJBvd4OIAVBwAJqEDsgBSAGKgIQuzkDsAJBvd4OIAVBsAJqEDsgBSAGKgIUuzkDoAJBvd4OIAVBoAJqEDsgBSAGKgIYuzkDkAJBvd4OIAVBkAJqEDsgBSAGKgIcuzkDgAJBvd4OIAVBgAJqEDsgBSAGKgIguzkD8AFBvd4OIAVB8AFqEDsgBSAGKgIkuzkD4AFBvd4OIAVB4AFqEDsgBSAGKgIouzkD0AFBvd4OIAVB0AFqEDsgBSAGKgIsuzkDwAFBvd4OIAVBwAFqEDsgBSAGKgIwuzkDsAFBvd4OIAVBsAFqEDsgBSAGKgI0uzkDoAFBvd4OIAVBoAFqEDsgBSAGKgI4uzkDkAFBvd4OIAVBkAFqEDsgBSAGKgI8uzkDgAFBvd4OIAVBgAFqEDsgBSAGKgJAuzkDcEG93g4gBUHwAGoQOyAFIAYqAkS7OQNgQb3eDiAFQeAAahA7IAUgBioCSLs5A1BBvd4OIAVB0ABqEDsgBSAGKgJMuzkDQEG93g4gBUFAaxA7IAUgBioCULs5AzBBvd4OIAVBMGoQOyAFIAYqAlS7OQMgQb3eDiAFQSBqEDsgBSAGKgJYuzkDEEG93g4gBUEQahA7IAUgBioCXLs5AwBBvd4OIAUQO0Hy4A5BABA7CyAEQaQBaiAGELguIAUtAP8DBEAgBCoCbCAHKgIkIgleQQFzRQRAIAQgCTgCbAsLIAQtAGhFDQAgBxCgAhA9DAELAkAgAigCSCIIRQ0AIAgQTQ0AIAdBACACKAJIIAAoAgwQ3B0LAkAgAigCvAEEQCAHKgIkIAIoArwBKgIkXUEBcw0BCyACIAcQ7gtFDQAgACgCDEEBSA0AQdDjDkEAEDsLIAcgASoCHBC8CCAAKALwBSAHIAEoAhBFIAEoAlQgACgCDEEAShD5NiACIAAoAvAFQYAIaigCDCAAKALwBSgC5AdBAEogBxDtC0UNAAJAIAIoArgBIAdHDQACQCAAKALwBSAHIAEoAlQQ7TZFDQAgARC8LkUNACAAQQE6AKwGCyADIAE2AiwgA0EBOgAAIAAoAgxBAU4EQEGd5g5BABA7IAcQ7jkLAkAgASgCEEUNACAAKALwBSAHEPwYIQggACgC8AUhAyAIBEAgAyAHIAAoAtgFEPM2DAELIANBARC0EgsgBEUNACAEAn9BACABKAIQRQ0AGiABLQC0AUEARws6AJgBCyAAKAK8BUUNACACKAJIRQ0ACyAGEOEIGiAFQYAEaiQAC7sDAQl/IwBB0AFrIgIkACACQTBqEIQRIQUgARDAAiABKAIQBEAgAEG4sghqIQkgAEGouAhqIQcDQEEAIQMCf0EAIAAgASgCECIEIAJBLmoQ1xgiCEUNABogBCgCBEEDEKMBIApyQQFxBEAgBygCDEEBTgRAIAIuAS4hAyACIAQoArgBEH8QSjYCBCACIAM2AgBB6ocGIAIQOwsgBCAINgKcAiAGIQNBAQwBCwJAIAQoAgRBBBCjAQRAAkAgBkEBcUUNACAEIAUoAhBGDQADQCAAIAUoAhAgAkEsahDXGCEDIAcoAgxBAU4EQCACLgEsIQYgAiAFKAIQKAK4ARB/EEo2AiQgAiAGNgIgQb6qBiACQSBqEDsLIAUoAhAgAzYCnAIgBRDKARogBCAFKAIQRw0ACwsgBygCDEEBTgRAIAIuAS4hAyACIAQoArgBEH8QSjYCFCACIAM2AhBBvqoGIAJBEGoQOwsgBCAINgKcAkEAIQMMAQtBASEDIAZBAXENACACQTBqIAFBoAEQWBoLQQALIQogCS0ACkUEQCAEEPMdCyABEMoBGiADIQYgASgCEA0ACwsgAkHQAWokAAuMAQEBfyMAQSBrIgMkACADQQhqIAIQQCICEEECQCACEDwNAANAIAEtALQBRQ0BIAEqAhwgAigCCCoCHGBBAXMNASABIAEtALQBIAIoAggtALQBQX9zcToAtAEgAhBEGiACEDxFDQALCyAAKAIMQQNOBEAgAyABLQC0ATYCAEGk8A0gAxA7CyADQSBqJAAL4QkCA38CfSMAQZAEayICJAAgAUUEQCACQbAJNgKkAyACQb22CzYCoANBpKAsQY3EDkECQZ+oCyACQaADahBFCwJ9IABBsAZqIgMiBCgCBEEUbCAEaigCCEEYRgRAIAEgAkGwA2oQ5RggAyACQbADahCiLiEFAkAgACgCDEEESA0AIAIgBbs5A4ADQbPIDiACQYADahA7IAAoAgxBBUgNACACQYmUDzYC8AIgAiACKgKwA7s5A/gCQZfNDiACQfACahA7IAJB4JUPNgLgAiACIAIqArQDuzkD6AJBl80OIAJB4AJqEDsgAkHRlw82AtACIAIgAioCuAO7OQPYAkGXzQ4gAkHQAmoQOyACQcGZDzYCwAIgAiACKgK8A7s5A8gCQZfNDiACQcACahA7IAJB25sPNgKwAiACIAIqAsADuzkDuAJBl80OIAJBsAJqEDsgAkHPnQ82AqACIAIgAioCxAO7OQOoAkGXzQ4gAkGgAmoQOyACQbmfDzYCkAIgAiACKgLIA7s5A5gCQZfNDiACQZACahA7IAJBpqEPNgKAAiACIAIqAswDuzkDiAJBl80OIAJBgAJqEDsgAkGWow82AvABIAIgAioC0AO7OQP4AUGXzQ4gAkHwAWoQOyACQfakDzYC4AEgAiACKgLUA7s5A+gBQZfNDiACQeABahA7IAJB3aYPNgLQASACIAIqAtgDuzkD2AFBl80OIAJB0AFqEDsgAkHTqA82AsABIAIgAioC3AO7OQPIAUGXzQ4gAkHAAWoQOyACQe+qDzYCsAEgAiACKgLgA7s5A7gBQZfNDiACQbABahA7IAJBoawPNgKgASACIAIqAuQDuzkDqAFBl80OIAJBoAFqEDsgAkHNrQ82ApABIAIgAioC6AO7OQOYAUGXzQ4gAkGQAWoQOyACQciuDzYCgAEgAiACKgLsA7s5A4gBQZfNDiACQYABahA7IAJB/68PNgJwIAIgAioC8AO7OQN4QZfNDiACQfAAahA7IAJBwrEPNgJgIAIgAioC9AO7OQNoQZfNDiACQeAAahA7IAJB17IPNgJQIAIgAioC+AO7OQNYQZfNDiACQdAAahA7IAJBy7MPNgJAIAIgAioC/AO7OQNIQZfNDiACQUBrEDsgAkGGtQ82AjAgAiACKgKABLs5AzhBl80OIAJBMGoQOyACQcK2DzYCICACIAIqAoQEuzkDKEGXzQ4gAkEgahA7IAJBgLgPNgIQIAIgAioCiAS7OQMYQZfNDiACQRBqEDsgAkGGuQ82AgAgAiACKgKMBLs5AwhBl80OIAIQOwsgBSABKgIwlAwBCwJ9IAEoAhAiAwRAQwAAgD8gAygCFEELRg0BGgsgACsD2AJEAAAAAAAA8D+gtiIFIAEoAhANABogACsDgAMgBbugtiIFIAEoAiwgACgCvAJMDQAaIAArA5gFIAEoAiwgACgCvAJrt6IgBbugtgshBSABKgKYASIGQwAAAABeQQFzRQRAIAUgBiABKAIsspWSIQULIAAtACIEQCAFIAEoAhQiAAR/IAAFIAJBzwk2ApQDIAJBvbYLNgKQA0GkoCxB+dAOQQJBn6gLIAJBkANqEEUgASgCFAsqAhCUDAELIAAgASgCECABQThqEL4uIQYgASoCICAFIAaSlAshBSACQZAEaiQAIAUL0QIAIAAQ1AEaIABDAAAAADgCHCAAIAg2AhQgACAHNgIQQQAhByAAQQA2AgwgACABNgIIIAAgAjYCBCAAIAIqAiA4AiAgACACKgIkOAIkIAIQ7B4hAiAAIAM4AjAgAEEBNgIsIAAgAjYCKCAAQThqIARB4AAQWBogACAFKAIYNgKwASAAIAUpAhA3AqgBIAAgBSkCCDcCoAEgACAFKQIANwKYASAAQQE6ALUBIAAgBjoAtAEgCQRAQQQQPxCDASEHCyAAIAc2AhgCQCABBEAgACABKgIgIAAqAiCSOAIgIAEqAiQiAyAAKgIkXUEBc0UEQCAAIAM4AiQLIAAgACgCKCABKAIoajYCKCAAIAAoAiwgASgCLGo2AiwgACABKgIwIAAqAjCSOAIwIAlFDQEgByABKAIYEKcCIAAoAhghBwsgCUUgB0VyDQAgByAJEHgLIAALNQAgASACIARBmAFqQQAgBBsgBAR/IAQoAiwFQQALIAAtAPQFIAMgBSAAKAIMQQJKIAYQjxEL0A4DCH8BfgJ9IwBBoAFrIgckACAAKALwBRCEASEJIAMoAgQhCiAEBH8gBCgCBAVBAAshCCAJIAoQmwQEQCAGIAYoAhBBAWo2AhALAkAgACgC8AUoArQBRQ0AIAYtAFgNAAJAIAhFIAAoAvAFIAoQuQ1Fcg0AIAkgCCgCBBDoAkUEQCAJIAgoAgQQxwJFDQELIAZCfzcDAAwBCyAAKALwBSAKEL8uIQsCf0EAIAhFDQAaQQEgCSAIKAIEEOgCDQAaIAkgCCgCBBDHAgshDQJAIAkgChDoAg0AIAkgChDHAg0AQQAgCiANGyAKIAsbIQwLAkAgDA0AIAYpAwBCf1ENACAAKALwBSgCtAEiCyAGKQMAIAsoAgAoAhgREgBFDQELAkAgACgC8AUoArQBIAYpAwAQwgsiD0J/UQRAIAZCfzcDAAwBCyAGIAAoAvAFKAK0ASILIA8gDCACIAsoAgAoAggRGQAiDzcDACAPQn9SDQELIAZBAToAWAsCQAJAIARFIAJyDQAgACgC8AUgChC5DUUNACAGQgA3AyAMAQsgCSAKEMYFBEAgBiAGKAIkQQFqNgIkDAELIAhFDQAgCSAKEPoDRQ0AAkAgCSAIKAIEEPoDDQAgBigCJEEASg0AIAYoAiBBAUgNAQsgBiAGKAIgQQFqNgIgCyAGIAkgChD8CDYCKAJAIAAoAvAFEIQBKAI0IAAoAvAFEIQBKAIgRg0AAkAgCSgCOCAJKAIgRwRAIAkoAjggBigCKEYNAQsgCSgCPCAJKAIgRg0BIAkoAjwgBigCKEcNAQsgBiAAKALwBRCEASgCNDYCKAsCQCAERQ0AIAQoAmAgACgC8AUQhAEoAiRGDQAgBCgCYCECIAYoAiggACgC8AUQhAEoAiRGBEAgBiACNgIoDAELIAYoAiggAkYNACAGQQE6AFkLAkAgCSAKEOgCBEAgBiAGKAIIQQFqNgIIDAELIAkgChDHAgRAIAYgBigCDEEBajYCDAwBCyAJIAoQmwQNACAGIAYoAhRBAWo2AhQLAkAgCEUgACgC7AUoAgBBAUhyDQACfwJAIAguARwgAy4BHEcEQCAILgEeIAMuARxHDQELIAMuARwMAQsgCC4BHCADLgEeRwRAQX8gCC4BHiADLgEeRw0BGgsgAy4BHgshBCAAKAIMQQJOBEACf0HA+gsgCC4BHEEASA0AGiAAKALsBSAILgEcEIgDKAIACyEMAn9BwPoLIAguAR5BAEgNABogACgC7AUgCC4BHhCIAygCAAshCwJ/QcD6CyADLgEcQQBIDQAaIAAoAuwFIAMuARwQiAMoAgALIQ0CfyAEQQBIBEBBwPoLIgIMAQsgACgC7AUgBBCIAygCACECIAAoAuwFIAQQiAMoAgALIQ4gByAENgKUASAHIA42ApABIAcgAjYCjAEgByANNgKIASAHIAs2AoQBIAcgDDYCgAFB/q0OIAdBgAFqEDsLIAVB4ABqEE0NAEEAIQICfSAEQQBOBEAgBCAAKALsBSgCAE4EQCAHQfQINgI0IAdBvbYLNgIwQaSgLEHZsw5BAkGfqAsgB0EwahBFCyAAKALsBSAEEIgDIAgoAgQgCiAHQZwBahCAC0UNAiAHKAKcAbIMAQsgBkEBOgBaAkAgCC4BHCIEQQBIDQAgACgC7AUoAgBFBEAgB0GJCTYCdCAHQb22CzYCcEGkoCxBgrkOQQJBn6gLIAdB8ABqEEULIAAoAuwFIAQQiAMgCCgCBCAKIAdBnAFqEIALRQ0AIAcoApwBsiEQQQEhAgsCQCAILgEeIgRBAEgNACAAKALsBSgCAEUEQCAHQYkJNgJkIAdBvbYLNgJgQaSgLEGCuQ5BAkGfqAsgB0HgAGoQRQsgACgC7AUgBBCIAyAIKAIEIAogB0GcAWoQgAtFDQAgAkEBaiECIBAgBygCnAGykiEQCwJAIAMuARwiBEEASA0AIAAoAuwFKAIARQRAIAdBiQk2AlQgB0G9tgs2AlBBpKAsQYK5DkECQZ+oCyAHQdAAahBFCyAAKALsBSAEEIgDIAgoAgQgCiAHQZwBahCAC0UNACACQQFqIQIgECAHKAKcAbKSIRALAkACQCADLgEeIgNBAEgNACAAKALsBSgCAEUEQCAHQYkJNgJEIAdBvbYLNgJAQaSgLEGCuQ5BAkGfqAsgB0FAaxBFCyAAKALsBSADEIgDIAgoAgQgCiAHQZwBahCAC0UNACACQQFqIQIgECAHKAKcAbKSIRAMAQsgAkEATA0CCyAQIAKylQshEAJAAkAgBSABQX9qEOoOIgJFDQAgECACspUiEUMAAAAAXQ0AIBFDAAAAQF5BAXMNAQsgBiAGKAIsQQFqNgIsCyAAKAIMQQJIDQAgCSAIKAIEEL4BIQAgCCgCBCEDIAkgChC+ASEEIAcgAjYCICAHIBC7OQMYIAcgATYCECAHIAo2AgwgByAENgIIIAcgAzYCBCAHIAA2AgBBhb8OIAcQOwsgB0GgAWokAAuXAQAgAUUEQCAAQgA3AwggAEEAOgBaIABBADsBWCAAQn83AwAgAEEAOwFOIABBADsBSCAAQgA3AyAgAEKAgICchICAwMMANwI8IABCADcDECAAQgA3AyggAEIANwMwIABBADYCOCAAQoCAgIDw/z83AVAgAEEANgFKIABBgICAnAQ2AkQgAEIANwMYIAAPCyAAIAFB2wAQWAvIAgEGfyMAQRBrIgYkAAJ/IAVFBEAgAEH8BWoQSiEHIABBgAZqDAELIAUoAhQQSiEHIAUoAhRBBGoLKAIAIQggBkEANgIMIAZBADoACyAAIAEgAiADIAcgBkEMaiAGQQtqIAZBBGoQwS4hAiAEuyAAKwOIAqMgAruitiECIAUEQCAFKAIUIgkqAhAhAyAGIAkqAgwgBioCBJI4AgQgAyACkiECCyAGKAIMIgkgCGogACgCNGsiAEEAIABBAEobIQoCQCAAQQFIDQADQCAHLQAARQ0BIAcQ6wQgB2ohByAAQQFKIQsgAEF/aiEAIAsNAAsLIAggCmshCAJAIAVFDQAgBSgCFC0ACEUNACAGQQE6AAsLQRQQPyIAIAcgCCAGLQALIAYqAgQgAhDALiEFIAAgARB4IAAgACgCBCAJajYCBCAGQRBqJAAgBQuHBAEKfyMAQfABayIDJAAgA0HQAGoQhBEhBCABEMACIAEoAhAEQCAAQai4CGohBSAAQbiyCGohCSAAQciyCGohCgNAAkAgASgCGCgCBCgCBCICBEAgAhCjA0UNAQsgASgCECECIAotAAoEQCACEKsuCyAJLQAKBEAgAhDzHQsCQAJAAkAgAkGAAmoQxx0NAAJAIAAgAiACEOMIQQBHIgsQpC4iCEUNACAAIAIgCBCaLgRAIAUoAgxBAU4EQCADIAIoArgBEH8QSjYCIEG95AIgA0EgahA7C0EBIQYgAkEBNgKcAiAHRQ0DIAIgBCgCEEYNAwNAIAUoAgxBAU4EQCADIAQoAhAoArgBEH8QSjYCEEHPkwMgA0EQahA7CyAEKAIQQQE2ApwCIAQQygEaIAIgBCgCEEcNAAsMAwsgACACIAggCxCWLkUNACAGBEAgBSgCDEEBTgRAIAMgAigCuAEQfxBKNgIwQYnEAyADQTBqEDsLQQEhBiACQQE2ApwCDAULIAcNAyADQdAAaiABQaABEFgaIAUoAgxBAkgNAyADIAIoArgBEH8QSjYCQEGU8gMgA0FAaxA7DAMLIAUoAgxBA0gNACADIAIoArgBEH8QSjYCAEH4mwQgAxA7C0EAIQYLQQAhBwwBC0EAIQZBASEHCyABEMoBGiABKAIQDQALCyADQfABaiQAC8oHAgN/AX4jAEHgAGsiBSQAAkAgAAJ/IARFBEAgACAAQYQGajYC2AVBAAwBCyAEKAIQIgZFBEBBACECDAILIAAgBjYC2AUgBigCFAs2AuAFAkAgAUUNACAAKALwBSIGIAYQhAEgAygCBCACRRD6GEUNACAAKAIMQQFOBEBB/vYNQQAQOwtBGBA/IAAoAtgFQQwQhREhAgwBCwJAIAAoAvAFIAMoAgQQuQ1FDQAgBARAIAQoAhAoAhRBBkYNAQsgACgCDEEBTgRAQb79DUEAEDsLQQAhAiAERSABcg0BIAAoAuAFQQxGDQEgBCgCLCAAKAK8AkgNAUEAIQMgBCgCECgCAEEBSA0BA0ACQAJAIAQoAhAgAxD/CSIGLAAQIgFBAEgNACAAKALwBSABQf8BcRDnGCIBRQ0AIAYtABINACABKAIIQQFHDQAgBikDACIIQn9RDQAgASAIIAEoAgAoAhQREgANAQsgA0EBaiIDIAQoAhAoAgBIDQEMAwsLIAAoAgxBAU4EQEGxgg5BABA7C0EYED8gAEGYBmpBDBCFESECDAELIAAoAvAFEIQBIAMoAgQQ9gkhAiAFQcgAahCcBSEGAkAgAigCAEEBSA0AIABB2AVqIQdBACEEIAEEQANAIAAoAgxBA04EQCADKAIEIQEgBSACIAQQPigCADYCJCAFIAE2AiBB74cOIAVBIGoQOwsgACgC8AUiASAHIAEQhAEgAiAEED4oAgAgBCACKAIAQX9qRhDmGCAAKALgBUUNAiAEIAIoAgBBf2pIBEAgBiAAKALcBRC3CCAAIAY2AtgFCyAAKAIMQQNOBEAgAygCBCEBIAUgAiAEED4oAgA2AhQgBSABNgIQQaiNDiAFQRBqEDsLIARBAWoiBCACKAIASA0ADAIACwALA0AgACgCDEEDTgRAIAMoAgQhASAFIAIgBBA+KAIANgJEIAUgATYCQEHvhw4gBUFAaxA7CyAAKALwBSIBIAcgARCEASACIAQQPigCAEEAEOYYIAAoAuAFRQ0BIAQgAigCAEF/akgEQCAGIAAoAtwFELcIIAAgBjYC2AULIAAoAgxBA04EQCADKAIEIQEgBSACIAQQPigCADYCNCAFIAE2AjBBqI0OIAVBMGoQOwsgBEEBaiIEIAIoAgBIDQALC0EAIQIgAEEANgLYBQJAIAAoAuAFIgEEQEEYED8gACgC3AUgARCFESECDAELIAAoAgxBBEgNACAFIAAoAvAFEIQBIAMoAgQQvgE2AgBB4ZMOIAUQOwsgBhDeAwsgBUHgAGokACACC7wBAQV/IwBBMGsiAiQAAkAgAUUNACACQRhqIAEQQCIEEEEgBBA8DQADQCAEKAIIIgVBADYCDAJAIAAgBSgCBCgCBCIDEPoDRQRAIAAgAxDGBUUNAQsgACADEOYcIgYgA0YNACACIAEQQCEDIAIQQQJAIAIQPA0AA0AgBiADKAIIKAIEKAIERg0BIAMQRBogAhA8RQ0ACwsgAhA8DQAgBSADKAIINgIMCyAEEEQaIAQQPEUNAAsLIAJBMGokAAvmCQEVfyMAQeAAayIDJAAgA0EAOwFeAkAgASgCACIEKAIEt0QAAAAAAABZQKIgBCgCALejIABB8K4IaisDEGRBAXNFBEAgARC7LiAAQbCxCGotAApFDQEgAyABKAIAKQIANwMAQcIJIAMQOwwBCyAAQbCxCGotAAoEQCADIAEoAgApAgA3A1BB98wAIANB0ABqEDsLIAEQwAIgASgCEEUNACAAQbCwCGohDSAAQZCwCGohDiAAQeCuCGohDCAAQcCwCGohDyAAQdCwCGohCSAAQaCwCGohECAAQfiwCGohESACQQFzIRIgAEHosAhqIRMgAEHorwhqIRQgAEHArwhqIRUgAEHgpwhqIQogAEGYrwhqIRYDQCABKAIYIgcoAgQoAhghAgJAAkAgBygCCCIEQQFIDQAgBygCDLdEAAAAAAAAWUCiIAS3oyAWKwMQZEEBcw0AIAotAAoEQCADIAcpAgg3AhQgAyACQRB0QRB1NgIQQYWIASADQRBqEDsLQQAhAgNAIAEoAhAiBEUNAiAHIAEoAhhHDQICfwJAIA4tAApFDQAgBEGAAmoiBRDYCUEATARAQQAgBS4BBCAJKAIMTg0CGgsgDS0ACkUNACAFLgEEIAkoAgxIDQAgACAEKAJEIAQoArgBEH8QSiAEKAK4ARDzAhBKENEGRQ0AIAEoAhQaIAQgASADQd4AaiADQdwAahCNEUEAIAUuAQQgAy4BXkYNARoLAkAgAiAMLQAKcUEBRw0AIAEoAgggASgCFEcNACAEKAIELQAIQQFHDQAgBEEBOgCyAgsgBEGAAmoQ3jlBAQshAiABEMoBGgwAAAsACyAKLQAKBEAgASgCGCgCCCEEIAMgASgCGCgCDDYCSCADIAQ2AkQgAyACQRB0QRB1NgJAQfLFASADQUBrEDsLQQAhCyABKAIQRQ0AA0AgByABKAIYRw0BIAtBAWohCwJAAkAgASgCFCIGKAIIIgJBAUgNACAGKAIMt0QAAAAAAABZQKIgArejIBUrAxBkQQFzDQAgBigCELdEAAAAAAAAWUCiIAYoAgy3oyAUKwMQY0EBcw0AIAotAAoEQCADIAYpAgg3AiQgAyALQRB0QRB1NgIgQeKEAiADQSBqEDsLQQAhAgNAIAEoAhAiBUUNAiAGIAEoAhRHDQIgAiEEAkACQCASIBMtAApyQQFGBEAgEC0ACkUNASAFQYACaiIIENgJQQBMBEBBACECIAguAQQgCSgCDE4NAwsgDy0ACkUNASAILgEEIAkoAgxIDQEgACAFKAJEIAUoArgBEH8QSiAFKAK4ARDzAhBKENEGRQ0BIAEoAhQaIAUgASADQd4AaiADQdwAahCNEUEAIQIgCC4BBCADLgFeRw0BDAILIAVBgAJqIggQ2AkhF0EAIQIgESsDECAXsiAILgEEspW7Y0EBcw0BCwJAIAQgDC0ACnFBAUcNACABKAIIIAEoAhRHDQAgBSgCBC0ACEEBRw0AIAVBAToAsgILIAVBgAJqEN05QQEhAgsgARDKARoMAAALAAsgCi0ACgRAIAMgBikCCDcCNCADIAtBEHRBEHU2AjBBvLcCIANBMGoQOwsgASgCEEUNAANAIAYgASgCFEcNASABEMoBGiABKAIQDQALCyABKAIQDQALCyABKAIQDQALCyADQeAAaiQAC9QCAQN/IwBBIGsiBSQAIAVBCGogARBAIQEgACgC8AUQhAEhBiABEEECQCABEDxFBEBBACEAA0ACQCAGIAEoAggoAgQiBxCoBQ0AIABFBEAgASgCCCEACwJAIAIoAgANACAGIAcQxgVFDQAgAiABKAIINgIACwJAIAMoAgANACAGIAcQ6AJFDQAgBiAHEMYFDQAgAyABKAIINgIACyAEKAIADQAgBiAHEMcCRQ0AIAQgASgCCDYCAAsgARBEGiABEDxFDQALIAANAQsgBUGVAzYCBCAFQb22CzYCAEGkoCxBmb0MQQJBn6gLIAUQRUEAIQALAkACfwJAIAIoAgBFBEAgAygCAA0BQQAMAgsgBCgCAEEARyEBDAILIAQoAgBBAEcLIQEgAiAANgIACyADKAIARQRAIAMgADYCAAsgBCgCAEUEQCAEIAA2AgALIAVBIGokACABC/MDAgp/BX0jAEEgayILJAACQCABRQRAQX8hAQwBCyAAKALwBRCEASEKIAtBCGogARBAIggQQUF/IQkgCBA8BEBBfyEBDAELA0AgCCgCCCIEKAIEKAIEIQMgBCgCBCoCICEMAkACQCADQX9HDQAgBCgCCCIBRQRAQX8hAwwCCwNAIAEoAgQqAiAhDCABKAIEKAIEIgNBf0cNASABKAIIIgENAAtBfyEDDAELIAogAxDGBQRAIAQgBSAFRSANIAxeciIBGyEFIAwgDSABGyENDAELIAogAxDoAgRAIAwgDiAGRSAOIAxeciIBGyEOIAQgBiABGyEGDAELIAogAxDHAkUNACAMIA8gB0UgDyAMXnIiARshDyAEIAcgARshBwsgCBBEGiADIAkgAkUgECAMXnIiARshCSAMIBAgARshECAEIAIgARshAiAIEDxFDQALIAJFBEBBfyEBDAELIAUgAiAFGyIBIAEtALQBQQJyOgC0ASAGIAIgBhsiASABLQC0AUEEcjoAtAEgByACIAcbIgEgAS0AtAFBCHI6ALQBIAIgAi0AtAFBAXI6ALQBIAdBAEcgBSAGckEAR3EhASAJQX9GDQAgACgC8AUgCRC5DUUNACACLQC0ASIAQQ5xRQ0AIAIgAEEOcjoAtAELIAtBIGokACABC8EBAgJ/An0jAEEgayICJABDAACAPyEEIAEQTUUEQCACQQhqIAEQQCIBEEFDAAAAACEEIAEQPEUEQANAIAEoAghFBEAgAkHoBzYCBCACQb22CzYCAEGkoCxBrKkOQQJBn6gLIAIQRQsgACABKAIIKgIkELoNIQUgARBEGiADQQFqIQMgBCAFkiEEIAEQPEUNAAsLIAAoAvAFEIQBKAIIIQEgBCAAIAArA6gBthC6DSABIANrspSSIQQLIAJBIGokACAEC6gCAQJ/IwBBEGsiBSQAIAAgAzgC+AUgACACOgD0BSAAQQA7AawGIAAgBDgC6AUgAEGEBmoiAhDgBCAAKALwBSACQQAQthIgAEGYBmoiAhDgBCAAKALwBSACQQAQoA4CQCAALQAiRQ0AAkACQCABRQ0AIAEQf0EAEMMIRQ0AIABB/AVqIgIgARB/EPQBIAAtAKoCRQ0BIAJBIBCCBAwBCyAAQfwFakG2wwsQ2gELIABB/AVqIgEQSiECIAEQ5wEhASAAQQA2AoAGIAFFDQAgASACaiEBA0AgAhDrBCIGBEAgACAAKAKABkEBajYCgAYgAiAGaiICIAFHDQEMAgsLIAVBqAE2AgQgBUG9tgs2AgBBpKAsQdLRC0ECQZ+oCyAFEEULIAVBEGokAAuDAgEBfyAAKALcBSIBBEAgARDeAyABED0LIABBsAZqIgFBHGoQ2gQaIAFBCGoQ2gQaIAEQRhogAEGYBmoQ3gMgAEGEBmoQ3gMgAEH8BWoQRhogAEHIBWoQTyAAQbAFahB0IABBiAVqEFIgAEHgBGoQUiAAQbgEahBSIABBkARqEFIgAEHoA2oQUiAAQcADahBSIABBmANqEFIgAEHwAmoQUiAAQcgCahBSIABBsAJqEHQgAEGgAmoQTyAAQfgBahBSIABB0AFqEFIgAEHAAWoQTyAAQZgBahBSIABB8ABqEFIgAEHYAGoQdCAAQUBrEHQgAEEoahB0IABBGGoQTyAAEHQgAAsfACAAEIMBGiAAQQA2AgQgAEEIahBrGiAAQRxqEGsaC/sGAQJ/IwBBEGsiAyQAIABBAEGDLEHt6gBBACACKAIgEEMQdRogAEEYakEAQemlAUHv5AFBASACKAIgEEMQUCAAQShqQQhB254CQZfKAkEAIAIoAiAQQxB1GiAAQUBrQQpBpfgCQdmnA0EAIAIoAiAQQxB1GiAAQdgAakH0A0G11wNB+4IEQQAgAigCIBBDEHUaIABB8ABqRI3ttaD3xrA+QbysBEG21QQgAigCIBBDEFMgAEGYAWpEAAAAAAAARMBBl4AFQaamBSACKAIgEEMQUyAAQcABakEAQbbMBUHE8QVBACACKAIgEEMQUCAAQdABakS4HoXrUbieP0GqlQZBx7YGIAIoAiAQQxBTIABB+AFqRAAAAAAAADBAQe7TBkHo8QYgAigCIBBDEFMgAEGgAmpBAUGejgdB2qYHQQAgAigCIBBDEFAgAEGwAmpBA0GVxAdBvd8HQQAgAigCIBBDEHUaIABByAJqRJqZmZmZmbk/QaD4B0H0jwggAigCIBBDEFMgAEHwAmpEMzMzMzMzwz9B2qgIQfG/CCACKAIgEEMQUyAAQZgDakSamZmZmZnJP0Ge2QhB1u0IIAIoAiAQQxBTIABBwANqRJqZmZmZmbk/QeCDCUH/lwkgAigCIBBDEFMgAEHoA2pEAAAAAAAA4D9B66wJQeK/CSACKAIgEEMQUyAAQZAEakQzMzMzMzPTP0GE0wlBoeUJIAIoAiAQQxBTIABBuARqRAAAAAAAAAAAQbL0CUGahAogAigCIBBDEFMgAEHgBGpEmpmZmZmZqT9B1ZMKQbOkCiACKAIgEEMQUyAAQYgFakR7FK5H4XqEP0GNtQpBx8QKIAIoAiAQQxBTIABBsAVqQQBBqdQKQdflCkEAIAIoAiAQQxB1GiAAQcgFakEAQeX0CkGyhgtBASACKAIgEEMQUEEUED8iBEIANwMAIARBADYCECAEQgA3AwggAEHYBWpBACAEEJwFQQAQvwsaIABBADYC+AUgAEEAOgD0BSAAIAI2AvAFIAAgATYC7AUgAEEANgLoBSAAQfwFahCDARogAEEANgKABiAAQYQGahCcBRogAEGYBmoQnAUaIABBADsBrAYgAEGwBmoQ1S4gACgC8AVFBEAgA0GDATYCBCADQb22CzYCAEGkoCxBuZcLQQJBn6gLIAMQRQsgA0EQaiQAIAALwQMBBn8gARDAAiABKAIQBEAgAEGgpwhqIQQgAEHgsQhqIQUgAEHQsQhqIQYDQCAAIAEoAhBB5AAQ2QMaAkAgBi0ACgRAQQAhAiABKAIQQYACaiIDLgEEQQFOBEADQCADIAJBEHRBEHUiBxCwARDVDgRAIAMgBxCwARDLHQsgAkEBaiICIAMuAQRIDQALCyABEMoBGgwBCwJAIAEoAhQoAghBAUgNACAFKwMQIAEoAhQoAgyyIAEoAhQoAgiylbtmQQFzDQACQCABKAIQIgJBgAJqEOg5RQ0AIAQtAApFBEAgACACKAJEIAIoArgBEH8QSiACKAK4ARDzAhBKENEGRQ0BCyABKAIUGiACEOkuCyABEMoBGgwBCyABKAIUIQIgASgCEEUNAANAIAIgASgCFEcNASABEMoBGiABKAIQDQALCyAAIAEoAhBB7gAQ2QMaIAEoAhANAAsLIAEQwAIgASgCAEIANwIAIAEoAhAEQEEAIQBBACECA0AgACABKAIYRwRAIAEoAhgiAEIANwIICyACIAEoAhRHBEAgASgCFCICQQA2AhAgAkIANwIICyABEO8dIAEQygEaIAEoAhANAAsLC0wBA38gAEEANgIAQSQQPyIBQQQ2AgAgAUEEaiICQSBqIQMgAiEBA0AgARBJQQhqIgEgA0cNAAsgACACNgIIIABCADcCDCAAQQQ2AgQLLQEBfyAAKAIAIgIEQCACED0LIAAgASgCADYCACABQQA2AgAgACABKAIENgIEC0sBAn8gAC0ACgR/AkADQAJ/QQEgASAAIAJBA3RqIgMoAgxGDQAaIAMoAhAgAUYLDQEgAkEBaiICIAAtAApJDQALQQAPC0EBBUEACwvxAQEHfyMAQRBrIggkACAIQQA2AgwgAkEBTgRAIAJB//8DcSEMIABBkJ0IaiENIABB4KAIaiEOA0AgCEEANgIMAkAgBygCACICRQ0AIAEgCkECdGohCQNAIAAgCSgCACACKAIQIAhBDGogAxD8LiACKAIUIgINAAsgCCgCDCICRQ0AIAkoAgAiCyACKAIMRg0AIAIgCygCDEYNACALIAIgDigCDBCKESANKAIMTg0AIAAgBCAIIAkoAgAgCCgCDBCBAiICIAAgAhDvGCAAIAIQ7hiSIAYgByAFEIsRCyAKQQFqIgogDEcNAAsLIAhBEGokAAumBQELfyMAQRBrIg0kACACQQFOBEAgAkH//wNxIQsgAEGonQhqIQogAEGQnQhqIQ8gAEHgoAhqIRBBACECQQEhDANAIAJBAWoiESALSQRAIAEgAkECdGohCSAMIQIDQAJAIAEgAkECdGoiCCgCACIHRQ0AIAkoAgAgByAQKAIMEIoRIA8oAgxODQAgCSgCACIHIAgoAgAiDigCDEYNACAOIAcoAgxGDQAgBygCEC4BACAOLgEAayIHIAdBH3UiB2ogB3MgCigCDEgEQCAJKAIAKAIQLgECIAgoAgAuAQJrIgcgB0EfdSIHaiAHcyAKKAIMSA0BCyAJKAIAKAIMLgEAIAgoAgAuAQBrIgcgB0EfdSIHaiAHcyAKKAIMSARAIAkoAgAoAgwuAQIgCCgCAC4BAmsiByAHQR91IgdqIAdzIAooAgxIDQELIAkoAgAiBygCECAHIAcoAgwQnQcgCSgCACIHKAIQIAcgCCgCABCdB2tBFEoNACAIKAIAKAIQLgEAIAkoAgAuAQBrIgcgB0EfdSIHaiAHcyAKKAIMSARAIAgoAgAoAhAuAQIgCSgCAC4BAmsiByAHQR91IgdqIAdzIAooAgxIDQELIAgoAgAoAgwuAQAgCSgCAC4BAGsiByAHQR91IgdqIAdzIAooAgxIBEAgCCgCACgCDC4BAiAJKAIALgECayIHIAdBH3UiB2ogB3MgCigCDEgNAQsgCCgCACIHKAIQIAcgBygCDBCdByAIKAIAIgcoAhAgByAJKAIAEJ0Ha0EUSg0AIAAgAyANQQhqIAkoAgAgCCgCABCBAiIIIAAgCBDvGCAAIAgQ7hiSIAUgBiAEEIsRCyACQQFqIgJB//8DcSALRw0ACwsgDEEBaiEMIBEiAiALRw0ACwsgDUEQaiQAC0AAIABB0K4Iai0ACkUgAkVyRQRAIAAgARDXLgsgACABIAIQzy4gAEGIsghqLQAKBEAgACABEMwuIAAgARDELgsL2gQBCX8jAEGwAmsiBCQAIARBmAJqIABB2J0IaigCDBDyGCEJIARByABqEEkhCiAEQQA2AkQgBEEwakEyEPQaIQcgASgCACICBEADQCAAIAIgBxD9LiACKAIUIgINAAsLAkAgBxBNDQBBACECA0AgBEHQAGogAkECdGogBxCFDigCADYCACAHQQAQhhIgAkEBaiEDIAcQTSEIIAJBMEsNASADIQIgCEUNAAsLIAAgBEHQAGogA0EQdEEQdSIDIARBGGpBlgEQ8hgiCCAJIARBxABqIAEQ3C4gACAEQdAAaiADIAogCCAJIARBxABqIAEQ2y4CQCAAIAhBAAJ9QwA8HEYgBCgCRCIDRQ0AGiAAQbigCGorAxAgAyoCALtjQQFzDQEgAyoCAAsgBEHEAGogASAJEIsRCyAEIAoQQCIGEEEgBhA8IQMgBCgCRCEFAkAgA0UEQCAFRQRAA0AgBhBmIQMgASgCACICBEADQCADIAIoAhBGBEAgAiADKAIMNgIQCyACKAIUIgINAAsLIAMQkBMgBhBsGiAGEDxFDQALQQAhBQwCCwNAIAUgBhBmIgMQ2i5FBEAgASgCACICBEADQCADIAIoAhBGBEAgAiADKAIMNgIQCyACKAIUIgINAAsLIAMQkBMLIAYQbBogBhA8RQ0ACwsgBUUEQEEAIQUMAQsgAEGQoAhqKwMQIAUqAgC7Y0EBcw0AIAUQPUEAIQUgBEEANgJECyAAQdicCGooAgwEQEGE/ixBABCKAwsgCBDwGCAHEKIDIAoQ7gEaIAkQ8BggBEGwAmokACAFC3kBBH8gACgCACEEQQAQjgYiAiAETgRAQQAPCwNAIAACfyACQQFqIgMgBEgEQCADIAIgACADEFEgACACEFEQiREbIQILIAILEFEgARCJEUUEQCAFDwsgACACEFEhAyAAIAUQUSADEPMDIAIiBRCOBiICIARIDQALIAULRwECfyABQQFIBEAgAQ8LA0AgAiAAIAEQ6gkiAxBREIkRRQRAIAEPCyAAIAMQUSEEIAAgARBRIAQQ8wMgAyIBQQBKDQALIAELeQEEfyAAKAIAIQRBABCOBiICIAROBEBBAA8LA0AgAAJ/IAJBAWoiAyAESARAIAMgAiAAIAMQUSAAIAIQURC8DRshAgsgAgsQUSABELwNRQRAIAUPCyAAIAIQUSEDIAAgBRBRIAMQ8wMgAiIFEI4GIgIgBEgNAAsgBQt5AQJ/IwBBEGsiAyQAIAAoAgAiAkEBTgRAIAEEQCABIABBABBREPMDCyACQX9qIQECQCACQQJOBEAgA0EIaiAAIAEQURCOCCECIAAgARCgASAAIAAgAhDfLhBRIAIQ8wMgAhD0AxoMAQsgACABEKABCwsgA0EQaiQAC3kBAn8jAEEQayIDJAAgACgCACICQQFOBEAgAQRAIAEgAEEAEFEQ8wMLIAJBf2ohAQJAIAJBAk4EQCADQQhqIAAgARBREI4IIQIgACABEKABIAAgACACEOEuEFEgAhDzAyACEPQDGgwBCyAAIAEQoAELCyADQRBqJAALTQAgACABOAIAIAIoAQAhAiAAQQE6AAogAEEAOwEIIAAgAjYCBCAAQQxqENIBIQIgAEEUahDSARogAEEcahDSARogAiADKQIANwIAIAALLwAgACgCAEGAAmogAUEQdEEQdSIBELABENUOBEAgACgCAEGAAmogARCwARDLHQsLCQAgACABEKUiC1ABA38gACgCACIBRQRAQX8PCyABQX5qIgIgAUF/aiIBEOoJIgNKBEADQCACIAEgACABEFEgACACEFEQvA0bIQEgAkF/aiICIANKDQALCyABC3gBA38jAEEQayIEJAAgABDnLiICQQBOBEAgAQRAIAEgACACEFEQ8wMLIAAoAgAiA0F/aiEBIANBAk4EQCAAIAAgAiAEQQhqIAAgARBREI4IIgIQ9hgQUSACEPMDIAIQ9AMaCyAAIAEQoAFBASEDCyAEQRBqJAAgAwt0AQN/IwBBIGsiASQAAkAgACgCCEUNACAAKALIASICRQ0AIAIQTQ0AIAFBGGogABCCCyECIAAoAsgBIQMgACgCCCEAIAFBADYCFCABQQo2AhAgASABKQMQNwMIIAAgAyACIAFBCGoQkxEQyhMLIAFBIGokAAtGAQN/IAAoAgAiAUEBTgRAA0AgACgCCCACQQJ0aigCACIDBEACfyADEPkYIAMLED0gACgCACEBCyACQQFqIgIgAUgNAAsLC0IBA38gAEEANgIAQcAAED8iAUFAayEDIAEhAgNAIAIQgBxBEGoiAiADRw0ACyAAIAE2AgggAEIANwIMIABBBDYCBAuSAQEDfyAAKAIAIgMgACgCBEYEQCAAENcdIAAoAgAhAwsgACgCCCEEIAMgAkoEQANAIAQgA0EDdGoiBSAEIANBf2oiA0EDdGoiBCgCADYCACAFIAQvAQQ7AQQgACgCCCEEIAMgAkoNAAsLIAQgAkEDdGoiAiABKAIANgIAIAIgAS8BBDsBBCAAIAAoAgBBAWo2AgAL9gMBCH8jAEEwayIHJAAgAEHooghqIQwgA0EYaiEOIANBBGohDQJAA0AgB0EYahBrIQpBACEIIAIoArQBKAIMIgtBAEoEQANAAkACQCACKAK0ASAIIAgQ3gIiCQRAIAkQTUUNAQsgCkEAEF8aDAELIAogByAJEEAoAggQXxoLIAhBAWoiCCALRw0ACwsgACAKIA1BACACIAdBLGoQ/hgiCQRAIAIgBygCLCIIIAkQgR5BEBA/IgkQ+xgaIAcgCTYCACAOIAcgCBCACiANEIsMIAUgCBCpLiAGIAcQ9Q4gCBDsLiAAQwAAAAAgByAIIAgQgQIiCUGJ+AIgBiACIAUgBBCBESAHIAhBAWoiCzYCBCAHIAs2AgAgAEMAAAAAIAlB06cDIAYgAiAFIAQQgREgACABIAwoAgAtACIEfyACIAMgBhCTLiAHQQA2AixBAAUgCAsgBiACIAUgAyAEEIARIAoQXRogDCgCAC0ArAYNAiACKAK0ASgCDEHAAEgNAQwCCwsgChBdGgsCQCACKALEASIDRQ0AIAMoAlwNACACKALEASACKAK4ARCmCg0AAn9BACACKAK4ASIDRQ0AGiADLQA0EM4NCyEDIAIoAsQBIAIgACAAKAIAKAIIEQEAEIQBIAMgAEHIoQhqLQAKEIU8CyAHQTBqJAALRAECfyAAIABBjKMIaigCACIGQQF1aiEFIAAoAoijCCEAIAUgASACIAMgBCAGQQFxBH8gBSgCACAAaigCAAUgAAsRCAALWQECfyAAQQA6AAAgAEEEaiICQgA3AgAgAhDrLiAAQRhqEKIEIQIgAEEANgIsIAIgARCjBCABQQBKBEADQCACQRAQPxD7GBBfGiADQQFqIgMgAUcNAAsLIAALgAUBBX8jAEEwayIEJAAgASgCSCgCACEGIAEoArQBIgJFBEBBGBA/IgIgBiAAQaChCGooAgwQnQoaIAEgAjYCtAELAkAgAkEAQQAQ3gIEQCABKAK0ASgCDEEBSA0BQQAhAgNAIAIhAwJAIAIgASgCtAEoAgxODQADQCADIAIgASgCtAEoAhBqTg0BAkAgASgCtAEgAiADEN4CIgVFDQAgBCAFEEAhBSAEEEEgBBA8DQADQCAFKAIIIAIgAxDyCyAFEEQaIAQQPEUNAAsLIANBAWoiAyABKAK0ASgCDEgNAAsLIAJBAWoiAiABKAK0ASgCDEgNAAsMAQsgBkEBSA0AIAFBzABqIQVBACECA0AgBCAAIAUgAkEQdEEQdSIDIANBvZ4CIAEoAkggASgCxAEgACgCACgCDBEOADYCACABKAK0ASACIAIgBBDyBiACQQFqIgIgBkcNAAsLIAAgASAEIAEoArQBKAIMEO8uIgYgASgCxAEQnS4gASgCuAFFBEAgAUECELUTCyABELMTAkAgASgCBEEEEKMBRQ0AIAAgACgCACgCCBEBACABKAK4ARD8GA0AIAAgACgCACgCCBEBAEEBELQSCwJAIAEoAsQBIgVFDQAgACgCiKMIIgJFBEAgAEGMowhqKAIAIgNBAEcgA0EBcSACckEAR3FFDQELIAAgASgCtAEgAUHAAWogASgCRCAFEO4uCyAAQYihCGooAgxBAEoEQEHmyQJBABA7IAEoArQBIAAgACgCACgCCBEBABCEARC5EwsgASAAIAAoAgAoAggRAQAoAuQHEKM6IAZBGGoiABDqLiAAEPwBIAAQXRogBkEEahCLDCAEQTBqJAAL6QECBH8BfSMAQSBrIgQkAAJAIABB2JwIaigCDEUNACACQ///f39dQQFzRQRAIAQgArs5AxBBndcDIARBEGoQOwwBC0HgggRBABA7CwJAAkAgASgCAEEBSARAQX8hAwwBCyAAQbCcCGohBkEAIQBBfyEDQ///f/8hBwNAIAEgABA+KAIARQ0CAkAgASAAED4oAgAiBSoCICACXUEBcw0AIAYrAxAgBSoCJLtkQQFzDQAgBSoCICAHXkEBc0UEQCAFKgIgIQcgACEDCwsgAEEBaiIAIAEoAgBIDQALCyADIQALIARBIGokACAAC3UBAn9BfyECAkAgAEUNACAAKAIAQQFIDQADQAJAAkAgACABENYDKAIAQQFqIAAgARDWAygCBEcNACAAIAEQ1gMtAAhFDQAgACABENYDLQAJDQELIAFBAWoiASAAKAIASA0BDAILCyAAIAEQ1gMoAgAhAgsgAgu7AwELfyMAQTBrIgQkACACKAJIIQcgA0EANgIAAkAgBygCAEEBTgRAIAJBzABqIQsgAkEQaiEKA0AgByADKAIAED4oAgAhBiAEQShqEG8hAiAEQSBqEG8hBSAEQRhqIAYQuQEgBCAELgEYOwEoIARBGGogBhC5ASAEIAQuAR47ASogBEEYaiAGELkBIAQgBC4BHDsBICAEQRhqIAYQuQEgBCAELgEaOwEiIARBEGoQbyEIQQAhCSAEQQhqEG8hDCAKIAIgCBDQByAKIAUgDBDQByAEQRhqIAQuARAgBC4BCiAELgEIIAQuARIQkAIhCEEAIQVBACECIAEoAgBBAEoEQANAIAUgCCABIAIQURDPBkQAAAAAAADAP2RqIQUgCCABIAIQURDVHSAJciEJIAJBAWoiAiABKAIASA0ACwsCfyAGQQEgBBBvENETRUEAIAlBAXNBAXFFIAVBAklyG0UEQEEAIAAgByAGIAMoAgBBASALEIEZIgUNARoLIA0hBUEBC0UEQCAFIQ4MAwsgAyADKAIAQQFqIgI2AgAgBSENIAIgBygCAEgNAAsLIANBfzYCAAsgBEEwaiQAIA4LWQECfyAARQRAQQAPCyAAIQECQANAIAEtAAlBAkYNASABKAIMIgEgAEcNAAsgACEBCyABIQADQCAAKAIMIgAoAhAiAi0ACUUEQCACEJATCyAAIAFHDQALIAELPAEDfwJAIAAoAgAiA0EATA0AA0AgASAAIAIQPigCABDGHUUEQCADIAJBAWoiAkcNAQwCCwtBASEECyAECzYAIAAoAgBBgAJqIAFBEHRBEHUQsAEQ9QMEQCAAIAAvAQZBAWo7AQYLIAAgAC8BBEEBajsBBAtIAQJ/IAAoAgAiAUUEQEEADwsCQANAIAEoAhAiAiEAA0AgAEUNAiAAKAIMIgAgAkcNAAsgAkUNASABKAIUIgENAAtBAA8LQQELRQEBfyMAQRBrIgIkACACQQhqIAAQuQEgAiABELkBQQEhASACQQhqIAIQywNFBEAgAiACQQhqEMsDIQELIAJBEGokACABCyoBAX8gAARAIAAhAQNAIAFBAToACSABKAIMIgEgAEcNAAsgAEECOgAJCws2AQJ/IAAtAAoEQANAIAAgAUEDdGoiAigCDBD/GCACKAIQEP8YIAFBAWoiASAALQAKSQ0ACwsLLgEBfyAABEADQCAAIAAoAhAQ9C4iATYCECAAIAEoAgA2AgggACgCFCIADQALCwv5AwEGfyMAQTBrIgYkACAGQRBqIAQQQCEKIAEuAQAhCCAGQaCNBjYCDCADKAIAIgQEQCAGIAQuAQIgAS4BAmsiByAHbCAELgEAIAhrIgQgBGxqNgIMCyAAQaidCGohByACIQQDQAJAIAQuAQAiBSAITEEAIAggBCgCDC4BACIJTBtFQQAgCCAFSiAJIAhKchsNACABLgEAIAVrIgUgBUEfdSIFaiAFcyAHKAIMSARAIAEuAQIgBC4BAmsiBSAFQR91IgVqIAVzIAcoAgxIDQELIAEuAQAgBCgCDC4BAGsiBSAFQR91IgVqIAVzIAcoAgxIBEAgAS4BAiAEKAIMLgECayIFIAVBH3UiBWogBXMgBygCDEgNAQsgBC0ACg0AAkAgAygCACIFRQ0AIAUuAQAgBC4BAGsiBSAFQR91IgVqIAVzIAcoAgxODQAgAygCAC4BAiAELgECayIFIAVBH3UiBWogBXMgBygCDEgNAQsgACABIAQgBCgCDCAGQSxqEKYuBEAgCiAGKAIsEIwKCyAGKAIsIQUgAygCAEUEQCAGIAUuAQIgAS4BAmsiCSAJbCAFLgEAIAEuAQBrIgkgCWxqNgIMCyAGIAAgASAFIAZBDGoQ/i4iBTYCLCAFRQ0AIAMgBTYCAAsgBCgCDCIEIAJHDQALIAZBMGokAAvAAQEEfyABKAIQIgMhBCADIQUDQAJ/AkACQCADLgEGIgZBf0wEQCAFBEAgBSACEIQZDAILIAAgAxCFGUUNASACIAMQvQ0MAQsgBgRAIAQEQCAEIAIQgxkMAwsgACADEIUZRQ0CIAIgAxC9DQwCCyAFBEAgBSgCEC8BBkUNAiAFIAIQhBkMAgsgBCgCEC8BBkUNACAEIAIQgxkLIAMoAgwiAyEEQQAMAQtBACEEIAMoAgwiAwshBSADIAEoAhBHDQALC+EDAQV/IABBgJ0IaiEHIABBqJ0IaiEEA0ACQCACIgAuAQIgAS4BAmsiAiACbCAALgEAIgIgAS4BACIIayIGIAZsaiIGIAMoAgBKDQAgCCACayICIAJBH3UiAmogAnMgBCgCDEgEQCABLgECIAAuAQJrIgIgAkEfdSICaiACcyAEKAIMSA0BCyABLgEAIAAoAgwuAQBrIgIgAkEfdSICaiACcyAEKAIMSARAIAEuAQIgACgCDC4BAmsiAiACQR91IgJqIAJzIAQoAgxIDQELAkAgBUUNACAFLgEAIAAuAQBrIgIgAkEfdSICaiACcyAEKAIMTg0AIAUuAQIgAC4BAmsiAiACQR91IgJqIAJzIAQoAgxIDQELIAEoAhAuAQAgAC4BAGsiAiACQR91IgJqIAJzIAQoAgxIBEAgASgCEC4BAiAALgECayICIAJBH3UiAmogAnMgBCgCDEgNAQsgASgCDC4BACAALgEAayICIAJBH3UiAmogAnMgBCgCDEgEQCABKAIMLgECIAAuAQJrIgIgAkEfdSICaiACcyAEKAIMSA0BCyABKAIQIAEgASgCDBCdByABKAIQIAEgABCdB2tBFEoNACADIAY2AgAgACgCDCECIAAhBSAHLQAKDQELCyAFC0gAIAAgAJQgAEMAAAAAkkMAAAAAIAAgA14bIgOSIAMgAEMAAABAXhsiAyADQwAAgD8gACABkiIAk5IgAhsgAyAAQwAAAD9dGwt6AQN/IwBBEGsiBCQAIARBCGogAEGgrghqEGIQrgEiAyABEIMEIQUgAxBGGkEAIQMgBUUEQCAEIABBuK4IahBiEK4BIgAgARCDBCEBIAAQRhogAkECQQEgARtrIgAgAEEfdSIAaiAAcyEDCyAEQRBqJAAgA0EQdEEQdQsQAEHUuC1B1LgtEOQCEJARCxAAQci4LUHIuC0Q5AIQkRELzgMBC38jAEHgAGsiBSQAIABBEGoiBhCpAyAGEFlFBEAgAEEoaiEMIABBLGohDQNAIAVBQGsgBUHYAGoQSSIKEHEaQQAhCwNAAkAgBhDzASIHKAIwQQVHBEAgBxDcAkUNASAHKAJIQQZGDQELQQEhCwsgB0EANgJcIAYQZCAFQUBrIAcQrwIgB0EAEJ0CIQgCQAJAIAYQWQ0AIAYoAgghCSAIRQ0AIAggCUYNAQtBACEIIAYQWQ0AIAYoAgghCSAHEEwhDiAJEEwhDyAHKAJIIAkoAkgQmwtFDQAgBxCQBQ0AIAkQkAUNACAPLgECIA4uAQZKDQAgC0UEQCAOLgECIA8uAQZKDQELIAkhCAtBACAIIAYQWRsNAAsCQCALRQRAIAEgAiAKIAQQtRoiCEUNASAFQShqIA0QQBogBUEoaiAIEKUBIAVBEGogDBBAGiAFQRBqIAgoAhgQpQEMAQsgASACIAMgCiAEIAwgDRCiMwsgChDYAxogBhBZRQ0ACwsgBiAAQQxqELcDIABBADYCCCAAQShqEJoCIABBLGoQmgJHBEAgBUGNATYCBCAFQcakATYCAEGYoCxBvuMBQQJBpeoAIAUQRQsgBUHgAGokAAsRACAABEAgABDvDRogABA9Cwt/AQR/AkAgASgCyAEiAkUNACACKAIAQQFIDQBBACECA0AgASgCyAEgAxA+KAIAIQUgACABKAK4ARB/IAJBEHRBEHUQxgEsAAAgBRDSO0EQdEEQdRCALyAEaiEEIAJBAWohAiADQQFqIgMgASgCyAEoAgBIDQALCyAEQRB0QRB1C+gBAQh/IwBBQGoiBCQAIARBKGoQSSEGIARBCGogBEEgahBJIgcQQCEIIAFBAU4EQANAIAAQiAEiAy0ANCEJIAMoAgQhBQJAIAkEQCAFRQ0BIAYgCCgCCBBeEHwgBhCaAyAGIAMoAgQQXhDCASADKAIEIgVFDQEgBRDUAhA9DAELIAVFDQAgCCADKAIEEI8BCyADBEAgAxDyBBA9CyAAEEQaIApBAWoiCiABRw0ACwtBHBA/IAdBARDEByEBIAIEQCABQQNBARDfAQsgABCkAQRAIAFBBEEBEN8BCyAHEOsCIARBQGskACABC/ABAgV/AX0jAEEwayICJAAgAkEoahBpIQUgAkEQaiAAQdQAaiIGEHEiAxBZRQRAIAJBCGogAygCCBDHASACIAIpAwg3AyggAxBBIAMQPEUEQANAIAJBCGogAygCCBDHASAFIAJBCGoQmQEgAxBkIAMQPEUNAAsLIAAgASgCMDYCLEHAABA/IQQCfyABKgI8IgeLQwAAAE9dBEAgB6gMAQtBgICAgHgLIQUgAyAEIAACfyABKgI4IgeLQwAAAE9dBEAgB6gMAQtBgICAgHgLIAUQ8QsiBBDLAhC3AyADIAYQpAUgBBDwCwsgAkEwaiQAIAQL/AMDBX8BfgJ9IwBB8ABrIgMkACADQdgAaiABEM0BEHEhBCADQUBrIAEoAhgQlQIQQCEHIAQQWUUEQCAEEEEgBBA8RQRAIAIpAgAhCANAAkACQCAEKAIIIgIQoQEQTUUNACACQdQAahBNDQAgAiABEIcvIQUMAQsgAhChARBNDQAgASgCGCgCBCEGQcK4LS0AAARAIAMgCDcDACADIAg3AzggACACEL0vIQUMAQsCQAJAAkBBsrgtLQAADQAgBgRAIAYQowNFDQELIAIoAhBBf2oiBkEFSw0CIAZBAWsOBQIAAgEAAQsgAyAINwMIIAMgCDcDMCAAIAIQvy8hBQwCCyADIAg3AyAgAyAINwMoIAIQ0zIhBQwBCyADQY0ENgIUIANBragINgIQQZSgLEGa+AdBAkHgjwggA0EQahBFCyAFBEAgByAFEI8BCyAEEGQgBBA8RQ0ACwsgASgCGCEAAn8gASoCNCIJi0MAAABPXQRAIAmoDAELQYCAgIB4CyECAn8gASoCPCIKi0MAAABPXQRAIAqoDAELQYCAgIB4CyEEIAlDAAAAAFshBQJ/IAEqAjgiCYtDAAAAT10EQCAJqAwBC0GAgICAeAshBiAAIAI7ASIgACAEOwEgIAAgBjoAHiAAIAU6ABwgASgCGEH//wM7ASILIANB8ABqJAALgAIBBH8jAEHgAGsiBCQAIARByABqEEkhBQJAIAAtAAgEQCAEIAEoAQAiATYCFCAEIAE2AkQgBEEUaiADEP4zDAELIAQgASgBACIBNgJAIARBOGpDAAAAAEMAAIC/EIoBIQZB2pwtLQAAIQcgBCAEKAJANgIkIAQgBikCADcDGCAEQSRqIAMgAiAEQRhqIAdBAXMQ6i8LIAQgATYCECAEIAE2AjQgACADEMQvIAUgAxB8IAUQQSAFEDxFBEADQCAFKAIIIQEgBCAEQShqQwAAgD9DAAAAABCKASkCADcDCCAAIAEgBEEIahCILyAFEEQaIAUQPEUNAAsLIARB4ABqJAALmwQCCH8BfSMAQYABayIDJAAgA0HoAGogARBxIQYgA0HQAGogAhBAIQkgBhBBIAYQPEUEQANAIAYoAgghAiADQTBqIANByABqEEkiBxBAIQggA0EYaiACEKEBEEAhBAJAIANBGGoQWQ0AIAAEQANAAkACQCAEEIgBIgEtADQNACADQTBqEFlFDQAgASgCBEUNASADQTBqIAEoAgQQjwEMAQsgASgCBEUNACADIAgoAggQXhBAEJoDIAMgASgCBBBeEMIBIAEoAgQiBUUNACAFENQCED0LIAEEQCABEPIEED0LIAQQRBogA0EYahBZRQ0ADAIACwALA0AgBBCIASIBLQA0IQogASgCBCEFAkAgCgRAIAVFDQEgAyAIKAIIEF4QQBCaAyADIAEoAgQQXhDCASABKAIEIgVFDQEgBRDUAhA9DAELIAVFDQAgA0EwaiABKAIEEI8BCyABBEAgARDyBBA9CyAEEEQaIANBGGoQWUUNAAsLQcAAED8hAQJ/IAIqAlAiC4tDAAAAT10EQCALqAwBC0GAgICAeAshBCADIAEgAgJ/IAIqAkwiC4tDAAAAT10EQCALqAwBC0GAgICAeAsgBBDxCxDLAhBxGkEcED8iBCAHQQAQxAciAkEDQQEQ3wEgAkEEQQEQ3wEgAkEIIAAQ3wEgAyAEEK8CIAkgARCPASAHEOsCIAYQZCAGEDxFDQALCyADQYABaiQACwgAQbi4LRBPCwgAQai4LRBPCwgAQZi4LRBPC7gDAQV/IwBBkAFrIgUkACAFQYwBahBvGiAFIAAQQikBADcDgAEgBUHoAGogBBBAIQkgBUHYAGogBS4BgAEgBS4BhAFBAWoQmAEhByAFQcgAaiAFLgGAASAFLgGEAUEBahCYASEGIAVBOGogBS4BgAEgBS4BhAFBAWoQmAEhCCAFQSBqEEkhBCAAKAIERQRAIAVBtQE2AhQgBUHM1gM2AhBBkKAsQbH3AkECQfimAyAFQRBqEEULIAQgACgCBBBeEHwgBBBBIAQQPEUEQANAIAQoAgggASACIAMgCCAGIAcQiBkgBBBEGiAEEDxFDQALCyAFLgGAASIBIAUuAYQBSARAA0AgBiABQRB0IgBBEHUiBBCBAUEBTgR/A0AgBEEBaiIEIAUuAYQBSARAIAYgBBCBAUEASg0BCwsgBUEcaiAAQRB1IARBEHRBEHUQiwEaIAUgBSgCHCIANgKMAUEIED8hASAFIAA2AgwgBSAANgIYIAEgBUEMahDVESAJIAEQjwEgBAUgAQtBEHRBgIAEakEQdSIBIAUuAYQBSA0ACwsgCBCFARogBhCFARogBxCFARogBUGQAWokAAu8BAMGfwN9AnwjAEEgayIHJAAgARBCLgEAIQMgARBCLgEEIQUCQCAHQQhqIAAQcSIEEFkNACAEKAIIIQAgBBBBQwAAAM8hCQJAIABB3ABqIgIgAyAFakECbUEQdEEQdbciCxCRAiAAKgI4u6AgARBCLgEGt2RBAXMNACAEEDwNAANAAkAgARBCLgEGIQMgAiALEJECIQwgACIGKgI4IQkgBBBkIAQoAggiAEHcAGoiAiALEJECIAAqAji7oCABEEIuAQa3ZEUNACAEEDxFDQELCyADtyAMoSAJu6C2IQkLIABBNGohAyAAQSxqIQUCQCAAQdwAaiICIAsQkQIgACoCLLugIAAqAjS7oCABEEIuAQK3ZkEBcw0AA0AgBBA8DQEgAiALEJECIQwgBSoCACEIIAMqAgAhCiABEEIuAQayIAwgCLugIAq7oLYiCF1BAXNFBEAgARBCLgEGsiEICyABEEIuAQIhAwJ9IAIgCxCRAiAAKgI4u6AgA7djQQFzRQRAIAggARBCLgECspMMAQsgCLsgAiALEJECIAAqAji7oKG2CyEIIAQQZCAIIAkgCCAJXiICGyEJIAAgBiACGyEGIAQoAggiAEE0aiEDIABBLGohBSAAQdwAaiICIAsQkQIgACoCLLugIAAqAjS7oCABEEIuAQK3Zg0ACwsgCUMAAAAAXUEBcw0AIAIgCxCRAiAFKgIAu6AgAyoCALugIAEQQi4BArehIAm7ZEEBcw0AIAAhBgsgB0EgaiQAIAYL1gQCDH8BfSMAQfAAayIBJAAgAUHoAGoQaSEMIAFB4ABqEEkhCSABQdgAahBJIQsgAUHQAGoQSSECIAFByABqEEkhCCABQTBqIAkQQCEDIAFBGGogAEEIahBAIQcgASALEEAhBAJAIAAQzQEQTQ0AIAcQQSAHEDxFBEADQCABIAcQiAEiBRBCKQEANwNoIAAQzQEgBRCPLyIGRQ0CIAUgBkHcAGogBioCLCINQfC3LSsDACANu6K2IAkQji8gAyAJEHwgAxBBIAMQPEUEQANAAkAgAygCCC4BBiADKAIILgEEIgprQcyaLSgCAEEBakwNACAFIApBzJotKAIAt0QAAAAAAADgP6C2IAIgCBCXCyACEE1FBEBB+AAQPyIFQQgQPyACEI0KEMQFGiAEIAUQjwELQQAhBUEAIAMoAgguAQZBzJotKAIAt0QAAAAAAADgP6C2IAIgCBCXCyACEE0NACAGQfgAED9BCBA/IAIQjQoQxAUQ5TsLIAMQiAEiCgRAIAoQPQsgAxBEGiADEDxFDQALCwJAIAgQTQ0AQQAgDC4BBEHMmi0oAgC3RAAAAAAAAOA/oLYgAiAIEJcLIAIQTQ0AQfgAED8iBkEIED8gAhCNChDEBRogBCAGEI8BCyAFBEAgBSgCBCIGBEAgBhDUAhA9CyAFEPIEED0LIAcQRBogBxA8RQ0ACwsgBBBZDQAgBBDTAiAEEEEgBBA8DQADQCAHIAQQiAEQjwEgBBBEGiAEEDxFDQALCyAIENcDGiACENcDGiALEOUDIAkQrAUaIAFB8ABqJAALCABBiLgtEE8LCABB4LctEFIL/wYAQfCtLUEAQcgqQd7pAEEAEFcQUEGAri1BAEHu4gFB3ukAQQAQVxBQQZCuLUEAQZj3AkHXpgNBABBXEFBBoK4tQQBB86oEQZ7UBEEAEFcQUEGwri1BAEHoywVBjfEFQQAQVxBQQcCuLUEAQYXTBkGR8QZBABBXEFBB0K4tQQBBzsMHQfjeB0EAEFcQUEHgri1BA0GXqAhBxr8IQQAQVxB1GkH4ri1BAEHMgwlB6pcJQQAQVxB1GkGQry1BAkHw0glBieUJQQAQVxB1GkGory1EmpmZmZmZqT9BtZMKQZ+kChBXEFNB0K8tRJqZmZmZmbk/QY3UCkHB5QoQVxBTQfivLUSamZmZmZnZP0GhlwtB/qcLEFcQU0GgsC1EAAAAAAAAEEBBu9ELQcLgCxBXEFNByLAtRAAAAAAAAAxAQeaGDEH+lQwQVxBTQfCwLUQzMzMzMzPjP0H6vAxB9skMEFcQU0GYsS1EMzMzMzMz0z9B7e8MQfbJDBBXEFNBwLEtRJqZmZmZmck/QZ6SDUH2yQwQVxBTQeixLUQAAAAAAADQP0HMsA1B37gNEFcQU0GQsi1EMzMzMzMzwz9BvdINQeTZDRBXEFNBuLItRAAAAAAAAOg/QY3wDUHg9g0QVxBTQeCyLUR7FK5H4XqkP0HPhw5Bk40OEFcQU0GIsy1E/Knx0k1ikD9Bt50OQdWjDhBXEFNBsLMtRArXo3A9Crc/QcKzDkHmuA4QVxBTQdizLUEFQZrIDkH3zA5BABBXEHUaQfCzLUR7FK5H4Xq0P0HR1g5By9oOEFcQU0GYtC1BAEG04w5Bg+YOQQAQVxBQQai0LUQAAAAAAADgP0Gd+w5B37gNEFcQU0HQtC1EMzMzMzMzwz9B34EPQeTZDRBXEFNB+LQtRAAAAAAAANA/QeWID0H2yQwQVxBTQaC1LUQAAAAAAADoP0HIkQ9B9skMEFcQU0HItS1EMzMzMzMz4z9Bt5cPQauZDxBXEFNB8LUtRDMzMzMzM9M/QZufD0GNoQ8QVxBTQZi2LURmZmZmZmYGQEHDpg9BuqgPEFcQU0HAti1EAAAAAAAAAEBBsa0PQbqoDxBXEFNB6LYtRAAAAAAAAPg/Qa6xD0G7sg8QVxBTQZC3LUSamZmZmZnJP0Gstg9B5bcPEFcQU0G4ty1EAAAAAAAA4D9BlrsPQaa8DxBXEFMLCABBuLctEFILCABBkLctEFILCABB6LYtEFILCABBwLYtEFILCABBmLYtEFILDwAgACAALwEEQQFqOwEECwgAQfC1LRBSCwgAQci1LRBSCwgAQaC1LRBSCwgAQfi0LRBSCwgAQdC0LRBSCwgAQai0LRBSCwgAQZi0LRBPCwgAQfCzLRBSCwgAQdizLRB0CwgAQbCzLRBSCwgAQYizLRBSCwgAQeCyLRBSCwgAQbiyLRBSCwgAQZCyLRBSCwgAQeixLRBSCwgAQcCxLRBSCwgAQZixLRBSCwgAQfCwLRBSCwgAQciwLRBSCwgAQaCwLRBSC4cBAQJ/IwBBIGsiAiQAQQAhAQJAIAAoAghFDQAgACgCyAEiA0UNACADEE0NACACQRhqIAAQggshASAAKALIASEDIAAoAgghACACQQA2AhQgAkEINgIQIAIgAikDEDcDCCAAIAMgASACQQhqEJMREMoTIAEuAQQhAQsgAkEgaiQAIAFBEHRBEHULBwAgABDcDwsIAEH4ry0QUgsIAEHQry0QUgsIAEGory0QUgsIAEGQry0QdAsIAEH4ri0QdAsIAEHgri0QdAsIAEHQri0QTwsIAEHAri0QTwsIAEGwri0QTwsIAEGgri0QTwsIAEGQri0QTwsIAEGAri0QTwsIAEHwrS0QTwu/BAILfwF9IwBBsAFrIgIkACACQZgBahBJIQcgAkH4AGogAkGQAWoQSSIFEEAhCCACQfAAahBJIQkgAkHoAGoQaRogAkHQAGoQSSEEIAggBRB8IAQgARChARB8IAJBOGogCRBxIQoCQCAEEFkNAEEBIQsDQCACIAQoAggiAxBCKQEANwNoIAMoAgQhBgJAIAMtADQEQCAGRQ0BIAcgCCgCCBBeEHwgBxCaAyAHIAMoAgQQXhDCASADKAIEIgNFDQEgAxDUAhA9DAELIAZFDQAgCCADKAIEEI8BCyAEEEQaIAIgBCgCCCIDEEIpAQA3A2gCQCADLQA0DQAgBRBNDQBBHBA/IgYgBUEBEMQHIQMgCiAGEK8CIAsEQCADQQNBARDfAQsgDEEBaiEMQQAhCyAEEKQBRQ0AIANBBEEBEN8BCyAEEKQBRQ0AC0HAABA/IQQCfyABKgJQIg2LQwAAAE9dBEAgDagMAQtBgICAgHgLIQMgCiAEIAECfyABKgJMIg2LQwAAAE9dBEAgDagMAQtBgICAgHgLIAMQ8QsiAxDLAhC3AyAKIAkQpAUgAxDwCyAAKAL4AkEFSA0AIAJBMGogAxC5AyACLgEwIQAgAkEoaiADELkDIAIuASohASACQSBqIAMQuQMgAi4BJCEEIAJBGGogAxC5AyACIAIuAR42AhAgAiAENgIMIAIgATYCCCACIAA2AgQgAiAMQRB0QRB1NgIAQaPDByACEDsLIAkQ3gggBRDrAiACQbABaiQAIAMLuRADAn8BfgF9IwBBoAJrIg4kACAOIAg7AZwCIA4gAzsBngICQCANLQAABEAgDUEAOgAAQQEhAwwBCwJAIABB4AxqKwMQIAEqAiy7oiABKgJMu2NFBEAgAEGIDWoiAysDEEQAAAAAAAAAAGZBAXMNASADKwMQIAEqAky7oiAFt2RBAXMNAQsgBSEGCwJ/IABBjAJqIgMtAAoEQCAGIAAtAKYCDQEaCyAFCyEIIAAtACYEQCABKAJEIgAgCEghAyAIQf//AUYgACAITnINASABKAJAIAhKBEAgASgCSCAISARAIAlBAToAACAKQQE6AAAgC0EAOgAADAMLIAlBADoAACAKQQA6AAAgC0EBOgAADAILIAkCfyAIsiABKgJQlSIRQwAAgE9dIBFDAAAAAGBxBEAgEakMAQtBAAsiAEEBIAAbOgAAIApBADoAACALQQA6AAAMAQsgBBDdAwRAIAxBAToAAAsgASgCSCEPIA4gCDYCmAIgASoCUCIRQwAAgD9eQQFzRQRAIA4gCLIgEZUQigI2ApgCCyAOQQE2ApQCIA5B/wE2ApACIAkgDkGYAmogDkGUAmogDkGQAmoQsQE6AAAgCkEAOgAAIAtBADoAAAJ/AkACQAJAIAMtAApFDQAgASgCRCIJIAVIDQAgCSAGSA0BCwJAIAMtAApFDQAgASgCSCIJIAVIIAkgBk5yDQAgAC0AxgJFDQEMAgsCQCADLQAKRQ0AIAEoAkAiAyAFTA0AQQEgAyAGTA0DGgsgDyAISCEDAkAgAC0AVkUNACAOIAQpAQAiEDcDiAEgDiAQNwOIAiABIA5BiAFqEL0JDQAgDiACKQEAIhA3A4ABIA4gEDcDgAIgASAOQYABahC9CUUNACANQQE6AAAgAwwDCwJAIAEoAkAgCEwNACABKAJIIAhODQBDgE/DRyERIABBgA5qIgIrAxBEAAAAAAAAAABkQQFzRQRAIAIrAxAgASoCUCABKgJMk7uiIAEqAky7oLYhEQsCQCAEEFVBAUgNACAOIAQpAQAiEDcDOCAOIBA3A/gBIAAgASAOQThqEJ4EIQIgDC0AAEUgAkVyDQAgACsDoAcgDi4BngK3oiAIt2ZBAXMNACAALQDmASEBIBEgCLJdRQRAQQAgAUUNBRoLIAAtANYCBEAgC0EBOgAAIAMMBQsgCkEBOgAAIAMMBAsCQCAEEFVBAUgNACAOIAQpAQAiEDcDMCAOIBA3A/ABIAAgASAOQTBqEJ4ERQ0AIAwtAAANACAAKwOgByAIt6IgDi4BngK3ZUEBcw0AIAAtAOYBIQEgESAIsl1FBEBBACABRQ0FGgsgAC0A1gIEQCALQQE6AAAgAwwFCyAKQQE6AAAgAwwECwJAIAcQVUEBSA0AIA4gBykBACIQNwMoIA4gEDcD6AEgACABIA5BKGoQngRFDQAgASgCSCAOLgGcAk4NACAAKwOgByAOLgGcAreiIAi3ZkEBcw0AIAAtAOYBIQEgESAIsl1FBEBBACABRQ0FGgsgAC0A1gIEQCALQQE6AAAgAwwFCyAKQQE6AAAgAwwECwJAIAcQVUEBSA0AIA4gBykBACIQNwMgIA4gEDcD4AEgACABIA5BIGoQngRFDQAgASgCSCAOLgGcAkgNACAAKwOgByAIt6IgDi4BnAK3ZUEBcw0AIAAtAOYBIQEgESAIsl1FBEBBACABRQ0FGgsgAC0A1gIEQCALQQE6AAAgAwwFCyAKQQE6AAAgAwwECwJAIAcQVUEBTgRAIA4gBykBACIQNwMYIA4gEDcD2AEgACABIA5BGGoQngQNAQsgAyAEEFVBAUgNBBogDiAEKQEAIhA3AxAgDiAQNwPQASAAIAEgDkEQahCeBA0AIAMMBAsgCkEBOgAAIAMMAwsgAyABKAJEIAhODQIaIAMgASgCSCAISA0CGgJAIAQQVUEBSA0AIAcQVUEBSA0AIAArA8gHIA5BngJqIA5BnAJqEJkCLgEAt6IgCLdlQQFzDQAgDiAEKQEAIhA3A3ggDiAQNwPIASAAIAEgDkH4AGoQngdFDQAgDiAHKQEAIhA3A3AgDiAQNwPAASAAIAEgDkHwAGoQngdFDQAgAC0AxgJFDQEgAEG4DGoiAisDEEQAAAAAAAAAAGUNAiACKwMQIAEqAky7oiABKgJQu2RBAXNFDQIMAQsCQCAEEFVBAUgNACAIQQZIIAcQVUEBSHINACAAKwPwByAOQZ4CaiAOQZwCahCZAi4BALeiIAi3ZUEBcw0AIA4gBCkBACIQNwNoIA4gEDcDuAEgACABIA5B6ABqEJ4EDQAgDiAEKQEAIhA3A2AgDiAQNwOwASABIA5B4ABqEL0JDQAgDiAHKQEAIhA3A1ggDiAQNwOoASAAIAEgDkHYAGoQngQNACAOIAcpAQAiEDcDUCAOIBA3A6ABIAEgDkHQAGoQvQlFDQELIAMgAEGICGoiAisDEEQAAAAAAAAAAGRBAXMNAhogAyAEEFVBAUgNAhogAyAHEFVBAUgNAhogAyACKwMQIA5BngJqIA5BnAJqEJkCLgEAt6IgCLdlQQFzDQIaIAAtALYCRQ0AIA4gBCkBACIQNwNIIA4gEDcDmAEgAyABIA5ByABqEL0JDQIaIA4gBykBACIQNwNAIA4gEDcDkAEgAyABIA5BQGsQvQkNAhoLIAtBAToAAEEBDAELIApBAToAAEEBCyEDIAAoAvgCQQtOBEAgDiADNgIAIA4gCDYCBCAOIA4uAZ4CNgIIIA4gDi4BnAI2AgxBuN4HIA4QOwsgDCADIAstAABFcToAAAsgDkGgAmokACADC+YRBBl/A34BfQF8IwBBsANrIgIkACACQQA6AK8DIAJBADoArgMgAkEAOgCtAyACQQA6AKwDIAJBADoAqwMgAkGQA2oQSSEPIAJB8AJqIAJBiANqEEkiEBBAIREgAkHoAmoQSSESIAJB4AJqEGkhDSACQcgCahBJIQYgAkHAAmoQaRogAkG4AmoQaSEVIAJB//8BOwG2AiACQf//ATsBtAJB/////wchCiACQZgCaiABQdQAahBxIgcQWUUEQCACQYACaiAHKAIIEMcBIAIuAYQCIQoLIBEgEBB8IAYgARChARB8IAJBgAJqIBIQcSELAkAgBhBZDQACQCAKIAYoAggQQi4BAE4EQEH//wEhBEEBIQwMAQsgCyAHEPMBIgQQrwIgBEEDQQEQ3wEgBEEAEOsHIARBCkEAEN8BIARBC0EAEN8BIAJB+AFqIAQQxwEgAi4B+AEaIAQQlBEhHiAGKAIIEEIuAQAhBCAAQYAJaisDECAeuyIfoiAEIAprIgRBEHRBEHUiCbdjQQFzRQRAAn8gCbIgASoCUJWOIh5DAACAT10gHkMAAAAAYHEEQCAeqQwBC0EACyIDQQEgAxshEwsgACgC+AJBBk4EQCAGKAIIEEIuAQAhAyAGKAIIEEIuAQIhCCACIAk2AsABIAIgHzkDuAEgAiAINgK0ASACIAM2ArABQdu1BiACQbABahA7C0H/////ByEKIAcQWQ0AIAcQZCACQfgBaiAHKAIIEMcBIAIuAfwBIQoLIAIgBikCEDcDqAEgAiAGKQIINwOgASACIAYpAgA3A5gBIAAgASACQZgBaiAVIAJBtgJqIAJBtAJqEIoZIABBgAlqIRRBgYB+IQ4gBCEJA0AgAiAGKAIIIgMQQikBADcD4AIgAygCBCEIAkAgAy0ANARAIAhFDQEgDyARKAIIEF4QfCAPEJoDIA8gAygCBBBeEMIBIAMoAgQiA0UNASADENQCED0MAQsgCARAIBEgAygCBBCPAQsgDS4BBCEOCyAGEEQaIAIgBigCCCIDEEIpAQA3A+ACAkAgAy0ANA0AIAMoAgRFDQAgAiACKQO4AjcDwAIgAiAGKQIINwOIASACIAYpAhA3A5ABIAIgBikCADcDgAEgAi8BtgIhAyACLwG0AiEIIAAgASACQYABaiAVIAJBtgJqIAJBtAJqEIoZIAIvAbYCIRggAC0ApgIhBSACLwG0AiEZAkAgCiANLgEASA0AIAIgAikD4AIiGzcD8AEgAiACKQPAAiIcNwPoASACIAIpA7gCIh03A+ABIAIgGzcDeCACIBw3A3AgAiAdNwNoIAAgASACQfgAaiAJIAQgBRtBEHRBEHUgAkHwAGogA0EQdEEQdSAIQRB0QRB1IAJB6ABqIBkgGCAFG0EQdEEQdSACQa0DaiACQa8DaiACQa4DaiACQawDaiACQasDahC+Lw0AIAYQpAENACADIQQgCCEJDAELQRwQPyIEIBAgE0H/AXEQxAchBSALIAQQrwIgDARAIAVBA0EBEN8BCyAWIBpyBEAgBUEKQQsgFhtBARDfAQsCQCAKIA0uAQBOBEAgAyEEIAghCQwBCyALIAcQ8wEiBRCvAiAFEJQRIR4gAkH4AWogBRDHAUEAIQMgFCsDECAeuyIfoiACLgH4ASAOayIJQRB0QRB1IgS3Y0EBc0UEQAJ/IASyIAEqAlCVjiIeQwAAgE9dIB5DAAAAAGBxBEAgHqkMAQtBAAsiA0EBIAMbIQMLIAIgAzoArQMgACgC+AJBBk4EQCACQfgBaiAFEMcBIAIuAfgBIQggAkHYAWogBRDHASACLgHaASEMIAIgAzYCZCACIAQ2AmAgAiAfOQNYIAIgDDYCVCACIAg2AlBBz9IGIAJB0ABqEDsLIAUgAxDrB0EAIQMgBUEKQQAQ3wEgBUELQQAQ3wEgFCsDECAfoiANLgEAIAprIgRBEHRBEHUiCLdjQQFzRQRAAn8gCLIgASoCUJUiHkMAAIBPXSAeQwAAAABgcQRAIB6pDAELQQALIgNBASADGyEDCyACIAM6AK0DIAAoAvgCQQZOBEAgAiADNgJEIAIgCDYCQEH78AYgAkFAaxA7CyACQQA6AK4DIAJBADoArwNB/////wchCiAHEFkNACAHEGQgAkH4AWogBygCCBDHASACLgH8ASEKCyAXQQFqIRcCQCAGEKQBRQ0AIAcQWUUNACAFQQRBARDfAUEAIQwMAQtBACEMIAItAK4DQQBHIRogAi0ArwNBAEchFiACLQCtAyETCyAGEKQBRQ0ACyAHEFlFBEADQCALIAcQ8wEiBBCvAiAEEJQRIR4gAkH4AWogBBDHAUEAIQUgFCsDECAeuyIfoiACLgH4ASAOa0EQdEEQdSIJt2NBAXNFBEACfyAJsiABKgJQlY4iHkMAAIBPXSAeQwAAAABgcQRAIB6pDAELQQALIgNBASADGyEFCyAAKAL4AkEGTgRAIAJB+AFqIAQQxwEgAi4B+AEhAyACQdgBaiAEEMcBIAIuAdoBIQggAiAFNgI0IAIgCTYCMCACIB85AyggAiAINgIkIAIgAzYCIEHVjQcgAkEgahA7CyAEIAUQ6wcgBEEKQQAQ3wEgBEELQQAQ3wEgAkH4AWogBBDHASACLgH8ASEOAkAgBxBZBEAgBEEEQQEQ3wEMAQsgBxBkCyAHEFlFDQALIAIgBToArQMLQcAAED8hBAJ/IAEqAlAiHotDAAAAT10EQCAeqAwBC0GAgICAeAshCSALIAQgAQJ/IAEqAkwiHotDAAAAT10EQCAeqAwBC0GAgICAeAsgCRDxCyIFEMsCELcDIAsgEhCkBSAFEPALIAAoAvgCQQVIDQAgAkH4AWogBRC5AyACLgH4ASEAIAJB2AFqIAUQuQMgAi4B2gEhASACQdABaiAFELkDIAIuAdQBIQQgAkHIAWogBRC5AyACIAIuAc4BNgIQIAIgBDYCDCACIAE2AgggAiAANgIEIAIgF0EQdEEQdTYCAEGspgcgAhA7CyASEN4IIBAQ6wIgAkGwA2okACAFCzEBAX8gACgCACEBIABBADYCACABBEAgAQRAAn8gASgCCCIABEAgABA9CyABCxA9CwsLnQYDB38DfQF8IwBB0ABrIgMkACABKgJMIQwgASoCUCEKIABB7AJqIgYoAgxBC04EQEGr/wRBABA7CwJAIAogDEMAAEBAlF8gCkMAACBBX3IgAigCCEEaSHINAAJ/IAwgCiAMk0MAAEBAlSILkrtEAAAAAAAA4D+gmyINmUQAAAAAAADgQWMEQCANqgwBC0GAgICAeAsiACACIAAQixkhACACKAIIt0QAAAAAAADoP6IgALdkDQAgBigCDEELTgRAQb6lBUEAEDsLAn8gC7tEAAAAAAAA4D+gnCINmUQAAAAAAADgQWMEQCANqgwBC0GAgICAeAsiAEEDIABBA0obIQcCQAJAAn8gDI0iC4tDAAAAT10EQCALqAwBC0GAgICAeAsiAAJ/IAqOIguLQwAAAE9dBEAgC6gMAQtBgICAgHgLTg0AIAdB//8DcSEJIAAhBANAAn8gAiAAEIEBRQRAIAggACAFQf//A3EbIQggBUEBagwBCyAFQRB0QRB1IAlODQJBAAshBSAEQQFqIQQgAEEBaiIAAn8gCo4iC4tDAAAAT10EQCALqAwBC0GAgICAeAtIDQALDAELIAAhBAsCQCAGKAIMQQpMBEAgB0H//wNxIQAgBUEQdEEQdSEFDAELIAMgASgCSDYCTCADIAdB//8DcSIANgJAIAMgCEEQdEEQdTYCSCADIAVBEHRBEHUiBTYCREGuywUgA0FAaxA7CyAFIABIDQAgASgCSCICIAhBEHRBEHUiAE5BACACIARBf2pBEHRBEHUiAkwbDQAgBigCDEELTgRAQYrxBUEAEDsLIAEoAkgiBCAASAR/IAYoAgxBBk4EQCABKAJIIQQgAyAANgI8IAMgBDYCOCADIAI2AjQgAyAANgIwIAMgCrs5AyggAyAMuzkDIEGzlAYgA0EgahA7CyABIAA2AkggAAUgBAsgAkwNACAGKAIMQQZOBEAgASgCSCEEIAMgAjYCHCADIAQ2AhggAyACNgIUIAMgADYCECADIAq7OQMIIAMgDLs5AwBBs5QGIAMQOwsgASACNgJICyADQdAAaiQAC/EJBAt/AX4CfQF8IwBB8AFrIgckACAHQdgBaiABEKEBEEAhCCAHQcgBakEAQYABEJgBIQsgB0G4AWpBAEGAARCYASEMIAdBqAFqQQBBgAEQmAEhDSAHQaABahBpIQ4gB0GYAWoQaSEPIAMQ2wEhFSAHIABBwAtqKwMQIBW2u6I5A5ABIAcgAEHoC2orAxAgASoCLLuiOQOIASAHIAMCfyAHQZABaiAHQYgBahC9BisDALYiE40iFItDAAAAT10EQCAUqAwBC0GAgICAeAsQixkhCgJAAkACQCADKAIIQRB0QRB1IgkgACgCqANMDQAgAEGoCWorAxAhFSAJIApMDQAgFSAKsiAJspW7ZEEBcw0BC0EAIQIgACgC+AJBBkgNASAHIAY2AmQgByAFNgJgQZGCBCAHQeAAahA7DAELIAggARChARB8IAgQQSAIQX8QqwIQQi4BBCEKAkAgAC0AZgRAIAdBkAFqIAgQvQMMAQsgAC0AhgIEQCAHQZABaiAAIAEgCBCDBgwBCyAHQZABaiAIEMECCyAHIAcpA5ABNwOgASAOLgEAIQkgByAHKQOgATcDmAEgCBA8RQRAIAogCWshEANAAkAgAC0AZgRAIAdBkAFqIAgQvQMMAQsgAC0AhgIEQCAHQZABaiAAIAEgCBCDBgwBCyAHQZABaiAIEMECCyAHIAcpA5ABNwOgASAOLgEAIgkgDy4BBCIRayEKAkAgACABIBAgAiARIAkQvw0EQCAKQRB0QRB1siEUDAELIApBEHRBEHUiCbIiFCATXkEBcw0AAkACQCAAKwP4BiABKgIsu6IgCbciFWMNAAJAIAArA9AGIAEqAiy7oiAVY0EBcw0AIAAtAKYBRQ0BIAcgBykDmAEiEjcDgAEgByASNwNYIAAgASAHQdgAahCeBA0AIAcgBykDoAEiEjcDeCAHIBI3A1AgACABIAdB0ABqEJ4ERQ0BCyAHIAcpA5gBIhI3A3AgByASNwNIIAAgASAHQcgAahCeB0UNASAHIAcpA6ABIhI3A2ggByASNwNAIAAgASAHQUBrEJ4HRQ0BCyALIAlBARBzCyAMIAlBARBzCyAUIBNdQQFzRQRAIA0gCkEQdEEQdUEBEHMLIAcgBykDoAE3A5gBIAgQPEUNAAsLIAECfCALKAIIIAAoApADTgRAIAsQ2wEMAQsCQCAERQ0AIAsoAghBAUgNACALENwLDAELIAwoAgggACgCkANOBEAgDBDbAQwBCyAMENwLC7Y4AlAgAQJ8IAAtANYBBEAgDRDbAQwBCyADENsBC7YiEzgCTCABAn8gASoCUCATkkMAAAA/lI4iE4tDAAAAT10EQCATqAwBC0GAgICAeAsiAjYCSAJAIAJBAUggASoCTCACsiITYHJFBEAgASoCUCATX0EBcw0BCyAAKAL4AkEGTgRAIAEqAkwhEyABKgJQIRQgByABKAJINgIQIAcgFLs5AxggByAGNgIEIAcgBTYCACAHIBO7OQMIQbmqBCAHEDsLQQAhAiABQQA2AkggAUIANwJMDAELQQEhAiAAKAL4AkEGSA0AIAEqAkwhEyABKgJQIRQgByABKAJINgIwIAcgFLs5AzggByAGNgIkIAcgBTYCICAHIBO7OQMoQfPTBCAHQSBqEDsLIA0QhQEaIAwQhQEaIAsQhQEaIAdB8AFqJAAgAguqCwQNfwF+AX0BfCMAQcABayIGJAAgBkGoAWoQSSEHQYABIQkgBkGYAWpBAEGAARCYASEPIAZBiAFqQQBBgAEQmAEhDiAGQfgAakEAQYABEJgBIRAgBkHwAGoQaSEKIAZB6ABqEGkhESAGQdAAaiABEM0BEHEiCBBBIAgQPEUEQANAAkAgCCgCCCIMEKEBEE0NAAJAIAAtAEZFDQAgDCgCEEF9aiILQQNLDQEgC0EBaw4CAQEACyAHIAwQoQEQfCAHEEEgB0F/EKsCEEIuAQQhCwJAIAAtAGYEQCAGQcgAaiAHEL0DDAELIAAtAIYCBEAgBkHIAGogACAMIAcQgwYMAQsgBkHIAGogBxDBAgsgBiAGKQNINwNwIAouAQAhDSAKEFUgCUEQdEEQdUgEQCAKEFUhCQsgBiAGKQNwNwNoIAcQPA0AIAsgDWshCwNAAkAgAC0AZgRAIAZByABqIAcQvQMMAQsgAC0AhgIEQCAGQcgAaiAAIAwgBxCDBgwBCyAGQcgAaiAHEMECCyAGIAYpA0g3A3AgChBVIAlBEHRBEHVIBEAgChBVIQkLIAAgDCALIAIgES4BBCINIAouAQAiEhC/DUUEQCAOIBIgDWsiDUEQdEEQdUEBEHMgDyANIAouAQRqIBEuAQBrQQJtQRB0QRB1QQEQcwsgBiAGKQNwNwNoIAcQPEUNAAsLIAgQZCAIEDxFDQALCwJAIA4oAghBAUwEQCAFIAk7AQAgBEH//wM7AQAgA0EBOgAADAELIAMgD0QAAAAAAADoPxDBASAPRAAAAAAAANA/EMEBobYiFCAUkiAORAAAAAAAAOg/EMEBIA5EAAAAAAAA0D8QwQGhtl46AAAgBQJ/IA4Q2wGcIhWZRAAAAAAAAOBBYwRAIBWqDAELQYCAgIB4CzsBACAIIAEQzQEQtwMgCBBBIAgQPEUEQCAAQegLaiEJIABBwAtqIQwDQAJAIAgoAggiARChARBNDQACQCAALQBGRQ0AIAEoAhBBfWoiA0EDSw0BIANBAWsOAgEBAAsgBiAMKwMQIAUuAQC3ojkDSCAGIAkrAxAgASoCLLuiOQNAIAZByABqIAZBQGsQvQYrAwAhFSAHIAEQoQEQfCAHEEEgB0F/EKsCEEIuAQQhAwJAIAAtAGYEQCAGQcgAaiAHEL0DDAELIAAtAIYCBEAgBkHIAGogACABIAcQgwYMAQsgBkHIAGogBxDBAgsgBiAGKQNINwNwIAouAQAhCyAGIAYpA3A3A2ggBxA8DQAgFbYhFCALIANrIQsDQAJAIAAtAGYEQCAGQcgAaiAHEL0DDAELIAAtAIYCBEAgBkHIAGogACABIAcQgwYMAQsgBkHIAGogBxDBAgsgBiAGKQNINwNwAkAgCi4BACINIBEuAQQiEmtBEHRBEHUiA7IgFF5BAXMNACAAIAEgCyACIBIgDRC/DQ0AAkAgAC0AhgFFDQAgACsD+AYgASoCLLuiIAO3IhVjDQACQCAAKwPQBiABKgIsu6IgFWNBAXMNACAALQCmAUUNASAGIAYpA2giEzcDOCAGIBM3AxggACABIAZBGGoQngQNACAGIAYpA3AiEzcDMCAGIBM3AxAgACABIAZBEGoQngRFDQELIAYgBikDaCITNwMoIAYgEzcDCCAAIAEgBkEIahCeB0UNASAGIAYpA3AiEzcDICAGIBM3AwAgACABIAYQngdFDQELIBAgA0EBEHMLIAYgBikDcDcDaCAHEDxFDQALCyAIEGQgCBA8RQ0ACwsgECgCCEECTARAIARB//8DOwEADAELIAYCfyAQENsBnCIVmUQAAAAAAADgQWMEQCAVqgwBC0GAgICAeAs7AUggBiAFLwEAQQNsOwFAIAQgBkHIAGogBkFAaxCZAi8BADsBAAsgEBCFARogDhCFARogDxCFARogBkHAAWokAAvSBAIJfwF8IwBB8ABrIgIkACACQdgAahBJIgUgARB8IAUQQSAFEDxFBEBBASEDA0AgACAFKAIIIgEgAkHIAGpBEBA/IAEQyTIQ6QIiCCgCACACQdMAaiACQdYAaiACQdQAahDDLwJAIAAtACZFDQAgAC0ANkUNACACLgFWIgSyIAIuAVSylUMAAEBAXUEBcw0AIAICfyAEt0QAAAAAAAAIQKOcIguZRAAAAAAAAOBBYwRAIAuqDAELQYCAgIB4CzsBVAsgAkEwaiABEM0BEHEhBCACQTBqEEECQCACQTBqEDwNAEEBIQEgAi4BVCEJIAIuAVYhCiACLQBTRQRAA0ACQAJAIAQoAggiBigCEEF9aiIHQQNLDQACQCAHQQFrDgIBAQALIAAoAvgCQQFOBEAgAiABNgIEIAIgAzYCAEGlKiACEDsLIAAgBiAIKAIAIANBEHRBEHUgAUEQdEEQdSAKIAkQjhkMAQsgACgC+AIaCyAEEGQgAUEBaiEBIAJBMGoQPEUNAAwCAAsACwNAAkACQCAEKAIIIgYoAhBBfWoiB0EDSw0AAkAgB0EBaw4CAQEACyAAKAL4AhogACAGIAgoAgAgA0EQdEEQdSABQRB0QRB1IAogCRCOGQwBCyAAKAL4AkEBSA0AIAYoAhAhByACIAYqAhS7OQMgIAIgBzYCGCACIAE2AhQgAiADNgIQQaXpACACQRBqEDsLIAQQZCABQQFqIQEgAkEwahA8RQ0ACwsgCBDALyAFEEQaIANBAWohAyAFEDxFDQALCyACQfAAaiQAC9gBAgN/AX0jAEEQayICJAAgAiABNgIMAkAgAiABQQFGBH9BAgUgASABQX9qcUUNASABEOoFCyIBNgIMCwJAIAEgABDkAiIDSwRAIAAgARCQGQwBCyABIANPDQAgAxDyBSEEAn8gABBiKAIAsyAAEEwqAgCVjSIFQwAAgE9dIAVDAAAAAGBxBEAgBakMAQtBAAshASACAn8gBARAIAEQ1AoMAQsgARDqBQs2AgggAiACQQxqIAJBCGoQxgIoAgAiATYCDCABIANPDQAgACABEJAZCyACQRBqJAAL7gMCBX8BfSMAQSBrIgQkACABEGIgAigCABCRGSEHIAEQ5AIhBSAEQQA6AB8CQAJAIAVFDQAgASAHIAUQ+QEiCBBhKAIAIgZFDQADQCAGKAIAIgZFDQEgByAGKAIERwRAIAYoAgQgBRD5ASAIRw0CCyABEEwgBkEIaiACENMDRQ0ACwwBCyAEQRBqIAEgByADEN4MIAEQYigCACECIAEQTCEDAkAgBQRAIAMqAgAgBbOUIAJBAWqzXUEBcw0BCyAEIAUQ8gVBAXMgBUEBdHI2AgwgBAJ/IAEQYigCAEEBarMgARBMKgIAlY0iCUMAAIBPXSAJQwAAAABgcQRAIAmpDAELQQALNgIIIAEgBEEMaiAEQQhqEMYCKAIAEMUvIAcgARDkAiIFEPkBIQgLAkAgASAIEGEoAgAiAkUEQCAEKAIQIAFBCGoiAigCADYCACACIAQoAhA2AgAgASAIEGEgAjYCACAEKAIQKAIARQ0BIAQoAhAhAiABIAQoAhAoAgAoAgQgBRD5ARBhIAI2AgAMAQsgBCgCECACKAIANgIAIAIgBCgCEDYCAAsgBEEQahCDBSEGIAEQYiIBIAEoAgBBAWo2AgAgBEEBOgAfIARBEGoQ2QwLIAAgBEEQaiAGEMABIARBH2oQkgkgBEEgaiQAC7IBAQV/IwBBEGsiAyQAIAAQYiABKAIAEJEZIQQCQAJAIAAQ5AIiBUUNACAAIAQgBRD5ASIGEGEoAgAiAkUNACACKAIAIgJFDQADQCAEIAIoAgRHBEAgAigCBCAFEPkBIAZHDQILAkAgBCACKAIERw0AIAAQTCACQQhqIAEQ0wNFDQAgA0EIaiACEMABKAIAIQIMAwsgAigCACICDQALCyADEPUHIgI2AggLIANBEGokACACCygAIwBBEGsiACQAIAAgAjYCBCAAIAE2AgBBq6UFIAAQOyAAQRBqJAALCQAgABCWERA9C0kBA38gACgCACIBQQFOBEADQCAAKAIIIAJBAnRqKAIAIgMEQAJ/IANBGGoQXRogAwsQPSAAKAIAIQELIAJBAWoiAiABSA0ACwsLPAEBfyMAQRBrIgIkACAAEEIaA0AgACgCBEIANwMAIAAgACgCBEEIajYCBCABQX9qIgENAAsgAkEQaiQACywBAX8jAEEQayIDJAAgA0EIaiABIAIgAhDGLyAAIANBCGoQ4AwgA0EQaiQACzEBAX8jAEEQayICJAAgAiAAIAEQxy82AgAgAkEIaiACEIQFKAIAIQAgAkEQaiQAIAAL9AMBCX8jAEGgAWsiAyQAIANBOGogAhBwIQkgA0EgaiAAEEAiChBBIAoQPEUEQANAIAMgCigCCCILEEIpAQA3AxggA0EYaiABEO4CIAkgA0EYahDlAUEAIQZBACEEQQAhBUEAIQcCQCAJEJMZIgBFDQADQAJAIAAoAgBBCRCjAQ0AIAMgACgCABCuHSADQRhqIAMQjwIhCCADQRhqIAMQ/gEhAiAIQQFOBEAgAyADQRhqEJ0JBH8gCCADLgEYIAMuAQRKdgUgCAsgAmohAgsgAxDJCSADQRhqEMkJSgRAIAAgBiAGRSACIAVIciIIGyEGIAIgBSAIGyEFCyADEMkJIANBGGoQyQlKDQAgACAEIARFIAIgB0hyIgAbIQQgAiAHIAAbIQcLIAkQkxkiAA0ACyAGBEACQCAERQ0AIANBGGoQTiAHaiEAAkAgBCAGRg0AIAcgA0EYahBOIAVqTg0AIAsoAgQQmAsiAiABENoLIAMgBBCVERBAGiADIAIQpQEgBSAASA0BDAMLIAUgAE4NAgsgCygCBBCYCyIAIAEQ2gsgAyAGEJUREEAaIAMgABClAQwBCyAERQ0AIAsoAgQQmAsiACABENoLIAMgBBCVERBAGiADIAAQpQELIAoQRBogChA8RQ0ACwsgCRBuGiADQaABaiQAC94BAQd/IwBBIGsiAiQAIAIgARBeKQEANwMYIAAgAi4BGCACLgEaIAJBFGogAkEQahDVAiAAIAIuARwgAi4BHiACQQxqIAJBCGoQ1QIgAigCECIFIAIoAggiBEwEQCAAKAIIIgcgBWwhBiACKAIMIQgDQCACKAIUIgMgCEwEQANAIAAoAhwgAyAGakECdGpB/wEgARDKAyADIAIoAgwiCEghBCADQQFqIQMgBA0ACyAAKAIIIQcgAigCCCEECyAGIAdqIQYgBSAESCEDIAVBAWohBSADDQALCyACQSBqJAALJgEBfyAAIAE2AgAgAEEEaiICIAEQxwEgAiACEE4iASABEP0EIAALXQEBfyMAQRBrIgIkACAAIAFBBGoQYikBADcCACAAQQhqIAEQ7wIgAkEIaiABEO8CIAAgAkEIahDcBzgCECAAIAEoAiiyOAIUIABBGGoQayABEF8aIAJBEGokACAAC+gFAwp/An0BfCMAQaABayICJAAgAkGIAWoQogQhAyACQfAAaiABEEAiBBBBIAQQPEUEQANAAkAgBCgCCCIGQQRqIgcoAgAEQCAHKAIAEKMDRQ0BCyACQThqIAYQ7wIgAkE4ahDcByENQQAhBUP//39/IQxBACEBIAMoAgBBAEoEQANAIA0gAyABED4oAgAqAhCTi7siDkQYLURU+yEZwKCZIA4gDkQYLURU+yEJQGQbIg62IAwgDiAMu2MiCBshDCABIAUgCBshBSABQQFqIgEgAygCAEgNAAsLIAy7RHsUrkfheoQ/ZARAIANBLBA/IAYQ0S8QXxoMAQsgAyAFED4oAgBBGGogBhBfGiAHEGIhASADIAUQPigCACABEJkBIAYoAighASADIAUQPigCACoCFCABsiIMXkEBcw0AIAMgBRA+KAIAIAw4AhQLIAQQRBogBBA8RQ0ACwsgAkHYAGoQogQhBiADKAIAQQFOBEBBACEFA0AgAyAFED4oAgAiBBDdA0UEQCAEQRhqIQdBACEIIAJBOGohAQJ/IAQqAhQiDItDAAAAT10EQCAMqAwBC0GAgICAeAshCSAEEF4hCiABENwJIAFBADYCHCABQaDsLDYCACABIAkgBCAKEPwDIAcoAgBBAEoEQANAIAJBIGogByAIED4oAgAQlQIQQCEJIAJBIGoQQSACQSBqEDxFBEADQCACQQhqIAkoAggQywIQcSEKIAJBCGoQQSACQQhqEDxFBEADQCAKKAIIIQsgAUEMED8gCxDQLyILEM8vIAYgCxBfGiAKEGQgAkEIahA8RQ0ACwsgCRBEGiACQSBqEDxFDQALCyAIQQFqIgggBygCAEgNAAsLIAIgBCkCCDcDICACQSBqIAIqAiSMEIgEIAAgAkEgaiABEM4vIAEQlhEaCyAFQQFqIgUgAygCAEgNAAsLIAYQ7AsgBhD8ASAGEF0aIAMQyi8gAxD8ASADEF0aIAJBoAFqJAALPgEBfyAAELoRIAFJBEAQvgMACyAAEEIaIAAgARCSGSICNgIAIAAgAjYCBCAAEEIgASACajYCACAAQQAQuREL3QgDDH8BfgJ9IwBB8ABrIgkkACAJQegAahBpIQsgCUHQAGogABDLAhBxIQcgCUE4ahBJIQwgBxBBAkAgBxA8DQADQCAHKAIIEJcBEJoCIQMgBxBkIAMgBGohBCAHEDxFDQALIARFDQAgCUEoaiAEIAAoAihqQQFqEJQLIQggACgCKCAEakEDbCEDIAlBGGoiBhDABSADBEAgBiADEP8aIAYgAxDLLwsgACgCLCgCACEDIAhBABBhIAM2AgAgBxBBIABBKGohDUEAIQQgBxA8RQRAA0AgDCAHKAIIEJcBEHwgDBBBIAwQPEUEQANAIAlBCGogDCgCCBC4ASAJIAkpAwg3A2gCQAJ/AkAgCy4BArIgACALLgEAIAsuAQRqt0QAAAAAAADgP6K2IhAQ1QSTIhGMIBEgEUMAAAAAXRsgACoCFJW7IAFjQQFzDQAgCxBOsiAAKgIUlbsgAmRBAXMNACAIIAQQYSgCALIgEGBBAXNFBEAgCy4BACEDIAggBBBhIAM2AgALIAYgBEEDbCIDEPUCQgA3AwAgBiADQQFqEPUCQgA3AwAgCy4BAiEKIAYgA0ECahD1AiAKtzkDACAEQQFqIQQgCy4BBEEBagwBCyAIIAQQYSgCALIgEF9BAXMNAQJAIAAoAiwgBUEBaiIDQQJ0aigCACIKsiAQX0EBcw0AA0AgBSANKAIAQX9qTg0BIAogCCAEEGEoAgBKBEAgBUEEdCIFIAAoAjBqKQMAIQ8gBiAEQQNsIgoQ9QIgDzcDACAAKAIwIAVqKgIIIREgBiAKQQFqEPUCIBG7OQMAIAAoAjAgBWoqAgwhESAGIApBAmoQ9QIgEbs5AwAgACgCLCADQQJ0aigCACEFIAggBEEBaiIEEGEgBTYCAAsgACgCLCADIgVBAWoiA0ECdGooAgAiCrIgEF8NAAsLIAVBBHQiCiAAKAIwaikDACEPIAYgBEEDbCIOEPUCIA83AwAgACgCMCAKaioCCCEQIAYgDkEBahD1AiAQuzkDACAAKAIwIApqKgIMIRAgBiAOQQJqEPUCIBC7OQMAIARBAWohBCAAKAIsIANBAnRqKAIACyEDIAggBBBhIAM2AgALIAwQRBogDBA8RQ0ACwsgBxBkIAcQPEUNAAsLAkADQCAFIgMgDSgCACIFTg0BIAAoAiwgA0EBaiIFQQJ0aigCACAIIAQQYSgCAEwNAAsgDSgCACEFCyADIAVIBEADQCADQQR0IgUgACgCMGopAwAhDyAGIARBA2wiBxD1AiAPNwMAIAAoAjAgBWoqAgghECAGIAdBAWoQ9QIgELs5AwAgACgCMCAFaioCDCEQIAYgB0ECahD1AiAQuzkDACAAKAIsIANBAWoiA0ECdGooAgAhBSAIIARBAWoiBBBhIAU2AgAgAyAAKAIoSA0ACwsgDSAJQQhqIAQgCEEAEGEgBkEAEPUCEOQLIgAQmAYgABDpBiAGEIAbIAgQpgQLIAlB8ABqJAALpggDFX8BfQN8IwBB8ABrIgckACAHQegAahBpIQMgB0HQAGogARDLAhBxIQQgB0E4ahBJIQggB0EgahBJIQkCQCAEEKcHIgJFDQAgAEGoDmotAAoNACAHQRBqIgYQwAUgAgRAIAYgAhDTLyAGIAIQ5BkLIAQQQSAEEDxFBEAgAEHYEGohDiAAQcAQaiEVIABBgBBqIRYgAEHIEWohDyAAQaARaiEQIABBmBBqIREDQCAIIAQoAggiEhCXARB8IAgQQUEAIQJBACEKAkACQCAIEDwNAANAIAgoAgghCwJAIBJBCBCjAUUEQCAJIAsQXhB8IAkQQSAJEDwNAQNAIAcgCSgCCCIFEF4pAQA3A2gCfyADEFUgAxBOSgRAIAMQVQwBCyADEE4LIQ0gESsDECABKgIUu6IgDbdkIQ0CQCAFENcCEE0NACADEE4hBSAQKwMQRAAAAAAAAPA/oCABKgIUu6IgBbdkQQFzDQAgAxBOIQVEAAAAAAAA8D8gECsDEKEgASoCFLuiIAW3Y0EBcw0AIAMQVSEFIA8rAxBEAAAAAAAA8D+gIAEqAhS7oiAFt2RBAXMNACADEFUhBUQAAAAAAADwPyAPKwMQoSABKgIUu6IgBbdjQQFzDQAgAkEBaiECCyAKIA1qIQogCRBEGiAJEDxFDQALDAELIAJBAWohAgsgB0EIaiALELgBIAcgBykDCDcDaAJ/IAMQVSADEE5KBEAgAxBVDAELIAMQTgshBQJAAkAgESsDECABKgIUu6IgBbdlQQFzDQAgASoCFCIXIBeSIAWyXkEBcw0AIAIgCyAFIBYoAgxtELIdIBUoAgxIaiECDAELIAMQTiELIAEqAhQiFyAXkiALsl1BAXMNACAEEKYCBEAgCBCkAQ0BCyAKQQJqIQoLIAgQRBogCBA8RQ0ACyAKQQNIDQAgEkEJEKMBDQAgDisDECACtyIZoiIYIBigIAq3IhhjQQFzRQRAIAYgDBChAkECOgAADAILIA4rAxAhGiAGIAwQoQIhAiAaIBmiIBhjQQFzRQRAIAJBAToAAAwCCyACQQA6AAAMAQsgBiAMEKECQQA6AAALIAYgDBChAi0AACECIAQQZCAMQQFqIQwgEyACQQJHaiETIBQgAkECRmohFCAEEDxFDQALCyAEEEECQCAEEDwNACAAQZgQaiEDQQAhACAUIBNLBEADQAJAIAYgABChAi0AAEECRwRAIAYgABChAi0AAEEBRw0BCyAEKAIIIAMrAxAgASoCFLuithCsHQsgBBBkIABBAWohACAEEDxFDQAMAgALAAsDQAJAIAYgABChAi0AAEECRwRAIAYgABChAhoMAQsgBCgCCCADKwMQIAEqAhS7orYQrB0LIAQQZCAAQQFqIQAgBBA8RQ0ACwsgBhCoEgsgB0HwAGokAAu1CAMXfwF9AXwjAEGwAWsiAiQAIAJBqAFqEGkhAyACQZABaiABEMsCEHEhCCACQfgAahBJIQYgAkHgAGoQSSEJQcSeLSgCACEFAn9BACABQayeLSgCALIQ1QQgBbJdQQFzDQAaQQAgAEG4DmotAApFDQAaQcSeLSgCACEFIAFBrJ4tKAIAshDVBCABKgIUkiAFsl4LIRAgCBBBQQAhBSAIEDxFBEAgAEHAEGohESAAQYAQaiESIABByBFqIQ0gAEGgEWohDiAAQZgQaiEPIAJBQGshEwNAIAYgCCgCCCIUEJcBEHwgBhBBIAYQPEUEQANAIAYoAgghCgJAIBRBCBCjAUUEQCAJIAoQXhB8IAkQQSAJEDwNAQNAIAIgCSgCCCIEEF4pAQA3A6gBAn8gAxBVIAMQTkoEQCADEFUMAQsgAxBOCyELIA8rAxAgASoCFLuiIAu3ZCELAkAgBBDXAhBNDQAgAxBOIQQgDisDEEQAAAAAAADwP6AgASoCFLuiIAS3ZEEBcw0AIAMQTiEERAAAAAAAAPA/IA4rAxChIAEqAhS7oiAEt2NBAXMNACADEFUhBCANKwMQRAAAAAAAAPA/oCABKgIUu6IgBLdkQQFzDQAgAxBVIQREAAAAAAAA8D8gDSsDEKEgASoCFLuiIAS3Y0EBcw0AIAxBAWohDAsgByALaiEHIAkQRBogCRA8RQ0ACwwBCyAMQQFqIQwLIAJB2ABqIAoQuAEgAiACKQNYNwOoAQJ/IAMQVSADEE5KBEAgAxBVDAELIAMQTgshBAJAAkAgDysDECABKgIUu6IgBLdlQQFzDQAgASoCFCIZIBmSIASyXkEBcw0AIAUgCiAEIBIoAgxtELIdIhUgESgCDEhqIQUMAQsgAxBOIQQgASoCFCIZIBmSIASyXUEBcw0AIAgQpgIEQCAGEKQBDQELIAdBAmohBwsgEARAIAMuAQAhBCADLgECIQsgAy4BBCEWIAMuAQYhFyAKEF4QmgIhCiADLgECIRggASADLgEAshDVBCEZIAIgFTYCRCATIAo2AgAgAiAYsiAZk7s5A0ggAiAXNgI8IAIgFjYCOCACIAs2AjQgAiAENgIwQbL2AiACQTBqEDsLIAYQRBogBhA8RQ0ACwsgCBBkIAgQPEUNAAsLIABB2BJqLQAKBEAgAy4BBCEGIAEgAy4BBLIQ1QQhGSACIAY2AiAgAiAZuzkDKEH1pQMgAkEgahA7IABB2BBqKwMQIRogAiAFNgIMIAIgBzYCCCACQYiCBEGwqgQgGiAFt6IgB7djG0GwqgQgB0ECShs2AhAgAkQAAAAAgIfDQCAHsiAFspW7IAVBAUgbOQMAQefVAyACEDsLQQAhAQJAIAwgAEGYEmooAgxODQAgAEGwEmorAxAgBbeiIAe3Y0EBcw0AIAdBAkohAQsgAkGwAWokACABC+QCAgZ/AXwjAEHQAGsiAiQAIAJBOGogARDLAhBxIgEQQSABEDxFBEAgAEHwEWohBQNAIAUrAxAhCCACQSBqIAEoAggiBBDHAQJ/IAggAkEgahBOt6JEAAAAAAAA4D+gIgiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4CyEGIAJBIGogBBCXARBAIQAgAkEgahBBIAJBIGoQPEUEQANAIAJBCGogACgCCCIHEF4QQCEDIAJBCGoQQSACQQhqEDxFBEADQCADKAIIIAYgAxC9HiADEEQaIAJBCGoQPEUNAAsLAkAgBxBeEE1FDQAgABCIASIDRQ0AIAMQ1AIQPQsgABBEGiACQSBqEDxFDQALCwJAIAQQlwEQTUUNAAJAIAEQjQENACABQQEQggMiAEELEKMBRQ0AIABBC0EAEN8BCyABEPMBIgBFDQAgABDKCBA9CyABEGQgARA8RQ0ACwsgAkHQAGokAAvNAwENfyMAQdAAayIEJAAgBEE4aiACEEAhBSAEQSBqEEkhAiAFEEEgBRA8RQRAIABB2BJqIQwgAEGQE2ohDSAAQegSaiEJIABBgBFqIQ4gAEGQEWohDwNAAkACQCAFKAIIIgYiA0EEaigCAEUNACADKAIEEKMDDQAgBhDZLwwBC0EAIQdBACEIAkAgAUUNACACIAYQlQIQfCACEEEgAhA8DQADQCAAIAIoAggiAxDXLwJAAkACQAJAIA8tAApFDQAgAxDLAhBNDQAgACADENYvDQELIAMQywIQTUUNAQsgAhCIASIDRQ0BIAMQkB4QPQwBCyAOLQAKBEAgACACKAIIENUvCyAJKwMQRAAAAAAAAAAAZkEBc0UEQCADIAkrAxAgDSsDEBDULwsgCEEBaiEICyAHQQFqIQcgAhBEGiACEDxFDQALCwJAIAYQlQIQTQRAIAUQiAEiA0UNASADEIoMED0MAQsgCkEBaiEKCyALQQFqIQsgDC0ACkUNACAEIAc2AhQgBCAINgIQQfecAiAEQRBqEDsLIAUQRBogBRA8RQ0ACwsgAEHYEmotAAoEQCAEIAs2AgQgBCAKNgIAQYrJAiAEEDsLIARB0ABqJAALlwMCB38BfSMAQeAAayIBJAAgAUHIAGogABCVAhBAIgMQWQRAIABBBGoQYiICEE4hBCABIAIuAQA2AgggASACLgEENgIMIAFCADcDOCABQgA3AzAgASACLgECtzkDQEHAABA/IgIgAUEIaiABQTBqIASyIghDAAAAP5QgCEMAAIA+lCIIIAgQrzogAyACEI8BCyADEEEgAxA8RQRAIABBBGohBwNAIAFBMGogAygCCCICEMsCEHEhBCABQTBqEFkEQAJAIAAQlQIQngIEQCABIAcQYikBADcDKAwBCyABQShqIAIQuQMLIAFBKGoQ2wshBSABQQhqIAFBIGoQSSIGEEAaIAFBCGogBRCPAUEcED8iBSAGQQAQxAcaIAFBMGogBRCvAiAGEOsCCyABQTBqEEEgAUEwahA8RQRAA0AgBCgCCBCXARBNBEAgAUGWAzYCBCABQY7iATYCAEGMoCxBiOkAQQJBiaQBIAEQRQsgBBBkIAFBMGoQPEUNAAsLIAIQ8AsgAxBEGiADEDxFDQALCyABQeAAaiQAC9UEAwh/BX0DfCMAQfAAayIFJAAgBUHYAGogARBAIQEgBUFAayACEEAhCSAFQShqIAMQQCEDIAVBEGogBBBAIQggBUEAQdgEEJgBIQYgARBBIAEQPEUEQCAAQYgPaiEKIABB2A5qIQsDQCABKAIIIgQQQhBOIQcgCSECAkAgCygCDCAHTARAIAQoAhghByAEEEIQTiEMIAQQQhBVIQQgAyECIAorAxAgBCAMbLeiIAe3ZUEBcw0BCyACIAEQiAEQjwELIAEQRBogARA8RQ0ACwsgARBBIAEQPEUEQANAIAYgASgCCBBCEE5BARBzIAEQRBogARA8RQ0ACwsgBiAAQbAPaisDEBDBAbYiDkMAAAA/lI4hDUGgoS0rAwAhEiADENMCIAMQQUHQpBArAwBB2KQQKwMAIhSgQeCkECsDACITIBOgoCAOuyIToiAUo5u2IRAgAxA8RQRAA0AgCCEEAkAgAygCCBBCEE6yIg8gEF5FBEAgASEEIA0gD19BAXMNAQsgBCADEIgBEI8BCyADEEQaIAMQPEUNAAsLIAYQ6AYgARBBIAEQPEUEQCASIBOim7YhDwNAIAEoAggQQhBOIQIgASgCCBBCEFUhBAJAIA0gArIiEV5BAXNFBEAgAyABEIgBEI8BDAELIBEgEF5FQQAgBLIgD15BAXMbRQRAIAggARCIARCPAQwBCyAGIAJBARBzCyABEEQaIAEQPEUNAAsLIAYgAEHYD2orAxAQwQEhEiAGEIUBGiAFQfAAaiQAQeikECsDACAStruitiINIA4gDSAOXhsLigIBB38jAEHgAGsiAyQAIANByABqIAEQQCEEIANBMGoQSSEBIANBGGoQSSEFIAMgAhBAIQggBBBBIAQQPEUEQANAIAQoAgghAkHgABA/IgYgAhDYExogBSAGQQRqEHwgASACEJwPEHwgARBBIAEQPEUEQANAIAEQiAEhByAAQfgAED8iCSAHEMQFEJUZIAUgCRCPASABEEQaIAEQPEUNAAsLIAUgBkEMahB8IAEgAhCQGhB8IAEQQSABEDxFBEADQCABEIgBIQIgAEH4ABA/IgcgAhDEBRCVGSAFIAcQjwEgARBEGiABEDxFDQALCyAIIAYQjwEgBBBEGiAEEDxFDQALCyADQeAAaiQACzgBAX8gAQRAIAFBfGoiAigCACIABEAgASAAQQR0aiEAA0AgAEFwahCFASIAIAFHDQALCyACED0LC7EEAwZ/AX0BfCMAQaABayILJAAgC0GIAWogABChARBAIQ4gC0HwAGoQSRogC0HoAGoQaSEPIAtB4ABqEEkhDSALQcgAahBJIQwgC0EwaiAHEEAhByAGQQA7AQACfSAOEFkEQCAFQQA7AQAgBEMAACBBlAwBCyAOEEEDQCALQShqIA4QwQIgCyALKQMoNwNoIBBBAWohECAOEDxFDQALIAsgCykAlwE3AH8gCyALKQOQATcDeCALIAspA4gBNwNwQbCtLSsDACAAKgIsu6K2IREgDiAQQRB0QRB1An8gBItDAAAAT10EQCAEqAwBC0GAgICAeAsgASACIAMgESAFIA0gCSAKEN0NIRIgCARAIA8uAQQhACAPLgEGIQEgDRCaAiECIAsgEjkDICALIAE2AhQgCyAANgIQIAsgAkF/ajYCGEGlow4gC0EQahA7IAwgDRB8IAwQQSAMEDxFBEADQCAMKAIILQAEBEBBopgOQQAQOwsgCyAMKAIIKAIMNgIAQbKdDiALEDsgDBBEGiAMEDxFDQALC0H0yQxBABA7CyAMIA0QfCAMEEEgDBA8RQRAA0AgDCgCCCgCDCEAQQgQPyIBIABBEHRBEHVBABCOAyAHIAEQjwEgDBCNAQRAIAYgDCgCCC4BCDsBAAsgDBBEGiAMEDxFDQALCyANEKYHAnwgBS4BACIAQQFOBEAgEiAAt6OfDAELIARDAAAgQZS7C7YLIQQgDRCmByALQaABaiQAIAQLJwEBfUEBQX9BACAAKgIAIAEqAgCTIgJDAAAAAF0bIAJDAAAAAF4bC60LAwN/CH0FfCMAQaACayIHJAAgB0GQAmpBACABEJgBIQkgB0GAAmpBACABEJgBIQggAEEANgIUAn0gACAJIAgCfUHYtS0rAwBEAAAAAAAA8D+gIAAqAiy7oiAAKgIYIgq7Y0EBc0UEQCAAKgIsIQoLIAoLIAogCiAAKgIcIgsgCyAKXhsiEZJDAAAAP5QiECACEJkRRQRAIAGyIgsgC5IhC0MXt9E4IQ0gCgwBCyAJRAAAAAAAAOg/EMEBIAlEAAAAAAAA0D8QwQGhtiENIAhEAAAAAAAA6D8QwQEgCEQAAAAAAADQPxDBAaG2IQsgCEQAAAAAAADgPxDBAbYLIQ8gCRDoBiAIEOgGAkAgACAJIAggCiAQQQAQmRFFBEAgAbJDAABAQJQhDEMXt9E4IQ4MAQsgCUQAAAAAAADoPxDBASAJRAAAAAAAANA/EMEBobYhDiAIRAAAAAAAAOg/EMEBIAhEAAAAAAAA0D8QwQGhtiEMIAYEQCAHIAhEAAAAAAAA4D8QwQE5A/gBIAcgDLs5A/ABIAcgDrs5A+gBIAcgCrs5A+ABQdWRDSAHQeABahA7CyAQIAhEAAAAAAAA4D8QwQG2IgpeQQFzDQAgACAJIAggCiAKQQAQmRFFDQAgCUQAAAAAAADoPxDBASAJRAAAAAAAANA/EMEBobYhDiAIRAAAAAAAAOg/EMEBIAhEAAAAAAAA0D8QwQGhtiEMIAYEQCAHIAhEAAAAAAAA4D8QwQE5A9gBIAcgDLs5A9ABIAcgDrs5A8gBIAcgCrs5A8ABQZmcDSAHQcABahA7CyAIRAAAAAAAAOA/EMEBGgsCQEHarC0tAABFBEAgAbIhCgwBCyAHIA27OQOoASAHIAu7OQOgASAHIA67OQOYASAHIAy7OQOQASAHQcQAQdMAQc0AIA0gDJQgCyAOlF8bIgIgDCABsiIKXhsgAiALIApeGzYCsAEgB0HYADYCiAEgByAFNgKEASAHIAQ2AoABQYemDSAHQYABahA7CwJ/IAsgCl5BAXMgDCAKXkEBc3JFBEAgAEEANgIQQQBB2qwtLQAARQ0BGkH0yQxBABA7QQAMAQsCQCANIAyUIAsgDpRfQQFzRQRAIAYEQCAHIA27OQN4IAcgC7s5A3AgByAOuzkDaCAHIAy7OQNgQfqvDSAHQeAAahA7CyAJRAAAAAAAAOg/EMEBIAlEAAAAAAAA0D8QwQGhtiENIAhEAAAAAAAA6D8QwQEgCEQAAAAAAADQPxDBAaG2IQsgCEQAAAAAAADgPxDBAbYhD0EAIQIMAQtBASECIAZFDQAgByANuzkDWCAHIAu7OQNQIAcgDrs5A0ggByAMuzkDQEGRuA0gB0FAaxA7CyANuyETIAu7IRJB2qwtLQAABEAgByAPuyIUOQMwIAcgEjkDICAHIBM5AyhB7cENIAdBIGoQOyALIA2VuyEVIAsgAyoCMJW7IRZB0AAhAQJAQfi2LSsDACAToiASZEEBcw0AQaC3LSsDACADKgIwu6IgEmRBAXMNAEHGAEHQAEHYsC0rAwAgAyoCMLuiIBRkGyEBCyAHIAE2AhAgByAWOQMIIAcgFTkDAEHyyQ0gBxA7CwJ/AkBB+LYtKwMAIBOiIBJkQQFzDQBBoLctKwMAIAMqAjC7oiASZEEBcw0AQQJB2LAtKwMAIAMqAjC7oiAPu2QNARoLQQQLIQEgACAPOAIUIAAgATYCECAJRAAAAAAAAOA/EMEBIRIgACACOgAKIAAgErY4AkwgACAAKgIUIgo4AlAgCgJ/IBEgCpIiC4tDAAAAT10EQCALqAwBC0GAgICAeAtBAm0iAbJdIQIgAAJ/IAqLQwAAAE9dBEAgCqgMAQtBgICAgHgLIAEgAhsiATYCRCAAIAE2AkAgACABNgJIQQELIQAgCBCFARogCRCFARogB0GgAmokACAAC5YKAxJ/A30CfCMAQdACayIDJAAgA0HIAmoQaSEFIANBiAJqIAAQoQEQQCEEIANB+AFqQQAgARCYASEHIANBQGsQqgMhCCADQdAAahCqAyEJIANB4ABqEKoDIQogA0HwAGoQqgMhCyADQYABahCqAyEMIANBkAFqEKoDIQ0gA0GgAWoQqgMhDiADQbABahCqAyEPIANBwAFqEKoDIRAgA0HQAWoQqgMhESADQeABahCqAyESAn9BuK8tKwMAIAAqAiy7okQAAAAAAAD4P6AiGJlEAAAAAAAA4EFjBEAgGKoMAQtBgICAgHgLIRMCQCAEEFkNACAEKAIIEEIuAQQhBiAEEEQaIAQQpAENAANAIAQoAggiFC0ANEUEQCADIBQQQikBADcDyAIgBS4BACAGayABSARAIAcgBS4BACAGa0EBEHMLIAUuAQQhBgsgBBBEGiAEEKQBRQ0ACwsCQCAHKAIIRQRAQQAhAAwBCyAAIgRBLGoiBSoCACEVQbi0LSsDACEYIAAqAiwhFkHgtC0rAwAhGSAHIBMQxjkgGCAVu6K2IRUgGSAWu6K2IRZBACEAA0AgByAVIBZB0LYtKwMAtiAIEMU5IgEgAEoEQCABIgBBCkgNAQsLQQAhACABQQFIDQADQCADQaACaiAAQQJ0aiADQUBrIABBAWoiAEEEdGpEAAAAAAAA4D8QwQG2OAIAIAAgAUcNAAsgAgRAIAMgATYCMEHksAwgA0EwahA7IAFBAU4EQEEAIQADQCADQaACaiAAQQJ0aioCACEVIAMgA0FAayAAQQFqIgBBBHRqKAIINgIoIAMgFbs5AyBB8rwMIANBIGoQOyAAIAFHDQALC0H0yQxBABA7CyADQaACaiABQQRB/gEQhwdBiLUtKwMAIAQqAiy7orYhFSAEKgIsIRZBqLEtKwMAIRgCQAJAIAFBAU4EQCAYIBa7orYhFkEAIQACQANAIANBoAJqIABBAnRqKgIAIBVdQQFzDQEgAEEBaiIAIAFHDQALIAEhAAsgAA0BCyACBEBB5dUMQQAQOwsgAUECTgRAIAQgAygCoAI2AiQgBCADKAKkAjYCIAwCCyAEIBU4AiQgBCADKAKgAjYCIAwBCyAEIABBAnQgA2ooApwCNgIkAkACQAJAIAAgAU4NAANAIANBoAJqIABBAnRqKgIAIBZdQQFzDQEgAEEBaiIAIAFHDQALDAELIAAgAUcNAQsgAgRAQbDiDEEAEDsLIARB0LYtKwMAIBW7orY4AiAMAQsgBCADQaACaiAAQQJ0aigCADYCIAtBsLUtKwMAIAQqAiy7orYhFQJAAkAgAUEBTgRAQQAhAAJAA0AgA0GgAmogAEECdGoqAgAgFV1BAXMNASAAQQFqIgAgAUcNAAsgASEACyAADQELIAIEQEHI7wxBABA7CyAEIBU4AhwgA0GgAmohBQwBCyAEIAMgAEECdCIGaigCnAI2AhwgACABRgRAIAJFDQFBk/sMQQAQOwwBCyADQaACaiAGaiEFCyAEIAUoAgAiATYCGEEBIQAgAkUNACAEKgIkIRUgBCoCICEWIAQqAhwhFyADIAG+uzkDGCADIBe7OQMQIAMgFrs5AwggAyAVuzkDAEGQhw0gAxA7CyASEIUBGiAREIUBGiAQEIUBGiAPEIUBGiAOEIUBGiANEIUBGiAMEIUBGiALEIUBGiAKEIUBGiAJEIUBGiAIEIUBGiAHEIUBGiADQdACaiQAIAAL7AcCCn8CfSMAQTBrIg8kACAGIAUoAgA2AgAgBSoCACEUAkACQEG6rC0tAABFBEACfyAUi0MAAABPXQRAIBSoDAELQYCAgIB4C0EQdEEQdSIRQZyvLSgCAEoNAQsgBSoCACEUDAELQX9BnK8tKAIAQQF0QQFyIgpBBHQiC0EEciAKQf////8AcSAKRxsQPyIMIAo2AgAgCyAMQQRqIgxqIQsgDCEKA0AgChCqA0EQaiIKIAtHDQALIA9BKGogDBDpAiEOQZyvLSgCAEEAQZyvLSgCAGsiCk4EQANAIA4gCkGcry0oAgBqEI8IQQAgCkEBaiIMIBFqEMcHGiAKQZyvLSgCAEghCyAMIQogCw0ACwtBnK8tKAIAIQogAiADTARAIAIhDANAIAxBEHQhDEGcry0oAgBBACAKayIKTgRAIAxBEHUiCyACayENA0AgDiAKQZyvLSgCAGoQjwggDSAKIBFqbyABIAsQgQEQcyAKQZyvLSgCAEghECAKQQFqIQogEA0ACwtBnK8tKAIAIQogDEGAgARqQRB1IgwgA0wNAAsLQQAhECAOIAoQjwhBABCBASESAkBBnK8tKAIAQQBBnK8tKAIAayILSARAQQAhDQwBC0EAIQ0DQCALIBFqIhNBAU4EQEEAIQpBACEMA0AgDiALQZyvLSgCAGoQjwggChCBASASSARAIA4gC0Gcry0oAgBqEI8IIAoQgQEhEiALIRAgDCENCyATIAxBAWoiDEEQdEEQdSIKSg0ACwsgC0Gcry0oAgBIIQogC0EBaiELIAoNAAsLAkAgCUUEQCAQQRB0QRB1IRMMAQsgBSoCACEUIA8gEjYCHCAPIBBBEHRBEHUiEzYCGCAPIBS7OQMQQZeHDiAPQRBqEDsLIAUgECARakEQdEEQdSIKsjgCACASQQF0QQJqIRACQCANQRB0QRB1IhEgCmsiEiANQX5qIgxBEHRBEHUiC04NAANAIA4gE0Gcry0oAgBqEI8IIAsgCm8QgQEgEEoNASASIAxBf2oiDEEQdEEQdSILSA0ACwsCQCAKIBFqIhEgDUECaiILQRB0QRB1Ig1MDQADQCAOIBNBnK8tKAIAahCPCCANIApvEIEBIBBKDQEgESALQQFqIgtBEHRBEHUiDUoNAAsLIAAgASACIAMgBCAFKgIAIAYgByAIIAkgDEEQdEEQdSALQRB0QRB1EL4JIRQgCQRAIAUqAgAhFSAPIBS7OQMIIA8gFbs5AwBB7IwOIA8QOwtB2qwtLQAABEAgACABIAIgAyAEIAUqAgAQlxkLIA4oAgAhACAOQQA2AgAgAARAIA4gABDcLwsLIA9BMGokACAUC6UCAQJ/IwBB0ABrIgIkACACQQA2AkwgAkEANgJIIAJBADYCRCACQQA2AkAgAkEANgI8IAJBADYCOCACQQA2AjQgACACQcwAaiACQcgAaiACQcQAaiACQUBrIAJBOGogAkE0aiACQTxqEJgZIAIgATYCICACIAIoAkwiADYCJCACIAIoAkQiATYCKCACIAIoAjgiAzYCLEGo+gsgAkEgahA7QbquLS0AAEUgACABciADckVyRQRAQduGDEEAEDsLIAIgAigCSCIANgIQIAIgAigCQCIBNgIUIAIgAigCNCIDNgIYQeuVDCACQRBqEDtBqq4tLQAARSAAIAFyIANyRXJFBEBB24YMQQAQOwsgAiACKAI8NgIAQcOkDCACEDsgAkHQAGokAAvcBAMCfwJ9AXwjAEEgayIDJAAgA0EANgIYIAAqAhQhBSAAKgIcIQYgAEEUaiEEAkACQAJAIAEEQCABKAIEIQFBmqwtLQAADQIgAUUNASABEKMDDQEMAgtBmqwtLQAADQELIAAgAEHoAGogAC4BDCAALgEOIAUgBiAGIAVeG0MAAEBAlCAAKgIUkkMAAIA+lCAEIANBGGogA0EeaiAAQdgAaiACQYSvLSgCAEYQmhEhBQJAQfCyLSsDACAAKgIUu6IgBbsiB2RBAXMNAAJAQcSpLSgCAEEDcUEDRw0AQcSpLSgCAEEDcUEDRw0BIAAtAAoNACADKgIYIgZDAACgQV4NACAGQwAAIEFeQQFzIAVDAAAAAFxyDQELAkBBmLMtKwMAIAQqAgC7oiAHZEEBcw0AIAAtAAkNAEHEqS0oAgBBA3FBA0YEQCADKgIYQwAAoEFeQQFzDQELIABBATYCEAwDCyAAQQI2AhAMAgsCQAJAQcSpLSgCAEEDcUEDRw0AIAMqAhhDAACgQV4NACADLgEeQQBKDQBB8LItKwMAIAQqAgC7oiAHZUEBcw0BC0HAsy0rAwAgACoCFLuiIAdkQQFzRQRAIABBBDYCEAwDCyAAQQM2AhAMAgsgAEEANgIQDAELQcCzLSsDACEHIABBAzYCECAHIAAqAhS7orYhBQtB2qwtLQAABEAgBCoCACEGIAMCf0G60g0gACgCEEF/aiIAQQNLDQAaIABBAnRBiOwsaigCAAs2AhAgAyADKgIYuzkDCCADIAUgBpW7OQMAQcP2DSADEDsLIANBIGokAAuIAgIFfwF8IwBBIGsiBCQAIARBCGogABDNARBxIgUQQSAFEDxFBEBBASEGA0AgBSgCCCIDKgIsQwAAAABeRQRAIARB8wI2AgQgBEGJwws2AgBBiKAsQarRC0ECQam2CyAEEEULIAMQ5DsCQAJAIAMCf0GwsC0rAwAgAyoCLLuimyIImUQAAAAAAADgQWMEQCAIqgwBC0GAgICAeAsiByACEOAvRQ0AIAMgB0Hsri0oAgBBAWogACABIAYgAhDfL0UNACADKgIUQwAAAABcDQEgAyADKAIgNgJQIAMgAygCJDYCTAwBCyADQgA3AhALIAUQZCAGQQFqIQYgBRA8RQ0ACwsgBEEgaiQAC/YBAgR/AX4CQCABQQFIDQAgACgCBCABTg0AQX9BfyABQQQgAUEEShsiBK1CJH4iBqciAUEEaiIDIAMgAUkbIAZCIIinGxA/IgEgBDYCACABQQRqIgMgBEEkbGohAiADIQEDQCABEJYZQSRqIgEgAkcNAAtBACEBIAAoAgghAiAAKAIAQQBKBEADQCADIAFBJGwiBWogAiAFahC/GyAAKAIIIQIgAUEBaiIBIAAoAgBIDQALCyACBEAgAkF8aiIFKAIAIgEEQCACIAFBJGxqIQEDQCABQVxqELEHIgEgAkcNAAsLIAUQPQsgACAENgIEIAAgAzYCCAsL3QwDCn8BfQJ8IwBBkAFrIgQkACAEQfAAaiABEEAhCyAEQeAAahCqAyEJIARB0ABqEKoDIQogACgCEEF/aiIFQQJLIQYCf0GwsC0rAwAgACoCLLuimyIPmUQAAAAAAADgQWMEQCAPqgwBC0GAgICAeAshAQJAIAZFBEBBACEGIAVBAWsNAQtBACEGIAlBACABEMcHGiAKQQAgARDHBxogCxBBIAsQPEUEQEEBIQwDQAJAIAsoAggiASgCGCgCBCIFBEAgBRCjA0UNAQsgBEE4aiABEM0BEHEhDSAEQThqEEEgBEE4ahA8RQRAA0AgDSgCCCEBAkACQAJAIAAtAAkEQEGAtC0rAwBEAAAAAAAA8D+gIAAqAiwgACoCNJK7oiABKgIsIAEqAjSSu2RBAXNFBEBEAAAAAAAA8D9BgLQtKwMAoSAAKgIsIAAqAjSSu6IgASoCLCABKgI0krtjDQILIAAtAAkNAgtBgLQtKwMARAAAAAAAAPA/oCAAKgIsu6IgASoCLLtkQQFzDQFEAAAAAAAA8D9BgLQtKwMAoSAAKgIsu6IgASoCLLtjQQFzDQELIAEoAhAhBSADIAxGBEAgBUEBRgRAQeSzLSgCACEFIAkCfyABKgIUIg6LQwAAAE9dBEAgDqgMAQtBgICAgHgLQeSzLSgCABBzIAUgB2ohBwwDCyAFQX5qIgVBBEsNAgJAAkACQCAFQQFrDgQBAgACAAsgCQJ/IAEqAhQiDotDAAAAT10EQCAOqAwBC0GAgICAeAtBARBzIAdBAWohBwwECyAHQeSzLSgCAGshBwwDCyAHQX9qIQcMAgsgBUEBRgRAQeSzLSgCACEFIAoCfyABKgIUIg6LQwAAAE9dBEAgDqgMAQtBgICAgHgLQeSzLSgCABBzIAUgCGohCAwCCyAFQX5qIgVBBEsNAQJAAkACQCAFQQFrDgQBAgACAAsgCgJ/IAEqAhQiDotDAAAAT10EQCAOqAwBC0GAgICAeAtBARBzIAhBAWohCAwDCyAIQeSzLSgCAGshCAwCCyAIQX9qIQgMAQsgASgCEEF/aiIBQQVLDQACQAJAAkACQCABQQFrDgUBAgMBAwALIAZB5LMtKAIAaiEGDAMLIAZBAWohBgwCCyAGQeSzLSgCAGshBgwBCyAGQX9qIQYLIA0QZCAEQThqEDxFDQALCyAMQQFqIQwLIAsQRBogCxA8RQ0ACwsgB0Hksy0oAgBKBEAgCUQAAAAAAADgPxDBASEPIABBBTYCECAAIA+2OAIUDAELIAhBAUggB0Hksy0oAgBKckUEQCAKRAAAAAAAAOA/EMEBIQ8gAEEFNgIQIAAgD7Y4AhQMAQsgAEEGNgIQIAcgCHIgBkEBSHINAEGqrC0tAABFBEBB2qwtLQAARQ0BCyAEIAM2AjQgBCACNgIwQcjTCiAEQTBqEDsLQdqsLS0AAARAIAQgBjYCKCAEIAg2AiQgBCAHNgIgQZ/lCiAEQSBqEDsgACoCLCEOIAQgACoCNLs5AxggBCAOuzkDEEHY9AogBEEQahA7CwJAIAAoAhBBfWoiAUEDSw0AAkACQCABQQFrDgICAAELIABBFGohAQJAIAAqAhRBvJ8tKAIAsl1FBEAgASoCACEODAELIAdBAU4EQCABIAlEAAAAAAAA4D8QwQG2Ig44AgAMAQsgCEEBSCAHckUEQCABIApEAAAAAAAA4D8QwQG2Ig44AgAMAQsgBCADNgIEIAQgAjYCAEH7hQsgBBA7IAAgACgCLCICNgIUIAK+IQ4LAkAgDkG8ny0oAgCyXUUEQCABKgIAIQ4MAQsgAUG8ny0oAgCyIg44AgALIAAgDjgCUCAAIA5DAACAPpQ4AkwgAAJ/IA67Ig9EmpmZmZmZ2T+iIhCZRAAAAAAAAOBBYwRAIBCqDAELQYCAgIB4CyICNgJEIAACfyAPRDMzMzMzM+M/oiIPmUQAAAAAAADgQWMEQCAPqgwBC0GAgICAeAsiAzYCQCAAIAIgA2pBAm02AkggAEHYAGoiAhBNRQ0BIAAQoQEQTQ0BIAAgAEHoAGogAC4BDCAALgEOIAAqAhQgACgCREEDbLKSQwAAgD6UIAEgBEE4aiAEQY4BaiACQQAQmhEaDAELIABBADYCFCAAQdgAahDRBAsgChCFARogCRCFARogBEGQAWokAAvcAwEDfyMAQUBqIgMkACADQQA2AjwgA0EANgI4IANBADYCNCADQQA2AjAgA0EANgIsIANBADYCKCADQQA2AiQgA0EIaiAAEM0BEHEiBRBBIAUQPEUEQANAIAUoAggiBCoCLEMAAAAAXkUEQCADQb8ENgIEIANBicMLNgIAQYigLEGq0QtBAkGptgsgAxBFCwJAIAQqAhRDAAAAAF5BAXMNACAEIAAoAhggARDjLyAEKgIUQwAAAABcDQAgBCAEKAIgNgJQIAQgBCgCJDYCTAsgBRBkIAUQPEUNAAsLIAAgA0E8aiADQThqIANBNGogA0EwaiADQShqIANBJGogA0EsahCYGQJAIAJFDQACQEGqrC0tAAANAEG6ri0tAAANAEGqri0tAABFDQELQb3uC0EAEDsgACABEOIvCwJAIAMoAjwiASADKAI4IgJB5LMtKAIAbEoEQCAAQQE2AhwMAQsgAiABQeSzLSgCAGxKBEAgAEEDNgIcDAELIAFBAExBACACQQFIG0UEQCAAQQA2AhwMAQsgAygCNCIBIAMoAjAiAkHksy0oAgBsSgRAIABBAjYCHAwBCyACIAFB5LMtKAIAbEoEQCAAQQQ2AhwMAQsgAEEANgIcCyADQUBrJAALmQcDC38DfQJ8IwBBoAFrIgIkACACQYgBaiAAEEAhBSACQfAAahCqAyEHIAJB4ABqQQBB5AAQmAEhCAJAIAUQWQ0AQZqtLS0AAEUNACACQUBrIAUoAggQzQEQcSIDKAIILgEMIQAgAygCCEHcAGogALciERCRAiEQIAUQQSABIAEgAZRDAACAP5KVIQEgELYhDgJAIAUQPARAQf//ASEGQYGAAiEADAELQYGAAiEAQf//ASEGA0AgAyAFKAIIEM0BELcDIAMQQSADEDxFBEADQCADKAIIIgQqAhQiDUMAAAAAXkEBc0UEQCAIAn8gDYtDAAAAT10EQCANqAwBC0GAgICAeAtBARBzCyAEQdwAaiAREJECIRAgBC4BDCEJIAQuAQ4hBCADEGQgAEEQdEEQdQJ/IASyIAEgDiAQtpOUIg2TIg+LQwAAAE9dBEAgD6gMAQtBgICAgHgLIgRIIQogBkEQdEEQdSELIAxBAWohDCAEIAAgChshAAJ/IAmyIA2TIg2LQwAAAE9dBEAgDagMAQtBgICAgHgLIgQgBiALIARKGyEGIAMQPEUNAAsLIAUQRBogBRA8RQ0ACwsgCCgCCEUNACAHIAZBEHRBEHUiCSAAQRB0QRB1IgoQxwcaIAUQQSAFEDxFBEADQCADIAUoAggQzQEQtwMgAxBBIAMQPEUEQANAIAMoAggiBEHcAGogERCRAiEQIAQuAQwiACAELgEOSARAAn8gALIgASAOIBC2k5STIg2LQwAAAE9dBEAgDagMAQtBgICAgHgLIQYgBEHoAGohCwNAIAcgBkEQdEEQdSALIAAQgQEQcyAGQQFqIQYgAEEBaiIAIAQuAQ5IDQALCyADEGQgAxA8RQ0ACwsgBRBEGiAFEDxFDQALCyADIAUoAggQzQEQtwMgAygCCCIDQdgAaiEAIAIgCEQAAAAAAADgPxDBAbYiATgChAEgAyAHIAkgCgJ/IAGLQwAAAE9dBEAgAagMAQtBgICAgHgLIgO3RAAAAAAAAOg/orYgAkGEAWogAkHcAGogAkHaAGogAEEAEJoRIQFB2qwtLQAABEAgAiACKgKEAbs5AxAgAiABuzkDGCACIAIqAly7OQMgIAIgASAMspUiDrs5AyggAiADNgIIIAIgASADsiIBlbs5AzAgAiAOIAGVuzkDOCACQgA3AwBB3N8LIAIQOwsgABDRBAsgCBCFARogBxCFARogAkGgAWokAAuVAwMFfwF9AXwjAEEwayIDJAAgA0EoahBpIQQgAyAAKAIYQQRqEGIpAQA3AygCQCACRQ0AQaqsLS0AAEUNACAELgEAIQUgBC4BAiEGIAQuAQQhByADIAQuAQY2AiAgAyAHNgIcIAMgBjYCGCADIAU2AhQgAyABNgIQQYOXCyADQRBqEDsLIAACf0GAsS0rAwAgACoCMLuinCIJmUQAAAAAAADgQWMEQCAJqgwBC0GAgICAeAs2AkAgACoCMCEIQdCxLSsDACEJIABBADYCNCAAIAAoAkCyOAI8IAACfyAJIAi7opsiCZlEAAAAAAAA4EFjBEAgCaoMAQtBgICAgHgLIgQ2AkQgACAEsjgCOCAAQYi1LSsDACAAKgIwu6K2Igg4AlQgAEHQti0rAwAgCLuitjgCUCAAEM0BEE1FBEAgACoCMEMAAAAAXkUEQCADQdECNgIEIANBicMLNgIAQYigLEHrpwtBAkGptgsgAxBFC0H6rS0tAAAaIAAQmRkgACABIAJBqqwtLQAAcRDkLwsgA0EwaiQAC8wCAgN/AX4jAEHQAGsiBiQAIAZBOGoQSSIFIAEQfCAFEEEgBRA8RQRAIAMpAgAhCEEBIQMDQCAFKAIIIQcgBiAGKQMwNwMIIAcgAyAEEOkvIAUQRBogA0EBaiEDIAUQPEUNAAsgBiAINwMwCyAGIAAoAQAiADYCBCAGIAA2AiwgASACEOgvIAUQQSAFEDxFBEBBASEDA0AgBSgCCCADIAQQ5y8gBRBEGiADQQFqIQMgBRA8RQ0ACwsgBRBBIAUQPEUEQEEBIQADQAJAIAUoAggiAygCGCgCBCIEBEAgBBCjA0UNAQsgBkEQaiADEM0BEHEhBCAGQRBqEEFBASEDIAZBEGoQPEUEQANAIAQoAgggASADIAAQ5i8gBBBkIANBAWohAyAGQRBqEDxFDQALCyAAQQFqIQALIAUQRBogBRA8RQ0ACwsgBkHQAGokAAsIAEHIrS0QUgsIAEGgrS0QUgsIAEGQrS0QTwsIAEGArS0QTwsIAEHwrC0QTwsIAEHgrC0QTwsIAEHQrC0QTwsIAEHArC0QTwsIAEGwrC0QTwsIAEGgrC0QTwsIAEGQrC0QTwtTAQN/IAAoAgAiAUEBTgRAA0AgACgCCCADQQJ0aigCACICBEACfyACQdAAahC2BxogAkEQahDLCSACCxA9IAAoAgAhAQsgA0EBaiIDIAFIDQALCwtVAQN/IAAoAgAiAUEBTgRAA0AgACgCCCACQQJ0aigCACIDBEACfyADQQRqIgEQ9i8gARD8ASABEF0aIAMLED0gACgCACEBCyACQQFqIgIgAUgNAAsLC9cBAgJ/A30jAEGgAWsiAyQAAkAgABCbGQ0AIAAQ9wYNACADIAEQ+AIiAhDAAkEAIQAgAigCEARAQQAhAQNAIAFBAWohASAEIAIoAhAoArgBKgIokiEEAkAgAigCICACKAIURg0AIAQgAbKVIQVDAAAAACEEQQAhASAAQQAgBiAFXUEBcxsNACACKAIUIQAgBSEGCyACEMoBGiACKAIQDQALCyACEMACIAIoAhBFDQADQCAAIAIoAhRHBEAgAhCXCgsgAhDKARogAigCEA0ACwsgA0GgAWokAAsqAQF/IwBBEGsiAiQAIAAgAkEIaiABEK4BIgAQrQIgABBGGiACQRBqJAALBwAgABC+IgviAwMFfwF+AXwjAEHwAGsiAiQAIAJBADYCZCACIABBFGo2AmAgAiAAQRBqNgJcIAIgAEEMajYCWCACIABBCGo2AlQgAiAAQQRqIgU2AlAgAkHQAGohBCAFIQMDQCACQThqIAMQQCEDIAJBOGoQQSACQThqEDxFBEADQCADKAIIIQYgAiABKQIAIgc3AwggAiAHNwMwIAYgAkEIahD4OyADEEQaIAJBOGoQPEUNAAsLIAQoAgQhAyAEQQRqIQQgAw0ACyAAKAIYKAIERQRAIAJB0AU2AgQgAkHwyg82AgBBhKAsQebJD0ECQZTGDyACEEULIAAoAhggARC4EyACQSBqQQAgACgCGEEEahBiEFUQmAEhAyACQRBqQQAgACgCGEEEahBiEE4QmAEhBCACQThqIAUQQCIBEEEgARA8RQRAA0AgAyABKAIIEEIQVUEBEHMgBCABKAIIEEIQTkEBEHMgARBEGiABEDxFDQALCyAAKAIYAn8gAxDbAUQAAAAAAADgP6AiCJlEAAAAAAAA4EFjBEAgCKoMAQtBgICAgHgLAn8gBBDbAUQAAAAAAADgP6AiCJlEAAAAAAAA4EFjBEAgCKoMAQtBgICAgHgLEM4aIAQQhQEaIAMQhQEaIAJB8ABqJAALlQUCA38BfSMAQZABayIMJAAgAEEEaiINIANBEHRBEHUQ6gEgDSAEQRB0QRB1EO8BAkAgCxBNBEAgACAFIAogCxDBDSAMQcgAaiALEEAiAxBBIAMQPA0BA0AgAygCCCAGIAcQ4x4gAxBEGiADEDxFDQALDAELIAEQ9wYNACAMIAAoAgQiAzYCJCAMIAM2AowBIAAgCxCXEQsgCxBNBEAgDEH6ATYCFCAMQfbGDzYCEEGEoCxB2sUPQQJBlMYPIAxBEGoQRQsCQCABQQVHDQAgDEHwAGpDAAAAAEMAAIA/EIoBIQYgDEEoakMAAAAAQwAAgL8QigEhBCAMQcgAaiALEEAiAxBBIAMQPA0AA0AgAygCCCIHKAIYIgVBBGoiDkEQED8gDhBiQQcQ5A4QkQMgByAGEPsvIAUgBBDIGiAFIAQQxxogAxBEGiADEDxFDQALCyAMQfAAaiALEEAiAygCCCEEAn0gARCbGQRAIAwgDSgCACIENgIIIAwgBDYCbCAMQQhqIAsQ9jEMAQtDAAAAACABEPcGDQAaIAwgDSgCACIFNgIMIAwgBTYCaCABQQ1HIAQgCxD5MQshDyAMQcgAaiAAQfAOaigCDCACIAsQljQiAiAIEJU0IAIgDSABQQ1HQfqbLS0AAEG6nC0tAAAgABCUNAJAIAEQmhkEQCAMIAAoAgQiAzYCBCAMIAM2AkQgACAMQQRqIA8gCxCJLwwBCyABQQpGIAMoAggiAxDNASADKAIYEJUCEIovCyAAIAEQmhkgChDYLyAJIAoQ0i8gDEEoaiAKEEAiABBBIAAQPEUEQANAIAAoAggQuTogABBEGiAAEDxFDQALCyACQQxqIgAQ9y8gABD8ASAAEF0aIAxBkAFqJAALuxMAIAAgATYCACAAQQRqEG8aIABBADoACCAAQQxqQQBB2ClBwegAQQAgACgCABBDEFAgAEEcakEAQfajAUHY4QFBACAAKAIAEEMQUCAAQSxqQQBBwZwCQcDIAkEAIAAoAgAQQxBQIABBPGpBAUGa9gJBtaUDQQAgACgCABBDEFAgAEHMAGpBAEGn1QNBvIEEQQAgACgCABBDEFAgAEHcAGpBAEGaqgRB2OEBQQAgACgCABBDEFAgAEHsAGpBAEG50wRBqv4EQQAgACgCABBDEFAgAEH8AGpBAUGQpQVBlcsFQQAgACgCABBDEFAgAEGMAWpBAUHW8AVBlcsFQQAgACgCABBDEFAgAEGcAWpBAUGAlAZBlcsFQQAgACgCABBDEFAgAEGsAWpBAUHBtQZBlcsFQQAgACgCABBDEFAgAEG8AWpBAUGu0gZBu/AGQQAgACgCABBDEFAgAEHMAWpBAEGjjQdBn6YHQQAgACgCABBDEFAgAEHcAWpBAEGOwwdBh94HQQAgACgCABBDEFAgAEHsAWpBAUHw9wdBtI8IQQAgACgCABBDEFAgAEH8AWpBAUH/pwhBkb8IQQAgACgCABBDEFAgAEGMAmpBAUHi2AhBkb8IQQAgACgCABBDEFAgAEGcAmpBAEGx7QhBpoMJQQAgACgCABBDEFAgAEGsAmpBAEG7lwlBoqwJQQAgACgCABBDEFAgAEG8AmpBAUHKvwlB49IJQQAgACgCABBDEFAgAEHMAmpBAUHY5AlB49IJQQAgACgCABBDEFAgAEHcAmpBAEGH9AlB/YMKQQAgACgCABBDEFAgAEHsAmpBAEGkkwpB/aMKQQAgACgCABBDEHUaIABBhANqQQNBxLQKQbHECkEAIAAoAgAQQxB1GiAAQZwDakEKQbPTCkH55ApBACAAKAIAEEMQdRogAEG0A2pBKEHH9ApByYULQQAgACgCABBDEHUaIABBzANqQRRB9JYLQbynC0EAIAAoAgAQQxB1GiAAQeQDakEBQZa2C0HwwgtBACAAKAIAEEMQdRogAEGABGpEAAAAAAAAAEBBkdELQZffCyAAKAIAEEMQUyAAQagEakQAAAAAAAAAAEGo7gtBiPoLIAAoAgAQQxBTIABB0ARqRAAAAAAAAAAAQcaGDEGI+gsgACgCABBDEFMgAEH4BGpEMzMzMzMz0z9B1pUMQaekDCAAKAIAEEMQUyAAQaAFakS4HoXrUbjeP0HLsAxB1bwMIAAoAgAQQxBTIABByAVqRKRwPQrXo+A/QeHJDEHL1QwgACgCABBDEFMgAEHwBWpEAAAAAAAAAABBmeIMQa3vDCAAKAIAEEMQUyAAQZgGakQzMzMzMzPjP0H7+gxB84YNIAAoAgAQQxBTIABBwAZqRAAAAAAAAOA/QbyRDUHzhg0gACgCABBDEFMgAEHoBmpECtejcD0K5z9BgJwNQfOGDSAAKAIAEEMQUyAAQZAHakSPwvUoXI/qP0H3pQ1B368NIAAoAgAQQxBTIABBuAdqRAAAAAAAAABAQfu3DUHSwQ0gACgCABBDEFMgAEHgB2pEzczMzMzM9D9B3MkNQdLBDSAAKAIAEEMQUyAAQYgIakQAAAAAAAAEQEGk0g1B0sENIAAoAgAQQxBTIABBsAhqRAAAAAAAAPC/QczZDUGL4g0gACgCABBDEFMgAEHYCGpEAAAAAAAADEBBjegNQYviDSAAKAIAEEMQUyAAQYAJakSamZmZmZn5P0H77w1BpvYNIAAoAgAQQxBTIABBqAlqRM3MzMzMzOQ/QYH9DUHqgQ4gACgCABBDEFMgAEHQCWpEAAAAAAAAAkBBgIcOQcmMDiAAKAIAEEMQUyAAQfgJakQfhetRuB7VP0GYkw5Bg5gOIAAoAgAQQxBTIABBoApqRAAAAAAAAAhAQZWdDkGNow4gACgCABBDEFMgAEHICmpEAAAAAAAA4D9B7qgOQZ2tDiAAKAIAEEMQUyAAQfAKakQAAAAAAADgP0GRsw5BwLgOIAAoAgAQQxBTIABBmAtqRAAAAAAAAPg/Qb6+DkHdww4gACgCABBDEFMgAEHAC2pEmpmZmZmZAUBB+scOQcrMDiAAKAIAEEMQUyAAQegLakTsUbgehevRP0HB0A5B9dMOIAAoAgAQQxBTIABBkAxqRAAAAAAAABRAQbnWDkGq2g4gACgCABBDEFMgAEG4DGpEAAAAAAAAAABBq94OQcTgDiAAKAIAEEMQUyAAQeAMakRSuB6F61HIP0Gh4w5B3+UOIAAoAgAQQxBTIABBiA1qRAAAAAAAAPC/QYrpDkHc6w4gACgCABBDEFMgAEGwDWpEAAAAAAAAAABBi/sOQfr8DiAAKAIAEEMQUyAAQdgNakSamZmZmZnJP0HJ/w5Bu4EPIAAoAgAQQxBTIABBgA5qRAAAAAAAAOg/QfeDD0H4hQ8gACgCABBDEFMgAEGoDmpBAEHSiA9Bi4wPQQAgACgCABBDEFAgAEG4DmpBAEHmjg9BsZEPQQAgACgCABBDEFAgAEHIDmpBAEH2kw9BsZEPQQAgACgCABBDEFAgAEHYDmpBB0HJlQ9Bo5cPQQAgACgCABBDEHUaIABB8A5qQQBBlJkPQcabD0EAIAAoAgAQQxB1GiAAQYgPakRmZmZmZmbmP0G2nQ9B+J4PIAAoAgAQQxBTIABBsA9qRAAAAAAAAOg/QfigD0H3og8gACgCABBDEFMgAEHYD2pEzczMzMzM7D9B36QPQfeiDyAAKAIAEEMQUyAAQYAQakEKQaimD0GeqA9BACAAKAIAEEMQdRogAEGYEGpEAAAAAAAA4D9B16oPQYOsDyAAKAIAEEMQUyAAQcAQakEQQZitD0Gsrg9BACAAKAIAEEMQdRogAEHYEGpEAAAAAAAAAEBB568PQY+xDyAAKAIAEEMQUyAAQYARakEBQaSyD0Gzsw9BACAAKAIAEEMQUCAAQZARakEBQfC0D0GVtg9BACAAKAIAEEMQUCAAQaARakSamZmZmZnJP0HPtw9B4bgPIAAoAgAQQxBTIABByBFqRJqZmZmZmdk/QYC6D0Hyug8gACgCABBDEFMgAEHwEWpEAAAAAAAAkD9BkbwPQbK9DyAAKAIAEEMQUyAAQZgSakEBQdi+D0Gqvw9BACAAKAIAEEMQdRogAEGwEmpEAAAAAAAAGEBBhcAPQY+xDyAAKAIAEEMQUyAAQdgSakEAQZLBD0HywQ9BACAAKAIAEEMQUCAAQegSakQAAAAAAAAAAEHTwg9BqcMPIAAoAgAQQxBTIABBkBNqRHsUrkfh+iNAQZnED0GNxQ8gACgCABBDEFML0gEBAn8jAEEQayIEJAACfyABENQGBEAgACABEEwgAiADEJsRDAELIAQgARBMKQEANwMIIARBCGogASgCJBCMAiAEQQhqIAEoAigQiwIgACAEQQhqIAIgAxCbESEFIAQgARBMKQEANwMIIARBCGogASgCHBCbAiAEQQhqIAEoAhgQqQIgACAEQQhqIAIgAxCbESEAIAMEQCAEIAU2AgQgBCAANgIAQZroACAEEDsgARBMEIABIAEQxAELIAUgACAAQQAgBWtIGwshACAEQRBqJAAgAAvLAgEGfyMAQRBrIgUkACAAIAIQwQkhAiAAIAMQwQkhB0EAIQMgACAEEMAJIQggAiAHRwRAQQFBfyACIAdIGyEJIAAoAgwQZyEDIAAoAgwQYyADIAhsQQJ0aiIKIAJqQQNzLQAAIQMCQCABBEBBACEBA0AgAyEEIAUgCiACIAlqIgJqQQNzLQAAIgM2AgggBSAINgIEIAUgAjYCACAFIAQ2AgxBuSkgBRA7AkAgBCADTQRAIAQgA08EQCABQQFqIQEMAgsgBkEBaiEGDAELIAFBBGohAQsgAiAHRw0ACwwBC0EAIQEDQAJAIAMiBCAKIAIgCWoiAmpBA3MtAAAiA0sEQCABQQRqIQEMAQsgBCADSQRAIAZBAWohBgwBCyABQQFqIQELIAIgB0cNAAsLIAAoAgAiACAGbEEEbSAAIAFsaiEDCyAFQRBqJAAgAwviAgEHfyMAQRBrIgYkACAAIAIQwQkhCEEAIQIgACADEMAJIgMgACAEEMAJIglHBEAgACgCDBBnIgJBAUF/IAMgCUgbIgtsIQUgACgCDBBjIAIgA2xBAnRqIgQgCGpBA3MtAAAhAgJAIAEEQCAFQQJ0IQpBACEFA0AgAiEBIAYgBCAKaiIEIAhqQQNzLQAAIgI2AgggBiADIAtqIgM2AgQgBiAINgIAIAYgATYCDEG5KSAGEDsCQCABIAJNBEAgASACTwRAIAVBAWohBQwCCyAHQQFqIQcMAQsgBUEEaiEFCyADIAlHDQALDAELIAVBAnQhCkEAIQUDQAJAIAIiASAEIApqIgQgCGpBA3MtAAAiAksEQCAFQQRqIQUMAQsgASACSQRAIAdBAWohBwwBCyAFQQFqIQULIAMgC2oiAyAJRw0ACwsgACgCACIAIAdsQQRtIAAgBWxqIQILIAZBEGokACACC3oBAX8jAEEQayIFJAAgBSACEEwpAQA3AwgCQCACEJEIBEAgBUEIaiACKAIcEJsCIAVBCGogAigCGBCpAgwBCyAFQQhqIAIoAiQQjAIgBUEIaiACKAIoEIsCCyAAIAEgBUEIaiACEJEIIAMgBBCgGSEAIAVBEGokACAAC2YBAX8jAEEQayIDJAAgA0EANgIMIANBADYCCCAAIAFBACACIANBDGogA0EIahChGRogA0EMaiADQQhqEJ8BKAIAIQAgAygCDCEBIAMoAgghAiADQRBqJAAgASACakEGSCAAQQBIcQu8AQEHfyAAIAEuAQAQwQkhBCAAIAEuAQYQwAkhAiAAIAEuAQQQwQkhBSAAIAEuAQIQwAkhBiAAKAIMEGchByAAKAIMEGMhACACIAZKIAQgBUpyRQRAIAAgAiAHbEECdGohAQNAIAQhAANAIAAgAWpBA3MiAy0AACIIQf8BRwRAIAMgCEEBajoAAAsgACAFRiEDIABBAWohACADRQ0ACyABIAdBAnRqIQEgAiAGRiEAIAJBAWohAiAARQ0ACwsLpwICAn8BfiMAQSBrIgUkACAFIAQpAQAiBzcDGCAFIAc3AxAgBUEIahBpIQYCQCACBEAgBUEYaiAAEIsCIAUgAyAFQRhqEMINIAUgBSkDADcDCCAGEN0DRQRAIAVBGGogBi4BBBCMAgsgBUEQaiAAEIwCIAUgAyAFQRBqEMINIAUgBSkDADcDCCAGEN0DDQEgBUEQaiAGLgEAEIsCDAELIAVBGGogARCpAiAFIAMgBUEYahDCDSAFIAUpAwA3AwggBhDdA0UEQCAFQRhqIAYuAQIQmwILIAVBEGogARCbAiAFIAMgBUEQahDCDSAFIAUpAwA3AwggBhDdAw0AIAVBEGogBi4BBhCpAgsgBUEYaiAFQRBqEJkBIAQgBSkDGDcBACAFQSBqJAALrAMBBH8gACgCAEECdCEDAkAgARCRCwRAIAIQTkEDdCEEAkAgAUEDEM8BRQ0AIAIgAUEDEM8BEEIQ/gEgA0oNAEEBIQUMAgtBASEFIAFBARDPAQRAIAIgAUEBEM8BEEIQ/gEgA0wNAgsgACgCACEGDAELIAEQkwgEQCACEFVBA3QhBgJAIAFBABDPAUUNACACIAFBABDPARBCEI8CIANKDQAMAgsCQCABQQIQzwFFDQAgAiABQQIQzwEQQhCPAiADSg0ADAILIAAoAgAhBAwBCwJAAkAgAUEDEM8BBEAgAUEDEM8BQQEQzwEgAUYNAQsgAUEBEM8BRQ0BIAFBARDPAUEDEM8BIAFHDQELIAIQVUEBdCEGCwJAIAFBAhDPAQRAIAFBAhDPAUEAEM8BIAFGDQELIAFBABDPAUUNASABQQAQzwFBAhDPASABRg0ADAELQQEhBSACEE5BAXQhBAsgAiAEIAYQ/QQgAS4BNiAAKAIAQQZsIgBrIAIuAQBKBEAgAiABLgE2IABrEIwCCyAAIAEuAThqIAIuAQRIBEAgAiAAIAEuAThqEIsCCyAFC7QBAQR/IwBBEGsiBiQAIABBDGoiBxBLIAZBCGpBAEEAIAMQqQFBEHRBEHUgAxCGAUEQdEEQdRCQAiEEIABBADYCBCAAIAQQTjYCCCAAIAQQVSAAKAIAIgVqQX9qIAVtIAQQTiAAKAIAIgVqQX9qIAVtQQgQtAE2AgwgACABQQRqIAIgBCADEKMZIAAgAUEUaiACIAQgAxCjGSAAKAIMEIctIQEgBxBLIAAgATYCDCAGQRBqJAALLwAgAEEANgIMIABCADcCBCAAIAG3RAAAAAAAAFlAoxCWAiIAQQEgAEEBShs2AgALMAECfyMAQSBrIgEkACAAQTBqIgAQngIEQCABQQhqIAAQQBBmIQILIAFBIGokACACC+0BAQV/IwBBMGsiAiQAIAJBGGogAEEwahBAIgQQQSAEEDxFBEADQCACIAQQZiIGQTBqEEAhAyACEEECfyABIAIQPA0AGgNAQQAgAxBmIAFGDQEaIAMQbBogAhA8RQ0ACyABCyEFIAIQQQJAIAIQPA0AIAVFBEADQCADEGYgAEYEQCADEOsBGgsgAxBsGiACEDxFDQAMAgALAAsDQCADEGYgAEYEQCADEOsBGiACIAUQsgoLIAMQbBogAhA8RQ0ACwsgBQRAIAUgBhCdEQsgBBBsGiAEEDxFDQALCyAABEAgABCJCxA9CyACQTBqJAALuQIBBX8jAEHQAGsiAyQAIAAgAEEQaiACQRBqEJ8BKAIANgIQIAAgAEEUaiACQRRqEIcBKAIANgIUIAIQzQYEQCAAIAIoAig2AigLIANBOGogAEEsahBAIQQgA0EgaiACQSxqEEAiBhBZRQRAA0AgBhDrASEFIAYQbBogAyAFEEIpAQA3AxggAyAEEGYiBxBCKQEANwMQAkAgAy4BEiADLgEaTg0AIAQQjQENAANAIAQQbBogAyAEEGYiBxBCKQEANwMQIAMuARIgAy4BGk4NASAEEI0BRQ0ACwsCQCADLgESIAMuARpIBEAgBCAFEPgGDAELIAUgB0YNACAEIAUQsgoLIAYQWUUNAAsLIAMgASgBACIBNgIIIAMgATYCDCAAIANBCGpBARDFDRogAiAAEIkwIANB0ABqJAAL7gQBB38jAEGAAWsiBCQAAkACQCAAEI4FBEAgAhCOBQ0BCyAAEPcDRQ0BIAIQ9wNFDQELIAAgAigCFCACKAIQEKsRQQBIDQAgAS4BAiIBIAFBH3UiAWogAXMiAUEBIAEbIghBCmwiASAAKAIYIgVqIAIoAhgiB0ggBSABayAHSnJFBEBBASEGDAELIAAQzQZFDQAgAhDNBkUNACAAKAIYIgEgCEEybCIFaiACKAIYIgdIIAEgBWsgB0pyDQBBASEGIANFDQACfyAAEI4FBEAgACAAKAIYIAIoAhhIDQEaCyACCyIBLgEOIQUgAS4BCiEHIAQgASAFENICNgIYIAQgASAHENICNgJ8IARBGGogBEH8AGoQnwEoAgAhBiAEIAEgBRDSAjYCGCAEIAEgBxDSAjYCfCAEQRhqIARB/ABqEIcBKAIAIQkgAigCGCECIAAoAhghCiAAEI4FIQEgBEEYaiADEHAiAyAGQQAgCiACayICIAJBH3UiAmogAnMgCG4iCCABG2sgCSAIQQAgARtqIAUQtwQCQCADQQEQ8xEiAkUEQEEBIQYMAQsDQCACEEIiAS4BBiAHSgRAQQEhBgwCCwJAIAEuAQIgBUgNACAEIAAgAS4BAhDSAiICNgJ8IAQgAjYCFAJAIAAQjgUEQCAEIAQoAhQgCGo2AhQMAQsgBCAEKAJ8IAhrNgJ8CyAEIAEuAQQ2AhAgBEEUaiAEQRBqEJ8BKAIAIQIgBCABLgEANgIMIAIgBEH8AGogBEEMahCHASgCAEwNAEEAIQYMAgtBASEGIANBARDzESICDQALCyADEG4aCyAEQYABaiQAIAYLPAAgACgCOCABKAI4EIULBEAgACgCOCABKAI4EIQLCyAAKAI0IAEoAjQQhQsEQCAAKAI0IAEoAjQQhAsLC9UBAQV/IwBBIGsiBCQAIARBCGogAEEwahBAIgIQQSACEDxFBEADQAJAAkAgAhBmIgEoAjQEQCABKAI4IgUNAQsgAUHxpAUQsgMgAEH1ygUQsgMMAQsCQCADRQRAIAAoAjggBRCFC0UNASAAKAI4IAEoAjgQhAsMAQsgAygCNCAFEIULRQ0AIAMoAjQgASgCOBCECwsCQCACEI0BRQ0AIAAoAjQgASgCNBCFC0UNACAAKAI0IAEoAjQQhAsLIAEhAwsgAhBsGiACEDxFDQALCyAEQSBqJAALhAEBAX8jAEEgayIFJAAgABDSARogAEEIahBvGiAAQQxqEG8aIAAgAzYCKCAAQQA6ACYgAEGBAjsBJCAAQQA2AiAgAEIANwIYIAAgAjYCFCAAIAE2AhAgAEEsahBJIQEgAEEwahBJGiAAQgA3AjQgBUEIaiABEEAgBBDCASAFQSBqJAAgAAuzAQECfyMAQRBrIgckAEE8ED8iCCACIAMgACAEEI4wIQAgByABKAEAIgI2AgQgByACNgIMQQAhAwJAIAAgB0EEakEAEMUNRQRAIAAQiQsaIAgQPQwBCyAAEM0GRQRAIAdBCGogCEEMaiAIQQhqEPkLIAEgBygCCDYBACAFIAAQyhkiAiABLgEAbCAFKAIAajYCACAGIAYoAgAgAiABLgECbGo2AgALIAAhAwsgB0EQaiQAIAMLEQAgAARAIAAQiQsaIAAQPQsLTwEDfyAAQQA2AgBB1AAQPyIBQQQ2AgAgAUEEaiICQdAAaiEDIAIhAQNAIAEQnhFBFGoiASADRw0ACyAAIAI2AgggAEIANwIMIABBBDYCBAtIACAAENQBGiAAIAI6AAggACABNgIEIAIEQCAAIAEQYi4BAjYCDCAAIAEoAhQ2AhAPCyAAIAEQQi4BAjYCECAAIAEoAhA2AgwLCABB6KstEFILCABBwKstEFILlwEBAn8jAEEgayICJAAgACABEK0ZBEADQCABENUBIQMgACABEK0ZRQRAIAJBvAY2AhQgAkGHowE2AhBBgKAsQcjwBUECQbvnACACQRBqEEULIAEQ1QEgA0gEQCACQb0GNgIEIAJBh6MBNgIAQYCgLEHTkwZBAkG75wAgAhBFCyABENUBIANKDQALQQEhAwsgAkEgaiQAIAMLfgEDfyMAQfAAayIEJAAgBEEIaiAAKAIEEHAiAhD6ASACIAEQ5QFBACEAAkAgAhC9ASIBRQRAQQAhAQwBCwNAIAEQoAcgAGohACABEMgNIANqIQMgAhC9ASIBDQALIABBAkshASADQQJLIQALIAIQbhogBEHwAGokACAAIAFxC8sGAgh/AX4jAEEgayIDJAAgAyABKQEAIgs3AxggAyALNwMQIAEuAQIhBCABLgEGIQUgA0EANgIMIAAgAS4BACABLgEEIAQgBWpBAm0iByAAKAIIQQJta0EBEIYLIQQgA0EQaiAAIAEuAQAgAS4BBCAAKAIIQQJtIAdqQQAQhgsQmwICQCAEQf////8HRg0AQQohBQNAAkAgA0EQaiAEEKkCIANBEGoQTiEGAkAgACgCCCAGSg0AIAIgA0EQahDJDQJAIAIQoxFFDQAgAhCNBSEGIAMoAgy3RGZmZmZmZuY/oiAGt2VBAXMNACACKAJMIQYCQCACKAJAIgUgCE5BACAFt0SamZmZmZnxP6IgCbdmG0UEQCACQQAQsRlBAkgNASAGt0QAAAAAAAAEQKIgAkEAEKQRt2RBAXMNAQsgA0EYaiAEEKkCIAIoAkAhCSADIAIQjQU2AgggAyADQQhqIANBDGoQhwEoAgA2AgxBASEKC0EKIQUgAigCQCEIDAELIAVBAkgNASAFQX9qIQULIAQgACABLgEAIAEuAQQgBEEBEIYLIgRHDQELC0EAIQYgCkUNACAAIAEuAQAgAS4BBCAAKAIIQQJtIAdqQQAQhgshBCADQRBqIAMuARoQqQIgBEGAgICAeEYNAEEKIQVBACEIQQAhCUEAIQcDQAJAIANBEGogBCIGEJsCIANBEGoQTiEEAkAgACgCCCAESg0AIAIgA0EQahDJDQJAIAIQoxFFDQAgAhCNBSEEIAMoAgy3RGZmZmZmZuY/oiAEt2VBAXMNACACEJ8HIQQgAigCTCEFAkAgAigCPCIKIAhOQQAgCrdEmpmZmZmZ8T+iIAm3ZhtFBEAgAiAEQX9qIgQQsRlBAkgNASAFt0QAAAAAAAAEQKIgAiAEEKQRt2RBAXMNAQsgA0EYaiAGEJsCIAIoAjwhCSADIAIQjQU2AgggAyADQQhqIANBDGoQhwEoAgA2AgxBASEHC0EKIQUgAigCPCEIDAELIAVBAkgNASAFQX9qIQULIAYgACABLgEAIAEuAQQgBkEAEIYLIgRHDQELC0EAIQYgB0UNACADQRhqEN0DDQAgAiADQRhqEMkNIAIQoxEhBgsgA0EgaiQAIAYLUQEBfyMAQRBrIgMkAAJ/QQAgACABEJYwRQ0AGiADIAEpAQA3AwhBACAAIANBCGoQlTBFDQAaIAIgA0EIahDJDSACEKIwCyEAIANBEGokACAAC1UBAn9B2AAQPyIDEKUwIgIgACgCABCRAyACIAAoAgQQjQIgAiAAKAIQNgJUAkAgACABIAIQmDANACAAIAEgAhCXMA0AIAIQvRkaIAMQPUEAIQILIAILjAMBCX8jAEEgayIEJAACQCABQQBIIAEgAkpyRQRAIAAQnwcgAkoNAQsgBEHqATYCFCAEQYejATYCEEGAoCxBxZsCQQJBu+cAIARBEGoQRQsCQEEAIANMBEAgABCNBSADSg0BCyAEQewBNgIEIARBh6MBNgIAQYCgLEHxxwJBAkG75wAgBBBFCyAEQRhqEGkhBQJAIAEgAkoNACAAQSRqIQYCQEEAIANMBEAgAEEQaiEHIAIgASACIAFKGyEJIANBACADQQBKGyEKDAELIAIgASACIAFKGyECA0AgBSAGIAEQPigCABCpAiAFIAYgAUEBaiIAED4oAgAQmwIgASACRiEDIAAhASADRQ0ACwwBCwNAIAUgBiABIgMQPigCABCpAiAFIAYgAUEBaiIBED4oAgAQmwJBACECA0AgBSAHIAIQPigCABCMAiAFIAcgAkEBaiILED4oAgAQiwIgCCAAIAUQohFBAEpqIQggAiAKRiEMIAshAiAMRQ0ACyADIAlHDQALCyAEQSBqJAAgCAvJAgEGfyMAQfAAayIEJAAgBEEIaiAAKAIEEHAiAxD6ASADIABBCGoiAS4BACABLgEEIAEuAQYQtwQCQCADQQAQuwIiAkUNAANAIAIQoAdFDQEgBCABLgEAIAEuAQZBEHRBgIAEakEQdSABLgEEIAIQ/wJBEHRBEHUQkAIiBRBOIQYgACgCTEEBdCAGSA0BIAAgBRCiEUEASg0BIAEgAhD/AhCbAiADQQAQuwIiAg0ACwsgAyABLgEAIAEuAQQgAS4BAhC3BAJAIANBARC7AiICRQ0AA0AgAhCgB0UNASAEIAEuAQAgAhD/AkEQdEEQdSABLgEEIAEuAQJBEHRBgIB8akEQdRCQAiIFEE4hBiAAKAJMQQF0IAZIDQEgACAFEKIRQQBKDQEgASACEP8CEKkCIANBARC7AiICDQALCyADEG4aIARB8ABqJAALLQEBfwJAIAAQnwdBAkgNACAAEI0FQQJIDQAgABCfByAAEI0FbEEFSiEBCyABC90DAgd/AXwjAEGwAWsiASQAIAFBmAFqEKwEIQMgAUGAAWoQrAQhBCABQf////8HNgJ8IAFBgICAgHg2AnggAUEQaiAAKAIAEHAiBRD6ASAFIABBCGoQ5QEgBRC9ASICBEADQAJAIAIQ3AJFDQAgAhBMLgECIAIQTC4BBk4EQCABQaQDNgIEIAFBh6MBNgIAQYCgLEH50gRBAkG75wAgARBFCyABIAIQTC4BAjYCDCABIAFB/ABqIAFBDGoQnwEoAgA2AnwgASACEEwuAQY2AgwgASABQfgAaiABQQxqEIcBKAIANgJ4IAIQTBBOIQYgACgCVCAGSA0AAn8gAhBMEE63RJqZmZmZmcm/okQAAAAAAADgP6JEAAAAAAAA4D+gIgiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4CyEGIAIQTC4BAiAGayIHIAYgAhBMLgEGaiICTg0AIAMgBxBfGiAEIAIQXxoLIAUQvQEiAg0ACwsCQCADKAIARQ0AIAQoAgBFDQAgAxDEAyAEEMQDIAMgBCAAQSRqIgAQshkgASgCfCECIABBABA+IAI2AgAgASgCeCECIAAgACgCAEF/ahA+IAI2AgALIAUQbhogBBBdGiADEF0aIAFBsAFqJAALtgICBn8BfCMAQaABayIBJAAgAUGIAWoQrAQhAyABQfAAahCsBCEEIAFBCGogACgCABBwIgUQ+gEgBSAAQQhqEOUBIAUQvQEiAgRAA0AgAhDcAgRAIAIQTC4BACACEEwuAQROBEAgAUHyAjYCBCABQYejATYCAEGAoCxByakEQQJBu+cAIAEQRQsCfyACKAIst0QzMzMzMzPTP6JEAAAAAAAA4D+iRAAAAAAAAOA/oCIHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAshBiADIAIQTC4BACAGaxBfGiAEIAYgAhBMLgEEahBfGgsgBRC9ASICDQALCwJAIAMoAgBFDQAgBCgCAEUNACADEMQDIAQQxAMgAyAEIABBEGoQshkLIAUQbhogBBBdGiADEF0aIAFBoAFqJAALnAEBA38jAEHwAGsiAiQAIAAoAgAoAgQhAyACIAApAgg3A2ggAkHoAGogASADaxCMAiACQegAaiABIANqEIsCIAIgACgCABBwIgAQ+gEgACACQegAahDlAUEAIQMDQCAAEL0BIgQEQCAEENwCRQ0BIAQQTCIELgEAIAFODQEgAyAELgEEIAFKaiEDDAELCyAAEG4aIAJB8ABqJAAgAwucAQEDfyMAQfAAayICJAAgACgCACgCBCEDIAIgACkCCDcDaCACQegAaiABIANrEKkCIAJB6ABqIAEgA2oQmwIgAiAAKAIAEHAiABD6ASAAIAJB6ABqEOUBQQAhAwNAIAAQvQEiBARAIAQQ3AJFDQEgBBBMIgQuAQIgAU4NASADIAQuAQYgAUpqIQMMAQsLIAAQbhogAkHwAGokACADC9IBAQN/IwBBEGsiAyQAAkAgAEEkaiIBKAIAQQJOBEAgACgCEEEBSg0BCyADQcQCNgIEIANBh6MBNgIAQYCgLEGHgQRBAkG75wAgAxBFCwJ/IAEoAgBBAEoEQANAQQAgACABIAIQPigCABCgMEEASg0CGiACQQFqIgIgASgCAEgNAAsLQQAhAkEBIABBEGoiASgCAEEATA0AGgJAA0AgACABIAIQPigCABCfMEEBTg0BIAJBAWoiAiABKAIASA0AC0EBDAELQQALIQAgA0EQaiQAIAALvgIBBX8jAEHwAGsiBSQAIAAQthkgBUEIaiAAKAIEEHAiBBD6ASAEIABBCGoQ5QEgBBC9ASIBBEAgAEEQaiEDIABBJGohAgNAIAEQoAcEQCACIAEQ/wIQXxoLIAEQyA0EQCADIAFBEGouAQAgAS4BFGpBAm0QXxoLIAQQvQEiAQ0ACwtBACECAkAgAEEQaiIBKAIAQQNIDQAgAEEkaiIDKAIAQQNIDQAgARDEAyADEMQDIAEQxw0gAxDHDSAALgEIIQIgAUEAED4gAjYCACAALgEMIQIgASABKAIAQX9qED4gAjYCACAALgEKIQIgA0EAED4gAjYCACAALgEOIQIgAyADKAIAQX9qED4gAjYCACABEMcNIAMQxw0gABC1GSAAELQZIAAgABChMCICOgA4CyAEEG4aIAVB8ABqJAAgAgtvAQJ/IwBBEGsiAiQAAkAgAUEATgRAIAAQjQUgAUoNAQsgAkH7ADYCBCACQYejATYCAEGAoCxB7eABQQJBu+cAIAIQRQsgAEEQaiIAIAFBAWoQPigCACEDIAAgARA+KAIAIQAgAkEQaiQAIAMgAGsLOAAgABDUARogAEEEahBpGiAAQQxqEG8aIABBEmoQhAYgAEEcahBJGiAAQgA3AhQgAEEAOwEQIAALTAAgAEIANwIAIABBCGoQaRogAEEQahCsBBogAEEkahCsBBogAEIANwI8IABBADoAOCAAQgA3AkQgAEIANwJMIABB/////wc2AlQgAAvYAQIDfwF9IwBBEGsiAiQAIAIgATYCDAJAIAIgAUEBRgR/QQIFIAEgAUF/anFFDQEgARDqBQsiATYCDAsCQCABIAAQ5AIiA0sEQCAAIAEQtxkMAQsgASADTw0AIAMQ8gUhBAJ/IAAQYigCALMgABBMKgIAlY0iBUMAAIBPXSAFQwAAAABgcQRAIAWpDAELQQALIQEgAgJ/IAQEQCABENQKDAELIAEQ6gULNgIIIAIgAkEMaiACQQhqEMYCKAIAIgE2AgwgASADTw0AIAAgARC3GQsgAkEQaiQAC+4DAgV/AX0jAEEgayIEJAAgARBiIAIoAgAQuBkhByABEOQCIQUgBEEAOgAfAkACQCAFRQ0AIAEgByAFEPkBIggQYSgCACIGRQ0AA0AgBigCACIGRQ0BIAcgBigCBEcEQCAGKAIEIAUQ+QEgCEcNAgsgARBMIAZBCGogAhDTA0UNAAsMAQsgBEEQaiABIAcgAxDeDCABEGIoAgAhAiABEEwhAwJAIAUEQCADKgIAIAWzlCACQQFqs11BAXMNAQsgBCAFEPIFQQFzIAVBAXRyNgIMIAQCfyABEGIoAgBBAWqzIAEQTCoCAJWNIglDAACAT10gCUMAAAAAYHEEQCAJqQwBC0EACzYCCCABIARBDGogBEEIahDGAigCABCmMCAHIAEQ5AIiBRD5ASEICwJAIAEgCBBhKAIAIgJFBEAgBCgCECABQQhqIgIoAgA2AgAgAiAEKAIQNgIAIAEgCBBhIAI2AgAgBCgCECgCAEUNASAEKAIQIQIgASAEKAIQKAIAKAIEIAUQ+QEQYSACNgIADAELIAQoAhAgAigCADYCACACIAQoAhA2AgALIARBEGoQgwUhBiABEGIiASABKAIAQQFqNgIAIARBAToAHyAEQRBqENkMCyAAIARBEGogBhDAASAEQR9qEJIJIARBIGokAAuyAQEFfyMAQRBrIgMkACAAEGIgASgCABC4GSEEAkACQCAAEOQCIgVFDQAgACAEIAUQ+QEiBhBhKAIAIgJFDQAgAigCACICRQ0AA0AgBCACKAIERwRAIAIoAgQgBRD5ASAGRw0CCwJAIAQgAigCBEcNACAAEEwgAkEIaiABENMDRQ0AIANBCGogAhDAASgCACECDAMLIAIoAgAiAg0ACwsgAxD1ByICNgIICyADQRBqJAAgAgsoACMAQRBrIgAkACAAIAI2AgQgACABNgIAQevsCCAAEDsgAEEQaiQACyUAAn9BACAAKAIMKAIQRQ0AGiAAKAIMKAIQKAK4AS0ANEEGRgsLCQAgABDPDRA9C6EDAQd/IwBB8ABrIgckAAJAIAEQoAdFDQAgARBMIgQgAhCPBUUNACAHQegAaiAEIAIQ7gQgByAAQRBqEHAiBhD6ASAGIAdB6ABqEOUBAkAgBhC9ASIDRQRAQQAhBAwBC0EAIQQDQAJAIAMQTCACEM8GRDMzMzMzM+M/ZA0AIAMQkwUNACAIQQFqIQgCQCADKAJIQQZHBEAgAxCQBUUNAQsgBUEBaiEFIARBAWohBAwBCyAEIAMoApABIAEoAiBBCmwiCUpqIQQgBSADKAKMASAJSmohBQsgBhC9ASIDDQALCyAGEG4gAEEwahBwIgAQ+gEgACAHQegAahDlASAAEL0BIgMEQANAAkAgAxBMIAIQzwZEMzMzMzMz4z9kDQAgAxCTBQ0AIAhBAWohCAJAIAMoAkhBBkYNACADEJAFDQAgBCADKAKQASABKAIgQQpsIgZKaiEEIAUgAygCjAEgBkpqIQUMAQsgBUEBaiEFIARBAWohBAsgABC9ASIDDQALCyAAEG4aIAQgCEECbSIASiAFIABKciEDCyAHQfAAaiQAIAMLvgEBBn8jAEHwAGsiBSQAIAVBCGogAEEQahBwIgMgAS4BACABLgEEIAEuAQYQtwQCQCADQQAQuwIiAEUNAANAIAAoAiAhAiABLgEGIQcgABBMIgYuAQIgB2sgAkECdEoNASAEIQICQAJAIAAoAkhBBkcEQCAAEJAFRQ0BCyABIAYuAQYQmwJBACEEDAELIAAhBCACRQ0AIAYgAiIEEEwQnQlFDQILIANBABC7AiIADQALCyADEG4aIAVB8ABqJAALdgEDfyMAQfAAayIEJAAgBEEIaiAAQTBqEHAiBRD6ASAFIAIQ5QEDQCAFEL0BIgIEQCACEJAFRQ0BIAMgAhBMIgYQywMNASAAIAIgARCsMEUNASAEIAMgBhDuBCADIAQpAwA3AQAMAQsLIAUQbhogBEHwAGokAAvbAQEDfyMAQfAAayIFJAAgBUEIaiAAQdAAahBwIgYgAhDlASAGEL0BIgQEQANAAkAgBBCTBQ0AIAQQTCIEIAEQzwZEMzMzMzMz4z9kQQFzDQAgBSADIAQQ7gQgAyAFKQMANwEACyAGEL0BIgQNAAsLIAYQbiAAQTBqEHAiACACEOUBIAAQvQEiBARAA0ACQCAEEJMFDQAgBBBMIgIgARDPBkQzMzMzMzPjP2RBAXMNACAFIAMgAhDuBCADIAUpAwA3AQALIAAQvQEiBA0ACwsgABBuGiAFQfAAaiQAC4cCAQd/IwBBMGsiAiQAIAIgARBeKQEANwMoIAAgAi4BKCACLgEqIAJBJGogAkEgahDVAiAAIAIuASwgAi4BLiACQRxqIAJBGGoQ1QIgAigCICIFIAIoAhgiA0wEQCAAKAIIIgcgBWwhBiACKAIcIQgDQCACKAIkIgQgCEwEQANAIAIgACgCHCAEIAZqQQJ0ahBAIQMgAhBBIAIQPEUEQANAIAMQZiABRgRAIAMQ6wEaCyADEGwaIAIQPEUNAAsLIAQgAigCHCIISCEDIARBAWohBCADDQALIAAoAgghByACKAIYIQMLIAYgB2ohBiAFIANIIQQgBUEBaiEFIAQNAAsLIAJBMGokAAssAQF/IwBBEGsiAyQAIANBCGogASACIAIQpzAgACADQQhqEOAMIANBEGokAAsxAQF/IwBBEGsiAiQAIAIgACABEKgwNgIAIAJBCGogAhCEBSgCACEAIAJBEGokACAAC6MBAQh/IwBB8ABrIgYkACAGQQhqIABBEGoQcCIHEKIBQf////8HIQFBgICAgHghAgNAIAcQkwEiAARAIAAQ3AJFDQEgACADIAIgABBMLgEGIgRIIggbIQMgBCACIAgbIQIgACAFIAEgABBMLgECIgBKIgQbIQUgACABIAQbIQEMAQsLIAMEQCADEIcLCyAFBEAgBRCHCwsgBxBuGiAGQfAAaiQAC4wDAQd/IwBB8ABrIgIkACACQQhqIABBEGoQcCIGEKIBIAYQkwEiAQRAA0ACQCABKAJIQQZHDQAgASgCfCIDRQ0AIAMoAkhBAUcNACADEEwQVSEEIAEQTBBVQQF0IARKDQAgARBMLgEAIAEQTC4BBGpBAm0hBCADEEwuAQAgAxBMLgEEakECbSEFAn8gAC0AsAEEQCACIAEQTC4BADsBBiACIAMQTC4BADsBBCAFIAJBBmogAkEEahD7AS4BACIHayEFIAQgB2sMAQsgAiABEEwuAQQ7AQYgAiADEEwuAQQ7AQQgAkEGaiACQQRqEJkCLgEAIgcgBWshBSAHIARrC7dEzczMzMzM9D+iIAW3ZA0AIAEgAxCsM0UNACABIAMQqzNFDQAgASgCIKxCA34gASgCjAGsUw0AIAMQTBBVIQQgAygCkAGsQgN+IASsVQ0AIAEoAoQBIAEoAogBTg0AIAEoAoQBIAAoAgxBAXRKDQAgARCHCwsgBhCTASIBDQALCyAGEG4aIAJB8ABqJAAL6AIBBn8jAEGAAWsiAyQAQQEhAiABKAI0QQZHBEAgARBMIQIgACgCBCEFIAIuAQYhBiACLgECIQcgA0EYaiAAQTBqEHAiBCACLgEEIAcgBUEBdCIAayIFIAAgBmoiBhC4BAJAAkACQCAEQQEQkwMiAEUNAANAIAAoAjRBBkYEQCAAIAFGBEAgA0HJBzYCFCADQaSTBjYCEEH8nyxB490HQQJBtPAFIANBEGoQRQsgASAAEK8aRQ0CIAAgARDTCQ0DCyAEQQEQkwMiAA0ACwsgBCACLgEAIAUgBhC4BCAEQQAQkwMiAEUEQEEAIQIMAgsDQCAAKAI0QQZGBEAgACABRgRAIANByQc2AgQgA0GkkwY2AgBB/J8sQePdB0ECQbTwBSADEEULIAEgABCvGkUEQEEAIQIMBAsgACABENMJDQILQQAhAiAEQQAQkwMiAA0ACwwBC0EBIQILIAQQbhoLIANBgAFqJAAgAguJAwIIfwF+IwBBMGsiAiQAIAAQ3AJFBEAgAkHbBjYCBCACQaSTBjYCAEH8nyxB2cIHQQJBtPAFIAIQRQsgAkEYaiAAENECIgUQQCEDIAAQTBBVIQECQCAAKAIgQQpsIAFKBEBBASEBIAUQ7AFBCkgNAQtBfyEEIAJBfzYCFCACQX82AhAgACgCICEBIAAoAiAhByADEEEgAxA8RQRAIAGsQgKGIQkDQCADEGYiARBCLgEAIQggAiABEEIuAQQ2AhQgAkEUaiEGAkAgAigCECIBQX9GDQACQCAIIAFrIgFBf0wEQCAAKAIgrEIChkEAIAFrrFUNAQsgCSABrFMEQEEBIQEMBQsgASAEIAEgBEobIQQMAQsgAkEQaiACQRRqEIcBIQYLIAIgBigCADYCECADEGwaIAMQPEUNAAsLIAAQTBBVIQNBACEBIAAoAiBBFGwgA0gNACAFEOwBQRRKDQAgBEF/RgRAQQEhAQwBCyAHt0QAAAAAAADgP6IgBLdkIQELIAJBMGokACABC4EBAQJ/AkAgAC4BACABLgEAayICIAJBH3UiAmogAnNBE0oNACAALgEEIAEuAQRrIgIgAkEfdSICaiACc0ETSg0AQQEhAyAALgEGIAEuAQJrIgIgAkEfdSICaiACc0EFSA0AIAEuAQYgAC4BAmsiACAAQR91IgBqIABzQQVIIQMLIAML/QECBH8BfAJAIAJBAEwNAANAIAEgBEECdGooAgAiBiADIAYgA0obIQMgBEEBaiIEIAJHDQALIANBA0gNAETNzMzMzMzcP0RmZmZmZmbWPyADQQVKGyADt6IhB0EAIQMDQCABIANBAnRqIgQgByAEKAIAt2U2AgAgA0EBaiIDIAJHDQALQQEhAyACQQFKBEBBfyEEA0ACQCADQQJ0IAFqIgZBfGooAgBFBEAgBEF/RwRAIAYoAgBFDQIgAyAEayIEIAUgBCAFShshBQtBfyEEDAELIAQgAyAGKAIAGyEECyADQQFqIgMgAkcNAAsLIAA0AgRCAYYgBaxTIQULIAULQQEBfyMAQRBrIgMkACADIAEpAQA3AwggACABIANBCGogAhCvMCAAIAEgA0EIaiACEK4wIAAgAhCtMCADQRBqJAALhAEBBH8jAEHwAGsiAyQAQQEhBCABIAIQzgJFBEAgA0HoAGogASACEO4EIAMgAEEQahBwIgAgA0HoAGoQ5QFBACEEAkADQCAAEL0BIgVFDQEgBRBMIgYgARDOAkUNACAGIAIQzgJFDQAgBRCTBQ0AC0EBIQQLIAAQbhoLIANB8ABqJAAgBAskAQJ/IwBBEGsiAiQAIAEgABC+GSEDIAJBEGokACABIAAgAxsLOgECfyAAKAIQIgGsQgN+IAAoAgwiAqxTBEAgAEECNgIUDwsgASACSgRAIABBATYCFA8LIABBAzYCFAurAQEDfyMAQUBqIgIkACACQShqIAAQQCEAIAJBEGogARBAIQEgABBBIAAQPEUEQANAIAAoAggQXiEDIAEQQQJAIAEQPEUEQANAIAIgASgCCCIEEF4pAQA3AwggAyACQQhqELcwBEAgBCADEM4GIAAQiAEiA0UNAyADED0MAwsgARBEGiABEDxFDQALCyABIAAQiAEQjwELIAAQRBogABA8RQ0ACwsgAkFAayQAC9sBAQR/IwBB8ABrIgQkACAEQQhqIABBEGoQcCIBEKIBIAEQkwEiAARAA0ACQCAAKAJIQQVKDQAgACgCSEUNACAAKAJ8IgJFIAAoAoABIgNFcg0AIAIoAkhBBkcNACADKAJIQQZHDQAgABCmEQsgARCTASIADQALCyABEKIBIAEQkwEiAARAA0ACQCAAKAJIQQZHDQAgACgCgAEhAiAAKAJ8IgNFDQAgAkUgAygCSEEGRnINACACKAJIQQZGDQAgABCHCwsgARCTASIADQALCyABEG4aIARB8ABqJAALdgEDfyMAQfAAayIDJAAgA0EIaiAAQRBqEHAiAhCiASACEJMBIgEEQANAAkAgARDcAkUNACAANAIEQgGGIAEoAiCsUw0AIAEQtjBFBEAgACABELUwRQ0BCyABEKYRCyACEJMBIgENAAsLIAIQbhogA0HwAGokAAuJBQEGfyMAQeABayICJAAgAkH4AGogABBwIgYQogEgBhCTASIEBEADQCABIAYoAihBAnRqKAIAIQMgAiAEEEwpAQA3A3AgBBD/AiEFIAMgAi4BcCAFEMEFIQcgAyACLgF0IAUQwQUhAyAHBEAgAkEANgIIIAIgAi4BcCAHIAUQ4gRrNgJsIAQgAkEIaiACQewAahCHASgCABC8GQsgAwRAIAJBADYCCCACIAMgBRCVBSACLgF0azYCbCAEIAJBCGogAkHsAGoQhwEoAgAQuxkLIAJBCGogABBwIgUgAi4BcCACLgFyIAIuAXYQuAQDQCAFQQEQkwMiAwRAAkAgAygCSEELRg0AIAMoAkhBCUYNACADKAJIQQpHDQILIAMQTC4BBCIDIAIuAXBODQEgAiACLgFwIANrNgJsIAIgBCgCjAE2AgQgBCACQewAaiACQQRqEJ8BKAIAELwZDAELCyAFIAIuAXAgAi4BciACLgF2ELgEA0AgBUEAEJMDIgMEQAJAIAMoAkhBC0YNACADKAJIQQlGDQAgAygCSEEKRw0CCyADEEwuAQAiAyACLgF0TA0BIAIgAyACLgF0azYCbCACIAQoApABNgIEIAQgAkHsAGogAkEEahCfASgCABC7GQwBCwsgBCAEQQEQnQIiAwR/IAJBADYCbCACIAMQTC4BAiAEEEwuAQJrNgIEIAJB7ABqIAJBBGoQhwEoAgAFQf////8HCzYChAEgBCAEQQAQnQIiAwR/IAJBADYCbCACIAQQTC4BAiADEEwuAQJrNgIEIAJB7ABqIAJBBGoQhwEoAgAFQf////8HCzYCiAEgBRBuGiAGEJMBIgQNAAsLIAYQbhogAkHgAWokAAtpAQN/IwBB8ABrIgMkACADQQhqIABBEGoQcCIBEKIBIAEQkwEiAARAA0AgAEEBEJ0CIgIEQCAAIAI2AnwLIABBABCdAiICBEAgACACNgKAAQsgARCTASIADQALCyABEG4aIANB8ABqJAALygIBB38jAEHQAmsiBiQAIAZB6AFqIAEQcCIHEKIBIAcQkwEiBARAA0AgBCgCSEEGRgRAIAQQhwsLIAcQkwEiBA0ACwsgBkGAAWogAEGQAWoQcCIIEKIBIAgQnwQiBARAA0AgBBBeIQogBkEYaiABEHAiCSAKEOUBQQAhBQNAIAkQvQEiBARAIAQQ3AJFDQEgBiAEEEwpAQA3AxAgBkEQaiAKEM8GRDMzMzMzM+M/ZEEBcw0BIAkQrwMgBQRAIAUgBCADEKoHBSAEIQULDAELCyAFBEAgASAFEEwiBC4BACAELgECIAZBEGogBkEMahDVAiAFIAAoAgAgAiAGKAIMQQJ0aigCABDYESAFEKYRIAVBBxCJBSAFQQMQkwQgBRCSBSABIAUQpQILIAkQbhogCBCfBCIEDQALCyAIEG4aIAcQbhogBkHQAmokAAvmAwENfyMAQZACayIBJAAgABDMDS4BACAAEKIHLgEAayIDQQBMBEAgAUGpDTYCBCABQaSTBjYCAEH8nyxB8I4IQQJBtPAFIAEQRQtBfyADQQJ0IgogA0H/////A3EgA0cbED8hBCABQagBaiAAQZABahBwIgUQogEgBRCfBCIGBEAgAEEQaiELIANBAUghDANAIAEgBhBeKQEANwOgASAMRQRAIARBACAKEGUaCyABQThqIAsQcCIHEPoBIAcgAUGgAWoQ5QEDQCAHEL0BIgIEQCACENwCRQ0BIAIoAjRBBkYNASABIAIQTCkBADcDMCABQTBqIAFBoAFqEM8GRDMzMzMzM+M/Yw0BIAFBGGogAhDRAhBAIQkgAUEANgIUIAFBGGoQQSABQRhqEDwNAQNAIAEgCRBmIgIQQi4BADYCECACEEIuAQQhCCABIAFBEGogAUEUahCHASgCACICNgIQIAIgCEgEQANAIAQgAiAAEKIHLgEAa0ECdGoiDSANKAIAQQFqNgIAIAJBAWoiAiAIRw0ACwsgASAINgIUIAkQbBogAUEYahA8RQ0ACwwBCwsgACAEIAMQuDBFBEAgBRChByAGED0LIAcQbhogBRCfBCIGDQALCyAEED0gBRBuGiABQZACaiQAC8wBAQd/IwBBkAFrIgEkACABQfAAaiABQYgBahBJIgcQQCECIAFBCGogAEGQAWoiBhBwIgMQogEgAxCfBCIEBEADQCABIAQQXiIFKQEANwMAIAAgBSABELkwIAEQ3QNFBEBBGBA/IgUQyw0gARDOBiACIAUQlwULIAMQoQcgBBA9IAMQnwQiBA0ACwsgBhD7AyACELoGIAIQQSACEDxFBEADQCAGIAIQ6wEQiAsgAhBsGiACEDxFDQALCyADEG4aIAcQ7gEaIAFBkAFqJAALzwMBCX8jAEGwAWsiAyQAIANBmAFqIAEQQCEBIANBgAFqIAIQQCEJIANBGGogAEHwAGoQcCIIEKIBIAAQzA0uAQIgABCiBy4BAmsiBUEATARAIANBtQo2AgQgA0GkkwY2AgBB/J8sQbL3B0ECQbTwBSADEEULIAUQPyEHIAgQnwQiAgRAIAVBAUghCgNAIAIQXiEEIApFBEAgB0EAIAUQZRoLIAEQ0wIgARBBIAEQPEUEQANAIAMgASgCCBBeKQEANwMQIANBCGogA0EQaiAEEIYEIAMuAQoiAiADLgEOSARAA0AgByACIAAQogcuAQJrakEBOgAAIAJBAWoiAiADLgEOSA0ACwsgARBEGiABEDxFDQALCyADQRBqEGkiBiAELgEAEIwCIAYgBC4BBBCLAkEBIQIgBUEBSgRAA0ACQCACIAdqIgRBf2oiCy0AAEUEQCAELQAARQ0BIAYgAiAAEKIHLgECahCpAiALLQAARQ0BCyAELQAADQAgBiACIAAQogcuAQJqEJsCIAYQ3QMNAEEYED8iBBDLDSAGEM4GIAkgBBCPAQsgAkEBaiICIAVHDQALCyAIEJ8EIgINAAsLIAcQPSAIEG4aIANBsAFqJAALowIBCH8jAEHwAWsiAyQAIANB2AFqIAEQQCEHIANB8ABqIABBEGoiCBBwIgQQogEgBBCTASIABEADQAJAIAAtALgBDQAgACgCSEEGRw0AIAAQTCEBQRgQPyIFEMsNIgkgARDOBiAAQQEQpxEgA0EIaiAIEHAiAiABLgEAIAEuAQQgAS4BAhC3BEEAIQYCQCACQQEQuwIiAQRAA0ACQAJAIAEtALgBDQAgARCgBw0AIAEoAkhBBkcNASAJIAEQTBDOBkEBIQYgAUEBEKcRIAJBARC7AiIBDQIMBAsgAkEBELsCIgENAQsLIAYNAQsgAEEAEKcRIAUQPSACEG4aDAELIAcgBRCPASACEG4aCyAEEJMBIgANAAsLIAQQbhogA0HwAWokAAunAwEKfyMAQeABayIBJAAgACgCFCEIIAFB+ABqIABB8ABqIgkQcCICEKIBIAIQnwQiAwRAA0BBACEHAkAgAygCFEEBRw0AA0AgASADEF4pAQA3A3AgASAIIAEuAXZqNgIIIAEgABDMDS4BAjYCbCABQQhqIAFB7ABqEJ8BKAIAIQQgASABLgFyIAhrNgIIIAEgABCiBy4BAjYCbCABQQhqIAFB7ABqEIcBKAIAIQUgAUHwAGogBBCbAiABQfAAaiAFEKkCIAFBCGogCRBwIgUgAUHwAGoQ5QFBACEKA0AgBRC/GSIEBEAgAyAERg0BIAQQXiIGIAFB8ABqEM8GRM3MzMzMzOw/ZkEBc0UEQCADIAYQzgYgBRChByACEJQDIAQQPUEBIQcMAgsgBCgCFEECRw0BIAYgAUHwAGoQjwVFDQEgAUHwAGogBhDLAw0BIAMgBhDOBiAFEKEHIAIQlAMgBBA9QQEhB0EBIQoMAQsLIAUQbhogCg0ACyAHRQ0AIAIQoQcgCSADEIgLIAIQlAMLIAIQnwQiAw0ACwsgAhBuGiABQeABaiQAC+IBAQZ/IwBBkAFrIgIkACACQfgAaiABEEAiAxBBIAMQPEUEQCAAQRBqIQcDQCACIAMoAggiBhBeKQEANwNwIAJBCGogBxBwIgAQ+gEgACACQfAAahDlAUEAIQRBACEFIAAQvQEiAQRAA0ACQCABKAJIQQZGBEAgBUEBaiEFDAELIAQgASgCSEEBRmohBAsgABC9ASIBDQALCwJAIAQgBXJFBEAgAxCIASIBRQ0BIAEQPQwBCyAGIAUQ3gEgBiAEEKoFIAYQvDALIAAQbhogAxBEGiADEDxFDQALCyACQZABaiQAC0EBA38gACgCACIBQQFOBEADQCAAKAIIIAJBAnRqKAIAIgMEQCADEPAEED0gACgCACEBCyACQQFqIgIgAUgNAAsLC3oBBH8jAEEQayIFJAAgACgCHEEBTgRAA0ACQCABIANBAnRqKAIAIgZFBEAgA0EBaiEDDAELIAVBCGoQSSEEIAYgAyAAKAIUbCADQQFqIgMgACgCFGwgBBD8MiAEIAIQvTAgBBDKDQsgAyAAKAIcSA0ACwsgBUEQaiQAC0YAIAAQvzBBmqstLQAAGiAAEMAZQZqrLS0AABogABC+MEGaqy0tAAAaIAAQwBlBmqstLQAARQRAAkBBiqstLQAARQ0ACwsLzAEBBX8jAEEgayIFJAAgABDBMCAAQRBqIgQgAhDAMCAAIAQQxRkgABDLMCAAIAIgBUEYahBJIgQQyjAgACAEEMgwIAQgAEHwAGoQwxkgABDHMCAAIAVBEGoQSSIGEMYwIAAgBiAFQQhqEEkiBxDFMCAHIABBkAFqEMMZIAAQqBEgABDEMCAAEKgRQbqrLS0AACEIIAAQwzAgCARAIAAQwhkgABCoESAAEMIZCyAAIAEgAiADEMIwIAcQyg0gBhDKDSAEEMoNIAVBIGokAAt8AQF/IwBBEGsiAiQAAkACQAJAIAFFBEAgAkGbAzYCBCACQaSTBjYCAEH8nyxBm8oFQQJBtPAFIAIQRUEAEMwJRQ0BDAMLIAEQzAkNAQsgARBMENUBQQFOBEAgAEEwaiABEKUCDAILIAFFDQELIAEQtQMQPQsgAkEQaiQAC4UDAgN/AX4jAEFAaiICJAACQAJAIAFFBEAgAkG1AzYCFCACQaSTBjYCEEH8nyxBm8oFQQJBtPAFIAJBEGoQRUEAENECEE0NAgwBCyABENECEE1FDQAgARC1AxA9DAELIAEoAixBAEwEQCACQb0DNgIEIAJBpJMGNgIAQfyfLEGQtQZBAkG08AUgAhBFCyABKAIsIQMgAkEoaiABENECEEAhBCACQYCAgIB4NgIkIAJBKGoQQQJAIAJBKGoQPARAIAEhAwwBCyADrEIBhiEFA0AgBBBmEEIhAwJAIAIoAiRBgICAgHhHBEAgBSADLgEAIAIoAiRrrFMNAQsgAiADLgEENgIgIAIgAkEkaiACQSBqEIcBKAIANgIkIAQQbBogAkEoahA8RQ0BIAEhAwwCCyABIAMuAQAgAigCJGpBAm0Q2REhAyAAIAEQxBkgBCADENECEEAaIAJBgICAgHg2AiQgAkEoahBBIAMhASACQShqEDxFDQALCyAAIAMQxBkLIAJBQGskAAtuAQF/IwBBEGsiAiQAAkACQAJAIAFFBEAgAkGLAzYCBCACQaSTBjYCAEH8nyxBm8oFQQJBtPAFIAIQRSAAQQAQzQ0NAQwCCyAAIAEQzQ1FDQELIABBEGogARClAgwBCyABELUDED0LIAJBEGokAAtkAQJ/IAEQQiEBIAAoAgghAgJAIAAoAgQiALdEMzMzMzMz0z+iIAEQTrdjQQFzDQAgArdEmpmZmZmZ2T+iIAEQVbdjQQFzDQAgACACbLdEmpmZmZmZqT+iIAEQ1QG3YyEDCyADC74CAQZ/IwBBgAFrIgIkACAAIAEQxRkgAkEYaiABEHAiBRD6ASAFEKIBIAUQkwEiAQRAA0ACQCABKAIwRQ0AIAEQTBDVAUEATA0AIAEQkQUhAyABEJAFBEAgAEEwaiADEKUCDAELIAEQ3AJFBEAgAEEQaiADEKUCDAELIAIgARDRAhBAIQcgAhBBQQAhBCACEDxFBEADQAJAIAAgBxBmIgYQ0DBFDQAgBigCLEEGRgRAIARFBEAgARCRBSIEQQYQkwQLIAQgBhC0AwwBCyAGKAIoRQ0AIAMgBhC0AwsgBxBsGiACEDxFDQALCyADEPkDIAMQmjMhASAAIAMQzzAgACABEM4wIARFDQAgBBD5AyAAIAQQzTALIAUQkwEiAQ0ACwsgAEEQaiIAEKYaIABBABCiGiAFEG4aIAJBgAFqJAALSwAgAEEQaiABIAIgAxD8AyAAQTBqIAEgAiADEPwDIABB0ABqIAEgAiADEPwDIABB8ABqIAEgAiADEPwDIABBkAFqIAEgAiADEPwDCw4AIAAEQCAAELUDED0LC1cBBH8gAEEQaiIBEKkRIABBMGoiAhCpESAAQdAAaiIDEKkRIABB8ABqIgQQxhkgAEGQAWoiABDGGSAAEM8NGiAEEM8NGiADEJ4IGiACEJ4IGiABEJ4IGgtFACAAQgA3AgAgAEIANwIIIABBEGoQqhEgAEEwahCqESAAQdAAahCqESAAQfAAahDHGSAAQZABahDHGSAAQQE6ALABIAALCABBsKstEE8LCABBoKstEE8LCABBkKstEE8LCABBgKstEE8LOgECfyAAKAIEIAAoAgwiA0EBdWohAiAAKAIIIQAgAiABIANBAXEEfyACKAIAIABqKAIABSAACxEDAAtvAQF/IABBCGoiAUEAIAEuAQBrQRB0QRB1EOoBIABBDGoiAUEAIAEuAQBrQRB0QRB1EOoBIABBACAAKAIYazYCGCAAKAIoIgFBBEtBGyABQf8BcXZBAXFFckUEQCAAIAFBAnRB7J0faigCADYCKAsL1wEBBX8jAEFAaiICJAAgAkEgaiACQThqEEkiBBBxIQUgAEEwaiIBEKkDIAEQWUUEQANAIAEQ8wEhAyABEGQgAxDbMCAFIAMQ2QsgARBZRQ0ACwsgASAEEKQFIAEQqQMgAiAAEJcBKAEANgIUIAIgABDpASgBACIBNgIQIAIgAigCFDYCDCACIAE2AgggAkEYaiACQQxqIAJBCGoQnAMiAS4BACEDIAFBACABLgEEaxCMAiABQQAgA2sQiwIgACAAKAIEIAEgARBeEPwDIAQQ0gQgAkFAayQAC0sBAn8gAEEwaiIBEKkDIAEQQSABEDxFBEADQAJAIAEoAggQxQUNACABEPMBIgJFDQAgAhCJCxA9CyABEGQgARA8RQ0ACwsgABD7AwuzAgEGfyMAQfAAayICJAAgAkHQAGogAkHoAGoQSSIHEHEhCSACQTBqIAJByABqEEkiCBBxIQogAEEwaiIFEFlFBEADQCAFEPMBIgYQxQUEfyAGIAEQxA0gCQUgCgsgBhCvAiAFEGQgBRBZRQ0ACwsgACAIEOAwIgYgBCgCAEoEQCAEIAY2AgALIAJBGGogAxBxIgQQQSAEEDxFBEADQCAEKAIIIAEQxA0gBBBkIAQQPEUNAAsLIAUgAxCkBSAFEKkDIAQgAxC3AyAEIAcQpAUgAiAAEJcBKAEANgIMIAIgABDpASgBACIDNgIIIAIgAigCDDYCBCACIAM2AgAgAkEQaiACQQRqIAIQnAMiAyABEJgTIAAgACgCBCADIAMQXhD8AyAIENIEIAcQ0gQgAkHwAGokAAskAQJ/IwBBEGsiAiQAIAEgABDBGSEDIAJBEGokACABIAAgAxsLwwICBX8BfCMAQdAAayICJAAgAkE4aiABEHEhASACQShqQQAgACgCJEEBdCIDEJgBIQAgAkEYakEAIAMQmAEhBSABEEEgARA8RQRAQX8hBANAIAEoAggiAxCIMCEGAkAgAxD3A0UNACADEMUFIAZFcg0AIAUgBhBCLgEAIAMQQi4BAGtBARBzAkAgBEEBSA0AIAQgAxBCLgEATg0AIAAgAxBCLgEAIARrQQEQcwsgBhBCLgEAIQQLIAEQZCABEDxFDQALC0HElS0oAgAEQCAAKAIIIQEgABDbASEHIAIgBRDbATkDECACIAc5AwggAiABNgIAQdKrCSACEDsLAn9BACAAKAIIQQpIDQAaIAAQ2wEiB5lEAAAAAAAA4EFjBEAgB6oMAQtBgICAgHgLIQEgBRCFARogABCFARogAkHQAGokACABC6MDAQR/IwBBEGsiByQAIAEQQiEIIAIQQiEFAkAgAxDFBUUEQCADIQYMAQsCQCAAIAhBAUEBEI0LIgZFIAMgBkZyDQAgBhD3A0UNACAGIAguAQYQ0gIgAyAILgEGENICTA0AIAYgARCnGQwBC0E8ED8iCCADQQEgAEEgaiABEKgZIQYgAEEsaiAIEJ4dIABBMGoQqQMLAkAgBBDFBUUEQCAEIQMMAQtBAyAFLgEEIAUuAQIQ2QEEQCAFLgEEIQEgBS4BAiEDIAcgBS4BBjYCCCAHIAM2AgQgByABNgIAQaS0CiAHEDsgBEGNxAoQsgMLAkAgACAFQQFBARCMCyIDRSADIARGcg0AIAMQjgVFDQAgAyAFLgEGENICIAQgBS4BBhDSAk4NACADIAIQpxlBAyAFLgEEIAUuAQIQ2QFFDQEgA0GV0woQsgMMAQtBPBA/IgEgBEEEIABBIGogAhCoGSEDIABBLGogARCeHSAAQTBqEKkDQQMgBS4BBCAFLgECENkBRQ0AIANB2eQKELIDCyAGIAMQnREgAyAGEJ0RIAdBEGokAAtPAQF/IwBBEGsiAyQAIAMgARBCKQEANwMIIANBCGogAy4BDBCMAiADQQhqIAIgAy4BDGoQiwIgACADQQhqIAEQQhDJGSEAIANBEGokACAAC08BAX8jAEEQayIDJAAgAyABEEIpAQA3AwggA0EIaiADLgEIEIsCIANBCGogAy4BCCACaxCMAiAAIANBCGogARBCEMkZIQAgA0EQaiQAIAALXwEBfyAAKAIAIQACQCABKAIAIgIQQi4BBCAAEEIuAQRrIgENACACEEIuAQAgABBCLgEAayIBDQAgABBCLgECIAIQQi4BAmsiAQ0AIAAQQi4BBiACEEIuAQZrIQELIAELJAECfyMAQRBrIgIkACAAIAEQwRkhAyACQRBqJAAgASAAIAMbC5ELARp/IwBBsAFrIgQkACAEQcgAaiAAEHAhEyAEIAEQQikBADcDQCABLgE2IRQgAS4BOCEVIARBQGsuAQAhCyAEQUBrLgEEIQwgBEFAay4BBiENIARBQGsuAQIhDyAEQUBrEE4hBUEDIAsgDRDZASIOBEAgBCAVNgI0IAQgFDYCMCAEIA82AiwgBCAMNgIoIAQgDTYCJCAEIAs2AiBB8PwEIARBIGoQOwsgEyALIAxqQQJtIA0gD2pBAm0gACgCBCIGIAVBBWxqQX9qIAZtEKIJIAEtAHIhCCABLQBzIQkgACgCBEEFbCIGIAJIIQcgAgJ/IAW3IAOiIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CyIFIAUgAkgbIQUCfyAAKAIkt0QAAAAAAACgP6IiA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLIRYgAiAGIAcbIRcgBSAMaiEbIAsgBWshHCAOQQFzIRhBgYCAgHhBACAIGyIFIQZBgYCAgHhBACAJGyIHIQogCUEBcyIRIRkgCEEBcyISIRoCQANAIBMQ0w0iAkUNASABIAJGDQAgBCACEEIpAQA3AzggBC4BOCEIIAQuATwhCSAOBEAgBC4BOiEQIAQgBC4BPjYCHCAEIAk2AhggBCAQNgIUIAQgCDYCEEGwpAUgBEEQahA7CyAVIAlIIBQgCEpyDQAgAi4BNiALSg0AIAIuATggDEgNACAELgE+IAQuATpqQQJtIQICQCAcIAlKIhAgCCAJakECbSIdIAtKckUEQCAOBEBBi8oFQQAQOwtBgYCAgHggBSACIA9KGyEFQYGAgIB4IAYgAiANSBshBkEAIRoMAQsgCyAIIBYQhwIEQCAOBEBBovAFQQAQOwsgBiACIA9IIAZBgYCAgHhKcWohBiAFIAVBgYCAgHhKIAIgDUpxaiEFDAELIAkgC0ggCCALTnINACAOBEBBjpMGQQAQOwsgBiACIA9IIAZBgYCAgHhKcWshBiAFIAVBgYCAgHhKIAIgDUpxayEFCwJAIAggC04NACAQIARBOGogBEFAaxDCBkEBc3IiECAYcgRAIBAgEnEhEgwBC0EAIRJB/bQGQQAQOwsCQCAbIAhIIhAgHSAMSHJFBEAgDgRAQafRBkEAEDsLQYGAgIB4IAcgAiAPShshB0GBgICAeCAKIAIgDUgbIQpBACEZDAELIAwgCSAWEIcCBEAgDgRAQcjvBkEAEDsLIAogAiAPSCAKQYGAgIB4SnFqIQogByAHQYGAgIB4SiACIA1KcWohBwwBCyAJIAxMIAggDEpyDQAgDgRAQdmMB0EAEDsLIAogAiAPSCAKQYGAgIB4SnFrIQogByAHQYGAgIB4SiACIA1KcWshBwsCQCAJIAxMDQAgECAEQThqIARBQGsQwgZBAXNyIgIgGHIEQCACIBFxIREMAQtBACERQdylB0EAEDsLIAdBgYCAgHhHIAVBgYCAgHhHciAGQYGAgIB4RyAKQYGAgIB4R3JyDQALQYGAgIB4IQVBgYCAgHghB0GBgICAeCEGQYGAgIB4IQoLQQMhAiABAn9BAyAGQQFKDQAaQQMgBUEBSg0AGkEDIBpBAXENABogEkEBcQRAQQIgACABIBcQ4zANARoLQQALEN4JAkAgB0EBSiAZckEBcSAKQQFKcg0AIBFBAXEEQEECIQIgACABIBcQ4jANAQtBACECCyABIAIQjAYgDgRAAn9B290HIAEoAiBBA0YNABpBq/cHQeuOCCABKAIgQQJGGwshACAEAn9B290HIAEoAiRBA0YNABpBq/cHQeuOCCABKAIkQQJGGws2AgQgBCAANgIAQbbCByAEEDsLQQEhAiABKAIgRQRAIAEoAiRBAEchAgsgExBuGiAEQbABaiQAIAILhQEBBH8jAEFAaiICJAAgAkEoaiAAQRRqEEAhASACQRBqIABBBGoQQCEEIAEQQSABEDxFBEADQCABKAIIKAJMBEAgBCABEIgBEKUBIANBAWohAwsgARBEGiABEDxFDQALC0HElS0oAgAEQCACIAM2AgBBpKkEIAIQOwsgABCQDyACQUBrJAALRwAgAEEAQQAgASAAEKUHIABBAUEAIAJBBGogABClByADQwAAgD8QzQQgA0MAAAAAEIgEIARDAACAPxDNBCAEQwAAAAAQiAQLZQECfyMAQRBrIgIkACACIAEuAQ47AQ4gAiAALgEOOwEMIAJBDmogAkEMahD7AS4BACEDIAIgAS4BCjsBCiACIAAuAQo7AQggAkEKaiACQQhqEJkCLgEAIQAgAkEQaiQAIAMgAGsLSwIBfwF8IABBIGoiACAAEMITIQMgASAALgECtyADt58iBKO2EM0EIAEgAC4BALcgBKO2EIgEIAIgASoCABDNBCACIAEqAgSMEIgECxMAIAAoAgAoAhggASgCACgCGGsL3wICBn8DfCMAQTBrIgQkACAEQRhqIABBzABqEEAhCCACKAIIIQAgAigCCEEBTgRAIAC3IglEAAAAAAAAwD+iIQoDQCACIAIQxgciBUEAIAIgBRCBASIDaxBzAkAgBSIAQQJIDQADQCACIABBf2oiBhCBAUEATA0BIAIgBkEAIAIgBhCBASIHaxBzIAMgB2ohAyAAQQJKIQcgBiEAIAcNAAsLAkAgBUEBaiIAIAFODQADQCACIAAQgQFBAEwNASACIABBACACIAAQgQEiBmsQcyADIAZqIQMgAEEBaiIAIAFHDQALCwJAIANBCkwNACAKIAO3IgtjQQFzDQBBCBA/IgBBACAFQRB0QRB1EI4DIAggABCPAUHElS0oAgBFDQAgBCADNgIEIAQgBUEUbDYCACAEIAtEAAAAAAAAWUCiIAmjOQMIQbiCCSAEEDsLIAIoAghBAEoNAAsLIARBMGokAAsHACAAEMgiC20BAn8jAEHwAGsiAiQAQcSVLSgCAARAQcWWCUEAEDsLIAJBCGogABBwIgEQogEgARDIAiIABEADQAJAIAAoAihBBUgNACAAEJMIRQ0AIABBBhCLBgsgARDIAiIADQALCyABEG4aIAJB8ABqJAALvAEBBn8jAEEgayIDJAAgA0EIaiAAQSxqIgQQcSICEEEgAhA8RQRAIABBMGohBSAAQSBqIQYDQAJAIAIoAggiARDFBQ0AIAEgBiAAEKQZIAEQyhlBAkwEQEHElS0oAgBBA04EQCABQZPYCBCyAwsgAhDzASIBBEAgARCJCxA9CyAFIAQQtwMMAQtBAyABEEIuAQAgARBCLgECENkBRQ0AIAFB3ewIELIDCyACEGQgAhA8RQ0ACwsgA0EgaiQAC/YDAQV/IwBBMGsiAiQAIAJBKGoQSSEDIAJBADYCJCACQQE2AiACQCAAQQNBACABIAMgAkEkaiACQSBqEIUGIABBA0EDIAEgAyACQSRqIAJBIGoQhQZqQQBKDQAgAEEGQQAgASADIAJBJGogAkEgahCFBiAAQQZBAyABIAMgAkEkaiACQSBqEIUGakEBTg0AIABBCUEAIAEgAyACQSRqIAJBIGoQhQYaIABBCUEDIAEgAyACQSRqIAJBIGoQhQYaCyADENIEIABB1ABqIgUoAgBBAEoEQANAIAUgBBA+KAIAIgYoAiBBBEYEQCAGQQMQ3gkLIARBAWoiBCAFKAIASA0ACwtBACEEIABB6ABqIgUoAgBBAEoEQANAIAUgBBA+KAIAIgYoAiRBBEYEQCAGQQMQjAYLIARBAWoiBCAFKAIASA0ACwtBxJUtKAIABEAgAiACKAIkNgIAIAIgAigCIDYCBEGIpwggAhA7CyAAQQxBACABIAMgAkEkaiACQSBqEIUGGiAAQQxBAyABIAMgAkEkaiACQSBqEIUGGiAAQRlBASABIAMgAkEkaiACQSBqEIUGGiAAQRlBBCABIAMgAkEkaiACQSBqEIUGGiACQQhqIABBLGoQcSADEKQFIAAgAigCJCACKAIgEK8RIAMQ0gQgAkEwaiQAC4oBAQV/IwBB8ABrIgQkACAAQdQAaiIFEPwBIABB6ABqIgYQ/AEgBEEIaiAAEHAiBxCiAQNAIAcQyAIiAwRAIAAgAyABIAIQ5jBFDQEgAygCIARAIAUgAxBfGgsgAygCJEUNASAGIAMQXxoMAQsLIAVB8QAQmAcgBkHnARCYByAHEG4aIARB8ABqJAALuAIBA38jAEEwayIBJAAgAUEYaiAAQSxqEHEiABBBIAAQPEUEQANAIAAoAggiAkEAEKwZIAJBARCsGSAAEGQgABA8RQ0ACwsgABBBIAAQPEUEQANAIAAoAggQjTAgABBkIAAQPEUNAAsLIAAQQSAAEDxFBEADQAJAIAAoAggiAhCOBUUNACABIAEpAyg3AxAgASABKQMgNwMIIAEgASkDGDcDACABEGQgARCmAg0AA0ACQCABKAIIIgMQ9wNFDQAgAiADEOkwRQ0AIAIgAxCMMAsgARBkIAEQpgJFDQALCyAAEGQgABA8RQ0ACwsgABBBIAAQPEUEQANAIAAoAggiAhDFBUUEQCACKAI0IgMEQCADEKoZCyACKAI4IgIEQCACEKoZCwsgABBkIAAQPEUNAAsLIAFBMGokAAu0AgEBfyMAQdAAayIGJAAgACAEIAUQ6jBBACEFIAQqAgC7RLyWkA96tus/Y0UEQCAEIAIQowcgBCADQQRqIgUQowcgBCADQRBqEKMHIAQgA0EMahCjByAGQThqIAEQcSIBEEEgARA8RQRAA0AgASgCCCAEEMQNIAEQZCABEDxFDQALCyAGQSBqIABByABqEHEiARBBIAEQPEUEQANAIAEoAgggBBDEDSABEGQgARA8RQ0ACwsgAEEAQQEQrxEgBiAAKAIUIgE2AhQgBiAAKAIYIgM2AhAgBiABNgIMIAYgAzYCCCAGQRhqIAZBDGogBkEIahCcAyIBIAQQmBMgACAAKAIEIAEgARBeEPwDIABBAEEAIAIgABClByAAQQFBACAFIAAQpQdBASEFCyAGQdAAaiQAIAULkgEBB38jAEEwayICJAAgAkEYaiAAQSxqIgQQcSEBIAIgAEHIAGoQcSEFIAEQQSABEDxFBEAgAEEwaiEGIABBIGohBwNAAkACQCABKAIIIgMQxQVFBEAgA0EwahBNRQ0BCyAFIAEQ8wEQrwIgBiAEELcDDAELIAMgByAAEKYZCyABEGQgARA8RQ0ACwsgAkEwaiQAC2EBA38jAEEQayIDJAAgACABIANBACAALgEYIAAuARRrQRRtIgRBAWoQmAEiAhDMGUHElS0oAgBBAk4EQCACEI4KCyAAIAQgAhDsMCAAIAFBABDMGSACEIUBGiADQRBqJAALTQAgACACIAQgBSADEM0ZIAAgBhD1MCAAQSBqIABBLGogABDDDSAAEK4RIAAQ9DAgACABIAIgAyAHIAgQ8zAEQCAGIAcQjTMgABDyMAsLNgIBfwF+IwBBEGsiASQAIAEgACkDAELAhD1/NwMAIAFBCGogARCkBykDACECIAFBEGokACACC+0EAQV/IwBB8ABrIgkkACADEPcDIQogCSADIAEQ0gI2AmwgCSADIAIQ0gI2AmgCfyAKBEAgCUHoAGogCUHsAGoQhwEMAQsgCUHoAGogCUHsAGoQnwELKAIAIQcgCSAAEHAiCyAHIAEgAhC4BCAGQQA2AgACQCALIAoQ0AYiB0UNACAEBEADQAJAIAcQQiIELgECIAJODQAgBC4BBiABTA0AIAQQTiEIIAAoAgRBAXQgCEwEQCAEEE4hCCAEEFVBCmwgCEgNAQsgBygCKBDuDQ0AIAMgBC4BAiAELgEGakECbRDSAiEIAkAgCkUEQCAELgEAIAhrIgdBf0oNASAELgEEIAhrIAYoAgBMDQEgBiAELgEEIAhrNgIADAELIAggBC4BBGsiB0F/Sg0AIAQuAQAgCGsgBigCAE4NACAGIAQuAQAgCGs2AgALIAcgBSAHIAVIGyAFIAdBAEobIQULIAsgChDQBiIHDQAMAgALAAsDQAJAIAcQQiIHLgECIAJODQAgBy4BBiABTA0AIAcQTiEEIAAoAgRBAXQgBEwEQCAHEE4hBCAHEFVBCmwgBEgNAQsgAyAHLgECIAcuAQZqQQJtENICIQgCQCAKBEAgCCAHLgEEayIEQX9KDQEgBy4BACAIayAGKAIATg0BIAYgBy4BACAIazYCAAwBCyAHLgEAIAhrIgRBf0oNACAHLgEEIAhrIAYoAgBMDQAgBiAHLgEEIAhrNgIACyAEIAUgBCAFSBsgBSAEQQBKGyEFCyALIAoQ0AYiBw0ACwsgBigCACEAIAsQbhogCUHwAGokACAFIAAgAEEfdSIBaiABc2sLfgECfyMAQRBrIgUkACAFIAMQQikBADcDCCADIAAgBUEIakEAEMMJEO8OIAMgACAFQQhqQQAQwgkQ7g4gAyAAIAVBCGpBARDDCRDBESADIAAgBUEIakEBEMIJEMARIAMtADRFBEAgBCABIAIgAxDaCUEBIQYLIAVBEGokACAGCwkAIAAQrREQPQtaAgF/AX4jAEEQayICJAAgASkCACEDQRAQPyEBIAIgAzcDCCACIAM3AwAgAikCACEDIAFBuOssNgIAIAEgAzcCCCABIAA2AgQgAUGQ6yw2AgAgAkEQaiQAIAELcgECfyMAQSBrIgIkACACQQhqIABBzABqEEAiABBBIAFBFG0hAQJ/IAAQPEUEQANAIAAoAggiA0EEai4BAEF/aiABTARAQQEgASADLgEGQQFqTA0DGgsgABBEGiAAEDxFDQALC0EACyEAIAJBIGokACAAC8MBAQF/IwBBEGsiCCQAIAAgASACIAMQ+BoaIABB8OosNgIAIABBIGoQbxogACAHNgIkIABBKGpBACADLgECQRB0QYCAfGpBEHUQiwEaIABBMGogAEEsahBJEHEhASAAQcgAahBJGiAAQcwAahBJGiAAQdQAahBrGiAAQegAahBrGiAAQQA2AlAgASAEEKQFIAAgBSAGEK8RIAhBADYCDCAIQeUBNgIIIAggCCkDCDcDACAAIAAgCBD7MDYCUCAIQRBqJAALCABB8KotEE8LCABB4KotEE8LWgIBfwF+IwBBEGsiAiQAIAEpAgAhA0EQED8hASACIAM3AwggAiADNwMAIAIpAgAhAyABQdzqLDYCACABIAM3AgggASAANgIEIAFBtOosNgIAIAJBEGokACABC/ECAQJ/IwBBIGsiAyQAIAFBACACG0UEQCADQeIONgIUIANBpLwMNgIQQfifLEGIpAxBAkG3sAwgA0EQahBFCwJAIAEQzAlFBEAgAhDMCUUNAQsgA0HjDjYCBCADQaS8DDYCAEH4nyxBwMkMQQJBt7AMIAMQRQsCQCABKAI0QQFGBEAgAigCNEECSg0BCyABKAI0QQNOBEAgAigCNEEBRg0BCwJAIAEQ7gNFBEAgAhDuA0UNAQsgASACEJoLQQBKDQAgARDUBkUEQCACENQGRQ0CCyABEEwgAhBMEJkDRQ0BCwJAIAEQkQhFBEAgAhCRCEUNAQsgASACEJ0IQQBKDQAgARDUBkUEQCACENQGRQ0CCyABEEwgAhBMEJkDDQAgASACQQAQzgkNACACIAFBABDOCUUNAQsgASACEMAaRQ0AQQEhBCABKAI0QQFMBEAgAigCNEECSA0BCyAAIAEQTCACEEwQsBEhBAsgA0EgaiQAIAQLWgIBfwF+IwBBEGsiAiQAIAEpAgAhA0EQED8hASACIAM3AwggAiADNwMAIAIpAgAhAyABQaDqLDYCACABIAM3AgggASAANgIEIAFB+OksNgIAIAJBEGokACABC0sAIAEQ7gMEQCACIAIuAQYgAhBVahCbAiACIAIuAQIgAhBVaxCpAkEBDwsgAiACLgEAIAIQTmsQjAIgAiACLgEEIAIQTmoQiwJBAQtmAQJ/IwBBIGsiAyQAIANBCGogABBAIgAQQSAAEDxFBEADQCAAEGYiBBCRCwRAIAEgASgCAEEBajYCAAsgBBCTCARAIAIgAigCAEEBajYCAAsgABBsGiAAEDxFDQALCyADQSBqJAALggMBA38jAEFAaiIEJAACQCABEOwBQQRIDQAgBEEoaiABEEAiARBBIAEQPA0AIAAEQANAIAEQZiIFIARBJGogBEEgaiAEQRxqIARBGGoQ3xMgBCAEKAIkNgIAIAQgBCgCIDYCBCAEIAQoAhw2AgggBCAEKAIYNgIMQZ6RDSAEEDsCQAJ/IAQoAiAgBCgCHEgEQEH3mw0hACACDAELIAUtAHIEQEH3mw0hACACDAELIAUtAHMEQEH3mw0hACACDAELIAQoAhggBCgCJE4EQEHTrw0hAAwCC0HupQ0hACADCyIGIAYoAgBBAWo2AgALIABBABA7IAUQQhCAASABEGwaIAEQPEUNAAwCAAsACwNAIAEQZiIFIARBJGogBEEgaiAEQRxqIARBGGoQ3xMgAiEAAkACQCAEKAIgIAQoAhxIDQAgBS0Acg0AIAUtAHMNACADIQAgBCgCGCAEKAIkTg0BCyAAIAAoAgBBAWo2AgALIAEQbBogARA8RQ0ACwsgBEFAayQAC1cBAX8gACABEMQJIABBABDPASICBEAgAiABEMQJCyAAQQEQzwEiAgRAIAIgARDECQsgAEECEM8BIgIEQCACIAEQxAkLIABBAxDPASIABEAgACABEMQJCwuKAwIJfwF+IwBBwAFrIgMkACAAIAEgAhDzGiADQdgAaiAAEHAiBCABIAJBARCiCSADQdAAaiABsiACshCKARoCQANAIAQQ0w0iAEUNASADIAAQQikBADcDSCADIAMpA1AiDDcDQCADIAw3AyggA0HIAGogA0EoahCfCEUNACAAKAIERQ0ACyAAEMUJIABBABDPAQRAIABBABDPARDFCQsgAEECEM8BBEAgAEECEM8BEMUJCyAAQQMQzwEEQCAAQQMQzwEQxQkLIABBARDPAQRAIABBARDPARDFCQsgACADQTBqEOgeIAMoAjAhASADKAI4IQIgAygCPCEFIAMoAjQhBiAALQBwIQcgAC0AcSEIIABBABDVByEJIABBAhDVByEKIABBAxDVByELIAMgAEEBENUHNgIkIAMgCzYCICADIAo2AhwgAyAJNgIYIAMgCDYCFCADIAc2AhAgAyAGNgIMIAMgBTYCCCADIAI2AgQgAyABNgIAQb2oBCADEDsLIAQQbhogA0HAAWokAAvaAQEKfyMAQZABayIFJAAgBUEoaiAAEHAhBCAFQQhqIAVBIGoQSSIGEEAhCSAEEKIBAkAgBBDIAiIHRQRAQQEhAwwBC0F/IQpBfyELQQEhAwNAAn8gAyAEKAIkIgggCkcgBCgCKCIMIAtHckUNABogACABIAMgAiAGENIZIAkgBhB8IAwhCyAIIQpBAQshCEEAIQMgBygCTEUEQCAJIAcQ+AYgCCAHKAIsQQFGcSEDCyAEEMgCIgcNAAsLIAAgASADIAIgBhDSGSAGEO4BGiAEEG4aIAVBkAFqJAALhQMCBH8BfCMAQbABayIGJAAgBkEANgKsASAEIAZBrAFqEK0aIQcgBkGQAWogBRBAIQUCQCAGKAKsASIIRQ0AAkAgAUEBIAEbt0QAAAAAAAAQQKIgB7ciCmNBAXMEfyAIBSACENUBt0QAAAAAAABgP6IgCmMNASAGKAKsAQsQzxEgBigCrAEiAEUNASAAIAAoAgAoAgQRAAAMAQtBxKotKAIABEAgBigCrAEaCyAEEIczIAZB+ABqIANBDGoQQCEBIAZBEGogBigCrAEQcCEDIAEQQSABEDxFBEADQCABKAIIIgIQ3QgCQCACEKUKRQ0AIAIoAkwNACACEEIaIAYgAhBCKQEANwMIIAZBCGogACgCBCAAKAIEEP0EIAMgBkEIahDlASADEL0BRQ0AIAJBAToAdCACEJYPIAUgARCIARCPAQsgARBEGiABEDxFDQALCyAGKAKsARDPESAGKAKsASIABEAgACAAKAIAKAIEEQAACyADEG4aQQEhCQsgBkGwAWokACAJC6UBAQN/IwBBIGsiBCQAIARBCGogAEEMahBAIgMQQSADEDxFBEADQCADKAIIIgAoAkgEQAJAIAAoAkgoAkwiAkUNACACLQBlDQAgACgCTA0AIAAQpQpFDQAgASACELADIAIgABC0AyAAIAIoAjAQiwYgACACKAI0EJoFIAAgAhCUBSABIAIQpQILIABBABDvAwsgAxBEGiADEDxFDQALCyAEQSBqJAAL+gMBCH8jAEHwAGsiAyQAIANB0ABqIAAoAgQgABCXASAAEOkBEKsLIgYgAkEMaiIFEMcFIAYgAkEEaiIEEMcFIANBOGogBRBAIgIQQSACEDxFBEADQAJAIAIoAggiBSgCTA0AIAUQpQoNACAAIAYgBRCxESAJaiEJCyACEEQaIAIQPEUNAAsLIANBIGogBBBAIgUQQSAFEDxFBEADQAJAIAUoAggiBBClCgRAIAIgBRCIARClAQwBCwJAIAQoAkwiB0UEQCAAIAYgBBCxEUUNASAAIAQQ1g0gAiAFEIgBEKUBIAhBAWohCAwCCyAHLQBlDQAgBxD3BUECSg0AIANBCGogBxDRAhBAIQQgA0EIahBBAkAgA0EIahA8DQADQCAAIAYgBBBmELERRQ0BIAQQbBogA0EIahA8RQ0ACwsgA0EIahA8RQ0BIANBCGoQWUUEQANAIAQQ6wEiCkEAEJQFIAQQbBogACAKENYNIAhBAWohCCADQQhqEFlFDQALCyACIAUQiAEQpQEgASAHELADIAcQtQMQPQwBC0ECIAQQQi4BACAEEEIuAQIQ2QFFDQBB3ZIKQQAQOyAEEEIQgAELIAUQRBogBRA8RQ0ACwtBxKotKAIABEAgAyAINgIEIAMgCTYCAEGqowogAxA7CyAGEKQIGiADQfAAaiQAC1ABAn8jAEEgayICJAAgAkEIaiAAQRRqEEAiABBBIAAQPEUEQANAIAAoAggiAygCTEUEQCADIAEQ3BELIAAQRBogABA8RQ0ACwsgAkEgaiQAC9ABAgZ/AX0jAEHwAGsiBCQAIAAqAjghCCAEQQhqIAAQcCIFEKIBIAUQyAIiAwRAQQRBBSAIQwAAAABbGyEHA0ACQCADKAJMDQAgAxCRC0UNACADQQIQshEiAkUNAEG8ARA/QQcgBEEAQQEQiwEQ1QYiBiADELQDA0AgBiACELQDIAJBAhCyESICDQALIANBABCyESICBEADQCAGIAIQtAMgAkEAEI8LIgINAAsLIAAgByAGIAEQ0g0LIAUQyAIiAw0ACwsgBRBuGiAEQfAAaiQAC9ABAgZ/AX0jAEHwAGsiBCQAIAAqAjghCCAEQQhqIAAQcCIFEKIBIAUQyAIiAwRAQQVBBCAIQwAAAABbGyEHA0ACQCADKAJMDQAgAxCTCEUNACADQQMQjwsiAkUNAEG8ARA/QQYgBEEAQQEQiwEQ1QYiBiADELQDA0AgBiACELQDIAJBAxCPCyICDQALIANBARCPCyICBEADQCAGIAIQtAMgAkEBEI8LIgINAAsLIAAgByAGIAEQ0g0LIAUQyAIiAw0ACwsgBRBuGiAEQfAAaiQAC4wCAQF/IwBBEGsiCyQAIAAgBTYCKCAAIAc2AiQgACAENgIgIAAQ+wMgACADENgNIAYEQCAAIAMQ2BkaCyAAIAFBABDXDSAAKAIkIAMgAiAAKAIgEIYwQcSqLSgCAARAIAAoAiQaIAAoAiQaCyAAKAIkIANBBGogA0EMaiIEEKIZIAAoAiQgA0EQaiAEEKIZIAAQ+wMgACADENgNIAAgAUEBENcNIAAgASACQQEgAyAIIAkgChDVGUECRgRAIAsgCBCaAjYCAEHegAQgCxA7IAAQ+wMgACADENgNIAAgAUEBENcNIAAgASACQQAgAyAIIAkgChDVGRoLIABBADYCKCAAQgA3AiAgC0EQaiQAC7gCAQd/IwBB8AFrIgIkACACQYgBaiAAEHAiBRCiASAFEMgCIgQEQANAIAIgBBBCKQEANwOAASACQYABahBOIQMgAkGAAWoQVUEDdCADTARAIAJBgAFqEE4hAyACIAIpA4ABNwN4IAJB+ABqIANBA2wiAyADEP0EQQIgAi4BgAEgAi4BggEQ2QEhCCACQRBqIAAQcCIGIAJB+ABqEOUBQQAhAwNAIAYQ1gYiBwRAIAQgB0YNASACIAcQQikBADcDCCADIAJBCGoQTk4NASACQQhqEE4hAwwBCwsgCARAIAIgAzYCAEGRpAMgAhA7IAJBgAFqEIABCyADt0QAAAAAAAD8P6IgAkGAAWoQTrdjQQFzRQRAIAQgARDcEQsgBhBuGgsgBRDIAiIEDQALCyAFEG4aIAJB8AFqJAALiAQBCH8jAEHQAWsiBCQAIAAgAUEQaiIIEMcFIAAgAUEMaiIJEMcFIARB6ABqIAAQcCIFEKIBIAUQyAIiAwRAA0AgAEEBQQAgAxC2ESAFEMgCIgMNAAsLIARB0ABqIAIQcSEKIAUQogEgBRDIAiICBEADQAJAIAIoAiwNACACQQIQzwFFBEAgAkEAEM8BRQ0BC0G8ARA/IgdBBSAEQThqQQBBARCLARDVBiEGIAIhAwNAIAMoAixFBEAgBiADELQDIANBAhDPASIDDQELCwJAIAJBABDPASIDRQ0AA0AgAygCLA0BIAYgAxC0AyADQQAQzwEiAw0ACwsgBhCmMwRAIAogBxCvAgwBCyAGELUDGiAHED0LIAUQyAIiAg0ACwtBxKotKAIABEAgAEEANgI8CyAEQThqIAFBBGoQQCEDIARBIGogCBBAIgEQQSABEDxFBEADQCABKAIIIgIoAixBBkcEQCACKAIsQQJGBEAgAkEAEJoFCyACEN0IIAMgARCIARClAQsgARBEGiABEDxFDQALCyAEQQhqIAkQQCICEEEgAhA8RQRAA0ACQAJAIAIoAggiAygCLEEGRwRAIAMtADRFDQELIAEgAhCIARClAQwBCyADKAIsQQJHDQAgA0EAEJoFIAMQ3QgLIAIQRBogAhA8RQ0ACwsgABD7AyAFEG4aIARB0AFqJAALeAEDfyMAQSBrIgMkACAAEPsDIAAgASADQRhqEEkiBRCRMSAAIAFBBGoQxwUgAyAFEHEiARBZRQRAA0AgARDzASIEEO0NIAAgBEEAENYZIAAgBEEBENYZIAIgBBClAiABEGQgARBZRQ0ACwsgBRDYAxogA0EgaiQAC4wBAQF/IwBBIGsiAyQAIAAgAigCBCACEJcBIAIQ6QEQ/AMgAyAAEJcBKAEANgIUIAMgABDpASgBACICNgIQIAMgAygCFDYCDCADIAI2AgggA0EYaiADQQxqIANBCGoQnAMaIAAgAykDGDcCLCAAQTRqIgAgASoCABDNBCAAIAEqAgSMEIgEIANBIGokAAvqAgEGfyMAQdAAayIAJAAgAEEANgJMIABBADYCSCACQQRqIABBzABqIABByABqIABBQGsQSSIEIABBOGoQSSIFIABBMGoQSSIGENcZIAJBFGogAEHMAGogAEHIAGogBCAFIAYQ1xkCQEHElS0oAgBFBEAgACgCSCEHIAAoAkwhAgwBCyAAKAJIIQcgACgCTCECIAUQ7AEhCCAEEOwBIQkgACAGEOwBNgIQIAAgCTYCDCAAIAg2AgggACACNgIEIAAgBzYCAEH59AIgABA7CwJAIANFIAIgB3JyRQRAIABBGGogAxBAIAYQwgFBACECDAELIAICfyACIAdqtyABoiIBmUQAAAAAAADgQWMEQCABqgwBC0GAgICAeAtOBEBBASECIANFDQEgAEEYaiADEEAgBBDCAQwBC0EAIQIgA0UNACAAQRhqIAMQQCAFEMIBCyAGEO4BGiAFEO4BGiAEEO4BGiAAQdAAaiQAIAILrAIBA38jAEEwayICJAAgARDtO0UEQEECIAEQQi4BACABEEIuAQIQ2QEiBARAIAEoAiwhAyACIAEoAig2AhQgAiADNgIQQazsCCACQRBqEDsgARBCEIABCyABIAJBKGoQSSIDEIYxIAJBADYCJCACQQA2AiAgBCADIAJBJGogAkEgahCFMSAEBEAgACABEEIuAQBBAWogARBCLgECQQFqIAAoAgAoAggRBQAgAiACKAIkNgIAIAIgAigCIDYCBEGWggkgAhA7CwJAIAMQTUUEQCABQQEQ8QYgAUEBEPAGIAIoAiQiACACKAIgIgRBAXRKBEAgAUEAEPEGDAILIAQgAEEBdEwNASABQQAQ8AYMAQsgAUEAEPEGIAFBABDwBgsgAxDuARoLIAJBMGokAAvCAgEFfyMAQRBrIgMkACABEEIQVSECQQEhBAJAAkAgASoCaEMAAEBAlCACsl1BAXMNACABEEIQTiECIAEqAmhDAABAQJQgArJdQQFzDQAgARBCEFUhAiABEEIQTkECdCACSARAIAFBA0EAQQAQkgggAUEBQQBBABCSCAwCCyABEEIQTiECIAEQQhBVQQJ0IAJODQAgAUEAQQBBABCSCCABQQJBAEEAEJIIDAELIAAoAgQhAiABIANBDGogA0EIaiADQQRqIAMQ3xMgAkECbSEFQQMhAAJAIAMoAggiBiACQQRtIgJIBEAgBSAGaiADKAIESA0BCyABLQByDQAgAS0Acw0AIAMoAgAiACACTg0BIAAgBWogAygCDE4NAUECIQRBACEACyABIABBAEEAEJIIIAEgBEEAQQAQkggLIANBEGokAAu7BwEGfyMAQZABayIHJAAgB0IANwOIASAHQgA3A4ABIAUuAQAhCCAFLgEEIQkgBS4BAiEKIAUuAQYhCyAHQRhqIAAQcCIMIAggCWpBAm0gCiALakECbUECEKIJAkAgDBDTDSIIRQ0AQQAhCkEAIQtBACEJQQAhAANAAkACQCABIAhGDQAgByAIEEIpAQA3AxACQCAFIAdBEGogAiADIAQgB0EMaiAHQQhqELMRBEAgBSAHQRBqEJkBIAZB8QAgCBDKA0EAIQggAgRAQfa0BkEAEDsgB0EQahCAAQNAIAdBgAFqAn8CQCAARQ0AIAcgABBCKQEANwMQIAUgB0EQakEBIAMgBCAHQQxqIAdBCGoQsxFFDQAgBSAHQRBqEJkBIAZB8QAgB0GAAWogCEECdGoiACgCABDKA0H2tAZBABA7IAdBEGoQgAEgAEEANgIAQQAMAQsgCEECSg0EIAhBAWoLIghBAnRqKAIAIQAMAAALAAsDQCAHQYABagJ/AkAgAEUNACAHIAAQQikBADcDECAFIAdBEGpBACADIAQgB0EMaiAHQQhqELMRRQ0AIAUgB0EQahCZASAGQfEAIAdBgAFqIAhBAnRqIgAoAgAQygMgAEEANgIAQQAMAQsgCEECSg0DIAhBAWoLIghBAnRqKAIAIQAMAAALAAsgBygCDCIAQX9KIAAgBygCCCIJSnJFBEAgB0GAAWpBDEEEIAcuARYgBS4BBkobciIAKAIAIgoEQCAJIAUgChBCEP4BTg0CCyAAIAg2AgAMAQsgCUF/SiAJIABKcg0AIAdBgAFqIAcuARAgBS4BAEpBA3RyIgkoAgAiCgRAIAAgBSAKEEIQjwJODQELIAkgCDYCAAsgBygChAEhCSAHKAKMASIKRSAHKAKAASIARSAHKAKIASILRXJyDQAgCQ0BCyAMENMNIggNAQsLAkACQCACRQRAIABFDQEgBSAAEEIQzgJFDQEMAgsCQCAABEAgABBCIQBBjdEGQQAQOyAAEIABIAUgABDOAg0BCyAJBEAgCRBCIQBBjdEGQQAQOyAAEIABIAUgABDOAg0BCyALBEAgCxBCIQBBjdEGQQAQOyAAEIABIAUgABDOAg0BCyAKRQ0DIAoQQiEAQY3RBkEAEDsgABCAASAFIAAQzgJFDQMLIAYQ5wZBrO8GQQAQOwwCCyAJBEAgBSAJEEIQzgINAQsgCwRAIAUgCxBCEM4CDQELIApFDQEgBSAKEEIQzgJFDQELIAYQ5wYLIAwQbhogB0GQAWokAAvVAQICfwJ8IwBBMGsiAiQAIAJBIGpBACAAQQVsEJgBIQMgAkEIaiABEEAiABBBIAAQPEUEQANAIAAoAggiARBCEFW3IgREAAAAAAAA9D+iIAEQQhBOIgG3IgVkQQFzIAVEAAAAAAAA9D+iIARmQQFzckUEQCADIAFBARBzCyAAEEQaIAAQPEUNAAsLIANEAAAAAAAA6D8QwQEhBCADEIUBGgJ/IAREAAAAAAAA4D+gIgSZRAAAAAAAAOBBYwRAIASqDAELQYCAgIB4CyEAIAJBMGokACAACygAIAAgAxDYDSACBEADQCAAIAMQ2BkNAAsLIAAgAUEAENcNIAAQ+wMLVwEBfyMAQSBrIgIkACAAIAFBBGoiARDHBSACQQhqIAEQQCIBEEEgARA8RQRAA0AgAEEAQQAgASgCCBC2ESABEEQaIAEQPEUNAAsLIAAQ+wMgAkEgaiQACwkAIAAQ2RkQPQucAQEBfyMAQRBrIgQkACAAIAEgAiADEKsLGiAAQQA2AiggAEIANwIgIABB2OksNgIAIAQgAigBACIBNgIMIAQgAygBACICNgIIIAQgATYCBCAEIAI2AgAgAEEsaiAEQQRqIAQQnAMaIABBNGpDAACAP0MAAAAAEIoBGiAAQQA2AlQgAEIANwJMIABCADcCRCAAQgA3AjwgBEEQaiQACwgAQdCqLRBPCwgAQbiqLRB0C0YAAkAgABBNDQAgAEEEaiIAEEEgABA8DQADQCABIAAoAggoAghGBEAgABCIASIARQ0CIAAQPQ8LIAAQRBogABA8RQ0ACwsLBwAgABCqBgvuBQEOfyMAQYABayIEJAAgBEH4AGoQbyEFIARB8ABqEG8hCCAEQTBqIgxBBGogARCJOiAMIAE2AgAgABCpASEHIAAQhgEhDSAAEGchDiAEQShqQX8gB0EBaiIDQQJ0IANB/////wNxIANHGxA/EOkCIQsgBEEANgIkIAEgBSAIEKoTIAcgCC4BAEgEQCAEQTQ2AhQgBEHaogE2AhBB9J8sQYgoQQJB7eYAIARBEGoQRQsgDSAILgECSARAIARBNTYCBCAEQdqiATYCAEH0nyxB+98BQQJB7eYAIAQQRQsgCC4BACAFLgEAayIKQX9KBEAgCiEDA0AgCyADEGFBADYCACADQQBKIQYgA0F/aiEDIAYNAAsLIARBIGogBxA/EOkCIQkCQCAILgECIgMgBS4BAkgNACADQX9qIQcgCkEBTgRAA0AgByEGAkACQCADIAUuAQJMDQAgAyAILgECSg0AIAAQYyANIANrIA5sQQJ0aiEHQQAhAwNAIAcgAyAFLgEAakEFdUECdGooAgAhDyAFLgEAIRAgCSADEKECIA8gAyAQakF/c0EfcXZBf3NBAXE6AAAgA0EBaiIDIApHDQALIAEgDCAJKAIAIAUuAQAgCC4BACAGQRB0QRB1ENwZDAELIAkoAgBBASAKEGUaCyAFLgEAIAZBEHRBEHUgCkEQdEEQdSAJKAIAIAsoAgAgBEEkaiACENsZIAZBf2ohByAGIgMgBS4BAk4NAAwCAAsACwNAIAchBgJAAkAgAyAFLgECTA0AIAMgCC4BAkoNACAAEGMaIAEgDCAJKAIAIAUuAQAgCC4BACAGQRB0QRB1ENwZDAELIAkoAgBBASAKEGUaCyAFLgEAIAZBEHRBEHUgCkEQdEEQdSAJKAIAIAsoAgAgBEEkaiACENsZIAZBf2ohByAGIgMgBS4BAk4NAAsLIAQoAiQiAARAA0AgACgCDCEBIAAQPSABIgANAAsLIAkQzgQgCxDOBCAEQYABaiQAC8UDAwd/AX0CfCMAQdAAayIIJAAgCEE4aiAGEEAhCyAIQSBqIAAQQCIHEEECQCAHEDwEQEEAIQYMAQtD//9/fyEOQQAhBgNAIAcoAggiCSsDKCEPIAkrAyghEAJAIA8gDrsiD2NBAXNFBEAgELYhDiAJKAIMIgYhCgwBCyAQIA9iDQAgCSgCDCEGCyAHEEQaIAcQPEUNAAsLIAQgBWsgCmpBEHRBEHUiByAEIAVqIAZqQRB0QRB1IgpMBEBB+MQqKAIAIQwDQCAHQRB0Ig1BEHUiCSABLgEESgRAA0AgCEEYaiACEMECIAEgCCkDGDcBACAJIAEuAQRKDQALCyABLgEEIAlrIAcgAS4BAGsiBkEQdEEQdUgEQCABLgEEIAdrIQYLAkBBMBA/IgcgCUEAIAZBEHRBEHUiBiADIAQgBSAAELgRKAIQBEAgBkF/TARAIAhBlwM2AhQgCEHPkgY2AhBB8J8sQc2MB0ECQfvvBSAIQRBqEEULIAggCTYCACAMQculByAIEK8BIAsgBxCPASAHQQE6AAQgByAHLwEGQQFqOwEGDAELIAcQPQsgDUGAgARqQRB1IgcgCkwNAAsLIAhB0ABqJAAL+g4DH38BfgN8IwBBkAJrIgUkACAFQYgCahBpIRMgBUGAAmoQaSEKIAVB+AFqEGkhGSAFQeABahBJIRAgBUHIAWoQSSEaIAVBsAFqEEkhBiAFQZgBaiAEEEAhDCAFQfgAaiAFQZABahBJIhsQQCELIAUgACkADzcA7wEgBSAAKQIINwPoASAFIAApAgA3A+ABIAVB8ABqIBAQwQIgBSAFKQNwNwOIAiACQQMgAkEDShsiDUH//wNxQX1qQQJtIgJBAiACQQJIGyIOQRB0IQkgDiATLgEAakEQdEEQdSERIAFBAk4EQEEBIQgDQCAFQfAAaiAQEMECIAUgBSkDcDcDiAIgCEEQdEGAgARqQRB1IgggAUgNAAsLIBMuAQQhFEEEED8iBBBJGiAGIAQQfCAOQQF0IA1rIBFqQRB0QYCABGpBEHUiAiARTARAIAIhCANAQTAQPyIPIAhBEHQiCEEQdRCkMSAGIA8QjwEgCEGAgARqQRB1IgggEUwNAAsLIBQgDSAOQX9zampBEHRBEHUhHCALIAQQjAogBSAAKQAPNwDvASAFIAApAgg3A+gBIAUgACkCADcD4AEgBUHwAGogEBDBAiAFIAUpA3A3A4gCIBQgCUEQdSIVayEeIAFBf2ohHSANIA5qIR8gDSAOayEgIA23ISdEAAAA4P//70chJUEBIQ9BACEJAkADQEEEED8iFhBJISEgBiAWEHwgESAfakEQdEEQdSERAkAgF0EQdEEQdSABTiATLgEEIAIgIGpBEHRBEHUiAk5yDQADQCAFQfAAaiAQEMECIAUgBSkDcDcDiAIgEy4BBCEAIBdBEHRBgIAEakEQdSIXIAFODQEgACACSA0ACwsgBSAFKQDvATcA1wEgBSAFKQPoATcD0AEgBSAFKQPgATcDyAEgBSAFKQOIAjcDgAIgBUHwAGogGhDBAiAFIAUpA3A3A/gBQf//AyESAkAgAiARSgRAQf//AyEYDAELQf//AyEYIBchCCACIgQgHEoNAANAAkAgBEEQdCIiQRB1IgcgFE4iACAIQRB0QRB1IAFOcg0AA0AgByAKLgEETA0BIAUgBSkD+AE3A4ACIAVB8ABqIBoQwQIgBSAFKQNwNwP4ASAIQRB0QYCABGpBEHUiCCABSA0ACyABIQgLAkACfwJAAkAgFSAKLgEAaiAHTg0AIAAgCi4BBCAVayAHTHINACAdIAhBEHRBEHVKBEAgByAZLgEATg0BC0HgqS0rAwAgJ6IgByAKLgEAa7djQQFzDQFB4KktKwMAICeiIAouAQQgB2u3Y0EBcw0BCwJAAkAgByAKLgEATA0AIAcgCi4BAGsgFUoNACAEIAouAQBrIQAMAQtBACEAIAouAQQgB0wNACAKLgEEIAdrIBVKDQAgHSAIQRB0QRB1SgRAIAcgGS4BAE4NAQsgCi4BBCAEayEAC0EwED8gB0EAIABBEHRBEHUgD0EQdEEQdSANIA5BEHRBEHUgCxBmELgRDAELIAMgBxCBASEAQTAQPyAHQQEgAEEQdEEQdSAPQRB0QRB1IA0gDkEQdEEQdSALEGYQuBELIgAoAhAEQCAGIAAQjwEgHiAHSg0BIABBAToABSAAKwMoISYgACsDKCAlYwRAIA8hIyAEIhghEiAmISUgACEJDAILICYgJWINASAEIBIgB0F/aiASQRB0QRB1RhshEgwBCyAAED0LICJBgIAEakEQdSIEIBFKDQEgBCAcTA0ACwsCQCAWEE0EQCAJDQMgCxBmIQAgBSAFKQOIAiIkNwNoIAUgJDcDYCAFIBApAgg3A1AgBSAQKQIQNwNYIAUgECkCADcDSCAAIAVB4ABqIAVByABqIA9BEHRBEHUgDSAOQRB0QRB1ICEQojFBACEJDAELIBhBEHRBEHVBAWoiACASQRB0QRB1IgRODQAgBhBBIAAgBGpBAm0hAAJAIAYQPA0AA0AgACAGKAIIKAIMRg0BIAYQRBogBhA8RQ0ACwsgACAGKAIIKAIMRw0AIAYoAgghCQsgCyAWEIwKIA9BAWohDyACIBRIDQALIAkNACAFQbsCNgJEIAVBz5IGNgJAQfCfLEHeyQVBAkH77wUgBUFAaxBFQQAhCQsgCxBBIAsQPEUEQANAIAYgCxBmEHwgBhBBAkAgBhA8DQADQCAJIAYoAghGDQEgBhBEGiAGEDxFDQALCyAJIAYoAghGBEAgDCAGEIgBIgAQtQUgACgCECEJCyALEGwaIAsQPEUNAAsLIAkEQCAFQdUCNgI0IAVBz5IGNgIwQfCfLEHitAZBAkH77wUgBUEwahBFCyAMEFkEQCAFQdYCNgIkIAVBz5IGNgIgQfCfLEH50AZBAkH77wUgBUEgahBFCyAMEJoDIAwoAggrAyAgDCgCCCsDGCIlICWiICNBEHRBEHUiALejIiWhRAAAAAAAAAAAY0EBc0UEQCAMKAIIKwMgISYgDCgCCCsDGCEnIAUgADYCECAFICc5AwggBSAmOQMAQYTvBiAFEDsLIBsQpjkgDCgCCCsDICEmIBsQ7gEaIAVBkAJqJAAgJiAloQs5ACAAENQBGiAAQQA2AhAgACABNgIMIABBADYCBCAAQQA7AQggAEIANwMYIABCADcDICAAQgA3AygLCABBoKotEHQLCABB+KktEFILCABB0KktEFILCABBuKktEHQLEAAgAARAIAAQpgcgABA9CwvfAQECfyMAQRBrIgIkACACIAE2AgwCQCAAKAIEIgNFBEAgACgCACEDDAELIAJBICADazYCCCACQQhqIAJBDGoQyQQhASAAKAIAIgMgAygCAEF/IAAoAgR0QX8gAigCCCABKAIAIgFrdnFBf3NxNgIAIAIgAigCDCABayIBNgIMIAAgA0EEaiIDNgIACyADQQAgAUEFdkECdCIDEGUaIAIgAigCDCABQWBxayIBNgIMIAEEQCAAIAAoAgAgA2oiADYCACAAIAAoAgBBf0EgIAFrdkF/c3E2AgALIAJBEGokAAslAQF/IwBBEGsiAiQAIAEEQCACIAAQ9gYgARCqMQsgAkEQaiQACywBAX8gASAAKAIEIgJHBEADQCAAEEIaIAJBUGoiAiABRw0ACwsgACABNgIECywAIAAoAgAaIAAoAgAgABCTC0EwbGoaIAAoAgAgABCTC0EwbGoaIAAoAgAaC0IBAX8jAEEQayIBJAAgABBCGiABQdWq1So2AgwgAUH/////BzYCCCABQQxqIAFBCGoQyQQoAgAhACABQRBqJAAgAAsiACAAIAEoAgAgAkEDdkH8////AXFqQQEgAkEfcXQQgQIaC4oBAQR/IwBBEGsiAyQAIAAgACgCBCICIAFqIgQ2AgQgAkEAIARBf2ogAkF/anNBIEkbRQRAIAAoAgAiBSAFIARBf2pBA3ZB/P///wFxaiAEQSFJG0EANgIACyADQQhqIAAoAgAgAkEDdkH8////AXFqIAJBH3EQgQIaIANBCGogARCrMSADQRBqJAALZQEBfwJ/IAAQQhpB/////wcgAUkLBEAQvgMACyAAEEIaQf////8DIAFBf2pBBXZBAWoiASICSQRAQa2jAxCFAwALIAJBAnRBBBDjAiECIABBADYCBCAAIAI2AgAgABBCIAE2AgALPgAgACgCABogACgCACAAEJMLQTBsahogACgCACAAKAIEIAAoAgBrQTBtQTBsahogACgCACAAEJMLQTBsahoLOgEBfyMAQRBrIgIkACAAEEIaA0AgACgCBBD7DiAAIAAoAgRBMGo2AgQgAUF/aiIBDQALIAJBEGokAAtXAQF/IAAQrjEgAUkEQBC+AwALIAAQQhpB1arVKiABSQRAQa2jAxCFAwALIAAgAUEwbEEIEOMCIgI2AgAgACACNgIEIAAQQiACIAFBMGxqNgIAIAAQrTELRAEBfyMAQRBrIgIkACAAQgA3AgAgAkEANgIMIABBCGogAkEMahCQCCABBEAgACABELExIAAgARCwMQsgAkEQaiQAIAAL8BADE38BfQN8IwBB8ABrIgwkACAMQdgAaiAHEEAhE0HgqS0rAwAgAkEDIAJBA0obIhC3oiEeIBBB//8DcSIWQX1qQQJtIQ0gACEOA0ACQCAEIA4iBxCBASERIAcgAU4NACAHQQFqIQ4gEUUNAQsLIAdBEHQhDiAJIAhrIAJvIRUgDSADIA0gA0gbQRB0IQICfyAemUQAAAAAAADgQWMEQCAeqgwBC0GAgICAeAshFCAOQRB1IQMgAkEQdSELA0ACQCAEIAEiERCBASECIAEgA0wNACARQX9qIQEgAkUNAQsLIAxByABqIBZBAXRBAXIgB2sgEWoQ4RkhCiAMQThqIAtBAXQiF0EBciIZELUxIRIgByAQa0EQdEEQdSIOIQIgDiAHQRB0QRB1SARAIA4hAQNAIAogASAOaxDkASAKQQAQ5AEgDiAEIBAgAUEQdEEQdUEAEN8NIAFBAWoiAUH//wNxIAdB//8DcUcNAAsgByECCyALQQBOBEBBACEBA0AgCiACQRB0QRB1IgMgDmsQ5AEgCkEAEOQBIA4gBCAQIAMgAUEQdCIBQRB1EN8NIAJBAWohAiABQYCABGpBEHUiASALTA0ACwsgC0EAIAtrQRB0QRB1IgFKBEAgAkEQdEEQdSEJIAtBAXQiDUF+akH+/wNxIQ9BACEDA0AgBCABIAlqELUdIRggDEEwaiASIAMQ3A0gDEEwaiAYEN8ZIAFBAWohASANQf//A3EgA0EBaiIDQf//A3FHDQALIA9BAmohDwsgAiAUaiIDQQFqIQECQCADQRB0QRB1Ig0gAkEQdEEQdU4EQANAIAQgDUEQdCIDQRB1EIEBQQBMDQIgA0GAgHxqQRB1Ig0gAkEQdEEQdU4NAAsLIAEhDQsgESALayIYIAJBEHRBEHUiAUoEQCAHQX9qIQkgFEEBaiEaIAAgCGohGyAVQRB0QRB1IRwgCCAVQf//A3FyRSEVA0AgBCABIAtqELUdIQAgDEEwaiASIA8Q3A0gDEEwaiAAEN8ZIA8gF0ghCCAPQQFqIQ8gAiAJIAQgARCBASIDQQBMIgcbIQAgA0EASiEDAkAgBw0AQQEhByALQQFIDQADQAJAIAQgASAHahCBAUEATA0AIAQgASAHaxCBAUEATA0AIAdBEHRBgIAEakEQdSIHIAtMDQELCyAHIQMgCSEACyAPQQAgCBshD0EAIQgCfyADQRB0QRB1IAtMBEAgAyEHQQAMAQsCQCABIABBEHRBEHVrIBRMDQAgA0EAIA1BEHRBEHUgAWsgFEwiBxshAyAHIAtBAEhyDQAgCyAPaiEHQQAhAwNAIAxBMGogEiADIAdqIgkgGUEAIAkgF0obaxDcDSAMQTBqEN4ZDQEgDEEwaiASIAcgA2siCSAZQQAgCSAXShtrENwNIAxBMGoQ3hkNASADQRB0QYCABGpBEHUiAyALTA0ACwsgBCABEIEBIQcgA0EQdEEQdSIJIAtKBEBBASEIQQAMAQsCfyAHsiAFlSIdi0MAAABPXQRAIB2oDAELQYCAgIB4CyIHIAMgCSAHSBshB0EBCyEDAkACQAJAIBUNAEHKrC0tAABFDQAgASAbayAWbyAcSg0BCyAKIAEgDmsQ5AEgCkEAEOQBIA4gAkEQdEEQdSAIIAMgB0EQdEEQdSAEIAUgECALEN4NDAELIAogASAOaxDkASAKQQAQ5AEgDiACQRB0QRB1IAggAyAHQRB0QRB1IAQgBSAQELcxCwJAAkAgDUEQdEEQdSIDIAJBEHRBgIAEakEQdSIBSARAIAEgFGohBwwBCyABIBRqIgcgA0cNAQsgASAaaiENCyANIAcgBCAHEIEBQQBKGyENIAEhAiAAIQkgGCABSg0ACwsCQAJAIBEgFmoiCCABTARAQQAhAEH//wEhD0EAIQMMAQtEAADA////30EhHkH//wEhD0H//wEhDUEAIQBBACEDA0AgCiABIA5rIgcQ5AEgCkEAEOQBIA4gAkEQdEEQdSIJQQBBACARIAJrQQAgEUEQdEEQdSAJShtBEHRBEHUgBCAFIBAgCxDeDSAKIAcQ5AFBAToAAQJAIAogBxDkAS4BBCAKIAcQ5AEuAQJqIA1BEHRBEHUiCSAPQRB0QRB1akoNAAJAAkAgCiAHEOQBLgECIAlOBEAgDUH//wNxIgkgCiAHEOQBLwECRw0BIAogBxDkASsDKCAeY0EBcw0BCyAKIAcQ5AEvAQIhDSAKIAcQ5AErAyghHiAKIAcQ5AEuAQQhDyACIQMMAQsgCiAHEOQBLwECIAlHIABBEHRBEHVBAWogAUdyDQEgCiAHEOQBKwMoIB5iDQELIAIhAAsgCCACQQFqIgJBEHRBEHUiAUoNAAsgDUH//wNxQf//AUcNAQsgDEGQBTYCJCAMQayiATYCIEHsnyxB0d8BQQJBwuYAIAxBIGoQRQsgCiAAQRB0QRB1IANBEHRBEHVqQQJtIA5rEOQBIQAgBkH//wM7AQAgCyAQayECA0ACQCAAKAIIIAtrIAAoAgggAmoiAUEQdEEQdSIHTA0AA0AgBCAHEIEBDQEgACgCCCALayABQQFqIgFBEHRBEHUiB0oNAAsLIAAoAgggC2sgB0oEQCAGIAYvAQBBAWo7AQALQTAQPyIBIAAQ3RkgEyABELUFIAAoAhQiAA0ACyATEJoDIBMoAggrAyAgEygCCCsDGCIeIB6iIA9BEHRBEHUiALejIh6hRAAAAAAAAAAAY0EBc0UEQCATKAIIKwMgIR8gEygCCCsDGCEgIAwgADYCECAMICA5AwggDCAfOQMAQcnHAiAMEDsLIBMoAggrAyAhHyASKAIABEAgEhBCIBIoAgAgEhBCKAIAENgKCyAKEOAZIAxB8ABqJAAgHyAeoQuFBAIDfwR8IABBAUEfIAlBAm0iCkF/akEAIApBEHRBEHUiCkEAShsgCkEgShsiCnQiC0EBdEF/aiABIAMgAkF/c2pBMGxqIgwoAgxBAXRxNgIMIAcgAxCBAUEASgRAIAAgACgCDEEBcjYCDAsgACAMKAIQQQF2NgIQIAcgAyAKahCBAUEASgRAIAAgACgCECALcjYCEAsgAEKAgICA/v//98cANwMoIAAgAzYCCCAAQQA2AhQgAEEAOgABIAAgBDoAACAAQf//ATYBAgJAIAMgCWsiBCACSA0AIAEgBCACayIEQTBsaiICLQABDQAgAi8BAkH//wFGDQAgAyACKAIIayEDAn9BAEHYrS0rAwBEAAAAAAAAAABkQQFzDQAaQditLSsDACABIARBMGxqKAIQIAAoAgxzabeiIAi7oyINmUQAAAAAAADgQWMEQCANqgwBC0GAgICAeAshByABIARBMGxqIgEvAQQhBCABKwMgIQ0gASsDGCEOIAAgAjYCFCAAIA4gA7egIg45AxggACANIAMgA2y3oCAGIAdqQRB0QRB1IgMgA2y3oCIPOQMgIAAgDiAEQQFqIgNBEHRBEHW3Ig6jIg0gCbehIhAgEKIgDyAOoyANIA2ioaA5AyggACACLwECIAAtAABqOwECIAEvAQYhASAAIAM7AQQgACABIAVqOwEGCwsqAQF/IAAoAgAEQCAAEOYOIAAQQhogACgCACEBIAAQ6gYaIAFBAhC7BgsLngcDBX8BfQJ8A0AgASAJQQJ0aiEKQQAhBgNAAkAgCigCACIHRQ0AIAEgBkECdGoiCCgCAEUNACAEIAcQgQEgBUwNAEGiqC0tAAAEQCADIAooAgBBAnRqIAMgCCgCAEECdGoQnwEoAgAgAiAKKAIAQQJ0aiACIAgoAgBBAnRqEIcBKAIATA0BCyAIKAIAsiAKKAIAIgeylbsiDEQzMzMzMzPzP2RBAXMgDETNzMzMzMz8P2NBAXNyDQAgBCAHEIEBt0QAAAAAAADgP6IhDANAIAdBAWohBUEAIQYDQAJAIAEgBkECdGoiCSgCACAFRw0AQaKoLS0AAARAIAMgCigCAEECdGogAyAIKAIAQQJ0ahCfASgCACACIAooAgBBAnRqIAIgCCgCAEECdGoQhwEoAgBMDQELIAgoAgCyIAkoAgAiCbKVuyINRDMzMzMzM/M/ZEEBcyANRM3MzMzMzPw/Y0EBc3INACAMIAQgCRCBAbdjRQ0AIAUhBwwCCyAGQQFqIgZBCkcNAAsLIAQgCCgCACIFEIEBt0QAAAAAAADgP6IhDCAHsiELA0BBACEGAkADQAJAIAEgBkECdGoiBygCACAFTA0AQaKoLS0AAARAIAMgCigCAEECdGogAyAIKAIAQQJ0ahCfASgCACACIAooAgBBAnRqIAIgCCgCAEECdGoQhwEoAgBMDQELIAcoAgAiCbIgC5W7Ig1EMzMzMzMz8z9kQQFzIA1EzczMzMzM/D9jQQFzcg0AIAwgBCAJEIEBt2MNAgsgBkEBaiIGQQpHDQALIAAgCzgCLCAAIAWyIAuTOAI0DwsgBygCACEFDAAACwALIAZBAWoiBkEKRw0ACyAJQQFqIglBCkcNAAsgBCABKAIAIgYQgQG3RAAAAAAAAOA/oiEMA0AgBiICQQFqIgYgASgCBEYEQCAMIAQgBhCBAbdjDQELIAYgASgCCEYEQCAMIAQgBhCBAbdjDQELIAYgASgCDEYEQCAMIAQgBhCBAbdjDQELIAYgASgCEEYEQCAMIAQgBhCBAbdjDQELIAYgASgCFEYEQCAMIAQgBhCBAbdjDQELIAYgASgCGEYEQCAMIAQgBhCBAbdjDQELIAYgASgCHEYEQCAMIAQgBhCBAbdjDQELIAYgASgCIEYEQCAMIAQgBhCBAbdjDQELIAYgASgCJEYEQCAMIAQgBhCBAbdjDQELCyAAQQA2AjQgACACskMAAIC/IAIbOAIsC6ABAQd/QSBBDEGiqC0tAAAbIQZB/////wchBANAQQAhA0EAIQIDQAJAIAAgAhCBASAAIAMQgQFMDQAgACACEIEBIAROBEAgACACEIEBIARHIAIgB0xyDQELIAIhAwsgAkEBaiICQcgBRw0ACyABIAVBAnRqIANBACAAIAMQgQEiBCAEIAhqIgggBm1KGzYCACADIQcgBUEBaiIFQQpHDQALC1gBAn8gBCAEKAIAIgUgAUoEfwNAIAAgBUECdGoiBiAGKAIANgIEIAVBf2oiBSABSg0ACyAEKAIABSAFC0EBajYCACAAIAFBAnRqIgAgAjYCACAAIAM2AgQLwAYCDX8EfSMAQZACayIGJAAgBkGAAWoQ4x0hCyABQQFOBEAgBCEMA0ACfyACIApqIhEsAAAgDEcEQAJAIAQgDEYgDkEDSHINACALEKMTIAogDSIHTCISRQRAA0AgBkH4AGogACAHQQN0aiIILgEAIAguAQRqt0QAAAAAAADgP6K2IAguAQKyEIoBGiAGIAYpA3g3A4gCIAsgBioCiAK7IAYqAowCuxDiDiAHQQFqIgcgCkcNAAsLIAtBARDkHSALKwMQtiETIAsrAxi2IRRBsqctLQAABEAgBiAUuzkDaCAGIBO7OQNgQdr5CyAGQeAAahA7C0EBIQdBACEIAkADQCAHIApqIg8gAUpBACANIAdrIglBAEgbRQRAQQAhEAJAIAlBAEgNACACIAlqLAAAIARHDQAgBkH4AGogACAJQQN0aiIJLgEAIAkuAQRqt0QAAAAAAADgP6K2IAkuAQKyEIoBGiAGIAYpA3g3A4gCIAYqAogCIBOUIBSSIAYqAowCkyEVQbKnLS0AAARAIAYqAogCIRYgBiAGKgKMArs5A1AgBiAWuzkDSCAGIBW7OQNAQfiFDCAGQUBrEDsLIAggFSAFXSAVjCAFXXFyIQhBASEQCwJAIA8gAUoNACACIA9Bf2oiCWosAAAgBEcNACAGQfgAaiAAIAlBA3RqIgcuAQAgBy4BBGq3RAAAAAAAAOA/orYgBy4BArIQigEaIAYgBikDeDcDiAIgBioCiAIgE5QgFJIgBioCjAKTIRNBsqctLQAABEAgBioCiAIhFCAGIAYqAowCuzkDMCAGIBS7OQMoIAYgE7s5AyBB+IUMIAZBIGoQOwsgCCATIAVdIBOMIAVdcXJBAXENAwwECyAHQQFqIQcgEEUNAQsLIAhBAXFFDQELQbKnLS0AAARAIAAgDUEDdGoiBy4BACEIIAYgBy4BAjYCECAGIAg2AgwgBiAMNgIIIAYgBDYCBCAGIA42AgBB95QMIAYQOwsgAyAMQQJ0aiIHIAcoAgAgDms2AgAgEg0AIAIgDWogBCAKIA1rEGUaCyARLAAAIQwgCiENQQEMAQsgDkEBagshDiAKQQFqIgogAUcNAAsLIAZBkAJqJAALzwMDBX8EfQF8IAAuAQAhBAJAIAFBAUgNACADIAIgBLcgAC4BACAALgEEakEBdbciDRCTCkQAAAAAAAAAAKC2IgogAC4BArK7IAIgDRCRAqG2kiIJOAIAIAFBAUYNACADIAIgDSAAQQhqIgQuAQAgBC4BBGpBAXW3Ig0QkwogCrugtiILIAQuAQKyuyACIA0QkQKhtpIiCjgCBCABQQJGDQAgAyACIA0gAEEQaiIELgEAIAQuAQRqQQF1Ige3Ig0QkwogC7ugtiIMIAQuAQKyuyACIA0QkQKhtpIiCzgCCCALjCALIAtDAAAAAF0bIAqMIAogCkMAAAAAXRsgCYwgCSAJQwAAAABdG0MAAAAAkpKSIglDAAAAT10hBUEDIQQgAUEDRg0AIAlDAAAATyAFGyEKA0AgAyAEQQJ0aiIIIAIgB7cgACAEQQN0aiIGLgEAIAYuAQRqQQF1Ige3Ig0QkwogDLugtiIMIAYuAQKyuyACIA0QkQKhtpIiCzgCACALjCALIAtDAAAAAF0bIAkgCEF0aioCACIJjCAJIAlDAAAAAF0bk5IiCSAKIAkgCl0iBhshCiAEQX9qIAUgBhshBSAEQQFqIgQgAUcNAAsLIAULOgEBfyMAQRBrIgIkACAAEEIaA0AgACgCBBBpGiAAIAAoAgRBCGo2AgQgAUF/aiIBDQALIAJBEGokAAtaAQF/IAAQhg4gAUkEQBC+AwALIAAQQhpB/////wEgAUkEQEHKwA0QhQMACyAAIAFBA3RBAhDjAiICNgIAIAAgAjYCBCAAEEIgAiABQQN0ajYCACAAQQAQsQsLQAEBfyAAELoRIAFJBEAQvgMACyAAAn8gABBCIAEQwQcLIgI2AgAgACACNgIEIAAQQiABIAJqNgIAIABBABC5EQvYBQMFfwh9BXwCQAJAIAFBAUgNAANAIAAgB0ECdGooAgAiAyoCLCENAkAgAyoCNCIIQwAAAABeQQFzRQRAIARBAWohBCAKIAiSIQogDiANkiEODAELIAZBAWohBiALIA2SIQsLIAkgAyoCOCIIkiAJIAhDAAAAAF0iAxshCSADIAVqIQUgB0EBaiIHIAFHDQALIARBAUgNACAEIAZIQQBBgqgtLQAAGw0AIA4gBLIiC5UiCLtEMzMzMzMz8z+iIhAgCCAKIAuVkiIMu2RBAXMNASAQtiEMDAELIAsgBrKVIgy7RGZmZmZmZuY/orYhCAsCfQJAIAVFDQAgBSABQQJtSEEAQYKoLS0AABsNACAJIAWylQwBCyAIQwAAAL+UCyEPIAhDAAAAAF5BAXNFBEAgAigCGCAMIA+TIAiVOAIsCyABQQFOBEAgCEMAAIC+lCENIAi7IhBEmpmZmZmZyT+itiEOIAwgCJMhCyAQRGZmZmZmZvI/oiERIBBEMzMzMzMz6z+iIRIgDLsiEERmZmZmZmbyP6IhEyAQRDMzMzMzM+s/oiEUQQAhAgNAIAAgAkECdGooAgAiA0EAOgAJAkAgAyoCNCADKgIsIgmVu0SamZmZmZnJP2NBAXMNAAJAIBIgCbsiEGVBAXMgESAQZkEBc3JFBEAgAyAIOAIsIAMgCzgCNCAIIQkgCyEKDAELIBQgEGVBAXMgEyAQZkEBc3JFBEAgAyAIOAIsIANBAToACSADIAkgCJMiCjgCNCAIIQkMAQsgA0EBOgAJIAMgCyAJlCAMlSIKOAI0IAMgCSAKkyIJOAIsCyAKIA5dQQFzDQAgAyAJu0Tdtm3btm3bP6K2OAI0CyADKgI4IA1eQQFzRQRAIAMgDyAJQwAAAL+UIgogESAJuyIQZhsgCiASIBBlGzgCOAsgAkEBaiICIAFHDQALCyAIi0MAAABPXQRAIAioDwtBgICAgHgLtQQCCX8BfSMAQRBrIggkAAJAIANBAEoEQANAAkAgAiAFQQJ0aigCACIGKgIsQwAAAABdRQRAIAVBAWohBQwBCyAFQX5qIQRBACEJAkAgBUECSQRAIAQhB0EAIQoMAQsgBkHcAGohCwNAAkAgAiAEQQJ0aigCACIHKgIsQwAAAABdDQAgCyAHQdwAahDhHUUNAEEBIQogBCEHDAILQX8hB0EAIQogBEEASiEMIARBf2ohBCAMDQALCyAFQQFqIgUhBAJAIAUgA04NACAGQdwAaiELQQEhCSAFIQQDQCACIARBAnRqKAIAIgwqAixDAAAAAF1FBEAgCyAMQdwAahDhHQ0CCyAEQQFqIgQgA0ghCSADIARHDQALIAMhBAsgCgRAIAAgASAGQQIgAiAHQQJ0aigCAEHcAGoQxwkLIAYqAiwiDUMAAAAAXUEBcyAJQQFzcgR9IA0FIAAgASAGQQIgAiAEQQJ0aigCAEHcAGoQxwkgBioCLAtDAAAAAF1BAXMNACAKBEAgACABIAZBASACIAdBAnRqKAIAQdwAahDHCQwBCyAJRQ0AIAAgASAGQQEgAiAEQQJ0aigCAEHcAGoQxwkLIAMgBUcNAAtBACEEIAhBADYCDANAIAIgBEECdGooAgAiAUEsaiEAIAEqAiwiDUMAAAAAXUEBc0UEQCAAIA2MOAIACyAIIAhBDGogABDkAygCADYCDCAEQQFqIgQgA0cNAAsMAQsgCEEANgIMCyAIQRBqJAAL6gQDB38EfQJ8IwBBEGsiCiQAIApBAEGsAhCYASEJAkACQCADQQJOBEAgArchEQNAIAEgB0EDdGoiBi4BACEIAn8gBi4BBrcgBCAGLgEEIAhqQQJttxCRAqFEAAAAAAAA4D+gIhKZRAAAAAAAAOBBYwRAIBKqDAELQYCAgIB4CyEGAkBBuKgtKwMAIBGiIAa3Y0EBcw0AQbyfLSgCACAGTg0AIAkgBkEBEHMLIAdBAWoiByADRw0ACyAJKAIIQQRIDQICfyAJRAAAAAAAANA/EMEBIhGZRAAAAAAAAOBBYwRAIBGqDAELQYCAgIB4CyICQQBKDQIgCUQAAAAAAADgPxDBASIRmUQAAAAAAADgQWNFDQEgEaohAgwCCyABLgEGtyAEIAEuAQAgAS4BBGpBAm23EJECoUQAAAAAAADgP6AiEZlEAAAAAAAA4EFjRQ0AIBGqIQIMAQtBgICAgHghAgsgAAJ9AkAgA0EBSARAQQAhBgwBCyACsiINIAWTIQ8gDSAFkiEQQwAAAAAhBUEAIQdBACEIQQAhBkMAAAAAIQ0DQCABIAdBA3RqIgsuAQAhDAJAIBAgCy4BBrcgBCALLgEEIAxqQQJttxCRAqG2Ig5dQQFzRQRAIAZBAWohBiANIA6SIQ0MAQsgDyAOXUEBcw0AIAhBAWohCCAFIA6SIQULIAdBAWoiByADRw0ACyAIQQFIDQAgBSAIspUMAQsgArILIgUgACoCLJQiDjgCLCAAIA0gBrKVIAWTQwAAAAAgBkEBThs4AjQgDkMAAAAAWwRAIABBgICA/Hs2AiwLIAkQhQEaIApBEGokAAvaAgIJfwJ9IwBBIGsiCSQAIAVBAU4EQCAJQQAgBUECdBBlGgsgACACQQFIBH1DAACAPwUgAEHcAGohDQNAIAEgB0EDdGoiCi4BACEOIAouAQQhDwJAIAYgAyAHai0AACILRgRAQQAhDAwBCyAJIAtBAnRqIgsgCi4BArcgDSAOIA9qQQF1txCRAqEgCyoCALugtjgCACAMIAhIIQogCCAMQQFqIgwgChshCAsgB0EBaiIHIAJHDQALQwAAgL9DAACAPyAIQQJKGws4AiwgBUEBTgRAQQAhCEEAIQcDQAJAIAYgB0YNACAEIAdBAnQiAmooAgAiAUUEQCACIAlqQQA2AgAMAQsgAiAJaiICIAIqAgAgAbKVIhA4AgAgEEMAAADAX0EBcw0AIBAgESABIAhKIgIbIREgASAIIAIbIQgLIAdBAWoiByAFRw0ACwsgACAROAI4IAlBIGokAAvnCQMNfwR9AXwjAEEwayIJJAAgBCgCAEEDTgRAQQEhDgNAAkAgACADIA4iEUECdGoiDCgCACIHIAxBfGoiDygCAGq3RAAAAAAAAOA/oiADIA5BAWoiDkECdGoiECgCACAHardEAAAAAAAA4D+iEJMKtiISjCASIBJDAAAAAF0bIAFeQQFzDQAgDygCACEFIAshBwNAIAciC0EBaiEHIAIgC0ECdGoiCigCACIGIAVIDQALIAshBSAGIAwoAgAiDUgEQANAIAciBUEBaiEHIAIgBUECdGooAgAiBiANSA0ACwsgBSEHIAYgECgCACIGSARAA0AgAiAHQQFqIgdBAnRqKAIAIAZIDQALCyAEKAIAQRdOBEBBwqctLQAARQ0BQZzVDEEAEDsMAQsgByALa0GMny0oAgBBA2xOBEAgAiAHQQJ0aiEIA0AgBSIGQQFqIQUgBiALa0GMny0oAgBBA2xBAm1IDQALA0AgBiIFQX9qIQYgByAFa0GMny0oAgBBA2xBAm1IDQALIAIgBUECdGooAgAiDSAIKAIAQQF0ardEAAAAAAAACECjIRYgBSAHQQF0akEDbSEGAkAgAiAFIAtBAXRqQQNtIghBAnRqKAIAsiISIAooAgBBAXQgDWq3RAAAAAAAAAhAo7YiE15BAXMNAANAIAggC2tBjJ8tKAIATARAIAIgCEECdGooAgCyIRIMAgsgAiAIQX9qIghBAnRqKAIAsiISIBNeDQALCyAWtiEUAkAgEiATXUEBcw0AAkAgBSAIa0GMny0oAgBBAm1MBEAgAiAIQQJ0aiEKDAELA0AgAiAIQQFqIghBAnRqIgooAgCyIhIgE11FDQIgBSAIa0GMny0oAgBBAm1KDQALCyAKKAIAsiESCyASIBOTIRUgEyACIAhBf2oiCkECdGooAgCykyETAkAgAiAGQQJ0aigCALIiEiAUXkEBcw0AA0AgBiAFa0GMny0oAgBBAm1MBEAgAiAGQQJ0aigCALIhEgwCCyACIAZBf2oiBkECdGooAgCyIhIgFF4NAAsLIBUgE14hDQJAIBIgFF1BAXMNAAJAIAcgBmtBjJ8tKAIATARAIAIgBkECdGohBQwBCwNAIAIgBkEBaiIGQQJ0aiIFKAIAsiISIBRdRQ0CIAcgBmtBjJ8tKAIASg0ACwsgBSgCALIhEgsgCiAIIA0bIQcgBkF/aiIFIAYgEiAUkyAUIAIgBUECdGooAgCyk14bIQUCQEHCpy0tAABFBEAgBUF/aiEGIAdBf2ohCgwBCyAAIAwoAgAiCCAPKAIAardEAAAAAAAA4D+iIBAoAgAgCGq3RAAAAAAAAOA/ohCTCiEWIAIgB0ECdGooAgAhDCACIAdBf2oiCkECdGooAgAhDyAJIAIgBUECdGooAgAgAiAFQX9qIgZBAnRqKAIAakECbTYCJCAJIAwgD2pBAm02AiAgCSAWOQMYIAkgCDYCEEHh4QwgCUEQahA7CyADIBEgAiAHQQJ0aigCACACIApBAnRqKAIAakECbSACIAVBAnRqKAIAIAIgBkECdGooAgBqQQJtIAQQuzFBASEIDAELQcKnLS0AAEUNACAJQYyfLSgCADYCDCAJIAc2AgggCSAFNgIEIAkgCzYCAEHR7gwgCRA7CyAOIAQoAgBBf2pIDQALCyAJQTBqJAAgCAuNCgEMfyMAQZABayIGJAAgBCAAKAIAQX9qNgIAQQEhCyADQQJ0IABqQXxqKAIAQQFqIQ0CQAJAQQAgAyACQQJIGyICQQRIDQAgAkF/aiEMIAEoAgAhCkEAIQJBACEDQQEhBwNAAkAgCiABIAdBAnRqIgkoAgAiCEwNACAIIAkoAgRKDQAgCCABIAJBAnRqKAIAQX9qSARAAkAgBUUNACAFQQJ0IAZqKAIsIAJHDQAgByEDDAILIAZBMGogBUECdGogAjYCACAFQQFqIQUgByEDDAELIAcgAyAIIAEgA0ECdGooAgBIGyEDCyAHQQFqIQkCQCAKIAhODQAgCCABIAlBAnRqKAIASA0AIAggASADQQJ0aigCAEEBakoEQAJAIAVFDQAgBUECdCAGaigCLCADRw0AIAchAgwCCyAGQTBqIAVBAnRqIAM2AgAgBUEBaiEFIAchAgwBCyAHIAIgCCABIAJBAnRqKAIAShshAgsgCSAMSARAIAghCiAJIQcgBUEWSA0BCwsCQAJAIAEgCUECdGooAgAiCCABIAJBAnRqKAIAIgpBf2pODQACQAJAIAUEQCAFQQJ0IAZqKAIsIAJGDQNBFiEHIAVBFkgNASAFIQcMBAsgBkEwaiAFQQJ0aiACNgIADAELIAZBMGogBUECdGogAjYCACAFQRVGDQILIAVBAnQgBmogCTYCNCAFQQJqIQcMAQsCQCAIIAEgA0ECdGooAgAiDEEBakwNAAJAAkAgBQRAIAVBAnQgBmooAiwgA0YNA0EWIQcgBUEWSA0BIAUhBwwECyAGQTBqIAVBAnRqIAM2AgAMAQsgBkEwaiAFQQJ0aiADNgIAIAVBFUYNAgsgBUECdCAGaiAJNgI0IAVBAmohBwwBCyAFQQFIDQEgBUEVSiIHIAVBAnQgBmooAiwiCyADR3JFBEAgBUEBaiEHIAZBMGogBUECdGohAyAIIApKBEAgAyAJNgIADAILIAMgAjYCAAwBCyAHBEAgBSEHDAELIAIgC0cEQCAFIQcMAQsgBUEBaiEHIAZBMGogBUECdGohAiAIIAxIBEAgAiAJNgIADAELIAIgAzYCAAtBsqctLQAARSAHQQFIckUEQCABIAYoAjAiAkECdCIDaigCACEFIAAgA2ooAgAhAyAGIAI2AiAgBiADNgIkIAYgBTYCKEGHvAwgBkEgahA7C0EBIQsgB0ECSA0BA0AgC0ECdCIKIAZBMGpqIgIoAgAiCCACQXxqKAIAIgNBAWoiAiAIIAJKGyEFIAEgCEECdCIMaiIOKAIAIg8gASADQQJ0IhBqKAIAIgNqQQJtIQkCQCADIA9IBEADQCACIgMgCE4EQCAFIQMMAwsgASADQQFqIgJBAnRqKAIAIAlMDQAMAgALAAsDQCACIgMgCE4EQCAFIQMMAgsgASADQQFqIgJBAnRqKAIAIAlODQALCyAEIApqIgIgACAMaiIFKAIAIAAgEGooAgAgACADQX9qIglBAnRqIgooAgAgACADQQJ0aigCAGpqakECakEEbTYCAEGypy0tAAAEQCAFKAIAIQMgDigCACEFIAooAgAhCiAGIAIoAgA2AhggBiAKNgIUIAYgCTYCECAGIAU2AgwgBiADNgIIIAYgCDYCBCAGIAs2AgBBiskMIAYQOwsgC0EBaiILIAdHDQALIAchCwwBC0Gypy0tAAAaCyAEIAtBAnRqIA02AgAgBkGQAWokACALC2IBBH8gAUEBTgRAA0AgAyACIAdqLAAARgRAIAQgBkECdCIJaiAAIAdBA3RqIgguAQAgCC4BBGpBAXU2AgAgBSAJaiAILgECNgIAIAZBAWohBgsgB0EBaiIHIAFHDQALCyAGC4gEAgV/AX0jAEHQAGsiCCQAIARCADcCACAEQgA3AhAgBEIANwIIIAAgASAFIAcQvTEhBSACQQE2AgAgCEEANgIsIAhBADYCKCAFIAFIBEBBfyEKIAUhCQNAIAcgCUECdGoqAgAhDUGypy0tAAAEQCAAIAlBA3RqIgsuAQAhDCAIIAsuAQI2AhggCCAMNgIUIAggCTYCEEH+7QsgCEEQahA7CyADIAlqIA0gCEEwaiAKIAYgCEEsaiAIQShqIAIQ4hkiCjoAACAEIApBAnRqIgsgCygCAEEBajYCACAJQQFqIgkgAUcNAAsLIAhBADYCKCAIQQA2AiwgBCAEKAIAQX9qNgIAIAVBAE4EQEF/IQkDQCAHIAVBAnRqKgIAIQ1BsqctLQAABEAgACAFQQN0aiIKLgEAIQsgCCAKLgECNgIIIAggCzYCBCAIIAU2AgBB/u0LIAgQOwsgAyAFaiANIAhBMGogCSAGIAhBLGogCEEoaiACEOIZIgk6AAAgBCAJQQJ0aiIKIAooAgBBAWo2AgAgBUEASiEKIAVBf2ohBSAKDQALC0EBIQVBACEJIAIoAgAiAkEBSgRAA0AgCSAFIAQgBUECdGooAgAgBCAJQQJ0aigCAEgbIQkgBUEBaiIFIAJHDQALC0Hypy0tAAAEQCAAIAEgAyAEIAkgBhC8MQsgCEHQAGokACAJC6cIAwZ/CH0BfCMAQcACayIHJAAgB0EcahBvGiAALgEAIQggAUEDdCAAakF4aiIMLgEEIQkCQAJAAkAgBEUNACAEKAIAIgpBA0gNACAJIAhrt0SamZmZmZm5P6IiFSAIt6AgBCgCBCIIKAIEt2MNACAJtyAVoSAKQQJ0IAhqQXxqKAIAt2RBAXMNAQtB0qctLQAADQEgByAALgEAQX9qNgIgIAFBAU4EQEEAIQQDQCACIARBAnQiCGogACAEQQN0aiIKLgEAIAouAQRqQQJtNgIAIAMgCGogCi4BAjYCACAEQQFqIgQgAUcNAAsLIAcgDC4BBEEBajYCJCAFIAdB4AFqIAdBIGpBASACIAMgAUEBEKITIgQQmAYgBBDpBiABQQNIDQEgAygCALcgBSACKAIAtxCRAqG2IQ0gAygCBLcgBSACKAIEtxCRAqG2IRNBACEJQQAhCkECIQQDQCANIRAgEyENIAMgBEECdCIIaigCALcgBSACIAhqKAIAtxCRAqG2IRMCQCANIBCTIg6MIA4gDkMAAAAAXRsgBl1BAXMNACANIBOTIg6MIA4gDkMAAAAAXRsgBl1BAXMNAAJ9AkAgCUECTgRAAkAgFCAPXUEBc0VBACAPIA1gG0UEQCAUIA9eQQFzIAtBFEpyDQMgDyANXw0BDAMLIAtBFEoNAgsgC0ECdCIIIAdB4AFqaiAPOAIAIAdBgAFqIAhqIAo2AgAgC0EBaiELDAELIA0iDiAJRQ0BGgsgDSARIA0gEV4bIQ4gEiANIBJdQQFzDQAaIA0LIRIgCUEBaiEJIARBA3QgAGpBeGouAQQhCiAPIRQgDSEPIA4hEQsgBEEBaiIEIAFHDQALQQEhACARIBKTIAa7RDMzMzMzM/M/orYiD15BAXMNASALQQFOBEAgESAPkyEOIBIgD5IhDUEAIQQDQAJAIARBAnQiCCAHQeABamoqAgAiBiANXkVBACAGIA5dQQFzGw0AAkAgAEEBRiAGIBAgD5JeckVBACAGIBAgD5NdQQFzG0UEQCAHQSBqIABBAnRqIAdBgAFqIAhqKAIANgIAIABBAWohAAwBCyAQIA1eQQFzRUEAIAYgEF4bRUEAIBAgDl1BAXMgBiAQXUEBc3IbDQEgAEECdCAHaiAHQYABaiAIaigCADYCHAsgBiEQCyAEQQFqIgQgC0cNAAsLIAdBIGogAEECdGogDC4BBEEBajYCACAFIAdBEGogB0EgaiAAIAIgAyABQQEQohMiABCYBiAAEOkGDAELIAUgBBCYBiAHQSBqQQACfyAALgECtyAEIAAuAQS3EJECoSIVmUQAAAAAAADgQWMEQCAVqgwBC0GAgICAeAsQiwEaIAcgBygCICIANgIcIAcgADYCDCAHIAA2AgggBSAHQQhqEOIdCyAHQcACaiQAC7YDAwZ/AX0BfCMAQYABayIFJAAgBUH8AGoQbxogBUHIAGoQnwohCCAALgEAIQYgAUEDdCAAakF4ai4BBCEHIAFBAU4EQANAIAggBUEgaiAAIAlBA3RqIgouAQAgCi4BBGpBAm1BEHRBEHUgCi4BAhCLARDWCCAJQQFqIgkgAUcNAAsLIAggBLsiDCAFQRxqEKweGiAFIAc2AkQgBSAGNgJAIAUgDDkDKCAFQgA3AyAgBSAFKgIcuzkDMCADIAVBEGpBASAFQUBrIAVBIGoQ5AsiABCYBiAAEOkGAkAgAkUNACACKAIAIgBBA0gNACAHIAZrt0SamZmZmZm5P6IiDCAGt6AgAigCBCIBKAIEt2ZBAXMNACAHtyAMoSAAQQJ0IAFqQXxqKAIAt2VBAXMNACADIAIQmAYgBUEQakEAAn8gBiAHardEAAAAAAAA4D+itiILIASUIAUqAhySuyACIAu7EJECoSIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsQiwEaIAUgBSgCECIANgJ8IAUgADYCDCAFIAA2AgggAyAFQQhqEOIdCyAIEMsJIAVBgAFqJAAL7AICB38BfCMAQTBrIgUkACAFQRhqIAAQoQEQQCEGIAVBCGpBAEGsAhCYASEHAn9BACAGEFkNABogBhBBIAG3RAAAAAAAANA/oiEMQQAhAANAIAUgBhC9AyACIABBA3RqIgEgBSkDADcBACAMIAEQTrdjQQFzRQRAIAcgARBOQQEQcwsCQAJAIABFDQAgDCABEE63Yw0AIAYQPA0AIAEQTiEIIAEQVSELQfioLSsDACALt6IgCLdkQQFzRQRAIAEQVSEIIAEQTiEBQfioLSsDACABt6IgCLdkQQFzRQ0BCyAJIApIIQEgCiAJQQFqIgkgARshCgwBCyAAQQFqIQBBACEJCyAGEDxFDQALIAMgCkHcqC0oAgBKOgAAIAQgADYCACAHKAIIQQJOBEAgB0QAAAAAAADQPxDBASIMmUQAAAAAAADgQWMEQCAMqgwCC0GAgICAeAwBCyACEE4LIQAgBxCFARogBUEwaiQAIAALhQIBBn8jAEEwayIFJAACQCAFQRhqIAEQzQEQcSIDEKcHIgZFBEAgASABKAIkNgIwDAELIAVBCGogBhDxGSEEIAMQQSADEDxFBEADQCADKAIIIQggBCAHEGEgCDYCACADEGQgB0EBaiEHIAMQPEUNAAsLIAAgASAEQQAQYSAGEMIxAkACQEGipy0tAABFBEBBmp0tLQAARQ0BCyABIARBABBhIAYgARDBMSIAsiICOAIwIABBAEwEQCABQdikECsDACABKgIku6K2IgI4AjALIAJBvJ8tKAIAsl1BAXMNASABQbyfLSgCALI4AjAMAQsgACABIAIQ7xkLIAQQpgQLIAVBMGokAAuQAgIFfwF9IwBBQGoiBCQAIARBKGogARDNARBxIQUgBEEQahBJIQYgBRBBIAUQPEUEQANAIAAgASAFKAIIIgNBAkEAEMcJAkAgB0UgAyoCLCIIQwAAAABfQQFzcgR9IAgFIAAgASADQQIgBxDHCSADKgIsC0MAAAAAXkEBc0UEQCADQdwAaiEHDAELIAYgAxChARB8QQAhB0HCpy0tAABFDQAgBigCCBBCLgEAIQMgBCAGKAIIEEIuAQI2AgQgBCADNgIAQcDQCyAEEDsLIAUQZCAFEDxFDQALCyAAIAEgAhDMMSABKAIYAn8gASoCMCICi0MAAABPXQRAIAKoDAELQYCAgIB4CxCLBiAEQUBrJAALCABBkKktEFILCABB6KgtEFILCABB0KgtEHQLCABBqKgtEFILCABBmKgtEE8LCABBiKgtEE8LCABB+KctEE8LCABB6KctEE8LCABB2KctEE8LCABByKctEE8LCABBuKctEE8LCABBqKctEE8LCABBmKctEE8LggkAQfCbLUEAQa0nQY3mAEEAEFcQUEGAnC1BAEGj3wFB8JkCQQAQVxBQQZCcLUEAQfqiA0HU0wNBABBXEFBBoJwtQQBBhNIEQfX7BEEAEFcQUEGwnC1BAEHH7wVBmJIGQQAQVxBQQcCcLUEAQdHuBkGSjAdBABBXEFBB0JwtQQBBoN0HQdv2B0EAEFcQUEHgnC1BAUGivghBmNcIQQAQVxBQQfCcLUEAQf+VCUGMqwlBABBXEFBBgJ0tQQFBg+QJQa3zCUEAEFcQUEGQnS1BAEGAowpBxLMKQQAQVxBQQaCdLUEBQY7kCkHd8wpBABBXEFBBsJ0tQQFBrqYLQbe1C0EAEFcQUEHAnS1BAEGj3gtB5u0LQQAQVxBQQdCdLUEBQd+UDEG/owxBABBXEFBB4J0tQQFB78gMQYTVDEEAEFcQUEHwnS1BBEH6+QxBuYYNQQAQVxB1GkGIni1BAUGupQ1BuYYNQQAQVxB1GkGgni1BgYCAgHhBu8ANQbjJDUEAEFcQdRpBuJ4tQYGAgIB4QfzhDUG4yQ1BABBXEHUaQdCeLUEEQY32DUHf/A1BABBXEHUaQeieLUEIQbGMDkH3kg5BABBXEHUaQYCfLUEGQfSiDkHHqA5BABBXEHUaQZifLUEEQaa4DkGTvg5BABBXEHUaQbCfLUEKQbbMDkGm0A5BABBXEHUaQcifLUR7FK5H4XqUP0GM2g5Bid4OEFcQU0Hwny1EmpmZmZmZuT9Bv+UOQeXoDhBXEFNBmKAtRAAAAAAAAOA/Qen8DkGq/w4QVxBTQcCgLUR7FK5H4XqUP0HnhQ9BsYgPEFcQU0HooC1EmpmZmZmZyT9BlpEPQdmTDxBXEFNBkKEtRAAAAAAAACBAQYCZD0Gmmw8QVxBTQbihLUQAAAAAAAD4P0HloA9B3aIPEFcQU0HgoS1EAAAAAAAA8D9BhagPQa+qDxBXEFNBiKItRAAAAAAAANg/QZquD0HArw8QVxBTQbCiLUQAAAAAAADQP0Glsw9By7QPEFcQU0HYoi1EAAAAAAAA9D9BzLgPQd25DxBXEFNBgKMtRM3MzMzMzPQ/QZq9D0Gwvg8QVxBTQaijLUSamZmZmZnZP0H2wA9B2MEPEFcQU0HQoy1EAAAAAAAAAEBBgcQPQenEDxBXEFNB+KMtRAAAAAAAAOg/QdXGD0Haxw8QVxBTQaCkLUSamZmZmZnZP0HIyQ9B0MoPEFcQU0HIpC1EexSuR+F6tD9BsswPQe/MDxBXEFNB8KQtRHsUrkfherQ/QYbOD0HXzg8QVxBTQZilLUQAAAAAAAD0P0Hszw9BmNAPEFcQU0HApS1EzczMzMzM/D9BqdEPQerRDxBXEFNB6KUtRAAAAAAAANA/QfXSD0G00w8QVxBTQZCmLUQzMzMzMzPjP0Gp1A9B69QPEFcQU0G4pi1EmpmZmZmZuT9BitYPQdLWDxBXEFNB4KYtQQxB79cPQafYD0EAEFcQdRpB+KYtQQFBodkPQd7ZD0EAEFcQUEGIpy1BAEH22g9BtNsPQQAQVxBQC9YGARB/IwBBoAFrIgMkACADQZgBahBpIQYgA0GQAWoQaSENIANB+ABqIAAQoQEQQCEMIAMgAykDiAE3A3AgAyADKQOAATcDaCADIAMpA3g3A2AgA0EoahCfCiEHIANBIGogDBC9AyADIAMpAyA3A5gBIAIgBi4BADYCAEEBIQUgDBCkAUUEQANAIANBIGogDBC9AyADIAMpAyA3A5gBIAVBAWohBSAMEKQBRQ0ACwsgASAFQYyfLSgCAG0iAEEBIABBAUobIgA2AgAgBSAAbiEOQX8gAEEDbCIAQQN0IABB/////wFxIABHGxA/IQ9BsqctLQAABEAgBi4BACEAIAYuAQIhCCABKAIAIQogAyAONgIQIAMgCjYCDCADIAg2AgggAyAANgIEIAMgBTYCAEHX8w8gAxA7CyAOQQF2IgoEQEEAIQADQCADQSBqIANB4ABqEL0DIABBAWoiACAKRw0ACwsgBUF/aiERQQAhAEEBIQkgCiIIIQsDQCAHEMMTIAIgCUECdGohBCALIA5qIgsgCmshEANAAkAgACALTgRAIAAgBU4NASAJIAEoAgBHDQELIANBIGogDBC9AyADIAMpAyA3A5gBIAcgA0EgaiAGLgEAIAYuAQRqQQJtQRB0QRB1IAYuAQIQiwEQ1gggECAAQQFqIgBHQQAgACARRxsNASAEIAYuAQA2AgAMAQsLIAcgA0HcAGogA0HYAGoQgA8aIAlBGGwgD2oiBEFoakIANwMAIARBcGogAyoCXLs5AwAgBEF4aiADKgJYuzkDACAJIAEoAgBIBEAgBxDDEyACIAlBAWoiBEECdGohECALIA5qIgsgCmshEgNAAkAgCCALTgRAIAggBU4NASAEIAEoAgBHDQELIANBIGogA0HgAGoQvQMgAyADKQMgNwOQASAHIANBIGogDS4BACANLgEEakECbUEQdEEQdSANLgECEIsBENYIIBIgCEEBaiIIR0EAIAggEUcbDQEgECANLgEANgIADAELCyAHIANB3ABqIANB2ABqEIAPGiAEQRhsIA9qIgRBaGpCADcDACAEQXBqIAMqAly7OQMAIARBeGogAyoCWLs5AwAgCUECaiIJIAEoAgBMDQELCyAHEMsJIANBoAFqJAAgDwuhBwILfwF9IwBBkAFrIgQkACAEQYgBahBpIQkgBEGAAWoQaSEIIARB6ABqIAAQoQEQQCELIAQgBCkDeDcDYCAEIAQpA3A3A1ggBCAEKQNoNwNQIARBMGoiChBJGiAKQQRqEEkgChB8IARBKGogCxC9AyAEIAQpAyg3A4gBIAMgCS4BADYCACACQQE2AgAgABChARCaAiEFQbKnLS0AAARAIAkuAQAhByAEIAkuAQI2AhggBCAHNgIUIAQgBTYCEEGt8Q8gBEEQahA7CwJAAkAgBUGMny0oAgBKBEAgBUH0ni0oAgBODQELIAsQmgMgBCALKAIIEEIpAQA3A4gBIAMgCS4BBDYCBAwBCyAEQdAAahBBQQAhBwJAQYyfLSgCAEEBSA0AA0ACQCAEQShqIARB0ABqEL0DIAQgBCkDKDcDgAEgCiAILgECsiAAKgKIASAILgEAIAguAQRqt0QAAAAAAADgv6K2lJIgACoCjAGTIAYQ2hkgBEHQAGoQPA0AIAZBAWoiBkGMny0oAgBIDQEMAgsLIAMgCC4BBDYCBAwBC0GMny0oAgBBAk4EQANAIARBKGogCxC9AyAEIAQpAyg3A4gBIAdBAWoiB0GMny0oAgBBAm1IDQALCwNAIAwhDSAEQShqIARB0ABqEL0DIAQgBCkDKDcDgAFBjJ8tKAIAQQJtIQUgCkEEaiIMENMCIAwgBUEYdEEYdRCrAioCBCEPQQEhBQJAIA0Cf0HYny0rAwAgASoCJLuiIA+7Y0UEQEF/IQVBAEHYny0rAwAgASoCJLuiIA+Mu2NBAXMNARoLQQEhDiAFCyIMRgRAIAchBQwBCyAHIgVB9J4tKAIATA0AIAkuAQAhBSACIAIoAgAiB0EBajYCACADIAdBAnRqIAU2AgBBACEFCyAKIAZBjJ8tKAIAaxCfMSAEQShqIAsQvQMgBCAEKQMoNwOIASAKIAguAQKyIAAqAogBIAguAQAgCC4BBGq3RAAAAAAAAOC/oraUkiAAKgKMAZMgBhDaGSAFQQFqIQcgBkEBaiEGIARB0ABqEDxFDQALIAguAQQhACACKAIAIQYgAigCAEEBRiAFQfSeLSgCAE5yRQRAIAIgBkF/aiIGNgIACyADIAZBAnRqIAA2AgBBsqctLQAARQ0AIAIoAgAhACAJLgEEIQEgBCAJLgECNgIIIAQgATYCBCAEIAA2AgBB+PEPIAQQOwsgCkHLARCbAyAEQZABaiQAIA4L2QEBA38jAEEQayICJABBASEEAkACQCAAIAEgAkEMakF/IAAQoQEQmgJBAWoiAUECdCABQf////8DcSABRxsQPyIDEN0xRQ0AQfqcLS0AAA0AQeqcLS0AAA0AIAAgAkEMaiADENwxIQEgAigCDCEEDAELIAMgAyACKAIMQQJ0aigCADYCBCACQQE2AgxBGBA/IgFCADcDACABIAAqAogBuzkDCCABIAAqAowBuzkDEAsgAEHcAGogAiAEIAMgARDkCyIAEJgGIAAQ6QYgARA9IAMQPSACQRBqJAALfwEDfyMAQSBrIgQkACAEQQhqIAEQzQEQcSIDEKkDIAMQQSADEDxFBEADQAJAIAMoAggQoQEQTQRAIAMQ8wEiBUUNASAFEJwGED0MAQsgAygCCCABEN4xCyADEGQgAxA8RQ0ACwtBip0tLQAABEAgACABIAIQzTELIARBIGokAAvsAgQHfwJ+AX0CfCMAQfAAayICJAAgAkHoAGoQaSEGIAJB0ABqEEkhAyACQThqEEkhByACQSBqIAAQzQEQcSEEIAJBGGogASoCACABKgIEjBCKARogAikDGCEJIAQQQSAEEDxFBEBB2KQQKwMAIQwDQCADIAQoAggQoQEQfCADEEEgAxA8RQRAA0AgAygCCCIBEEIpAQAhCiACQUBrIAIpA1g3AwAgAiACKQBfNwBHIAIgCjcDaCACIAIpA1A3AzgCQCADEI0BDQADQCAGIANBARCrAiIFEEIQjwVFDQEgAUEIaiIIIAVBCGoQmQEgASAIEJUPIAVBAToANCACIAEQQikBADcDaCADEEQaIAMQjQFFDQALCyACIAk3AxAgACoCJCELQcihLSsDACENIAIgAikDEDcDCCABIAcgAyANIAwgC7uiorYQ9DsgAxBEGiADEDxFDQALCyAEEGQgBBA8RQ0ACwsgAkHwAGokAAvQBQQLfwF+An0CfCMAQbABayIDJAAgA0GoAWoQaSEGIANBiAFqEEkhBCADQfAAaiAAQQhqEEAhCiADQdgAaiAAQRRqEEAhCyADQUBrIAAQzQEQcSEFQYikLSsDACERIAAqAiQhDyADQaABakMAAIA/IAEgAZRDAACAP5KRIhCVIAGMIBCVEIoBGiADKQOgASEOIANBoAFqIAIqAgAgAioCBIwQigEhAiADIA43AyAgAyAONwM4IAIgA0EgahCvBCAFEEECfyARIA+7okQAAAAAAADgP6AiEZlEAAAAAAAA4EFjBEAgEaoMAQtBgICAgHgLIQkgBRA8RQRAQdikECsDAEHgpBArAwBEAAAAAAAA4D+ioCERA0AgBCAFKAIIIgcQoQEQfCAEEEEgBBA8RQRAA0AgAyAEKAIIIggQQikBADcDqAEgBhBVIQICQEHgoy0rAwAgACoCJLuiIAK3Y0EBcw0AIAgoAgRFBEAgA0GNDjYCFCADQfzfDzYCEEHonyxB9u4PQQJBw98PIANBEGoQRQsgCCgCBCECIAMgAykDoAEiDjcDMCADIA43AwggAiADQQhqEOc7IQJBupwtLQAAIQwgByoCnAEhAQJ/IBEgACoCJLuiIhKZRAAAAAAAAOBBYwRAIBKqDAELQYCAgIB4CyENAkACQCAMIAICfyABi0MAAABPXQRAIAGoDAELQYCAgIB4CyANEIo0BEAgCiAEEIgBEI8BQbqcLS0AAEUNAkGh7w9BABA7IANBKGogAhC4ASADQShqEIABQd3vD0EAEDsMAQsgCBBCIAkgBxChARDmGUGkny0oAgBMDQEgCyAEEIgBEI8BQbqcLS0AAEUNASADIAYgCSAHEKEBEOYZNgIAQf7vDyADEDsLIAYQgAELIAJFDQAgAhDUAhA9CyAEEEQaIAQQPEUNAAsLIAUQZCAFEDxFDQALCyADQbABaiQAC6ECAQd/IAIgAWtBAWoiCUEBSARAQQAPC0F/IQIgA0EsaiEKQf////8HIQUDQAJAIAAgASAIaiIHEIEBIgZBAUgNAAJAAkAgBEEMTgRAIAYgBUgNAyACQQtIDQEMAgsgAyAEQQJ0aiAHNgIAIAQgAiAGIAVIIgcbIQIgBiAFIAcbIQUgBEEBaiEEDAILA0AgAyACQQJ0aiADIAJBAWoiAkECdGooAgA2AgAgAkELRw0ACwsgCiAHNgIAQQshAiAFIAZGDQBBACECQQEhBCAAIAMoAgAQgQEhBQNAIAAgAyAEQQJ0aigCABCBASIGIAUgBiAFSCIGGyEFIAQgAiAGGyECIARBAWoiBEEMRw0AC0EMIQQLIAhBAWoiCCAJRw0ACyAEC5QFAwZ/A30CfCMAQUBqIgYkACADENQOIQQCQEGopS0rAwAgBLIgACoCLJW7ZEEBcw0AQailLSsDACAAKgIsu6JEAAAAAAAA4D+gnCINmUQAAAAAAADgQWMEQCANqiEEDAELQYCAgIB4IQQLIAMQjxMhBQJAQdClLSsDACAFsiAAKgIslbtjQQFzDQBB0KUtKwMAIAAqAiy7opwiDZlEAAAAAAAA4EFjBEAgDaohBQwBC0GAgICAeCEFCyAEIAVMBEADQCADIAQQgQEgCGohCCAEIAVGIQcgBEEBaiEEIAdFDQALCyAAKgIsIQpB+KUtKwMAIQ0Cf0Ggpi0rAwAgACoCLLuinCIOmUQAAAAAAADgQWMEQCAOqgwBC0GAgICAeAsiB0EBaiEEAn8gDSAKu6JEAAAAAAAA4D+gnCINmUQAAAAAAADgQWMEQCANqgwBC0GAgICAeAshBSAGQShqIAAQoQEQQCEDIAZBGGogBSAEEJgBIQQgAxBBIAMQPEUEQCAHsiELIAWyIQwDQAJAIAMoAggiBS0ANA0AIAUQQi4BACEHIAUQQi4BBCEJIAAqApQBIAcgCWqyQwAAAD+UIAGUkiAFEEIuAQKykyIKIAxgQQFzIAogC19BAXNyDQAgBAJ/IAq7RAAAAAAAAOA/oJwiDZlEAAAAAAAA4EFjBEAgDaoMAQtBgICAgHgLQQEQcwsgAxBEGiADEDxFDQALC0EAIAQQxgciAGtBAEEAIAQgABCBASIAIAKyQYClLSsDAEHYpC0rAwCgtpQgACAIarJeGyICQQBKGyEAQcqdLS0AAARAIAYgAjYCCCAGIAg2AgQgBiAANgIAQdrqDyAGEDsgBBCOCgsgBBCFARogBkFAayQAIAAL+gMCBH8CfSMAQUBqIgQkACAAEOwZIQVByp0tLQAABEAgACoCLCEIIAAqAjQhCSAEIAAqAji7OQMwIAQgCbs5AyggBCAIuzkDIEGq6w8gBEEgahA7CyAAKgIsIAFByKYtKwMAthDoGSEGIAAqAiwgASACkiIIQcimLSsDALYQ6BkhBwJAAkACQAJAAkAgBUEDSw0AAkAgBUEBaw4DAQECAAsgACoCOEMAAAAAYEEBcw0EIAAgAyABlSAAKgIslDgCOAwECyAFQQFGQQAgBiAHchsNACAGQQFzIAVBAkdyDQELQcqdLS0AAEUNAUH96w9BABA7DAELIAVBAUYEQEHKnS0tAAAEQEGo7A9BABA7CyAAIAIgAZUgACoCLJQ4AjQMAgsgBUECRw0BIABBAToACUHKnS0tAAAhBSAHBEAgBUUNAUHp7A9BABA7DAELIAUEQEGN7Q9B0O0PIAAqAiwiCSABXhtB0O0PIAkgCF0bQQAQOwsgACACIAiVIAAqAiwiApQiCDgCNCAAIAIgCJMiAjgCLCAAIAMgAZUgApQ4AjgMAQsgACADOAI4IAAgAjgCNCAAIAE4AiwLQcqdLS0AAARAIAAqAiwhASAAKgI0IQIgBCAAKgI4uzkDECAEIAK7OQMIIAQgAbs5AwBBge4PIAQQOwsgBEFAayQACwcAIAAQ3w8LWgEBfyAAENALIAFJBEAQvgMACyAAEEIaQf////8DIAFJBEBBuPsPEIUDAAsgACABQQJ0QQQQ4wIiAjYCACAAIAI2AgQgABBCIAIgAUECdGo2AgAgAEEAENILCyEBAn1BfyAAKAIAKgIoIgIgASgCACoCKCIDXiACIANdGwuwAgMDfwR9BHwjAEFAaiIBJAAgAUEoaiAAEM0BEHEhAkGqnC0tAAAEQCAAKAIYQQRqEGIuAQAhAyABIAAoAhhBBGoQYi4BBjYCJCABIAM2AiBB1eMPIAFBIGoQOwsgAhBBIAIQPEUEQEHYpBArAwBB4KQQKwMAoCIJQdCkECsDACIKoCELA0AgAigCCCIAKgKAASAAKgJ8kyEEAkBBqpwtLQAARQRAIAS7IQgMAQsgACoCnAEhBSAAKgJ8IQYgACoCgAEhByABIAS7Igg5AxggASAHuzkDECABIAa7OQMIIAEgBbs5AwBBkeQPIAEQOwsgACAAKgKcASAKIAggC6O2uyIIoraTIAAqApwBIAkgCKK2khC+ESAAQQA6AAggAhBkIAIQPEUNAAsLIAFBQGskAAvFBQIIfwJ9IwBB0ABrIggkAAJAAkACQAJAAkACQAJ/IAUEQCAAKgKcASEPIAAqApQBIQ4gCEFAayABNgIAIAggD7s5AzAgCCAOuzkDOEGk3A8gCEEwahA7QQEhBiABIAFBH3UiCWogCXOyIAJeDQIgAUEfdiEHQQFBfyABQQBIGwwBC0EBIQYgASABQR91IglqIAlzsiACXg0GIAFBH3YhB0EBQX8gAUEASBsLIQkCQCAHRQ0AIAQQjQENACABQX9KIQYgAUEBdCADaiEKDAILQQAhBiABQQBIDQUgBBCmAg0FQQEhBiABQQF0IANqIQogBw0BIAkhBgNAAn8gBCAGQRh0QRh1EIIDIgsqApwBjiICi0MAAABPXQRAIAKoDAELQYCAgIB4CyIHIANKQQAgCiAHShsNBAJAAkAgAyAHRiIMIAcgCkZyRQRAIAYgCWohBgwBCyAAKgKgASALKgKgAV8NByAGIAlqIQYgDA0BCyAHIApHDQQLIAYgBBCnB0gNAAsMAgtB8NwPQQAQOwwECyAGQQFzIQ0gCSEGA0ACfyAEIAZBGHRBGHUQggMiCyoCnAGOIgKLQwAAAE9dBEAgAqgMAQtBgICAgHgLIgcgA0hBACAKIAdIGyANIAcgA0xyRUEAIAogB0obcg0CAkACQCADIAdGIgwgByAKRnJFBEAgBiAJaiEGDAELIAAqAqABIAsqAqABXw0FIAYgCWohBiAMDQELIAcgCkcNAgsgBiAEEKcHSA0ACwtBACEGIAVFDQJBv94PQQAQOwwCC0EBIQYgBUUNASAIIAsqApwBuzkDCCAIIAEgA2ogB2s2AgBBq90PIAgQOwwBC0EBIQYgBUUNACALKgKcASEOIAAqAqABIQIgCCALKgKgAbs5AyAgCCACuzkDGCAIIA67OQMQQerdDyAIQRBqEDsLIAhB0ABqJAAgBgvrAQEHfyACQX9zIQUDQAJAIAEgBkECdGoiBCgCACEHIAQgBTYCAEEBIQggBiIEQQFqIgMgAk4NAANAAkAgACADIgZBAnQiA2ooAgAgASADaiIDKAIAIglIDQAgACAEQQJ0aigCACAHTg0AAkAgBUF+Sg0AQQEhAyAEQQBIDQADQCABIARBAnRqIAM2AgAgA0EBaiIDIAVBf3NODQEgBUEBaiEFIARBAEohByAEQX9qIQQgBw0ACwtBACEFIAgNAwwCCyADIAVBf2oiBTYCACAGQQFqIgMgAkghCCAJIQcgBiEEIAIgA0cNAAsLCwu2BQILfwF8An8gACABaiIGt0G4oy0rAwCjmyIQmUQAAAAAAADgQWMEQCAQqgwBC0GAgICAeAshDQJAAkAgBiACSARAIABBAEwNAQNAIAMgBUECdGooAgAgCWohCSAFQQFqIgUgAEcNAAsgACEHDAELQQEhBSADKAIAIQEgAkEBSA0BIAJBAUYEQCABIQkMAgsgASEGA0AgAyAFQQJ0aigCACIAIAYgACAGSBshBiAAIAFqIQEgBUEBaiIFIAJHDQALIAEhCSAGIQEMAQtBASEFIAFBAU4EQCABIAdqIQEDQCADIAdBAnRqKAIAIAlqIQkgB0EBaiIHIAFHDQALIAEhBwsgAygCACEBAkAgB0EBTQRAQQAhBgwBC0EAIQYDQCABIAMgBUECdGooAgAiCiAKIAFKIgobIQEgBiAFIAobIQYgBUEBaiIFIAdHDQALCyAAQQFOBEAgCSABayANbSABaiEIQQAhBQNAIAQgBUECdGogCDYCACAFQQFqIgUgAEcNAAsgACEICyAHIAJODQAgAiAHayEOIAIgCGohD0EAIQAgByIKIQwDQCADIAxBAnRqKAIAIgUgCSADIABBAnRqKAIAa2ohCQJAIAYgDCAFIAFKIgsbIgYgAEoEQCABIAUgCxshASAAQQFqIQAMAQsgAEECaiEFIAMgAEEBaiIAQQJ0aigCACEBIAAhBiAFIAxLDQADQCABIAMgBUECdGooAgAiCyALIAFKIgsbIQEgBiAFIAsbIQYgBSAKRyELIAVBAWohBSALDQALCyAKQQFqIQogBCAIQQJ0aiAJIAFrIA1tIAFqNgIAIAxBAWohDCAIQQFqIQggACAORw0ACyAPIAdrIQgLIAggAkgEQCAJIAFrIA1tIAFqIQADQCAEIAhBAnRqIAA2AgAgCEEBaiIIIAJHDQALCwvSAwIIfwF9IwBB4ABrIgYkACAGQcgAaiAAEM0BEHEhCCAGQTBqEEkhACAGQShqEGkhCSAGQSBqQwAAgD8gASABlEMAAIA/kpEiDpUgAYwgDpUQigEhDSADIAJrIgpBAE4EQCAFQQAgCkECdEEEahBlGgsgCBBBIAgQPEUEQANAIAAgCCgCCBChARB8IAAQQSAAEDxFBEADQCAGIAAoAggQQikBADcDKCAJIA0Q7gIgCS4BBCAJLgEAayEMIAkuAQIiCyACayEHIAsgA0xBACAHQX9KG0UEQCAGQaIGNgIUIAZB/N8PNgIQQeifLEH+3g9BAkHD3w8gBkEQahBFCyAFIAdBAnRqIgcgBygCACAMajYCACAJLgEGIgsgAmshByALIANMQQAgB0F/ShtFBEAgBkGmBjYCBCAGQfzfDzYCAEHonyxB/t4PQQJBw98PIAYQRQsgBSAHQQJ0aiIHIAcoAgAgDGs2AgAgABBEGiAAEDxFDQALCyAIEGQgCBA8RQ0ACwsgBCAFKAIAIgI2AgAgCkEBTgRAIApBAWohA0EBIQADQCAEIABBAnQiCGogBSAIaigCACACaiICNgIAIABBAWoiACADRw0ACwsgBkHgAGokAAu7AQIEfwF9IwBBQGoiAyQAIAAQaSEFIANBOGoQaSEEIANBGGogARDNARBxIQEgAxBJIQAgA0EwakMAAIA/IAIgApRDAACAP5KRIgeVIAKMIAeVEIoBIQYgARBBIAEQPEUEQANAIAAgASgCCBChARB8IAAQQSAAEDxFBEADQCADIAAoAggQQikBADcDOCAEIAYQ7gIgBSAEEJkBIAAQRBogABA8RQ0ACwsgARBkIAEQPEUNAAsLIANBQGskAAssACAAKAIAIgAqApQBIAEoAgAiASoClAFeBH9BfwUgACoClAEgASoClAFdCwuCAgMFfwF9AXwjAEHQAGsiAiQAIAIgADgCTCACQRhqEJ8KIQQgAiABEKEBEEAiAxBBIAQCfCADEDxFBEADQCADKAIILQA0RQRAIAQgAkHIAGogAygCCBBCIgYuAQAgBi4BBGpBAm1BEHRBEHUgBi4BAhCLARDWCCAFQQFqIQULIAMQRBogAxA8RQ0ACyACKgJMIQALIAC7CyACQcgAahCsHiEIIAEgACACKgJIIAi2IgcQ8BoCQEH6nC0tAABFDQAgBUHspi0oAgBMDQAgBCACQcwAaiACQcgAahCAD7YhByACKgJMIQALIAEgACACKgJIIAcQ8hEgBBDLCSACQdAAaiQAC5ADAgZ/AXwjAEFAaiIBJAAgAUEoaiAAEM0BEHEiBBBBIAQQPEUEQANAIAFBEGogBCgCCCIGEKEBEEAhAiABQRBqEEFBACEAIAFBEGoQPEUEQANAIAAgAigCCCIDEEIQTkgEQCADEEIQTiEACyACEEQaIAFBEGoQPEUNAAsLIAFBACAAQQFqEJgBIQUgAUEQahBBIAFBEGoQPEUEQANAIAIoAggiABBCEE5BCE4EQCAFIAAQQhBOQQEQcwsgAhBEGiABQRBqEDxFDQALCyAFENsBIQcgAUEQahBBIAFBEGoQPEUEQCAHtrtEAAAAAAAA4D+iIQdBACEDA0ACQCAHIAIoAggiABBCEE63ZEEBcwRAIAAhAwwBCyADBEAgACADIAYQ8xkNAQsgAUEQahCNAUUEQCAAIAJBARCrAiAGEPMZDQELIAAoAgQiAARAIAAQ1AIQPQsgAhCIASIARQ0AIAAQ8gQQPQsgAhBEGiABQRBqEDxFDQALCyAFEIUBGiAEEGQgBBA8RQ0ACwsgAUFAayQAC80GAwZ/B30DfCMAQbABayIGJAAgBkGoAWoQbxogBkGQAWoQSSEKIAIgA5MiDiEMIAAoAggiCCoCgAEgAl1BAXNFBEAgDiACIAgqAoABk5MhDAsgCCoCfCADXkEBc0UEQCAMIAgqAnwgA5OTIQwLAkAgBUUNAEGSpy0tAABFDQAgCCoCfCENIAgqAoABIQ8gBiAMuzkDiAEgBiAEuzkDgAEgBiANuzkDcCAGIA+7OQN4IAYgArs5A2ggBiADuzkDYEHW9g8gBkHgAGoQOwsgBEMAAIC/kiEPIAS7IRMgArshFCADuyEVIAghBwNAAkAgABCNAQ0AIAAQZCAAKAIIIgcqAnwgAl9BAXMNACAHKgKAASADYEEBcw0AIAcgCCAHKgKAASAIKgKAAV4bKgKAASINIAcgCCAHKgJ8IAgqAnxdGyoCfCIQkyAEX0EBc0UEQAJAIAVFDQBBkqctLQAARQ0AIAgqAnwhDCAIKgKAASERIAcqAoABIRIgBiAHKgJ8uzkDUCAGIBK7OQNYIAYgEbs5A0ggBiAMuzkDQEGN+A8gBkFAaxA7CyAHIBAgDRC+ESAKIAcQoQEQfCAKIAgQoQEQwgEgCkHvABCaCiAAELsDIAAQ8wEiCwRAIAsQnAYQPQsgABBkQwAAgL8hDAsgDiENIAcqAoABIAJdQQFzRQRAIA4gAiAHKgKAAZOTIQ0LQQEgCQJ/IAcqAnwgA15BAXNFBEAgDSAHKgJ8IAOTkyENCyANIA9gCxsgCSAMIA9gGyEJIAcgCCANIAxeIgsbIQggDSAMIAsbIQwgBUUNAEGSpy0tAABFDQAgByoCfCEQIAcqAoABIREgBiAMuzkDMCAGIA27OQMoIAYgEzkDICAGIBC7OQMQIAYgEbs5AxggBiAUOQMIIAYgFTkDAEHI+A8gBhA7CwJAIAAQjQENACAHKgJ8IAJfQQFzDQAgByoCgAEgA2ANAQsLIAggACgCCEcEQANAIAAQuwMgCCAAKAIIRw0ACwsCQEGYoi0rAwAgE6IgDiAMk7tjQQFzDQACQEG6nS0tAAAEQEGYoi0rAwAhFCAJDQIgFCAToiAMu2QNAQwCCyAJDQELQQIhCQsgASAINgIAIAZBsAFqJAAgCQuxCgMEfwR9A3wjAEHgAWsiBSQAIAUgATgC3AEgBUHAAWogAEEEahBAIQcgBUGoAWogABDNARBxIQYgABDoMQJAQYKnLS0AAARAIAAQzQEQyQhFDQEgACADQaqcLS0AAHEQ8hkLIAAgBUHcAWpBBEEBQQAQlQsgABDNARDJCEUNACAFIAIpAgA3A6ABIAUqAtwBIQFBqpwtLQAAGiAFIAUpA6ABNwOYASAAIAEQ9BlBgqctLQAARQRAIAAgA0GqnC0tAABxEPIZCyAGEOcNQdikECsDAEHgpBArAwCgIQ1B0KQQKwMAIQ4DQCAGKAIIIgIqAoABIQFB8KEtKwMAIAAqAiS7oiANoiACKgKcAbugtiEJAkAgAioCfCIKIAIqApwBu0HwoS0rAwAgACoCJLuiIA6iobYiCF5BAXMNAAJAQaqcLS0AAEEAIAMbRQRAIAq7IQwMAQsgAioCnAEhCyAFIAi7OQOQASAFIAq7Igw5A4gBIAUgC7s5A4ABQcHgDyAFQYABahA7CyAGEI0BIQQCQAJAIANFBEAgBA0BA0AgBkEBEIIDIgQqAoABIAheQQFzDQIgBCoCfCAIXkUEQCAEKgKAASAKXUUEQEGqnC0tAAAaDAYLIAQqAoABIQpBqpwtLQAAGgwFC0GqnC0tAAAaIAYQZCAHIAIQoQEQfCAHIAQQoQEQwgEgBhDzASIEBEAgBBCcBhA9CyAGELsDIAYQjQFFDQALDAELIAQNAANAIAZBARCCAyIEKgKAASAIXkEBcw0BIAQqAnwgCF5BAXMNAkGqnC0tAAAEQCAFIAQqApwBuzkDUEGL4Q8gBUHQAGoQOwsgBhBkIAcgAhChARB8IAcgBBChARDCASAGEPMBIgQEQCAEEJwGED0LIAYQuwMgBhCNAUUNAAsLIAghCgwBCyAEKgKAASAKXUEBc0UEQCAEKgKAASEKQaqcLS0AAEUNASAEKgKcASEIIAUgCrs5A2AgBSAIuzkDaEG04Q8gBUHgAGoQOwwBC0GqnC0tAABFDQAgBCoCnAEhCCAFIAw5A3AgBSAIuzkDeEGE4g8gBUHwAGoQOwsCQCABIAldQQFzDQACQEGqnC0tAABBACADG0UEQCABuyEMDAELIAIqApwBIQggBUFAayAJuzkDACAFIAG7Igw5AzggBSAIuzkDMEHZ4g8gBUEwahA7CyAGEKYCIQQCQAJAIANFBEAgBA0BA0AgBkF/EIIDIgQqAnwgCV1BAXMNAiAEKgKAASAJXUUEQCAEKgJ8IAFdRQRAQaqcLS0AABoMBgsgBCoCfCEBQaqcLS0AABoMBQtBqpwtLQAAGiAGELsDIAcgAhChARB8IAcgBBChARDCASAGEPMBIgQEQCAEEJwGED0LIAYQZCAGEKYCRQ0ACwwBCyAEDQADQCAGQX8QggMiBCoCfCAJXUEBcw0BIAQqAoABIAldQQFzDQJBqpwtLQAABEAgBSAEKgKcAbs5AwBBpeMPIAUQOwsgBhC7AyAHIAIQoQEQfCAHIAQQoQEQwgEgBhDzASIEBEAgBBCcBhA9CyAGEGQgBhCmAkUNAAsLIAkhAQwBCyAEKgJ8IAFdQQFzRQRAIAQqAnwhAUGqnC0tAABFDQEgBCoCnAEhCSAFIAG7OQMQIAUgCbs5AxhBtOEPIAVBEGoQOwwBC0GqnC0tAABFDQAgBCoCnAEhCSAFIAw5AyAgBSAJuzkDKEGE4g8gBUEgahA7CyACIAogARC+ESAGELsDIAYQjQFFDQALCyAFQeABaiQAC/kEAwh/AX0DfCMAQeAAayIGJAAgBkHYAGoQaSEHIAZBQGsgABDNARBxIQMgBkEoaiAAQQRqEEAhCgJAIAMQpwdFDQAgBkEYaiAAIAEQ7TEgBiAGKQMYNwNYIAAoAhhBBGoQYi4BABogACgCGEEEahBiLgECGiAHLgECIQUgBy4BBiEEIAMQQSAFQX9qIQcgBEEBaiEFIAMQPEUEQANAIAMoAggqApwBjiELIAMQZCAFAn8gC4tDAAAAT10EQCALqAwBC0GAgICAeAsiBEEBaiAFIARKGyEFIAcgBEF/aiAHIARIGyEHIAMQPEUNAAsLIAUgB2siBEEASA0AIAZBGGogBEEBaiIIEJQLIQQgACABIAcgBSAGQQhqIAgQlAsiBUEAEGEgBEEAEGEQ7DECf0HgpBArAwAiDEHYpBArAwCgIAAqAiC7Ig2imyIOmUQAAAAAAADgQWMEQCAOqgwBC0GAgICAeAshCQJ/QdCkECsDACAMoCANopsiDJlEAAAAAAAA4EFjBEAgDKoMAQtBgICAgHgLIAkgCCAFQQAQYSAEQQAQYRDrMSAFQQAQYSAEQQAQYSAIEOoxIAMQQSADEDxFBEADQAJ/IAMoAggiCSoCnAGOIgGLQwAAAE9dBEAgAagMAQtBgICAgHgLIQgCQCAJIAQgCCAHaxBhKAIAIAAqAiBDAAAAP5QgCCADIAIQ6TFFDQAgCiADKAIIEKEBEMIBIAMQ8wEiCEUNACAIEJwGED0LIAMQZCADEDxFDQALCyADEEEgAxA8RQRAA0AgCiADKAIIEKEBEMIBIAMQZCADEDxFDQALCyAFEKYEIAQQpgQLIAZB4ABqJAALzwICBH8BfiMAQYABayIFJAAgBSACOAJ8IAVB4ABqIAFBBGoiCBBAIQYgBUHIAGogARDNARBxIQcgBSADKQIAIgk3A0BBmpwtLQAAGiAFIAUpA0A3AyAgASACEPQZIAUgCTcDOEGanC0tAAAhAyAFIAUpAzg3AxggASACIAMgBHEQ8zEgACgBACEAIAUgCTcDKCAFIAA2AjQgBSAANgIUIAUgCTcDCCABIAIgBUEIaiAEEPIxIAYgCBB8IAcgARDNARC3AyAHEEEgBxA8RQRAA0AgBiAHKAIIEKEBEMIBIAcQZCAHEDxFDQALCyABIAVB/ABqQQFBAEEAEJULIAYgCBB8IAYgAUEUahDCASABIAVB/ABqQQJBAUEBEJULIAYgCBB8IAYgAUEMahDCASAGIAFBEGoQwgEgASAFQfwAakEDQQBBABCVCyAFQYABaiQAC14BAn8jAEEgayICJAAgAkEIaiAAEM0BEHEhAUGKnC0tAAAaIABBAEEAQQFBARCVCyABEKkDIAEQQSABEDxFBEADQCABKAIIEPYZIAEQZCABEDxFDQALCyACQSBqJAALtgICBH8BfSMAQeAAayICJAAgAkFAaxBJIgMgARB8IAMQQSADEDxFBEAgAiAAKAEANgI8A0AgAygCCCEEIAJBMGpDAACAP0MAAAAAEIoBIQVB2pwtLQAAGiACIAIoAjw2AhwgAiAFKQIANwMQIAQQ9TEgAxBEGiADEDxFDQALCyABIAJB3ABqIAJB2ABqEPUZIAMgARB8IAMQQQJAIAMQPARAIAIqAlwhBgwBCyAAKAEAIQAgAioCXCEGA0AgAiAANgIsIAMoAgghASACQSBqQwAAgD9DAAAAABCKASEEIAMoAggoAhhBBGoQYi4BABpB2pwtLQAAIQUgAiACKAIsNgIMIAIgBCkCADcDACACQQxqIAEgBiACIAVBAXMQ9DEgAxBEGiADEDxFDQALCyACQeAAaiQAIAYLMgAgASgCACEBIAAoAgAiABBCLgEAIAEQQi4BAE4EfyAAEEIuAQAgARBCLgEASgVBfwsLkwECBH8BfSMAQTBrIgMkACADQRhqIABBEGoQQCEEIAMgARBeEEAiASABKAIIENcCEHwgARBZRQRAIAEQQSABEDxFBEADQEEIED8gASgCCBC5GRDFByIFENEOQfgAED8iBiAFEMQFGiAEIAYQjwEgARBEGiABEDxFDQALCyAAKgIkIAQgAhD3GSEHCyADQTBqJAAgBwv+AQIEfwF9IwBBQGoiBSQAIAVBKGogAUEEaiIGEEAhAyAFQRBqIAEQzQEQcSEEIAMgAUEQahDCASADIAFBDGoQwgEgAyABQRRqEMIBAkAgBhCeAkUgAEVyRQRAIAMQ0wIgASADKAIIKAIEIAQQ+DEiByABKgIkXkEBcw0BIAEgBzgCJAwBCyAGEE1FDQAgASgCGEEEahBiENsLIQBB+AAQPyIGIAAQxAUaIAMgBhCPAQsgASoCJCADIAQQ9xkaIAQQQSAEEDxFBEADQCAEKAIIEPYZIAQQZCAEEDxFDQALCyACIAVBDGogBUEIahD1GSAFKgIMIQcgBUFAayQAIAcLCABBiKctEE8LCABB+KYtEE8LCABB4KYtEHQLCABBuKYtEFILCABBkKYtEFILCABB6KUtEFILCABBwKUtEFILCABBmKUtEFILCABB8KQtEFILCABByKQtEFILCABBoKQtEFILCABB+KMtEFILCABB0KMtEFILCABBqKMtEFILCABBgKMtEFILCABB2KItEFILCABBsKItEFILCABBiKItEFILCABB4KEtEFILCABBuKEtEFILCABBkKEtEFILCABB6KAtEFILCABBwKAtEFILCABBmKAtEFILCABB8J8tEFILCABByJ8tEFILCABBsJ8tEHQLCABBmJ8tEHQLCABBgJ8tEHQLCABB6J4tEHQLCABB0J4tEHQLCABBuJ4tEHQLCABBoJ4tEHQLCABBiJ4tEHQLCABB8J0tEHQLCABB4J0tEE8LCABB0J0tEE8LCABBwJ0tEE8LCABBsJ0tEE8LCABBoJ0tEE8LCABBkJ0tEE8LCABBgJ0tEE8LCABB8JwtEE8LCABB4JwtEE8LCABB0JwtEE8LCABBwJwtEE8LCABBsJwtEE8LCABBoJwtEE8LCABBkJwtEE8LCABBgJwtEE8LCABB8JstEE8LKgAgAEEEahBJGiAAQQhqEEkaIABBDGoQaRogAEEANgIUIABBADYCACAAC64BAQF/IAAQ1AEaIABBBGoQrTIhASAAQgA3AiggAEEAOwEkIABBADYCICAAQQA6AB4gAEEAOwEcIABBMGoQgwEaIABBNGoQSRogAEE4ahBJGiAAQTxqEEkaIABBQGsQSRogAEHEAGpDAACAP0MAAAAAEIoBGiAAQcwAakMAAIA/QwAAAAAQigEaIABB1ABqQwAAgD9DAAAAABCKARogAEHcAGoQbxogAUEANgIAIAALiQMBCH8jAEHQAWsiBCQAIARBsAFqIARByAFqEEkiBxBAIQkgAigCABCxAyIKQQFOBEADQCACKAIAIAUgBEEQaiAEQawBaiAEQagBaiAEQaQBahCJCCAEQaABaiAELgEQIAQuAawBEIsBGiAEQZwBaiAEKAKoASAEKAIQakEQdEEQdSAEKAKkASAEKAKsAWpBEHRBEHUQiwEaIARBMGoQ9wshCyAEIAQoAqABIgY2AjBBIBA/IQggBCAGNgKYASAEIAY2AgwgBCAEKAKcASIGNgKUASAEIAY2AgggCCALIARBDGogBEEIakEAEMgTIAkgCBCPASAFQQFqIgUgCkcNAAsLIARBMGoQrjIhBSAEQawBakEAQQAQiwEaIARBKGogAEEQdEEQdSABQRB0QRB1EIsBIQAgBCAEKAKsASIBNgIsIAQgATYCBCAEIAAoAQA2AgAgBSAEQQRqIAQgBxCRGiAEQRBqIAMQQCAFEJwPEMIBIAIQoAMgBRCKDBogBxDXAxogBEHQAWokAAs+AQJ/IABBCGoiAS4BAiECIAEgAS4BABDvASABIAIQ6gEgAEEMaiIALgECIQEgACAALgEAEO8BIAAgARDqAQuXAgECfyMAQTBrIgQkACACKAK4ARB/EEohBSAEQShqIAIoArgBEP0DIAQgBEEoahBKNgIkIAQgBTYCIEGJ6gsgBEEgahA7IARBKGoQRhogAkGAAmpB4P0sKAIAEJYTIAMoArgBEH8QSiEFIARBKGogAygCuAEQ/QMgBCAEQShqEEo2AhQgBCAFNgIQQZv3CyAEQRBqEDsgBEEoahBGGiADQYACakHg/SwoAgAQlhMgAi0AmgIhAiADLQCaAiEDIARB0sYMQfj/CiAAGzYCDCAEQcqtDEGluQwgAbtEmpmZmZmZuT9kGzYCCCAEQfiSDEGioQwgAxs2AgQgBEH4kgxBoqEMIAIbNgIAQfKDDCAEEDsgBEEwaiQACxcAIAAgASACIAMgBCAFIAYgByAIEOAPC6EEAQV/IwBBIGsiBiQAIAZBACACIAMQvgQ2AhwgBiACQQAQmwciBzYCGCAHELEDIQogBkEANgIUIApBAU4EQAN/IAYgByAIQQIQwwQiBzYCECAHIAZBDGogBkEIaiAGQQRqIAYQ8gMCQCAGKAIQIAYoAhwQ4g0iB0EFSA0AIAdBf2ogAGwgBigCAEECdEgNACAGKAIUIgdFBEAgBiACEKkBIAIQhgFBARC0ASIHNgIUCyAHIAYoAhAQmiwLIAZBEGoQ4QEgCiAIQQFqIghGBH8gBigCFAUgBigCGCEHDAELCyEICyAGQRhqEKADIAZBHGoQSyAIBEAgCCAIIAFBCBCRBxogBiAIQQAQmwciBzYCECAHELEDIgBBAU4EQEEAIQgDQCAGIAcgCEECEMMEIgc2AgwgBiAGKAIUIAcQ1QMiBzYCCCAHIAZBBGoQqgkgBkEIahBLIAYgASAGKAIMENUDIgc2AgggByAGEKoJIAZBCGoQSyAGKAIAt0QAAAAAAADoP6IgBigCBLdkQQFzRQRAIAYoAhQgBigCDBCXBwsgBkEMahDhASAAIAhBAWoiCEcEQCAGKAIQIQcMAQsLIAYoAhQhCAsgBkEQahCgAyAIIAZBDGoQwwYCQCAGKAIMBEAgBkEUahBLDAELIAIgAiAIEPEDGiADIAMgBigCFBDxAxogAiAEEMMGIAMgBRDDBgsgBigCFCEJCyAGQSBqJAAgCQuWAgECfyMAQdAAayIHJAAgByACNgJIIAcgATYCTAJAIANFDQAgAygCAEUNACAHQUBrEEkhAiAHQThqEEkhAUEBIAMoAgAgACACIAEQ/xkgBRCpASEAIAUQhgEhCCAHQTBqQQBBABCLASAHQShqIAhBEHRBEHUgAEEQdEEQdRCLASABIAdBzABqIAdByABqIAYQ/hkCQCAGEE1FBEBBASABIAMoAgAQ/RkgAygCACAEIAUQ/BkgB0EgahBvIgAgBygCTCAHKAJIEKkTIAAgBkEAEMMNIAdBCGogBhBxIgAQQSAAEDwNAQNAIAAoAggQsDIgABBkIAAQPEUNAAsMAQsgAxBLCyABEOUDIAIQ6wILIAdB0ABqJAAL1QEBBH8jAEEwayIHJAACQCADRQ0AIAMoAgBFDQAgB0EoahBJIQkgB0EgahBJIQhBACADKAIAIAAgCSAIEP8ZIAUQqQEhACAFEIYBIQogB0EYakEAQQAQiwEgB0EQaiAAQRB0QRB1IApBEHRBEHUQiwEgCCABIAIgBhD+GQJAIAYQTUUEQEEAIAggAygCABD9GSADKAIAIAQgBRD8GSAHQQhqEG8iACABKAIAIAIoAgAQqRMgACAGQQAQww0MAQsgAxBLCyAIEOUDIAkQ6wILIAdBMGokAAueBwEEfyMAQTBrIgkkACAJQQA2AiwgCUEANgIoIABBBG0hDCAAQRRtIQsCQCAIRQRAIAlBACABIABBPG0iCiAKEJwNIgo2AiwMAQsgCSAMNgIIIAkgCzYCBCAJIAA2AgBBtZkCIAkQOyAJQQAgASAAQTxtIgogChCcDSIKNgIsIAggCkECEL0CCyAJIAogCyALEJ0NIgs2AiQCQCAIBEAgCCALQQIQvQIgCUEAIAogCxDxAzYCKCAJQSRqEEsgCCAJKAIoQQIQvQIMAQsgCUEAIAogCxDxAzYCKCAJQSRqEEsLIAIgCSgCKEEBIAwQnQ02AgAgBCAJKAIoIAxBARCdDTYCACAJQShqEEsgCUEANgIgIAlBADYCHCACKAIAIAlBIGoQwwYgBCgCACAJQRxqEMMGIAcEQEEAIQogByAJKAIcIAkoAiByBH9BAAUgACAJKAIsIAIoAgAgBCgCACAJQSBqIAlBHGoQszILNgIACyAJQSxqEEsgCUEANgIYIAZBADYCACAJQQA2AhQCQAJAAkACQAJAIAkoAiBFBEAgCUEAIAEgAigCABDxAyIKNgIYIANBACAJKAIcBH8gCgUgCiAKIAQoAgAQ8QMaIAZBACACKAIAIAQoAgAQvgQiATYCACAJQQAgAigCACABEPEDNgIUIAkoAhgLQQZBARDJBiIBNgIAIAEgASAJKAIYQQgQkQcaIAkoAhxFBEAgAygCACIBIAEgBCgCABCrCSADKAIAIgEgASAGKAIAEPEDGgsgACADKAIAIAYoAgAgAigCABDDEQ0BIAIQSwwBCyACEEsgA0EANgIAIAkoAhwNASAJQQAgASAEKAIAEPEDNgIYCyAJKAIcRQ0BCyAEEEsgBUEANgIAIAkoAiBFDQEMAgsgBUEAIAkoAhhBAUEGEMkGIgE2AgAgASABIAkoAhhBCBCRBxogCSgCFCIBBEAgBSgCACIKIAogARCrCSAJQRRqEEsLIAAgBSgCACAGKAIAIAQoAgAQwxENACAEEEsLAkAgCEUNACACKAIAIgAEQCAIIABBAhC9AgsgBCgCACIABEAgCCAAQQIQvQILIAkoAhgiAARAIAggAEECEL0CCyADKAIAIgAEQCAIIABBAhC9AgsgBSgCACIABEAgCCAAQQIQvQILIAYoAgAiAARAIAggAEECEL0CCyAHRQ0AIAcoAgAiAEUNACAIIABBAhC9AgsgCUEYahBLCyAJQTBqJAALVQEDfyMAQSBrIgIkACACQQhqIAEQcSIBEEEgARA8RQRAA0AgAiAAIAEoAggQTBCGBCACENUBIQQgARBkIAMgBGohAyABEDxFDQALCyACQSBqJAAgAwufAgECfyMAQfAAayIEJAAgBEEIaiACEHAiAyAALgEAIAAuAQQgAC4BAhC3BAJAIANBARC7AiICRQ0AA0ACQCACKAI0QQRHBEAgAigCNEEDRw0BCyACEEwiAiAAEI8CQX9KDQACQCACLgEGIAFMDQAgAi4BBiAALgECTg0AIAIuAQYhAQsgAyAEIAAuAQAgAUEQdEEQdSAALgEEIAAuAQIQkAIQ5QEgAxC9ASICRQ0CA0ACQCACKAI0QQRHBEAgAigCNEEDRw0BCyACEEwiAiAAEI8CQX9KDQAgASACLgEGTg0AIAIuAQYgAC4BAk4NACACLgEGIQELIAMQvQEiAg0ACwwCCyADQQEQuwIiAg0ACwsgAxBuGiAEQfAAaiQAIAELnwIBAn8jAEHwAGsiBCQAIARBCGogAhBwIgMgAC4BACAALgEEIAAuAQYQtwQCQCADQQAQuwIiAkUNAANAAkAgAigCNEEERwRAIAIoAjRBA0cNAQsgAhBMIgIgABCPAkF/Sg0AAkAgAi4BAiABTg0AIAIuAQIgAC4BBkwNACACLgECIQELIAMgBCAALgEAIAAuAQYgAC4BBCABQRB0QRB1EJACEOUBIAMQvQEiAkUNAgNAAkAgAigCNEEERwRAIAIoAjRBA0cNAQsgAhBMIgIgABCPAkF/Sg0AIAEgAi4BAkwNACACLgECIAAuAQZMDQAgAi4BAiEBCyADEL0BIgINAAsMAgsgA0EAELsCIgINAAsLIAMQbhogBEHwAGokACABC58CAQJ/IwBB8ABrIgQkACAEQQhqIAIQcCIDIAAuAQQgAC4BAiAALgEGELgEAkAgA0EAEJMDIgJFDQADQAJAIAIoAjRBBEcEQCACKAI0QQNHDQELIAIQTCICIAAQ/gFBf0oNAAJAIAIuAQAgAU4NACACLgEAIAAuAQRMDQAgAi4BACEBCyADIAQgAC4BACAALgECIAFBEHRBEHUgAC4BBhCQAhDlASADEL0BIgJFDQIDQAJAIAIoAjRBBEcEQCACKAI0QQNHDQELIAIQTCICIAAQ/gFBf0oNACABIAIuAQBMDQAgAi4BACAALgEETA0AIAIuAQAhAQsgAxC9ASICDQALDAILIANBABCTAyICDQALCyADEG4aIARB8ABqJAAgAQv7BgEMfyMAQfAAayICJAACQCABKAJIRQ0AIAEoArgBRQRAIAJBvg82AkQgAkGjkwM2AkBBhJ0sQfKxDkECQankAiACQUBrEEULIAAQ0gYoAgAiCUUNACACQdgAahBrIQcgAkEANgJQIAcgCSACQdAAahCGBiAAQdCnCGoiDC0ACgRAIAJB0ABqIAEoArgBEP0DIAIgAkHQAGoQSjYCMEGXtw4gAkEwahA7IAJB0ABqEEYaCyABKAK4ASgCHEEASgRAA0ACQCABIAYQ/R0iBUUNAEEAIQMgBRBCIgUoAgBBAUgNAANAIAUgAxBRKAIAIgRBAEggBCAJTnJFBEAgBSADEFEvAQQhCCAHIAQQPiIEIAggBCgCAGo2AgALIANBAWoiAyAFKAIASA0ACwsgBkEBaiIGIAEoArgBKAIcSA0ACwtBACEEAn8gCUEATARAIAFBADYCkAJBfyEGQX8hBUEAIQNBAQwBCyAAQagNaiEKQf//AyEIQQAhA0H//wMhBgNAIAQhBQJAIAwtAApFDQAgByADED4oAgBBAUgNACAKIAMQiAMoAgAhBCACIAcgAxA+KAIANgIkIAIgBDYCIEGDvQ4gAkEgahA7CyAHIAMQPigCACENIAcgAxA+KAIAIQQCfyANIAVKBEAgBSELIAYhCCADDAELIAQgC0wEQCAFIQQgBgwBCyAHIAMQPigCACELIAUhBCADIQggBgshBiADQQFqIgMgCUcNAAtBACEDIAEgBkEQdEEQdSIFQX9KBH8gCiAFEIgDBUEACzYCkAJBASAIQRB0QRB1IgZBAEgNABogCiAGEIgDIQNBAAshCCABIAM2ApQCIAIgBEH//wNtNgJQIAJBATYCTCACQf8ANgJIIAEgAkHQAGogAkHMAGogAkHIAGoQsQE6AJgCIAIgC0H//wNtNgJQIAJBADYCTCACQf8ANgJIIAEgAkHQAGogAkHMAGogAkHIAGoQsQE6AJkCAkAgBEEBSA0AIABBqA1qIgQgBRCIAygCACEAIAwtAApFDQAgASwAmAIhBSABLACZAkEBSCAIckUEQCAEIAYQiAMoAgAhBCACIAEsAJkCNgIcIAIgBDYCGCACIAU2AhQgAiAANgIQQcbCDiACQRBqEDsMAQsgAiAFNgIEIAIgADYCAEHWxg4gAhA7CyAHEF0aCyACQfAAaiQAC58CAQJ/IwBB8ABrIgQkACAEQQhqIAIQcCIDIAAuAQAgAC4BAiAALgEGELgEAkAgA0EBEJMDIgJFDQADQAJAIAIoAjRBBEcEQCACKAI0QQNHDQELIAIQTCICIAAQ/gFBf0oNAAJAIAIuAQQgAUwNACACLgEEIAAuAQBODQAgAi4BBCEBCyADIAQgAUEQdEEQdSAALgECIAAuAQAgAC4BBhCQAhDlASADEL0BIgJFDQIDQAJAIAIoAjRBBEcEQCACKAI0QQNHDQELIAIQTCICIAAQ/gFBf0oNACABIAIuAQRODQAgAi4BBCAALgEATg0AIAIuAQQhAQsgAxC9ASICDQALDAILIANBARCTAyICDQALCyADEG4aIARB8ABqJAAgAQvBBQICfwF+IwBB8ABrIgYkACAFEE0EQCAGQZwFNgIkIAZB6qMFNgIgQeSfLEGM3QdBAkHh+wQgBkEgahBFCyAGQdgAaiAFEHEhBQNAIAYgBSgCCCIHEEwpAQA3A1ACQCAGQdAAaiAAEM4CRQ0AAkAgAC4BBiAGLgFWTg0AIAYgBikDUDcDSCAGQcgAaiAALgEGEKkCIAYgBikDSCIINwNAIAYgCDcDGCAGQRhqIAEgAyAEEJYIQQFIDQAgAiADIAEgBCAGQcgAahDjDSAFIAZByABqQQQQ0QkQuQgLAkAgAC4BACAGLgFQTA0AIAYgBikDUDcDSCAGQcgAaiAALgEAEIsCIAAuAQYgBi4BVkgEQCAGQcgAaiAALgEGEJsCCyAALgECIAYuAVJKBEAgBkHIAGogAC4BAhCpAgsgBiAGKQNIIgg3AzggBiAINwMQIAZBEGogASADIAQQlghBAUgNACACIAMgASAEIAZByABqEOMNIAUgBkHIAGpBBBDRCRC5CAsCQCAALgEEIAYuAVRODQAgBiAGKQNQNwNIIAZByABqIAAuAQQQjAIgAC4BBiAGLgFWSARAIAZByABqIAAuAQYQmwILIAAuAQIgBi4BUkoEQCAGQcgAaiAALgECEKkCCyAGIAYpA0giCDcDMCAGIAg3AwggBkEIaiABIAMgBBCWCEEBSA0AIAIgAyABIAQgBkHIAGoQ4w0gBSAGQcgAakEEENEJELkICwJAIAAuAQIgBi4BUkwNACAGIAYpA1A3A0ggBkHIAGogAC4BAhCbAiAGIAYpA0giCDcDKCAGIAg3AwAgBiABIAMgBBCWCEEBSA0AIAIgAyABIAQgBkHIAGoQ4w0gBSAGQcgAakEEENEJELkICyAHENAJIAUQ8wEiB0UNACAHELUDED0LIAUQZCAFEKYCRQ0ACyAGQfAAaiQAC3UBA38jAEHwAGsiAiQAIABFBEAgAkEIakEAEHAiARCiASABEJMBIgAEQANAAkAgACgCMEEDRw0AIAAQTCIDEFVB5ABOBEAgAxBOQeMASg0BCyABEK8DIAAQlQgLIAEQkwEiAA0ACwsgARBuGgsgAkHwAGokAAu0AQECfyMAQYABayIFJAAgBUEYaiABEHAiBCAAEOUBIAQQvQEiAQRAA0ACQCAAIAMgARCBGkUNACABKAIwQX1qQQFNBEAgBBCvAyABEJUIDAELIAFBARCTBCABQQAQiQUgARCSBQsgBBC9ASIBDQALCyAFIAIQcSIBEEEgARA8RQRAA0AgACADIAEoAggQgRoEQCABEPMBEJUICyABEGQgARA8RQ0ACwsgBBBuGiAFQYABaiQAC7MEAQd/IwBBIGsiBCQAIAQgAygCACIJEEwpAQA3AxhB5JstKAIAQQJOBEBBtvYHQQAQOyAEQRhqEIABQdKOCEEAEDsgABCAAQsgASAAEOUBAn9BACABEL0BIgVFDQAaA0BB5JstKAIAQQJOBEBB16YIQQAQOyAFEMQBAn9Bkb4IIARBGGogBRBMEMsDDQAaQYPXCCAAIAUQTBDLA0UNABpBm+wIQYaCCSAFKAI0QQRGGwtBABA7CwJAIAUoAjRBBEYNACAFKAI0QQVGDQAgBSgCMEEERg0AIAQgBRBMKQEANwMQIAAgBEEQahDLA0UNACAFKAIwRQ0AIARBGGogBEEQahDLAwRAIAEQrwMgBRCVCAwBCyAEQQA2AgwgBCAEQRBqIARBGGoQjwI2AgggBEEMaiAEQQhqEIcBKAIAIQYgBEEANgIMIAQgBEEQaiAEQRhqEP4BNgIIIARBDGogBEEIahCHASgCACIKIApsIAYgBmxqIgYgBEEQahDVAUoNACAGIARBGGoQ1QFKDQAgBSAHIAdFIAYgCEhyIgUbIQcgBiAIIAUbIQgLIAEQvQEiBQ0AC0EAIAdFDQAaIAQgBxBMKQEANwMQQeSbLSgCAEECTgRAQeuVCUEAEDsgBEEYahCAAUGBqwlBABA7IARBEGoQgAELIARBGGogBEEQahCZASADIARBGGpBAxDRCTYCACAJEJUIIAIgBxCwAyAHEJUIIAEQlANBAQshACAEQSBqJAAgAAuvAwIMfwF+IwBB0ABrIgIkACACQQA2AkwgAkFAayAAEJcBLgEAIAAQlwEuAQIgABDpAS4BACAAEOkBLgECEJACIQYgAiABKQEANwM4IAJBKGohByACQSBqIQggAkEQakEIciEJA0BBfyEFIAJBEGoQaSEDIAkQaSEKIAgQaSELIAcQaSEMIARB/wFxRQRAIAJBCGoQaRpBACACQThqIAYgACADEOQNIQULQQAhBAJAIAItAE0EQCAFIQMMAQsgAkEIahBpGkEBIAJBOGogBiAAIAoQ5A0iAyADIAUgAyAFSCIEGyAFQQBIGyEDIAVBH3YgBHIhBAsgAi0ATkUEQCACQQhqEGkaQQIgAkE4aiAGIAAgCxDkDSIFIAMgA0EASCAFIANIciIFGyEDQQIgBCAFGyEECyACLQBPRQRAIAJBCGoQaRpBA0EDIARBAyACQThqIAYgACAMEOQNIANIGyADQQBIGyEECyACQcwAaiAEckEBOgAAIAIgAkEQaiAEQQN0aikDACIONwM4IA1BAWoiDUEERwRAIAItAEwhBAwBCwsgASAONwEAIAJB0ABqJAAL4gICA38BfiMAQUBqIgYkACAAQQMQ0QkhByAGQShqIAUQcSIIIAcQrwIgBCAAEOUBA0AgBBC9ASIHBEAgBiAHEEwpAQA3AyACQAJAIAZBIGogABDLA0UNACAHKAI0QQNIDQAgCBCpAyAIEFkNAQNAIAgQ8wEiBxDQCSAHBEAgBxC1AxA9CyAIEGQgCBBZRQ0ACwwBCyAHKAI0QQRHDQAgBkEYaiAGQSBqIAAQhgQgBiAGKQMYIgk3AxAgBiAJNwMIAkAgBkEIaiAAIAIgAxCWCEEBdCAGQSBqENUBTgRAIAAgBkEgahDLAw0BCwJ/IAcoAjBBBkYEQCAGQSBqEFUMAQsgBkEgahBOCyEHIAZBIGogB0ECbUEQdEEQdSIHIAYuASZqEJsCIAZBIGogBi4BIiAHaxCpAiAGQSBqIAAgASACIAMgBRC9MgwBCyAHQQUQkwQLIAUQTUUNAQsLIAZBQGskAAveAQICfwJ9IwBBEGsiBCQAAkAgACABEPgPIgVFDQAgBEEANgIMIAAgASAEQQxqEOAVIQYgBCoCDCIHQwAAAABcBEAgACAFIAcgASoCoAIgASACIAMQwhFFDQEgACABEPgPIgVBAUgNASAAIAEgBEEIahDgFSEGIAEqAqACu0QAAAAAAADgP6IgBrtlQQFzDQEgACAFIAQqAgwgBiABIAIgAxDCERoMAQsgASoCoAK7RAAAAAAAAOA/oiAGu2VBAXMNACAAIAVDAAAAACAGIAEgAiADEMIRGgsgBEEQaiQAC6gBAQN/IwBB8ABrIgIkACACQQhqIAAQcCEDIAIgASkBADcDACACQQRBBBD9BCADIAIQ5QECfwJAIAMQvQEiAARAA0ACQCAAKAI0QQNHBEAgACgCNEEERw0BC0EBIAEgABBMEM4CDQQaQQEhBCADEL0BIgANAQwDCyADEL0BIgANAAtBACAEDQIaCyABIAIpAwA3AQALQQALIQAgAxBuGiACQfAAaiQAIAALmAEBA38jAEEgayIEJAACQCADRQ0AIAMQhgEhBiAEQQhqIAIQcSICEFkNAANAIAQgAhDzASIFEEwpAQA3AwAgBSgCMEF9akECT0EAIAEgBBDEMhtFBEAgBCAAEO4CIAMgBC4BACAGIAQuAQZrIAQQVSAEEE5BD0EAQQBBABCsAQsgBRCVCCACEGQgAhBZRQ0ACwsgBEEgaiQAC4gBAQZ/IwBBkAFrIgMkACADQfAAaiADQYgBahBJIgYQcSEHIANBCGogARBwIgQQogEgBBCTASIFBEADQCAFKAIwIghBBEtBASAIdEEZcUVyRQRAIAcgBRCvAiAEEK8DCyAEEJMBIgUNAAsLIAAgASAGIAIQxTIgBBBuGiAGENgDGiADQZABaiQAC8AEAQd/IwBBMGsiBCQAIAJBADYCACADQQA2AgAgAUVB5JstKAIARXJFBEAgASAAQdCABBCuBAsgAiAAIAMQmwciADYCAAJAIABFDQAgAygCACIARQ0AIAAQvAQiCUEBSA0AQQAhACABBEADQCAEIAMoAgAgAEECEJ8DNgIcQeSbLSgCAARAIAEgBCgCHEGxqAQQrgQLIAQoAhwgBEEsaiAEQSRqIARBKGogBEEgahCHGgRAIAQoAiggBCgCLCIFayIGIAQoAiAgBCgCJCIHayIIQQEQtAEiChDsCiAEQRxqEEsgAygCACAAIAoQlA0gBCADKAIAIABBAhCfAzYCHCACKAIAIAAgBEEYaiAEQRRqIARBEGogBEEMahCJCCAFIAQoAhhqIAcgBCgCFGogBiAIEJcCIQUgAigCACAAIAUQ6BALIARBHGoQSyAAQQFqIgAgCUcNAAwCAAsACwNAIAQgAygCACAAQQIQnwM2AhxB5JstKAIAGiAEKAIcIARBLGogBEEkaiAEQShqIARBIGoQhxoEQCAEKAIoIAQoAiwiAWsiBSAEKAIgIAQoAiQiBmsiB0EBELQBIggQ7AogBEEcahBLIAMoAgAgACAIEJQNIAQgAygCACAAQQIQnwM2AhwgAigCACAAIARBGGogBEEUaiAEQRBqIARBDGoQiQggASAEKAIYaiAGIAQoAhRqIAUgBxCXAiEBIAIoAgAgACABEOgQCyAEQRxqEEsgAEEBaiIAIAlHDQALCyAEQTBqJAALCABB2JstEHQLxAsDCn8BfgF8IwBB4ABrIgIkACACQcgAahBJIQQgAkFAaxBpIQcgAkE4ahBpIQggAkEoakEAQYABEJgBIQkgAEGBgAI7AQQgAEEANgIIIABBADoADiAAQYCA/P8HNgIAIAJBEGogARDNARBxIgMQQSADEDxFBEADQAJAIAMoAggiARChARBNDQAgACAALwEAQQFqOwEAIAkCfyABKgIsu0QAAAAAAADgP6CcIg2ZRAAAAAAAAOBBYwRAIA2qDAELQYCAgIB4C0EBEHMgBCABEKEBEHwgBCgCCBBCLgEAIQEgBEF/EKsCEEIuAQQhBiAALgECIAFKBEAgACABOwECCyAALgEEIAZODQAgACAGOwEECyADEGQgAxA8RQ0ACwsCQAJAIAAuAQBBA04EQCAALgECIAAuAQRIDQELIABCADcCACAAQQA7AQwMAQsgAAJ/IAkQ2wFEAAAAAAAA4D+gnCINmUQAAAAAAADgQWMEQCANqgwBC0GAgICAeAtBAm0iATsBBiAAIAAuAQQgAC4BAmsgAUEQdEEQdW0iATsBDCAAQX8gAUEQdEEQdSIGQQFqIgEgAWoiBSAFIAFJGxA/IgU2AghBACEBIAZBAE4EQANAIAUgAUEQdCIBQRB1QQF0akEAOwEAIAFBgIAEakEQdSIBIAZMDQALCyADEEEgAxA8RQRAA0ACQCADKAIIIgYQoQEQTQ0AIAQgBhChARB8IAQQQSACQQhqIAQQwQIgAiACKQMIIgw3A0AgAiAMNwM4AkBBmpstLQAARQ0AQcCbLSsDACENIAcuAQAgAC8BAmtBEHRBEHUiAUEDSA0AIA0gBioCLLuiIAG3Y0EBcw0AIAAuAQwiASAHLgEAIAAuAQJrIAAuAQZtIgUgBUEQdEEQdSABShtBEHRBEHUiBUEASA0AIAAoAgghCkEAIQEDQCAKIAFBEHQiAUEQdUEBdGoiCyALLwEAQQFqOwEAIAFBgIAEakEQdSIBIAVMDQALCyAEEDxFBEADQCACQQhqIAQQwQIgAiACKQMINwNAQcCbLSsDACENAkAgBy4BACAILgEEa0EQdEEQdSIBQQNIDQAgDSAGKgIsu6IgAbdjQQFzDQAgAC4BDCIBIAcuAQAgAC4BAmsgAC4BBm0iBSAFQRB0QRB1IAFKG0EQdEEQdSIFIAguAQQgAC4BAmsgAC4BBm0iAUEQdEEQdUgNACAAKAIIIQoDQCAKIAFBEHQiAUEQdUEBdGoiCyALLwEAQQFqOwEAIAFBgIAEakEQdSIBIAVMDQALCyACIAIpA0A3AzggBBA8RQ0ACwtBmpstLQAARQ0AQcCbLSsDACENIAAvAQQgCC4BBGtBEHRBEHUiAUEDSA0AIA0gBioCLLuiIAG3Y0EBcw0AQQAgCC4BBCAALgECayAALgEGbSIBIAFBgIACcRtBEHRBEHUiASAALgEMSg0AIAAoAgghBgNAIAYgAUEQdCIBQRB1QQF0aiIFIAUvAQBBAWo7AQAgAUGAgARqQRB1IgEgAC4BDEwNAAsLIAMQZCADEDxFDQALC0EAIQEgAC4BDEEATgRAA0ACQCABQQF0IgQgACgCCGouAQAgAC4BAEECbUEQdEEQdUwNAAJAQaqbLS0AAEUNAAJAIAFB//8DcSIHRQRAIAAoAggiAy4BAiAALgEAQQJtQRB0QRB1TA0BCyAHIAAvAQwiCEYEQCAEIAAoAggiA2pBfmouAQAgAC4BAEECbUEQdEEQdUwNAQsgAUEQdEEQdSIDQQFIIAMgCEEQdEEQdU5yDQEgBCAAKAIIIgNqIgdBfmouAQAgAC4BAEECbUEQdEEQdSIISg0BIAcuAQIgCEoNAQsgAyAEakEAOwEADAELIABBAToADgsgAUEQdEGAgARqQRB1IgEgAC4BDEwNAAsLQYqbLS0AAEUNACAALQAORQ0AQajJBUEAEDsLIAkQhQEaIAJB4ABqJAAgAAsIAEGwmy0QUgsIAEGgmy0QTwsIAEGQmy0QTwsIAEGAmy0QTwtHAQJ/IAAQ1AEaIABBBGoQbyEDIABBCGoQbyEEIAAgATYCFCAAIAI7ARggAyABKAIENgIAIAQgASgCCDYCACAAQgA3AgwgAAuBAwEDfyMAQRBrIgckACAAENQBGiAAQQRqEG8hBiAAQQhqEG8hCCAGIAEoAQA2AgAgCCACKAEANgIAIAEuAQIhAiAAIAUgBGsiATYCECAAIAI7ARggAUF/TARAIAAgAy4BECAAKAIQaiIBNgIQCyAAIAFBAEwEfyAHQbMENgIEIAdBhagENgIAQeCfLEHzkQZBAkG8gAQgBxBFIAAoAhAFIAELED82AgwCQCAFIARKBEAgBCEBA0AgAyABEI8DIQIgACgCDCABIARraiACOgAAIAFBAWoiASAFRw0ACwwBCwJ/IAQgAy4BECICIARMDQAaIAQhAQNAIAMgARCPAyEGIAAoAgwgASAEa2ogBjoAACABQQFqIgEgAkcNAAsgAgshASAFQQFIDQAgASACIAVqIgVODQADQCADIAEgAmsQjwMhBiAAKAIMIAEgBGtqIAY6AAAgAUEBaiIBIAVHDQALCyAAQQA2AhQgABDFESIBBEAgARDXCBA9CyAHQRBqJAAgAAuEAgEEfyMAQSBrIgIkACAAKAIMIQQCQAJAAkAgASAAKAIUIgVGBEAgBEUEQCABEMURIQMMAgsgABDFESEDDAELIAEoAgwhAwJAIARFBEAgAwR/IAUFIAJBxAU2AgQgAkGFqAQ2AgBB4J8sQdfQBkECQbyABCACEEUgACgCFAsgARCKGgwBCyADBEAgAkHIBTYCFCACQYWoBDYCEEHgnyxBte4GQQJBvIAEIAJBEGoQRQsgASgCFCAAEIoaCyABKAIUIAAoAhQ2AhQgACgCFCABKAIUNgIUQQAhAyAAIQQgASEADAELIAEiBEUNAQsgBBCFARA9CyAAEIUBED0gAkEgaiQAIAMLIAAgAEEEaiIAEE1FBEAgABClEQsgACABQQRqQQYQ2wULygEBBX8jAEHwAGsiBSQAIAVB6ABqEEkhBiAFQdAAaiADEEAhByAFQThqIAQQQCEDIAVBIGogBhBAIQggBUEIahBJIQQgAxBZRQRAIAMQWUUEQANAIAMQiAEhCSADEEQaIAkgASACIAcgCBCPGiADEFlFDQALCyADIAYQ7gULIAAEQCAEIAAQXhB8IAQQQSAEEDxFBEADQCAEEIgBIAEgAiAHIAMQjxogBBBEGiAEEDxFDQALCyAAENQCED0LIAYQ1wMaIAVB8ABqJAALiQsDFH8BfQF8IwBB0AFrIgEkACABQcgBahBJIQ0gAUHAAWoQSSEPIAFBoAFqIAFBuAFqEEkiEBBAIREgAUGAAWogAUGYAWoQSSITEHEhCSABQegAaiAAQdQAahBxIQogAUHQAGogABChARBAIQMgAUE4aiAAQdgAaiIGEEAhBSABQQA6AM8BIAECf0H//wEgChBZDQAaIAFBMGogCigCCBDHASABLgEwCyIOOwHMAQJAIAMQWQ0AIAMoAggQQi4BABoCQCAFEFlFBEAgBhCeAkUNAQtBwPQCQQAQOyADKAIIEEIuAQAhACABIAMoAggQQi4BAjYCBCABIAA2AgBBt6IDIAEQOwwBCwJAIAUQWUUEQCAGEJ4CRQ0BCyABQeEANgIkIAFBhagENgIgQeCfLEHw0gNBAkG8gAQgAUEgahBFCyABIAUoAgguAQQiBzsBMCAOIAUoAgguAQRIBEADQCAKIAFBzAFqIAFBMGogAUHPAWogACoCFCAJEMcRIQsgAS4BzAEiDiAFKAIILgEESA0ACyABLgEwIQcLIAUQQSAHQRB0QRB1IAUoAgguAQROBEAgBRBEGgsCQCAFEDwEQEEBIQYMAQtBgYB+IRJBASEGA0AgBSgCCC4BBCEEAkAgAxBZDQADQCADKAIIEEIuAQAgBEoNASASIAMoAggQQi4BBEgEQCADKAIIEEIuAQQhEgsgAxCIASAEQcyaLSgCALJDAAAAP5IgDSAPEJcLIAMQRBoCQCADEFkNAANAIAMoAggoAgQNASADEIgBIgIEQCACEPIEED0LIAMQRBogAxBZRQ0ACwsgAxBZRQ0ACwsCQCAPEE0NACANEE1FDQBBACAEQcyaLSgCALJDAAAAP5IgDSAPEJcLCwJAIA0QTUUEQEEIED8iAiANEI0KGiARIAIQjwEMAQsCQCAOQRB0QRB1IgIgBEgEQEEAIQggAiAHQRB0QRB1IgxMDQEgAiAMa7IgACoCFJW7RAAAAAAAAOA/oJwiFkQAAAAAAADwQWMgFkQAAAAAAAAAAGZxRQ0BIBarIQgMAQtBACEIIAQgB0EQdEEQdSICTA0AIAQgAmuyIAAqAhSVu0QAAAAAAADgP6CcIhZEAAAAAAAA8EFjIBZEAAAAAAAAAABmcQRAIBarIQgLCyAREFkhAiABLQDPASEMAkAgAkUEQAJAIAtFIAxyDQBBACEMIAtBCRCjAQ0AQQEhDCABQQE6AM8BC0EAIQJBHBA/IhQgECAMEMQHIQsgESAQEHwgC0EIQQEQ3wEgCSAUEK8CIAZBAXFFDQEgC0EDQQEQ3wEMAQsgCCAMaiEIIAYhAgsgASAIOgDPASAOQRB0QRB1IARIBEADQCAKIAFBzAFqIAFBMGogAUHPAWogACoCFCAJEMcRIQsgAS4BzAEiDiAESA0ACyABLgEwIQcLIAIhBgsgB0EQdEEQdSAESARAIAEgBDsBMCAEIQcLIAUQRBogBRA8RQ0ACwsCQCAREFlFBEBBHBA/IgIgECABLQDPARDEByIEQQhBARDfASAJIAIQrwIgBkEBcUUNASAEQQNBARDfAQwBCyALDQAgAUGvATYCFCABQYWoBDYCEEHgnyxB1dEEQQJBvIAEIAFBEGoQRQsgChBZRQRAA0AgCiABQcwBaiABQTBqIAFBzwFqIAAqAhQgCRDHERogChBZRQ0ACwsgCSgCCEEEQQEQ3wFBwAAQPyEGAn8gACoCUCIVi0MAAABPXQRAIBWoDAELQYCAgIB4CyECIAkgBiAAAn8gACoCTCIVi0MAAABPXQRAIBWoDAELQYCAgIB4CyACEPELIggQywIQtwMgCSATEKQFIAgQ8AsLIBMQ3gggEBDrAiAPENcDGiANENcDGiABQdABaiQAIAgLEQAgAARAIAAQhQEaIAAQPQsLCABB2JotEFILCABBwJotEHQLigIBA38jAEEQayIDJAACQAJAIABFDQAgABBqIQIgAUUNACACQSBGDQELIANBITYCBCADQdOhATYCAEHcnyxB+iVBAkGd5QAgAxBFCyABEEIhAiAAEIYBIQQgAyACLgEAIAQgAi4BBmsgAhBVIAIQThCXAiICNgIMAkAgASgCMEF/aiIBQQNNBEACQAJAAkACQCABQQFrDgMBAAMCCyAAIAJBBUH/AUEAQQAQ3gQMBAsgACACQQVBAEH/AUH/ARDeBAwDCyAAIAJBBUEAQf8BQQAQ3gQMAgsgACACQQVBAEH/AUEAEN4EDAELIAAgAkEFQf8BQf8BQQAQ3gQLIANBDGoQ4QEgA0EQaiQAC48CAQd/IwBBEGsiBiQAIAZBDGogACgCACIDLgEAIAMuAQIQiwEaIAIgBigCDCIENgEAIAEgBDYBACADLgEAIQcgAyEEA0AgAygCDCIDLgEAIQUgAy4BACEIAkAgBSABLgEASARAIAEgCBDqAQwBCyAIIAIuAQBMDQAgAiADLgEAEOoBCyADLgECIQUCQCADLgECIAEuAQJIBEAgASAFEO8BDAELAkAgBSACLgECSgRAIAMuAQAhByACIAMuAQIQ7wEMAQsgAy4BAiACLgECRw0BIAMuAQAgB04NASADLgEAIQcLIAMhBAsgCUEBaiEJIAMgACgCAEcNAAsgACAENgIAIAZBEGokACAJQRB0QRB1C/wBAQZ/IwBBEGsiBCQAIARB3yU2AgggACgCCCwABiEBIAAhAwNAIAIhBiADLAAGIgIgAUcEQCACIAFrIgFBfGogAUEEaiABIAFBfkgbIAFBAkobIAVqIQUgAiEBCyADKAIMIQMgBkH+/ABNBEAgBkEBaiECIAAgA0cNAQsLQQQhAQJAAkACQCAFQQRqIgJBCEsNAAJAIAJBAWsOBwEBAQEBAQEACyAGQQdJDQAgACADRg0BCyAAIANHDQFBCCEBIAZBB0kNASAEIAU2AgAgBEEIakGM5QBBAEHHoQEgBBBFQQUhAQwBC0EHQQMgBUEASBshAQsgBEEQaiQAIAELkgEBBH8jAEEgayICJAAgAiAANgIcIAJBGGoQbyEDIAJBFGoQbyEEIAAQ2TJBBHJBB0YEQCACQRxqIAMgBBDYMiEDQSAQPyEAIAIgAigCGCIENgIQIAIgAigCFCIFNgIMIAIgBDYCCCACIAU2AgQgACACKAIcIAJBCGogAkEEaiADEMgTIAEgABCPAQsgAkEgaiQAC08BAX8CQCAAIAAoAhAQYRBNRQ0AA0AgACgCECIBIAAuAQYgAC4BBGxBf2pODQEgACABQQFqIgE2AhAgACABEGEQTQ0ACwsgACAAKAIQEGELXAEDfyABKAIIIQNBpJktKAIAIQICQAJ/QbqYLS0AAARAIAAgAyACQQAQkxoMAQsgACADIAIQyBELIgJBpJktKAIASg0AQQEhBCACQQFIDQAgACADIAEQ4DILIAQLUwEBfyAAQQA2AhACQCAAQQAQYRBNRQ0AA0AgACgCECIBIAAuAQYgAC4BBGxBf2pODQEgACABQQFqIgE2AhAgACABEGEQTQ0ACwsgACAAKAIQEGEL5wEBBn8jAEGAAWsiAiQAIAJB4ABqIAJB+ABqEEkiBBBAIQUgAkHIAGogARDdMhBAIQMgAkEwahBJIQYgAkEYaiAAEJwPEEAhByACIAAQkBoQQCEAIAMQWUUEQANAIAUgBBB8A0AgAiACKQBXNwA/IAIgAikDUDcDOCACIAIpA0g3AzADQAJAIAMQRBogAxCkAQ0AIAYoAgggAygCCBDSB0UNAQsLIAMQpAFFDQALIAUgBhCIARCPASABIAUQ3DIgBCAHIAAQwDkgAyABENsyEHwgAxBZRQ0ACwsgBBDXAxogAkGAAWokAAt3AQR/IwBBQGoiAiQAIAJBOGoQaSEDIAJBIGogABBAIQAgAkEIahBJIQQgABBBIAAQPEUEQANAIAIgABCIASIFEF4pAQA3AzggBCABIAMuAQAgAy4BAhDhMhB8IAQgBRClASAAEEQaIAAQPEUNAAsLIAJBQGskAAuTAgEJfyMAQSBrIgYkACAGQRhqEGkhAyAGEEkhBCAGIAEQXikBADcDGCADLgEAIAAuAQhrQRBtIQcgAy4BBCAALgEIa0EQbSEIAkAgAy4BBiAALgEKa0EQbSIJIAMuAQIgAC4BCmtBEG0iBUgNACAIIAdIBEADQCAJIAVBAWoiBUEQdEEQdU4NAAwCAAsACyAFIQoDQCAHIgMhCwNAIAQgACAFIAAuAQRsIANqEGEQfCAEEEEgBBA8RQRAA0AgBCgCCCABENIHBEAgAiAEEIgBEI8BCyAEEEQaIAQQPEUNAAsLIAggC0EBaiILQRB0QRB1IgNODQALIAkgCkEBaiIKQRB0QRB1IgVODQALCyAGQSBqJAALKAAgACAALgEEIAIgAEEIaiICLgECa0EQbWwgASACLgEAa0EQbWoQYQvSAQECfyAAELQRIQQgACABKAEANgIIIAAgAigBADYCDCAAIAIuAQAgAS4BAGtBEG1BAWo7AQQgACACLgECIAEuAQJrQRBtQQFqIgE7AQZBf0F/IAAuAQQgAUEQdEEQdWwiAkECdCIDQQRqIgEgASADSRsgAkH/////A3EgAkcbED8iASACNgIAIAFBBGohASACBEAgASADaiEDIAEhAgNAIAIQSUEEaiICIANHDQALCyAEKAIAIQIgBCABNgIAIAIEQCAEIAIQlBoLIABBADYCECAACwgAQZiaLRBSCwgAQfCZLRBSCwgAQdiZLRB0CwgAQcCZLRB0CwgAQbCZLRBPCwgAQZiZLRB0CwgAQYCZLRB0CwgAQfCYLRBPCwgAQdiYLRB0CwgAQcCYLRB0CwgAQbCYLRBPCwgAQaCYLRBPC5EDAQR/IwBB4ABrIgIkACAAKAIYRQRAIAJB5wI2AhQgAkH80QM2AhBB2J8sQeX1B0ECQYmiAyACQRBqEEULQYSYLSgCAEEBTgRAQbiOCEEAEDsgACgCGBCSHiACIAEQmgI2AgBBwqYIIAIQOwsgAkHYAGoQSSEEIAAoAhggAQJ/QZqYLS0AAARAIAQgACgCFA0BGgtBAAsQtjpBhJgtKAIAQQFOBEBB5r0IQQAQOyAAKAIYEJIeCwJAQZqYLS0AAEUNACAAKAIURQ0AIAJBQGsgBBBAIgMQQSADEDxFBEADQCACQShqIAMoAggQuAEgAiAAIAJBKGoQlRoiBTYCGCAAKAIUIAVBAUH/AUEAQf8BEN4EIAJBGGoQ4QEgAxBEGiADEDxFDQALCyACQShqIAEQQCIBEEEgARA8DQADQCACQRhqIAEoAggQuAEgAiAAIAJBGGoQlRoiAzYCJCAAKAIUIANBA0EAQf8AQQAQ3gQgAkEkahDhASABEEQaIAEQPEUNAAsLIAQQ6wIgAkHgAGokAAtkAQR/AkAgACgCBCIFQQFIBEAMAQsgACgCACEEA0AgAyACIAQgA0ECdGooAgAgBCACQQJ0aigCAEobIQIgA0EBaiIDIAVHDQALCyABBEAgASAAKAIAIAJBAnRqKAIANgIACyACC80BAQN/IwBBEGsiAiQAIAAQ5Q0gAiABQQAQ1RAiBDYCDCAAIAQQmgQiAzYCBCAAQX8gA0ECdCADIANB/////wNxRxsQPzYCAEEBIQECQCADQQFIDQAgAkEANgIIIARBACACQQhqEJkEIAAoAgAgAigCCDYCACAAKAIEQQFMDQADQCACKAIMIQMgAkEANgIIIAMgASACQQhqEJkEIAAoAgAgAUECdGogAigCCDYCACABQQFqIgEgACgCBEgNAAsLIAJBDGoQxQMgAkEQaiQAC9QBAQd/IAAQ5Q0gARCpASECIAEQhgEhBUF/IAJBAnQiBCACIAJB/////wNxRxsQPyEDIAAgAjYCBCAAIAM2AgAgARBnIQYgARBjIQcCQCACQQFIDQBBACEDIAAoAgBBACAEEGUaIAVBAUgNAANAIAcgAyAGbEECdGohBEEAIQEDQCAEIAFBA3ZB/P///wFxaigCACABQX9zQR9xdkEBcQRAIAAoAgAgAUECdGoiCCAIKAIAQQFqNgIACyABQQFqIgEgAkcNAAsgA0EBaiIDIAVHDQALCwveAQEGfyMAQRBrIgYkACAGQQhqENIBIgggABDxMiAGQQA2AgQgCCAGQQRqEPAyIQcgBigCBEHGAGxB5ABtIQkgByEEAkAgB0EBSA0AA0AgCCgCACAEQQJ0aigCACAJSA0BIARBAUohBSAEQX9qIQQgBQ0AC0EAIQQLIAchBQJAIAcgABCGAU4NAANAIAgoAgAgBUECdGooAgAgCUgNASAFQQFqIgUgABCGAUgNAAsLIAEEQCABIAQ2AgALIAIEQCACIAU2AgALIAMEQCADIAc2AgALIAgQ5Q0gBkEQaiQAC/wDAwZ/A30BfCMAQUBqIgIkAAJAIAAoAhhFBEAgACgCHCEDDAELQX8hAyACQThqIAEuAQAgACgCBBCGASABKAIEayABKAIMQX9zakEQdEEQdSABKAIIIAEoAgBqQRB0QRB1IAAoAgQQhgEgASgCBEF/c2pBEHRBEHUQkAIhASACQSBqIAAoAhgQQCIEEEEgBBA8DQADQAJAIAJBCGogBCgCCBCVAhBAIQYgAkEIahBBIAJBCGoQPEUEQANAIAIgBigCCCIAELkDIAIgARCZAwRAIAAgAS4BACABLgEEardEAAAAAAAA4D+itiIIENUEIQkCfyAIIAAqAhRDAAAAP5STIgqLQwAAAE9dBEAgCqgMAQtBgICAgHgLIQUCfyAAKgIUQwAAAD+UIAiSIgiLQwAAAE9dBEAgCKgMAQtBgICAgHgLIQcgASACIAUCfyAJu0QAAAAAAADgP6AiC5lEAAAAAAAA4EFjBEAgC6oMAQtBgICAgHgLIgVBEHRBEHUgBwJ/IAAqAhQgBbKSIgiLQwAAAE9dBEAgCKgMAQtBgICAgHgLQRB0QRB1EJACEJkDDQMLIAYQRBogAkEIahA8RQ0ACwsgBBBEGiAEEDxFDQEMAgsLIAAqAhQiCItDAAAAT10EQCAIqCEDDAELQYCAgIB4IQMLIAJBQGskACADCwkAIAAQyhEQPQsJACAAIAEQswwLLgAgAEEAOgAgIABBfzYCHCAAQgA3AgQgAEIANwIUIABCADcCDCAAQaDpLDYCAAsIAEGQmC0QTwsIAEH4ly0QdAuVAQEDfyMAQSBrIgUkACAFQQhqIABBBGoQcSIAEEEgABA8RQRAA0AgASAAKAIIIgYQmRogASgCAGo2AgAgAiACKAIAQQFqNgIAIAAQjQFFBEAgAEEBEIIDIQcgAyAGIAYoAkQgBygCQBCXCCADKAIAajYCACAEIAQoAgBBAWo2AgALIAAQZCAAEDxFDQALCyAFQSBqJAALuQMBCX8jAEHgAGsiCCQAIAhBQGsgCEHYAGoQSSINEEAiBiAFEMIBIAYQ0wIgCEEoaiAFEEAhCyAIQSBqEEkhBSAIQRhqEEkhCiAIIABBBGoQcSIJEEFBACEAIAkQPEUEQANAIAkoAgghDAJAIAYQWQ0AA0AgBigCCCIHKAIEBEAgBygCBCgCRCAMKAJASg0CCyAGEIgBGiAHIAEgAiADIAQgBSAKEL4NIAcEQCAHEO8NED0LIAYQRBogBhBZRQ0ACwtBMBA/IgdBABDLESEOIAsgBxCPASAAIA4gABshAAJAAkAgBhBZDQAgBigCCCIHRQ0AIAcoAgQgDBCtM0UNACAHIAwQjQIgCyAGEIgBEI8BIAYQRBogACAFIAoQkhFBACEADAELQTAQPyIHIAwQyxEaIAsgBxCPAQsgCRBkIAkQPEUNAAsLIAYQWUUEQANAIAYQiAEiCSABIAIgAyAEIAUgChC+DSAJBEAgCRDvDRA9CyAGEEQaIAYQWUUNAAsLQTAQPyIBQQAQyxEhAiALIAEQjwEgACACIAAbIAUgChCSESAKEOAHIAUQ9QgaIA0QyRogCEHgAGokAAvZAQEFfyMAQdAAayIEJAAgBEE4aiAAQQRqEHEhACAEQSBqIAMQQCIDEJoDIAAQQSAAEDxFBEADQCAEQRxqIAAoAggiBSACEOIEQRB0QRB1IAFBEHRBEHUQiwEaIARBGGogBSABEJUFQRB0QRB1IAJBEHRBEHUQiwEaQRgQPyIFEMsNIQYgBCAEKAIcIgc2AgwgBCAEKAIYIgg2AgggBCAHNgIEIAQgCDYCACAGIARBEGogBEEEaiAEEJwDEM4GIAMgBRCPASAAEGQgABA8RQ0ACwsgBEHQAGokAAujAQEFfyMAQTBrIgIkACACQRhqIAFBBGoQcSIBEEEgARA8RQRAA0ACQCABKAIIIgMoAjAQmQhFDQAgAxD/AiEFIAIgAxDRAhBAIQYgAhBBIAIQPA0AA0AgACABKAIIEEwiAy4BACADLgEEakECbSAFEMEFRQRAIAMQVSAEaiEECyAGEGwaIAIQPEUNAAsLIAEQZCABEDxFDQALCyACQTBqJAAgBAspACAAIAEQnxogAigCCCgCQCABKAJETgRAIAIgARC5CA8LIAIgARC+HAv+BAERfyMAQUBqIgQkACACKAIAIhBBAU4EQCAAQQRqIREDQAJAIAIgCxA+KAIAIgNFDQAgBEEoaiAREHEhCSAEQShqEFkEQCAEQeYANgIEIARBjKEBNgIAQdSfLEH5JEECQYbkACAEEEULIARBKGoQQSAEQRBqIANBBGoQcSEMIARBEGoQQUGAgICAeCENIARBEGoQPA0AA0ACQCAMKAIIIgcoAjBBBUgNACAHKAJAIQUgBygCRCEIIAkoAgghAwJAIARBKGoQjQENACADKAJEIAVODQADQCADKAJEIQ0gCRBkIAkoAgghAyAEQShqEI0BDQEgAygCRCAFSA0ACwsgCCADKAJAIgZOQQAgAygCRCIKIAVOG0UEQCAAIAcQkQUgCRD+MgwBCyABIAMgBiAKEJcIIAEoAgAoAggRAwAhDiAFIA1MIAUgBk5yRQRAIAcQwwUhDyABIAMgBSAKEJcIIAEoAgAoAggRAwAhEkEAIQUgASADIA8gChCXCCABKAIAKAIIEQMAIRMCQCASIA5BAXNyRQRAQQEhBSATQQFzIA8gBk5yDQELIAMgByAFENsRIAMgARCgCwsgAygCQCEGCyAIIApMDQAgBEEoahCNAUUEQCAJQQEQggMoAkAgCEwNAQsgBxDCBSEFIAEgAyAGIAgQlwggASgCACgCCBEDACEIIAEgAyAGIAUQlwggASgCACgCCBEDACEGAkBBACAIRSAOQQFzG0UEQCADIAdBABDrDQwBCyAGQQFzIAUgCkxyDQEgAyAHQQEQ6w0LIAMgARCgCwsgDBBkIARBEGoQPEUNAAsLIAtBAWoiCyAQRw0ACwsgABDOESAEQUBrJAALPAEBfyMAQSBrIgEkACABQQhqIABBBGoQcSIAEFlFBEADQCAAEPMBGiAAEGQgABBZRQ0ACwsgAUEgaiQAC00BA38jAEEgayIBJAAgAUEIaiAAQQRqEHEiABBBIAAQPEUEQANAIAAoAggtADwhAyAAEGQgAiADaiECIAAQPEUNAAsLIAFBIGokACACC0ABAn8jAEEgayICJAAgABDUARogAEEEahBJIQMgAEEUahBpGiACQQhqIAMQcSABEK8CIAAQzhEgAkEgaiQAIAALDAAgABCeCBogABA9C9IEAQl/IwBBwAFrIgkkACABEEwhDSAJQdgAaiAAEHAiDBD6ASAMIAMQ5QEgDBC9ASIDBEAgCEEUaiEPIAhB0ABqIRADQAJAIAMQ1AkNACABIAMQwBpFIAEgA0ZyDQAgCSADEEwpAQA3A1AgAygCMCIAQQFyQQdHIhFFBEAgDSAJQdAAaiAFIAYgBBCDGkUNAQsgABCiCw0AIAkgDSAJQdAAahCPAjYCTCAJQQA2AkggCUHMAGogCUHIAGoQhwEoAgAhCiAJIA0gCUHQAGoQ/gE2AkwgCUEANgJIIAlBzABqIAlByABqEIcBKAIAIQsgCyACLgECbCACLgEAIApsaiEOIAcEQCAJIA42AjggCSALNgI0IAkgCjYCMEHu6wggCUEwahA7IAlB0ABqEIABCyAJIAMQ9wU2AkwgCUHMAGpB3JkfEJ8BKAIAIQsCQCADKAI0IgpBBEYEQCAIIA8gAEEHRiIAGyEKIAdFDQEgCSALNgIEIAlB0JUJQc+qCSAAGzYCAEHxgQkgCRA7DAELIBEgCkEBckEDR3JFBEAgCEEoQTwgAEEHRhtqIQogB0UNASAJIAs2AhBB274JIAlBEGoQOwwBCyAQIQogB0UNACAJIAs2AiBBu9EJIAlBIGoQOwsCQCAKRQ0AQQAhACALQQFIDQADQCAKIA4QXxogAEEBaiIAIAtHDQALCyAHRQ0AIAMQxAELIAwQvQEiAw0ACwsgCBDEAyAIQRRqEMQDIAhBKGoQxAMgCEE8ahDEAyAIQdAAahDEAyAMEG4aIAlBwAFqJAALwAIBAX8jAEEgayIFJAAgBSACNgIcIAMgASkBADcBACAFIAEQTjsBECAFIAEQVTsBFiAFIAVBEGogBUEWahD7AS4BADYCGCAFIAVBGGogBUEcahCHASgCAEEGbCICNgIYIAMgAiACEP0EAkAgAEEDTQRAAkACQAJAAkAgAEEBaw4DAQIDAAsgAyABLgEAEIwCIAVBEGpBAkEBEIsBGiAEIAUoAhA2AQAMBAsgAyABLgECEKkCIAVBEGpBAUECEIsBGiAEIAUoAhA2AQAMAwsgAyABLgEEEIsCIAVBEGpBAkEBEIsBGiAEIAUoAhA2AQAMAgsgAyABLgEGEJsCIAVBEGpBAUECEIsBGiAEIAUoAhA2AQAMAQsgBUHbCzYCBCAFQYinBDYCAEHQnyxBqfMKQQJB8/8DIAUQRQsgBUEgaiQAC/QJAg5/AnwjAEGQAWsiBCQAIARBKGogABBwIgwQogEgDBCTASIHBEADQAJAIAcQkwVFDQBBAiAHEEwiAS4BACABLgECENkBIQkgBEEQaiAHENEaEEAhBSAEQRBqEEECQCAEQRBqEDwNAANAIAUQZhCTBQ0BIAUQbBogBEEQahA8RQ0ACwtBACEGQQAhAAJAIARBEGoQPEUNACAEQRBqEEEgBEEQahA8DQAgCQRAA0ACQCAFEGYiAxDcAkUNACADKAJIQQZGDQAgAxBMIQJBp8gFQQAQOyABEIABQbnuBUEAEDsgAhCAASACLgEAIAEuAQBIDQAgAi4BBCABLgEESg0AIAIgARD+ASICIAYgAEUgAiAGSHIiAhshBiADIAAgAhshAAsgBRBsGiAEQRBqEDxFDQAMAgALAAsDQAJAIAUQZiICENwCRQ0AIAIoAkhBBkYNACACEEwiAy4BACABLgEASA0AIAMuAQQgAS4BBEoNACADIAEQ/gEiAyAGIABFIAMgBkhyIgMbIQYgAiAAIAMbIQALIAUQbBogBEEQahA8RQ0ACwsgBSAHENIaEEAhBSAEQRBqEEECQCAEQRBqEDwNAANAIAUQZhCTBQ0BIAUQbBogBEEQahA8RQ0ACwtBACEIAkAgBEEQahA8RQ0AIARBEGoQQSAEQRBqEDwNACAJRQRAA0ACQCAFEGYiAhDcAkUNACACKAJIQQZGDQAgAhBMIgMuAQAgAS4BAEgNACADLgEEIAEuAQRKDQAgAyABEP4BIgMgBiAARSADIAZIciIDGyEGIAIgACADGyEAQQEgCCADGyEICyAFEGwaIARBEGoQPEUNAAwCAAsACwNAAkAgBRBmIgMQ3AJFDQAgAygCSEEGRg0AIAMQTCECQafIBUEAEDsgARCAAUG57gVBABA7IAIQgAEgAi4BACABLgEASA0AIAIuAQQgAS4BBEoNACACIAEQ/gEiAiAGIABFIAIgBkhyIgIbIQYgAyAAIAIbIQBBASAIIAIbIQgLIAUQbBogBEEQahA8RQ0ACwsgAEUNACAJBEBBj5EGQQAQOyAAEEwQgAELQf//ASEKQQAhB0EAIQtBACENQQAhDkEAIQUgACEDAkAgABDcAkUEQEEAIQYgACEBQQAhAgwBCwNAIAdBAWohBiADEEwQTiEBIAMgCEEARxCdAiICRQRAIAUhAUEAIQIMAgsgASANaiENAkAgAxBMIAIQTBD+ASIBIAtKBEAgDSAGbSEOIAEhCyACIQUMAQsgASAKIAEgCkgbIQoLAkAgDrdEAAAAAAAA4D+iIAu3Ig9jQQFzRQRAIAq3IhAgEKAgD2MEQCAFIQEMBAsgB0EHSQ0BIAUhAQwDCyAHQQZNDQAgBSEBDAILIAYhByACIgMiARDcAg0ACwsCQCAJRQ0AIAQgDjYCDCAEIAo2AgggBCALNgIEIAQgBjYCAEG9swYgBBA7IAFFDQBB/M8GQQAQOyABEEwQgAELIAAgAUEAIAIbIAEgBkEISBsiAUYgBkEHSnINACAJBEADQCAAQQgQ7wMgABCSBUHB7QZBABA7IAAQTBCAASAAIAhBAEcQnQIiAEUNAiAAIAFHDQAMAgALAAsDQCAAQQgQ7wMgABCSBSAAIAhBAEcQnQIiAEUNASAAIAFHDQALCyAMEJMBIgcNAAsLIAwQbhogBEGQAWokAAtuAQN/IwBB8ABrIgMkACADQQhqIAAQcCIBEKIBIAEQkwEiAgRAA0ACQCACKAI0QQZGDQAgARCvAyACELAzBEAgACACEKUCIAEQlAMMAQsgAhC1AxA9CyABEJMBIgINAAsLIAEQbhogA0HwAGokAAtzAQJ/IwBB8ABrIgMkACADQQhqIAAQcCICEKIBIAIQkwEiAARAA0AgACgCMEEFRgRAIAIQrwMgAEEBEJMEIABBABCJBSAAEJIFIAAQ7A0gABC1AxA9CyACEJMBIgANAAsLIAEQkA8gAhBuGiADQfAAaiQAC4kEAQp/IwBBwAFrIgIkACACQagBaiABEEAhCCACQYgBaiACQaABahBJIgkQcSEKIAJBIGogABBwIgUQogEgBRCTASIDBEADQCADKAI0IQsCQAJAAkACQCADKAIwIgZBfWpBAU0EQCACQQhqIAMQ0QIQQCEBIAJBCGoQQSACQQhqEDxFBEADQCAIIAEQZhCPASABEGwaIAJBCGoQPEUNAAsLQQAhAQwBCyAGRQ0BIAJBCGogAxDRAhBAIQcgAkEIahBBQQAhASACQQhqEDxFBEADQAJAIAcQZiIEKAIoRQRAIAQoAgQQzAhFBEAgAkGEBzYCBCACQYinBDYCAEHQnyxBrfoEQQJB8/8DIAIQRQsgBEEAEJQFIAcQ6wEaQQEhAQwBCyAEIAYQiwYgBCgCLEEGRg0AIAQgCxCaBQsgBxBsGiACQQhqEDxFDQALCwsgBkUNACADENECEE1FDQELIAJBCGogAxDRAhBAIQQgAxDsDSAKIAMQgQQgBRCvAyACQQhqEEEgAkEIahA8DQEDQAJAIAQQZiIBKAIEEMwIDQAgASgCBCIDBEAgAxDUAhA9CyABRQ0AIAEQ8gQQPQsgBBBsGiACQQhqEDxFDQALDAELIAFFDQAgBRCvAyADEPkDIAAgAxClAiAFEJQDCyAFEJMBIgMNAAsLIAUQbhogCRDYAxogAkHAAWokAAv+AQEEfyMAQfAAayIFJAAgBUEIaiAAEHAiAxCiAQJ/QQAgAxCTASIARQ0AGgNAAkACQCAAKAIwIgRBBUsNAAJAIARBAWsOBQEBAQEAAgsgABDRAhCeAg0BC0EAIARBfWpBAk8gBEEHRiAAKAI0QX1qQQRJcRsNACACRQRAIAAQkQUiAkEHEIkFIAIgAkEAENsRIAIgAkEAEOsNDAELIAAoAkAgAigCQEgEQCACIABBABDbEQsgACgCRCACKAJETA0AIAIgAEEAEOsNCyADEJMBIgANAAtBACACRQ0AGiACIAEQoAtBHBA/IAIQgjMLIQAgAxBuGiAFQfAAaiQAIAALkAMBB38jAEGQAWsiBSQAQX9BfyAAKAIMIgNBAnQiAkEEaiIEIAQgAkkbIANB/////wNxIANHGxA/IgYgAzYCACAGQQRqIQQgAwRAIAIgBGohAyAEIQIDQCACEElBBGoiAiADRw0ACwsgASAAKAIMEKMEIAVBKGogABBwIgcQogECf0EAIAcQkwEiAkUNABoDQAJAAkAgAigCMCIDQQVLDQACQCADQQFrDgUBAQEBAAILIAIQ0QIQngINAQsgACACEEwiAy4BACADLgECIAVBJGogBUEgahDVAiAFQQhqIAQgBSgCIEECdGoQcRogBUEIaiACEIEEQQEhCAsgBxCTASICDQALQQAgCEUNABpBASAAKAIMQQFIDQAaQQAhAgNAIAEgBCACQQJ0aiIDEE0Ef0EABUEcED8gAxCgGgsQXxogAkEBaiICIAAoAgxIDQALIAgLIQEgBigCAEECdCIABEAgACAEaiECA0AgAkF8ahDYAyICIARHDQALCyAGED0gBxBuGiAFQZABaiQAIAFBAXELwwEBBH8jAEHwAGsiBSQAIAVBCGogABBwIgMQogEgAxCTASIABEADQAJAIAEgABBMIgRBAUEAEI0LIgJFDQAgAhD3A0UEQCABIARBAEEAEI0LIgJFDQELIAIQ9wNFDQAgACACEKozCwJAIAEgBEEBQQAQjAsiAkUNACACEI4FRQRAIAEgBEEAQQAQjAsiAkUNAQsgAhCOBUUNACAAIAIQqTMLIAAgASgCUBCgCyADEJMBIgANAAsLIAMQbhogBUHwAGokAAvRAQEGfyMAQaABayICJAAgAkGAAWogAkGYAWoQSSIGEHEhAyACQRhqIAAQcCIFEKIBA0AgBRCTASIEBEAgAyAEEK8CDAELCyACIAAoAhQiBDYCDCACIAAoAhgiBzYCCCACIAQ2AgQgAiAHNgIAIAJBEGogAkEEaiACEJwDIgQgARCYEyAAIAAoAgQgBCAEEF4Q/AMgAxCpAyADEFlFBEADQCADEPMBIgEQ+QMgACABEKUCIAMQZCADEFlFDQALCyAFEG4aIAYQ2AMaIAJBoAFqJAALswMBC38jAEHgAWsiAyQAIANByAFqIAIQQCEGIANBsAFqIAEQQCEHIANBkAFqIANBqAFqEEkiCBBxIQkgA0EoaiAAEHAiAhCiASACEJMBIgEEQANAIAkgARCvAgJAAkAgASgCMCIEEJkIRQRAIARBBUcNASABEPcFQQJIDQELIAMgARBMKQEANwMgIAEoAiwhCiABKAIgIQsgARCbMyIMRQ0AQeAAED8iBUH80AQgAy4BICADLgEiIAMuASQgAy4BJhDSCCENIAVBBGpBEBA/IANBIGpBB0EBIARBBkYbEOQOEJEDIANBCGpB4AAQPyIBIA0Q2BMQzQEQcRogA0EIaiAMEK8CIAECfyAEQQZGBEAgASAKsjgCJCABIANBIGoQVbI4AiAgAUEkaiEEIANBIGoQVQwBCyABIAuyOAIkIAEgA0EgahBOsjgCICABQSRqIQQgA0EgahBOC0EBarI4AiggASoCJEMAAAAAWwRAIARBgICA/AM2AgALIAcgBRClASAGIAEQpQEMAQsgARDQCQsgAhCTASIBDQALCyAAEPsDIAIQbhogCBDYAxogA0HgAWokAAvZAQEGfyMAQaABayIBJAAgAUGAAWogAUGYAWoQSSIFEHEhAiABQRhqIAAQcCIEEKIBA0AgBBCTASIDBEAgAiADEK8CDAELCyABQRBqQQAgABDpAS4BAGtBEHRBEHUgABCXAS4BAhCLASEDIAFBCGpBACAAEJcBLgEAa0EQdEEQdSAAEOkBLgECEIsBIQYgACAAKAIEIAMgBhD8AyACEKkDIAIQWUUEQANAIAIQ8wEiAxCvMyAAIAMQpQIgAhBkIAIQWUUNAAsLIAQQbhogBRDYAxogAUGgAWokAAuHCAEKfyMAQdAAayIGJAAgBRBMIQcgBARAQaSOCEEAEDsgBxCAAQsgBiAHEFU7AUwgBiAHEE47AUggBiAGQcwAaiAGQcgAahD7AS4BAEECdDYCTCAGIAAoAgRBAXQ2AkggBkHMAGogBkHIAGoQhwEoAgAhDwJ/IARFBEBBBUEFIABBACABIAIgA0EAIAUgBkHMAGoQqAciByAGKAJMIghB/////wdGGyAHQQVGIgobIgkgAEEBIAEgAiADQQAgBSAGQcwAahCoByILIAkgBigCTCIJQf////8HIAggChsiCEgiDBsgC0EFRiINGyIOIABBAiABIAIgA0EAIAUgBkHMAGoQqAciCiAOIAYoAkwiDiAIIAkgCCAMGyANGyIISCIJGyAKQQVGIgwbIg0gAEEDIAEgAiADQQAgBSAGQcwAahCoByIAIA0gBigCTCICIAggDiAIIAkbIAwbIgFIIggbIABBBUYiCRshAyABIAIgASAIGyAJGyEBIABBBEYiACAKQQRGIgggB0EERiIHIAtBBEYiC3FxcSECIAcgC3IgCHIgAHIMAQsgAEEAIAEgAiADQQEgBSAGQcwAahCoByEHIAZBADYCMCAGIAc2AjQgBiAGKAJMIgo2AjhBoKYIIAZBMGoQOyAAQQEgASACIANBASAFIAZBzABqEKgHIQsgBkEBNgIgIAYgCzYCJCAGIAYoAkwiCTYCKEGgpgggBkEgahA7IABBAiABIAIgA0EBIAUgBkHMAGoQqAchCCAGQQI2AhAgBiAINgIUIAYgBigCTCIMNgIYQaCmCCAGQRBqEDsgAEEDIAEgAiADQQEgBSAGQcwAahCoByEAIAZBAzYCACAGIAA2AgQgBiAGKAJMIgE2AghBoKYIIAYQO0EFQQUgByAKQf////8HRhsgB0EFRiICGyIDIAsgAyAJQf////8HIAogAhsiAkgiAxsgC0EFRiIKGyINIAggDSAMIAIgCSACIAMbIAobIgJIIgMbIAhBBUYiChsiCSAAIAkgASACIAwgAiADGyAKGyICSCIKGyAAQQVGIgkbIQMgAiABIAIgChsgCRshASAAQQRGIgAgCEEERiIIIAdBBEYiByALQQRGIgtxcXEhAiAHIAtyIAhyIAByCyEHQQAhAAJAIAEgD0oNAEEEIQEgAkF/cyAFKAI0QQRGcQ0AIAUoAjAhAiAFKAI0IQsCf0EHIAdBf3MgA0EHRnENABpBBiAHQX9zIANBBkZxDQAaQQEgCyADQQRGIgMbIQFBBSACIAMbCyICIAUoAjBGBEAgASAFKAI0Rg0BCyAFIAEQkwQgBSACEIkFIAUQkgVBASEAIARFDQBB170IQQAQOyAFEMQBCyAGQdAAaiQAIAALwwIBA38jAEEwayIDJAAgA0EYaiACEEAiAhBBQQEhBQJAIAIQPA0AAkAgAQRAA0ACQCACEGYiASAAQQAQzgkNACADIAMpAyg3AxAgAyADKQMgNwMIIAMgAykDGDcDACADEEEgAxA8DQADQAJAIAMQZiIEIAFGDQAgASAEQQAQmwgNAEHDgwpBABA7IAQQTBCAAUG+kgpBABA7IAEQTBCAAQwFCyADEGwaIAMQPEUNAAsLIAIQbBogAhA8RQ0ADAMACwALA0ACQCACEGYiASAAQQAQzgkNACADIAMpAyg3AxAgAyADKQMgNwMIIAMgAykDGDcDACADEEEgAxA8DQADQCABIAMQZiIERwRAIAEgBEEAEJsIRQ0ECyADEGwaIAMQPEUNAAsLIAIQbBogAhA8RQ0ACwwBC0EAIQULIANBMGokACAFC9IDAgd/AXwjAEHwAWsiBiQAIAAoAgQhBSABEEwhCCAGQYgBaiAAEHAiCRD6ASAJIAIQ5QECfyAFt0QAAAAAAADQP6JEAAAAAAAA4D+gIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CyEKIAkQvQEiAgRAA0ACQCABIAIgAxCbCEUNAAJAAkAgCCACEEwiCxDLAw0AIAsgCBDLAw0AIAYgCCkBADcDgAEgBkGAAWogCxCZASAGQRhqIAAQcCIHEPoBIAcgBkGAAWoQ5QECQANAIAcQvQEiBUUNASABIAVGIAIgBUZyDQAgBSABIAIgCkEAEJ8LDQAgBiAFEEwpAQA3AxAgBkEQaiAIEM4CDQAgBkEQaiALEM4CDQAgASAFQQAQmwgNACACIAVBABCbCA0ACyADRQ0CIAYgCjYCAEH4igcgBhA7IAUQTBCAAUGUpQdBABA7IAEgBUEBEJsIGkGHwQdBABA7IAIgBUEBEJsIGkGs3AdBABA7IAUgASACIApBARCfCxogBxBuGgwDCyAHEG4aCyADBEBB0/UHQQAQOyACEEwQgAELIARBFyACEMoDDAELIAcQbhoLIAkQvQEiAg0ACwsgCRBuGiAGQfABaiQAC84CAQZ/IwBBMGsiBCQAAkAgAxDUCQ0AA0AgBCADEEwpAQA3AyhBAiAELgEoIAQuASoQ2QEiBgRAQfXjAEEAEDsgBEEoahCAAQsgASADIARBKGogASgCACgCCBEEAEUNASAAIAMgBEEoaiAGIARBIGoQSSIFEJIzAkAgACADIAUgBiACIARBHGoQ0REiBUUgBCgCHCIIQQBKckUEQCAGBEAgAyAFEJoLIQYgAyAFEJ0IIQcgBCAGNgIAIAQgBzYCBCAEIAQoAhw2AghB4qABIAQQOwsgACAFELADIAAgAxCwAyADIAVBABCqB0EBIQcgACADEKUCQQEhCQwBCyAFBEBBACEHIAZFDQEgBCAINgIQQaXdASAEQRBqEDsgBRBMEIABDAELQQAhByAGRQ0AQaSXAkEAEDsLIARBIGoQ7gEaIAcNAAsLIARBMGokACAJC28BA38jAEHwAGsiBCQAIARBCGogABBwIgMQogEDQCADEJMBIgUEQCAAIAEgAiAFEJMzRQ0BIAMQlAMMAQsLIAEEQCABIAEoAgAoAgQRAAALIAIEQCACIAIoAgAoAgQRAAALIAMQbhogBEHwAGokAAuaAQIBfwF+IwBBgAFrIgMkACAAIAEgAhDGGiADQRhqIAAQcCIAEPoBIAAgASACQQEQogkgA0EQaiABsiACshCKARogABChCSIBBEADQCABEEwhAiADIAMpAxAiBDcDCCADIAQ3AwAgAiADEJ8IBEBB7iRBABA7IAEQTBCAASABEMQBCyAAEKEJIgENAAsLIAAQbhogA0GAAWokAAu+AQEDfyMAQRBrIgQkACAEIAAgAxDKCTYCDCAEIAEgAxDKCTYCCCAEQQxqIARBCGoQhwEoAgAhBSAEIAAgAxCeCzYCDCAEIAEgAxCeCzYCCCAEQQxqIARBCGoQhwEoAgAhAyABKAJ0IAAoAnRqIQYCfyACIAEoAnggACgCeGoiACAFEIcCBEBBASACIAYgAxCHAg0BGgtBACACQQF0IgIgACAFEIcCRQ0AGiACIAYgAxCHAgshASAEQRBqJAAgAQubAwEHfyMAQdAAayIDJAAgAUEBcyEIA0ACQCADQThqIAIQQCEEIANBOGoQQSADQThqEDwNAAJAAkACQCABBEADQCADQSBqIAQQZiIJQdQAahBAIQUgA0EgahBBIANBIGoQPEUEQANAIAUQZiIHIABGDQUgA0EIaiACEEAhBiADQQhqEEEgA0EIahA8RQRAA0AgBhBmIAdGDQYgBhBsGiADQQhqEDxFDQALCyAFEGwaIANBIGoQPEUNAAsLIAQQbBogA0E4ahA8RQ0ADAUACwALA0AgA0EgaiAEEGYiCUHYAGoQQCEFIANBIGoQQSADQSBqEDxFBEADQCAFEGYiByAARg0EIANBCGogAhBAIQYgA0EIahBBIANBCGoQPEUEQANAIAYQZiAHRg0FIAYQbBogA0EIahA8RQ0ACwsgBRBsGiADQSBqEDxFDQALCyAEEGwaIANBOGoQPEUNAAsMAwsgA0EIahDrARogByAIIAAQ+AMMAQsgBBDrARogCSAIIAAQ+AMLIAIQTQ0AIAIQngJFDQELCyADQdAAaiQAC30AIAAoAkggARCbCwRAIABBASACIAMQsRogAEEAIAIgAxCxGg8LAkAgAUEPRw0AIABBASAAQdQAaiIBENQRIABBACAAQdgAaiICENQRAkAgARBNDQAgARCeAg0AIABBASABENMRCyACEE0NACACEJ4CDQAgAEEAIAIQ0xELC7sBAQZ/IwBBIGsiAyQAIANBEGpBACABEJgBIQQgA0EAIAEQmAEhBSAAKAJIIQIgAEEAEJ0CIgEEQANAIAEoAkgiBiACSiEHIAAoAmAgASgCYEYEQCAEIAEoAmhBARBzIAUgASgCbEEBEHMLIAYgAiAHGyECIAFBABCdAiIBDQALCyAAIAI2AkggAEEAEJ0CIgEEQANAIAEgAjYCSCABQQAQnQIiAQ0ACwsgBRCFARogBBCFARogA0EgaiQAC10BA38jAEEwayIBJAAgABCRBSICQQAQ2hEgAUEYaiACENECEEAhAyABIAAQ0QIQQCIAEEEgABA8RQRAA0AgAyAAEGYQlwUgABBsGiAAEDxFDQALCyABQTBqJAAgAgueAQIFfwF9IwBBIGsiAyQAIANBCGogAEHQAGoQQCECIABBLEEgIAAQ7gMbaigCACEBQQAhACACEFlFBEAgAbIhBgNAIAIQ6wEiARBCLgEGIQQgARBCLgECIQUCQCAARQRAQagBED8gASAEsiAFsiAGEJIPIQAMAQsgACABIASyIAWyIAYQ2RMLIAIQbBogAhBZRQ0ACwsgA0EgaiQAIAALxgQBBn8jAEFAaiIDJAAgACgCCCIHQRBqIgguAQIhBAJAIAAQjQEEQCAEIQYMAQsgAEEBEIIDLgEWIgUhBiAFIARKDQAgBSAEIgZODQAgBSAGakECbSEGCyAILgEGGiADQf////8HNgI8IANBgYCAgHg2AjggByADQThqIANBPGoQnAsaA0ACQCAAELsDIAAoAgghBCAAEI0BDQAgBCADQThqIANBPGoQnAsNAQsLIANB/////wc2AjQgA0GBgICAeDYCMCAEIANBMGogA0E0ahCcCxogAygCNCADKAI4SARAIAMgACkCEDcDKCADIAApAgg3AyAgAyAAKQIANwMYA0ACQCADQRhqELsDIAMoAiAhBCADQRhqEI0BDQAgBCADQTBqIANBNGoQnAsNAQsLA0ACQCAAEGQgACgCCCIEIAdGDQAgBCADQTBqIANBNGoQnAsNAQsLIAAQuwMLIABBARCCAyIFEEwuAQYhBAJAIAAQjQENACAAKAIILgESIARMDQAgBCAAKAIILgESakECbSEECyABIAZBEHRBEHUQ7wEgASAFIAMoAjggBhCIBkEQdEEQdRDqASACIARBEHRBEHUQ7wEgAiAFIAMoAjggBBCIBkEQdEEQdRDqAQJAQcSVLSgCAEUNACAAEI0BDQAgAi4BACEAIAUgAygCPCAEEIgGIQEgBS4BFCECIAMgBSgCDDYCFCADIAI2AhAgAyABNgIMIAMgADYCCCADIAQ2AgQgAyAGNgIAQeTRDSADEDsLIANBQGskAAvHBAEGfyMAQUBqIgMkACAAKAIIIgdBEGoiCC4BBiEEAkAgABCmAgRAIAQhBgwBCyAAQX8QggMuARIiBSEGIAUgBEgNACAFIAQiBkwNACAFIAZqQQJtIQYLIAguAQIaIANB/////wc2AjwgA0GBgICAeDYCOCAHIANBOGogA0E8ahCdCxoDQAJAIAAQZCAAKAIIIQQgABCmAg0AIAQgA0E4aiADQTxqEJ0LDQELCyADQf////8HNgI0IANBgYCAgHg2AjAgBCADQTBqIANBNGoQnQsaIAMoAjAgAygCPEoEQCADIAApAhA3AyggAyAAKQIINwMgIAMgACkCADcDGANAAkAgA0EYahBkIAMoAiAhBCADQRhqEKYCDQAgBCADQTBqIANBNGoQnQsNAQsLA0ACQCAAELsDIAAoAggiBCAHRg0AIAQgA0EwaiADQTRqEJ0LDQELCyAAEGQLIABBfxCCAyIFQRBqIgcuAQIhBAJAIAAQpgINACAAKAIILgEWIARODQAgBCAAKAIILgEWakECbSEECyABIAZBEHRBEHUQ7wEgASAFIAMoAjwgBhCIBkEQdEEQdRDqASACIARBEHRBEHUQ7wEgAiAFIAMoAjwgBBCIBkEQdEEQdRDqAQJAQcSVLSgCAEUNACAAEKYCDQAgBSADKAI4IAQQiAYhACACLgEAIQEgBSgCCCECIAMgBy4BADYCFCADIAI2AhAgAyABNgIMIAMgADYCCCADIAQ2AgQgAyAGNgIAQfnIDSADEDsLIANBQGskAAvJAQEFfyMAQSBrIgIkACAAEE1FBEAgAiACQQhqIAAQcSIDKAIIEEwpAQA3AwAgAhBVIQQgAygCCCgCSCEFIAMQQSADEDxFBEADQCACIAMoAggQTBCZASADEGQgAxA8RQ0ACwtBxJUtKAIABEBBuMILQQAQOyACEIABC0HgABA/IgNBsLULIAIuAQAgAi4BAiACLgEEIAIuAQYQ0gghBiADQQRqQRAQPyACIAUQ5A4QkQNBASAEIAYgACABELIaIQMLIAJBIGokACADC2YBAn8gASgCACECIAAoAgBBEGoiABDJCSEBIAJBEGoiAhDJCSEDAkACQCABIAIuAQJOBEAgASACLgEGTA0BCyADIAAuAQJIDQEgAyAALgEGSg0BCyAAEKwHIAIQrAdrDwsgAyABawsJACAAIAEQjBULpQ0DCH8DfgN8IwBBoAJrIgMkACADQegBaiACEHEiBBBBIAMgBCkCEDcDmAEgAyAEKQIINwOQASADIAQpAgA3A4gBIAEgA0GIAWoQtBohAiADIAMpA/gBIgs3A+ABIAMgAykD8AEiDDcD2AEgAyADKQPoASINNwPQASADIAs3A8gBIAMgDDcDwAEgA0IANwOAAiADIA03A7gBAkAgBBA8RQRAIAMgBCgCCDYCiAIgBBBkDAELIANBADYCiAILAkAgBBA8RQRAIAMgAykA9wE3AMcBIAMgAykD8AE3A8ABIAMgAykD6AE3A7gBIAMgBCgCCDYCjAIgBBBkDAELIANBADYCjAILAkAgBBA8RQRAIAMgBCgCCDYCkAIgBBBkDAELIANBADYCkAILAkAgBBA8RQRAIAMgBCgCCDYClAIgBBBkDAELIANBADYClAILIAMoAogCIgYEQCADQYACakEEciEJIANB/AFqIQoDQAJAAkAgAygCjAIiBUUNACAGIAUgABC3Gg0BIAAgAiADQYACahDWEQ0BIAAgAiAKENYRBEAgBSACIAAQ6Q0NAgsgACACIAkQ1hFFDQAgBiACIAAQ6Q0NAQsgAyADKQPgATcDsAEgAyADKQPYATcDqAEgAyADKQPQATcDoAECQCADKAKoASICIAZGDQBEAAAAAAAAAAAhDkEAIQdEAAAAAAAAAAAhDwNAIAdBAWohByAPIAIoAni3oCEPIA4gAigCdLegIQ4gA0GgAWoQZCADKAKoASICIAZHDQALAn8gDyAHtyIPo0QAAAAAAADgP6AiEJlEAAAAAAAA4EFjBEAgEKoMAQtBgICAgHgLIQcCfyAOIA+jRAAAAAAAAOA/oCIOmUQAAAAAAADgQWMEQCAOqgwBC0GAgICAeAshCEHElS0oAgAEQEHH4QxBABA7AkAgBUUEQEHC7gxBABA7DAELQd/5DEEAEDsCQCADKAKAAiICRQRAQbSGDUEAEDtBrKUNQQAQOwwBCyACKAJ0IQUgAyACKAJ4NgKEASADIAU2AoABQbavDSADQYABahA7CwJAIAMoAoQCIgIEQCACKAJ0IQUgAyACKAJ4NgJ0IAMgBTYCcEG2rw0gA0HwAGoQOwwBC0G0hg1BABA7IAMoAoACIgIEQCACQQAQnQIEQEGMkQ1BABA7IAJBABCdAhDEAQwCC0HLmw1BABA7DAELQaylDUEAEDsLAkAgAygCiAIiAgRAIAIoAnQhBSADIAIoAng2AmQgAyAFNgJgQbavDSADQeAAahA7DAELQbSGDUEAEDsgAygChAIiAgRAIAJBABCdAgRAQYyRDUEAEDsgAkEAEJ0CEMQBDAILQcubDUEAEDsMAQtBrKUNQQAQOwsCQCADKAKMAiICBEAgAigCdCEFIAMgAigCeDYCVCADIAU2AlBBtq8NIANB0ABqEDsMAQtBtIYNQQAQOyADKAKIAiICBEAgAkEAEJ0CBEBBjJENQQAQOyACQQAQnQIQxAEMAgtBy5sNQQAQOwwBC0GspQ1BABA7CwJAIAMoApACIgIEQCACKAJ0IQUgAyACKAJ4NgJEIAMgBTYCQEG2rw0gA0FAaxA7DAELQbSGDUEAEDsgAygCjAIiAgRAIAJBABCdAgRAQYyRDUEAEDsgAkEAEJ0CEMQBDAILQcubDUEAEDsMAQtBrKUNQQAQOwsgAygClAIiAgRAIAIoAnQhBSADIAIoAng2AjQgAyAFNgIwQbavDSADQTBqEDsMAQtBtIYNQQAQOyADKAKQAiICBEAgAkEAEJ0CBEBBjJENQQAQOyACQQAQnQIQxAEMAgtBy5sNQQAQOwwBC0GspQ1BABA7CyADIAc2AiQgAyAINgIgQc+3DSADQSBqEDsLIAMgAykA3wE3AK8BIAMgAykD2AE3A6gBIAMgAykD0AE3A6ABIAMoAqgBIgIgBkYNAANAIAIgCBC4GiACIAcQ1xFBxJUtKAIABEBBqsANQQAQOyACEMQBCyADQaABahBkIAMoAqgBIgIgBkcNAAsLIAMgAykAxwE3AN8BIAMgAykDwAEiCzcD2AEgAyALNwMQIAMgAykDyAE3AxggAyADKQO4ASILNwPQASADIAs3AwggASADQQhqELQaIQILIAMpAoQCIQsgAyADKAKMAjYCiAIgAyALNwOAAiADIAMpA5ACNwKMAgJAIAQQPARAIANBADYClAIMAQsgAyAEKAIINgKUAiAEEGQLIANBuAFqEGQgAygCiAIiBg0ACwsgA0GgAmokAAurCAINfwF8IwBBwAFrIgckACABLgECIQkgAC4BAiEOIAdBqAFqIAMQcSIIEEEgCBA8RQRAIAkgDmshDANAIAgoAggiChDRAhBNBEAgB0GRCzYCVCAHQfPcATYCUEHMnyxBh9IKQQJBzqABIAdB0ABqEEULIAdB+ABqQQAgChBMEE4QmAEhDyALIAoQTBBOSARAIAoQTBBOIQsLIAdBkAFqIAoQ0QIQQCINEGYQQi4BAiEJIA0QbBogB0GQAWoQpAFFBEADQCAPIA0QZhBCLgECIg4gCWsiCSAJQR91IglqIAlzQQEQcyANEGwaIA4hCSAHQZABahCkAUUNAAsLIAoCfyAPENsBRAAAAAAAAOA/oCIUmUQAAAAAAADgQWMEQCAUqgwBC0GAgICAeAs2AnAgCgJ/IAgQjQFFBEAgCEEBEIIDIQkgCiAKKAIYIAkoAhhrENcRIAooAhwgCSgCHGsMAQsgCiAMENcRIAwLELgaQcSVLSgCAARAIAoQxAEgDxDbASEUIAooAnQhCSAHIAooAng2AkwgByAJNgJIIAcgFDkDQEHh4gogB0FAaxA7CyAPEIUBGiAIEGQgCBA8RQ0ACyACIAwgAxChMyAHQZABaiAFEEAhCiAHQfgAaiAGEEAhDyAHQdgAaiAHQfAAahBJIgYQcSEJIAgQQSAIEFlFBEAgC0EDbCEOA0AgCSAIEPMBIgMQgQQgCBBkAkACQAJAIAgQWQ0AIAMoAnggDkoNACADIAgoAgggAhC3Gg0BCwJAIAgQWQ0AIAMoAnggDkoNAEEAIQsgCCgCCCEFIAgQjQFFBEAgCEEBEIIDIQsLQcSVLSgCAARAIAMoAnQhDCADKAJ4IQ0gBSgCdCEQIAUoAnghESADKAIgIRIgBSgCICETIAcgCwR/IAsoAiAFQQALNgIYIAcgEzYCFCAHIBI2AhAgByARNgIMIAcgEDYCCCAHIA02AgQgByAMNgIAQe3yCiAHEDsLIAMgBRC2GkUNACAFKAIgrEIDfiADKAJ4rFcNACADKAIgrEIDfiADKAJ0rFcNAAJAIAtFDQAgBSALELYaRQ0AIAsoAiCsQgN+IAUoAnisVw0AIAUoAiCsQgN+IAUoAnSsVw0AIAUoAnggAygCeEwNAQsgCSAIEPMBEIEEIAgQZEHElS0oAgBFDQBB8YMLQQAQOwsgACABIAYgBBC1GiIDBEAgDyADEKUBIAogAygCGBClAQsgCSAGELcDDAELQcSVLSgCAEUNACAIEFkNACADKAJ0IQsgAygCeCEMIAgoAggiBSgCdCENIAUoAnghECADKAIgIQMgByAFKAIgNgI0IAcgAzYCMCAHIBA2AiwgByANNgIoIAcgDDYCJCAHIAs2AiBBhpULIAdBIGoQOwsgCBBZRQ0ACwsgBhDYAxoLIAdBwAFqJAAL1gMBBX8jAEHQAGsiByQAAkAgAC0AZQ0AIABBAToAZSAHQThqIAUQQCEGAkAgAEEBEJ0CIgVFDQAgBSgCXCIIBEAgACAINgJcIAggABCHGQwCC0HclS0oAgBFDQBBt/IJQQAQOyAAEMQBIAUQxAELIAYQ0wIgBhBBQQAhBQJAIAYQPA0AA0AgBSAAKAJoRg0BIAYQRBogBUEBaiEFIAYQPEUNAAsLQcSVLSgCAEECTgRAIAdBuZIKQdyiCiAFQQFxGzYCIEGygwogB0EgahA7IAAQxAELAkAgBhA8RQ0AQdyVLSgCAEUNACAAKAJoIQggByAFNgIUIAcgCDYCEEHisgogB0EQahA7CyAGEDwEQCAHQeUKNgIEIAdB89wBNgIAQcyfLEHDwwpBAkHOoAEgBxBFCyAGKAIIIQgCQCAGEDwNACAAKAJsIAAoAmhGDQAgACgCSEEIckELRg0AIAdBMGoQSSEJIAdBKGoQSSEKAkAgBhA8DQADQCAFIAAoAmxKDQEgBigCCCABIAIgAyAEIAkgChC+DSAGEEQaIAVBAWohBSAGEDxFDQALCyAIIAkgChCSESAKEOAHIAkQ9QgaCyAAIAg2AlwgCCAAEIcZCyAHQdAAaiQAC54EAQt/IwBBQGoiBCQAIARBKGogAEHQAGoQQCIFEEECQAJAIAUQPEUEQANAIAUQZiIDEO47IQcgAxDnHiELIAMoAighDCADKAIoIQMgBRBsGiAIQQFqIQggByAJaiEJIAogC2ohCiACIAxBAUZqIQIgBiADQQJGaiEGIAUQPEUNAAsgAEKFgICAIDcCMCAAQTBqIQcgAEE0aiEFIAIgBksEQCAAQQA2AjQgAEEBNgIwDAMLIAYgAk0NASAAQQA2AjQgAEECNgIwDAILIABChYCAgCA3AjAgAEEwaiEHIABBNGohBQsCQAJAIAFBAWpBA08EQCAAQRBqIQMCfyABQQFOBEBBByECIAMQVSEGIAMQTgwBC0EGIQIgAxBOIQYgAxBVCyEDIAcgAjYCACADQQVsIAZIQQJBASAIQQdLIgIbIAIgA0EKShtqIQIgASABQR91IgZqIAZzIgZBBUoNAiAGQQJKDQEgBUECNgIACyAJIAhIDQIgBUEBNgIAIAdBADYCAAwCCyAFQQRBAyACQQNGGzYCAAwBCyAFQQNBBCABQQBIG0EEIAJBAkkbNgIAC0ECIABBEGoiAi4BACACLgECENkBBEAgBCAKNgIYIAQgCTYCFCAEIAg2AhBBmr4JIARBEGoQOyAAKAI0IQIgBCAAKAIwNgIIIAQgAjYCBCAEIAE2AgBBjtEJIAQQOyAAEMQBCyAAEJIFIARBQGskAAswACAAQgA3AgwgAEEBNgIIIABCgICAgPD/////ADcDACAAQgA3AhQgAEEANgIcIAALgggCD38DfCMAQYABayIBJAAgAUHwAGpBACAAQRBqIgUQVSIEEJgBIQogAUHgAGpBACAEEJgBIQsgAUHIAGogAEHQAGoQQCIDEGYiAkECEJoFQQEhBiALIAIQQhBVQQEQcyADEGwaIAMQpAFFBEADQCADEGYiBxBCLgEAIQggBxBCLgEEIQkgCiAIIAIQQi4BBGtBARBzIAsgCSAIa0EBEHMgB0ECEJoFIAMQbBogBkEBaiEGIAchAiADEKQBRQ0ACwsgASAKENsBOQNAIAEgCxDbATkDOCABQUBrIAFBOGoQvQYrAwAhESABQUBrIAFBOGoQ4wsrAwAhEiAKRAAAAAAAAOg/EMEBIApEAAAAAAAA0D8QwQGhIRAgEUQAAAAAAADQP6IhEUHElS0oAgBBBE4EQCABIBJEAAAAAAAA4D+iOQMoIAEgETkDICABIAY2AhggASAQOQMQQcaBCSABQRBqEDsLQQAhAiAQIBFjQQFzIAZBBUlyIBAgEkQAAAAAAADgP6JjQQFzckUEQAJ/IAErA0AgASsDOKBEAAAAAAAA4D+gIhKZRAAAAAAAAOBBYwRAIBKqDAELQYCAgIB4CyINAn8gECAQoJsiEJlEAAAAAAAA4EFjBEAgEKoMAQtBgICAgHgLIg5rIghBAm0hCSAFLgEAIQVBfyAEIAhqIgRBBXQiAiAEQf///z9xIARHGxA/IQcgBARAIAIgB2ohDCAHIQIDQCACEKUzQSBqIgIgDEcNAAsLIAMQQSADEDxFBEAgCSAFayEMA0AgAxBmIgUQQi4BACECIAUQQi4BBCEJIAUQQhBOIQ8gAiAJSARAIAcgAiAMakEFdGohBQNAIAUgBSgCACAPajYCACACQQFqIgIgCUcNAAsLIAMQbBogAxA8RQ0ACwtBACECIAFBADYCNCABQf4ANgIwIAEgASkDMDcDCAJAAkACQAJAIAggDSAOaiIIIAFBCGogBCAHEIk7IgQEQCAEKAIEIAZIBEAgAxBBIAMQPA0EQQAhBgNAIAMQZiECAkACQCADEKQBRQ0AIANBARCxEBBCLgEAIAIQQi4BBGsgAhBCEFVqIAhMDQAgAxDrARpBASEGDAELIAMQjQEEQCACEEIuAQAgA0F/ELEQEEIuAQRrIAIQQhBVaiAISg0FCyACQQcQiwYgAkEGEJoFCyADEGwaIAMQPEUNAAsgBkUNBAwDC0HElS0oAgBFDQQgBCgCBCEAIAEgBjYCBCABIAA2AgBBsKoJIAEQOwwEC0HElS0oAgBFDQNBx5UJQQAQOwwDCyADEOsBGgsgABD5AwsgAEKHgICA4AA3AjBBASECCyAHED0LIAsQhQEaIAoQhQEaIAFBgAFqJAAgAgt9AQR/IwBBEGsiBSQAIAVBfzYCDCAAQRBqIgYuAQAhByAGLgEEIQggBSAGEE47AQogBSAGEFU7AQggACAAIAIgASAHIAggBUEKaiAFQQhqEPsBLgEAIAAQ/wIgACgCCCAAKAIMIAMgBCAFQQxqEJoaELkaNgJIIAVBEGokAAuHAgEEfyMAQSBrIgMkACAAQgA3ApwBIABCADcCrAEgAEIANwKkASAAQdAAaiICEE1FBEAgA0EIaiACEEAiARBBIAEQPEUEQANAIAAgARBmKAIwQQJ0aiIEIAQqApwBQwAAgD+SOAKcASABEGwaIAEQPEUNAAsLIAIQ7AEhASAAIAAqApwBIAGylTgCnAEgAhDsASEBIAAgACoCoAEgAbKVOAKgASACEOwBIQEgACAAKgKkASABspU4AqQBIAIQ7AEhASAAIAAqAqgBIAGylTgCqAEgAhDsASEBIAAgACoCrAEgAbKVOAKsASACEOwBIQIgACAAKgKwASACspU4ArABCyADQSBqJAALQAACQAJAIAFFBEAgAEEAOgA/DAELIAAgASgCGCIBNgJEIAAgASAAEMIFTiIBOgA/IAENAQsgACAAEMIFNgJECwtAAAJAAkAgAUUEQCAAQQA6AD4MAQsgACABKAIYIgE2AkAgACABIAAQwwVMIgE6AD4gAQ0BCyAAIAAQwwU2AkALC48BAQR/IwBBMGsiAiQAIAJBGGogAEHQAGoQQCEAIAIgAUHQAGoQQCEBIAAQQSABEEECQCAAEDwNAANAIAEQPA0BIAAQZiABEGZEAAAAAAAA0D9EAAAAAAAAAEAQ3hMhAyAAEGwaIAEQbBogAyAEaiEEIAUgA0EBc2ohBSAAEDxFDQALCyACQTBqJAAgBCAFSwtFAAJ/AkAgACgCMEEGRwRAIAEoAjBBBkcNAQsgAUEsaiEBIABBLGoMAQsgAUEgaiEBIABBIGoLKAIAIAEoAgAQigtBAXMLSgECfyABIAAQ/wIgARD/AmpBAm0iAhDiBEEUbSAAIAIQ4gRBFG1BARCHAgR/IAEgAhCVBUEUbSAAIAIQlQVBFG1BARCHAgVBAAsL+QEBBX8jAEEQayICJAACQAJAIABBEGoiAS4BACABLgEESgRAQdyVLSgCAEUEQEEAIQEMAwtBACEBQcPzAkEAEDsMAQsCQCAAKAIIIAEuAQBMBEAgACgCDCABLgEETg0BC0HclS0oAgBFBEBBACEBDAMLQQAhAUGtoQNBABA7DAELIAAoAkAgABDDBUwEQEEBIQEgACgCRCAAEMIFTg0CC0EAIQFB3JUtKAIARQ0BIAAoAkAhAyAAEMMFIQQgACgCRCEFIAIgABDCBTYCDCACIAU2AgggAiAENgIEIAIgAzYCAEGZ0QMgAhA7CyAAEMQBCyACQRBqJAAgAQu/AQEEfyMAQUBqIgEkACABQSBqIAFBOGoQSSIDEEAhBCABQQhqIABB0ABqEEAiAhBBIAIQPEUEQANAIAQgAhDrARCMCiACEGwaIAIQPEUNAAsLIAIgAxDCAQJAIAAtAD5FBEAgAC0AP0UNAQsgAUHJAjYCBCABQfPcATYCAEHMnyxB18YCQQJBzqABIAEQRQsgACgCDCECIABBACAAKAIIazYCDCAAQQAgAms2AgggABD5AyADEO4BGiABQUBrJAALgQEBA38jAEEgayIDJAAgA0EIaiAAQdAAahBAIgEQQSABEDxFBEADQCABEGYiAigCLEEGRwRAIAAgAigCTEYEQCACQQAQlAULIAEQ6wEaCyABEGwaIAEQPEUNAAsLQQAhAiABEFlFBEAgAEEGNgI0IAAQ+QNBASECCyADQSBqJAAgAgtSAQN/IwBBIGsiAiQAIAJBCGogAEHQAGoQQCIBEEEgARA8RQRAA0AgACABEGYiAygCTEYEQCADQQAQlAULIAEQbBogARA8RQ0ACwsgAkEgaiQAC1QBAn8jAEEgayIDJAAgA0EIaiAAQdAAahBAIgIQQQJAIAIQPA0AA0AgAhBmIAFGBEAgAhDrARogABD5AwwCCyACEGwaIAIQPEUNAAsLIANBIGokAAtfAQF/IAEoAgAhAQJAIAAoAgAiAhBCLgECIAEQQi4BAmsiAA0AIAIQQi4BBiABEEIuAQZrIgANACACEEIuAQAgARBCLgEAayIADQAgAhBCLgEEIAEQQi4BBGshAAsgAAsRACAABEAgABC1AxogABA9CwsJACAAEJ4IED0LMAEBfwJAIAFBBUYgAEEFRnJFQQAgACABRxsNACAAEKILDQAgARCiC0EBcyECCyACC60CAQZ/IAQoAgAhBiAEIAUoAgAiCDYCACAFIAg2AgAgBiAISARAA0BBACEKAkAgBiAITgRAIAYhBwwBC0EBIQogA0ECdCIJIAAgBiIHQQJ0IgZqKAIAaigCACABIAZqKAIASA0AA0AgAiAHai0AAEUNASAHQQFqIgcgCEghCiAHIAhHBEAgACAHQQJ0IgZqKAIAIAlqKAIAIAEgBmooAgBIDQIMAQsLIAghBwsCQCAHQQFqIgYgCE4NACABIAdBAnRqKAIAIQkDQCAAIAZBAnRqKAIAIANBAnRqKAIAIAlOBEAgAiAGai0AAA0CCyAGQQFqIgYgCEcNAAsgCCEGCwJAIApFDQAgBiAHayIJIAtMDQAgBCAHNgIAIAUgBjYCACAJIQsLIAYgCEgNAAsLC8gBAQV/IwBBIGsiBSQAIAVBEGpBACAAKAK4ASIHEJgBIQYgB0EBSCADIAROckUEQANAIAIgA0ECdCIAaiEIIAAgAWohCUEAIQADQCAJKAIAIABBAnRqKAIAIAgoAgBIBEAgBiAAQQEQcwsgAEEBaiIAIAdHDQALIANBAWoiAyAERw0ACwsgBigCCEEATARAIAVBpwY2AgQgBUHTjQg2AgBByJ8sQabDCkECQZr1ByAFEEULIAYQxgchACAGEIUBGiAFQSBqJAAgAAv5AgMDfwF+A30jAEHgAGsiAyQAIAMgASkDsAE3A1ggA0HQAGpDAACAP0MAAAAAEIoBIQQgAkEEaiIFKAIAKAIMQQdGBEACQCABKgKoAUMAAAAAWwRAIAMgASkDqAE3A1AMAQsgA0HIAGpDAAAAAEMAAIC/EIoBGiADIAMpA0g3A1ALIAIgBBC4EyADQcgAakMAAIA/QwAAAAAQigEaIAMgAykDSDcDWAsgAyABKQOgASIGNwMwIAMgBjcDQCAEIANBMGoQrwQgACADKQNQNwIAIAQgBCoCBIwQiAQgAiAEEMgaIAIgA0HYAGoQxxpBxJUtKAIABEAgBSgCFCEAIAUoAgAoAgwhASADQcgAaiACEO8CIAMqAkghByADQThqIAIQ7wIgAyoCPCEIIAMqAlwhCSADIAMqAli7OQMYIAMgCLs5AxAgAyAJuzkDICADIAe7OQMIIAMgATYCBCADIAA2AgBB+K4NIAMQOyAFEGIQgAELIANB4ABqJAALpwEBA38jAEEgayIDJAAgABD/AiEEIANBCGogARBAIgEQQQJAIAEQPA0AA0AgARBmIQICQCAAKAJIQQ5GDQAgAigCSEEORg0AIABBABCdAiACRg0CIAIoAhggAigCHGpBAm0gBEgNAiAAIAIQ4BENACAAIAIQ3xEaCyABEGwaIAEQPEUNAAsLAkAgARA8BEAgASAAEPgGDAELIAEgABCyCgsgA0EgaiQACwkAIAAgARDjDwvqAQEEfyMAQSBrIgIkACACQQA2AhwgAkEANgIYIAJBADYCFCACQQA2AhAgAAJ/QQAgACgCDEEBSA0AGgNAIANBAnQiBCAAKALMAWooAgAiBQR/IAUFIAJBmQc2AgQgAkHTjQg2AgBByJ8sQdWDC0ECQZr1ByACEEUgACgCzAEgBGooAgALIAJBGGogAkEQaiACQRxqIAJBFGoQ+jIgA0EBaiIDIAAoAgxIDQALIAFFIAIoAhQiAUEBSHJFBEAgAigCHCABbQwBC0EAIAIoAhAiAUEBSA0AGiACKAIYIAFtCzYChAEgAkEgaiQAC4UJARB/IwBBgAFrIgIkACABKAIAIgUgACgCDEcEQCACQZUFNgJ0IAJB040INgJwQcifLEGI4wlBAkGa9QcgAkHwAGoQRQsgAEF/IAVBAnQgBUH/////A3EgBUcbIgcQPyIENgLMAUEBIQMCQCAFQQFIIgYNACAEQQA2AgAgBUEBRg0AA0AgACgCzAEgA0ECdGpBADYCACADQQFqIgMgBUcNAAsLIABBuAFqIgwoAgAhBCAFED8hCSAHED8hCCAHED8hByAGRQRAQX8gBEECdCAEQf////8DcSAERxshDyAEQQFIIRBBACEGA0BBACELIAEgBhA+KAIAIgoEQEECIAoQlwEuAQAgChCXAS4BAhDZASELCyAHIAZBAnQiA2oiDiAPED8iDTYCACAGIAlqIhFBADoAACADIAhqQf////8HNgIAAkAgEA0AQQAhAwJAIApFBEAgC0UNASANQf////8HNgIAIAJBADYCaCACIAY2AmQgAkEANgJgQYnyCSACQeAAahA7QQEhAyAEQQFGDQIDQCAOKAIAIANBAnRqQf////8HNgIAIAJBADYCWCACIAY2AlQgAiADNgJQQYnyCSACQdAAahA7IANBAWoiAyAERw0ACwwCCwNAAkAgDCADED4oAgAgCyAKIAAoAlAQnBpFBEAgDigCACADQQJ0akH/////BzYCACALRQ0BIAIgCjYCSCACIAY2AkQgAiADNgJAQYnyCSACQUBrEDsMAQsgDCADED4oAgAgChD9MiENIA4oAgAgA0ECdGogDTYCACARQQE6AAALIANBAWoiAyAERw0ACwwBCwNAIA0gA0ECdGpB/////wc2AgAgA0EBaiIDIARHDQALCyAGQQFqIgYgBUcNAAsLQQAhBCAAIAUgCSACQfwAaiACQfgAahDNGgRAA0AgAigCeCEBIAIoAnwhA0HElS0oAgBBAk4EQCACIAE2AjQgAiADNgIwQY+DCiAC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NwIAIAFBADYCDCAAQQxqIAFBDGoQ0xkgAUEQaiQACzYBAX8gASAAKAIIRwRAA0AgACgCEBogACAAKAIIQXRqIgI2AgggAhDNByAAKAIIIAFHDQALCwtFAQF/IAAgARBCEJASIQIgACABKAIANgIAIAAgASgCBDYCBCABEEIoAgAhACACEEIgADYCACABEEJBADYCACABQgA3AgALLAAgACgCABogACgCACAAEM4HQQxsahogACgCACAAEM4HQQxsahogACgCABoLOQAgASACRwRAIAMoAgAhAANAIABBdGogAkF0aiICEPw0IAMgAygCAEF0aiIANgIAIAEgAkcNAAsLC0MBAX8jAEEQayIBJAAgABBCGiABQdWq1aoBNgIMIAFB/////wc2AgggAUEMaiABQQhqEMkEKAIAIQAgAUEQaiQAIAALQQEBfyAAEIYOIAFJBEAQvgMACyAAEEIaIAAgARCuCyICNgIAIAAgAjYCBCAAEEIgAiABQQN0ajYCACAAQQAQsQsLVAEBfyAAEK8TIAAQQiAAKAIAIAAoAgQgAUEEaiICEP40IAAgAhDgASAAQQRqIAFBCGoQ4AEgABBCIAEQYhDgASABIAEoAgQ2AgAgACAAEJYKEP00C4MBAQJ/IwBBEGsiBCQAIARBADYCDCAAQQxqIARBDGogAxC/ByABBEAgACgCEBpB1arVqgEgAUkEQEH+zwkQhQMACyABQQxsQQQQ4wIhBQsgACAFNgIAIAAgBSACQQxsaiICNgIIIAAgAjYCBCAAEGIgBSABQQxsajYCACAEQRBqJAAgAAtbAQJ/IwBBEGsiAiQAIAIgATYCDCAAEP80IgMgAU8EQCAAEM4HIgAgA0EBdkkEQCACIABBAXQ2AgggAkEIaiACQQxqEMYCKAIAIQMLIAJBEGokACADDwsQvgMACykAIAAgAUcEQANAIAIgABCCEiACQQhqIQIgAEEIaiIAIAFHDQALCyACCyUAIAAgAUcEQANAIAJBeGoiAiABQXhqIgEQghIgACABRw0ACwsLaQEBfyMAQRBrIgMkACADIAI2AgAgAyABNgIIIAAoAhAhASADQQhqIAMQgQ4EQANAIAEgACgCCCADKAIIEKsIIAAgACgCCEEIajYCCCADQQhqEKoIIANBCGogAxCBDg0ACwsgA0EQaiQAC08BA38gAEEANgIA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AX8jAEEwayIDJAAgAyABNgIgQfnUASADQSBqEDsgAigCAEEBTgRAQQAhAQNAIAMgAiABEMICKgIEuzkDEEGFzAMgA0EQahA7IAIgARDCAi0AEARAQdL7A0EAEDsLIAIgARDCAi0AEQRAQeukBEEAEDsLIANBKGogACAAKAIAKAIUEQEAIAIgARDCAigCABChHCADIANBKGoQSjYCAEH8zAQgAxA7IANBKGoQRhogAUEBaiIBIAIoAgBIDQALCyADQTBqJAAL/wECAn8BfSMAQTBrIgMkACADIAE2AiBB+dQBIANBIGoQOyACKAIAQQFOBEADQCACIAQQ5gEqAgQhBSACIAQQ5gEoAgAhASADIAAgACgCACgCGBEBACACIAQQ5gEoAgAQvgE2AhwgAyABNgIYIAMgBbs5AxBBrZACIANBEGoQOwJAIAIgBBDmAUEMahBNDQBBACEBQcvBAkEAEDsgAiAEEOYBKAIMQQFIDQADQCADIAIgBBDmAUEMaiABEFEoAgA2AgBBie4CIAMQOyABQQFqIgEgAiAEEOYBKAIMSA0ACwtBmJ0DQQAQOyAEQQFqIgQgAigCAEgNAAsLIANBMGokAAsEACAECxIAIAAgACgCACgCFBEBACgCAAu3AQEFfyMAQSBrIgckACAHQQhqEKUcIQUgACAAKAIAKAIUEQEAIQlBfyEIAkAgACABIAJBACADIAUgACgCACgCDBEKACIAQQFIDQADQCAJIAUgBhDCAigCABC7CCADELI3BEAgBARAIAQgBSAGEMICIgApAgA3AgAgBCAALwEQOwEQIAQgACkCCDcCCAsgBSAGEMICKAIAIQgMAgsgBkEBaiIGIABHDQALCyAFEKQcIAdBIGokACAICzUAIwBBEGsiACQAIABBPjYCBCAAQbeXATYCAEHYnixBxRlBAkG22wAgABBFIABBEGokAEEAC1UBA38gAEEANgIAQdAAED8iAkHQAGohAyACIQEDQCABQgA3AgAgAUEAOwEQIAFCADcCCCABQRRqIgEgA0cNAAsgACACNgIIIABCADcCDCAAQQQ2AgQLqwEBAn8jAEFAaiIGJAAgBUEAEKABIAAgASACIAMgBCAGQShqEKUcIgEgACgCACgCDBEKACECIAAgACgCACgCFBEBACEDIAZBEGoQayEAIAMoAgAoAgghBCAGQX82Agwg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sQEhAiAAKAIAIAFqIAI6ACggBkEANgIMIAZB/wE2AgggBkEUaiAGQQxqIAZBCGoQsQEhAiAAKAIAIAFqIAI6ACkgBkEANgIMIAZB/wE2AgggBkEQaiAGQQxqIAZBCGoQsQEhAiAAKAIAIAFqIAI6ACogBkEgaiQACw4AIABBAkHKABDjEiAACw4AIABBCEHKABDjEiAAC5QUAgZ/AX0jAEGgCGsiAiQAIAAQwQ4CQCABIAJBkAZqQYACIAEoAgAoAggRBABFDQAgAiACQZwIajYCcCACQZAGakHw4QkgAkHwAGoQ+wJBAUcNACAAIAIoApwIEO0cIAIoApwIQQFOBEBB+MQqKAIAIQYDQCACQcADakGsyiwoAgBBPxC2BSEDIAJBADYCvAMgAkH/ATYCuAMgAkEANgK0AyACQf8BNgKwAyACQQA2AqwDIAJBADYCqAMgAkEANgKkAyACQQA2AqADIAJBADYCnAMgAkEANgKYAyACQQA2ApQDIAIgAigCnAgiBTYCkAMgAiAFNgKMA0EBIQUgASACQZAGakGAAiABKAIAKAIIEQQABEAgAkEAOgDAAiACQbABaiACQZAEaiACQZAGahCFAiIFEL0OIQcgBRBgGiACQagBaiACKAKwAUF0aigCACACQbABamoQqwMQzQMgAkGoAWoQjgEgAkH/ARCzAjYCmAEgAkGwAWogAkGYAWoQvQcgAkGQBGoQ5AZBPBC8DiACQYwEahC3JEE9ELwOGgJ/IAIoArABQXRqKAIAIAJBsAFqahDjBgRAIAJBywY2AgQgAkGHvQc2AgAgBkHQ8AkgAhCvAUEBDAELIAJBmAFqIAJBsAFqELQkIAIgAikDoAE3A2ggAiACKQOYATcDYCACQbABaiACQeAAahCFCSACQbABaiACQbwDahCSAiACQZcBahD3AiACQbgDahCSAiACQZYBahD3AiACQbQDahCSAiACQZUBahD3AiACQbADahCSAiACQZQBahD3AiACQawDahCQBCACQZMBahD3AiACQagDahCQBCACQZIBahD3AiACQaQDahCQBCACQZEBahD3AiACQaADahCQBCACQZABahD3AiACQZwDahCQBCACQY8BahD3AiACQZgDahCQBCEFIAJBPxCzAjYCiAEgBSACQYgBahC9ByADEOQGIAJBkANqEJICIAJBlANqEJICIAJBjANqEJICIQUgAkE/ELMCNgKAASAFIAJBgAFqEL0HIAJBwAJqEOQGGgJAAkAgAigCsAFBdGooAgAgAkGwAWpqEOMGIAItAJcBQSxHcg0AIAItAJYBQSxHDQAgAi0AlQFBLEcNACACLQCUAUEsRw0AIAItAJMBQSxHDQAgAi0AkgFBLEcNACACLQCRAUEsRw0AIAItAJABQSxHDQAgAi0AjwFBLEYNAQsgAigCsAFBdGooAgAgAkGwAWpqQQAQgwogAiACKQOgATcDWCACIAIpA5gBNwNQIAJBsAFqIAJB0ABqEIUJIAJBsAFqIAJBvANqEJICIAJBlwFqEPcCIAJBuANqEJICIAJBlgFqEPcCIAJBtANqEJICIAJBlQFqEPcCIAJBsANqEJICIAJBlAFqEPcCIAJBrANqEJAEIAJBkwFqEPcCIAJBqANqEJAEIAJBkgFqEPcCIAJBpANqEJAEIAJBkQFqEPcCIAJBoANqEJAEIAJBkAFqEPcCIAJBnANqEJAEIAJBjwFqEPcCIAJBmANqEJAEIQUgAkE/ELMCNgKIASAFIAJBiAFqEL0HIAMQ5AYgAkGQA2oQkgIgAkGUA2oQkgIgAkGMA2oQkgIaAkAgAigCsAFBdGooAgAgAkGwAWpqEOMGIAItAJcBQSxHcg0AIAItAJYBQSxHDQAgAi0AlQFBLEcNACACLQCUAUEsRw0AIAItAJMBQSxHDQAgAi0AkgFBLEcNACACLQCRAUEsRw0AIAItAJABQSxHDQAgAi0AjwFBLEYNAQsgAigCsAFBdGooAgAgAkGwAWpqQQAQgwogAiACKQOgATcDSCACIAIpA5gBNwNAIAJBsAFqIAJBQGsQhQkgAkGwAWogAkG8A2oQkgIgAkGXAWoQ9wIgAkG4A2oQkgIgAkGWAWoQ9wIgAkG0A2oQkgIgAkGVAWoQ9wIgAkGwA2oQkgIhBSACQT8QswI2AogBIAUgAkGIAWoQvQcgAxDkBiACQZADahCSAiACQZQDahCSAiACQYwDahCSAhoCQCACKAKwAUF0aigCACACQbABamoQ4wYgAi0AlwFBLEdyDQAgAi0AlgFBLEcNACACLQCVAUEsRg0BCyACKAKwAUF0aigCACACQbABampBABCDCiACIAIpA6ABNwM4IAIgAikDmAE3AzAgAkGwAWogAkEwahCFCSACQbABaiACQbwDahCSAiACQZcBahD3AiACQbgDahCSAiACQZYBahD3AiACQbQDahCSAiACQZUBahD3AiACQbADahCSAiEFIAJBPxCzAjYCiAEgBSACQYgBahC9ByADEOQGIAJBkANqEJICGgJAIAIoArABQXRqKAIAIAJBsAFqahDjBiACLQCXAUEsR3INACACLQCWAUEsRw0AIAItAJUBQSxGDQELIAIoArABQXRqKAIAIAJBsAFqakEAEIMKIAIgAikDoAE3AyggAiACKQOYATcDICACQbABaiACQSBqEIUJIAJBPxCzAjYCiAEgAkGwAWogAkGIAWoQvQcgAxDkBiACQZADahCSAhogAigCsAFBdGooAgAgAkGwAWpqEOMGRQ0AIAIoArABQXRqKAIAIAJBsAFqakEAEIMKIAIgAikDoAE3AxggAiACKQOYATcDECACQbABaiACQRBqEIUJIAJBPxCzAjYCiAEgAkGwAWogAkGIAWoQvQcgAxDkBhoLAkAgAkGQBGpB9+gGQQUQsgZFBEAgAEGwiwYQlgYMAQsgACACQZAEahDpHAsgACgCACAEQfAAbGogAigCjARBAXE6ACAgACgCACAEQfAAbGogAigCjARBAnFBAXY6ACEgACgCACAEQfAAbGogAigCjARBBHFBAnY6ACIgACgCACAEQfAAbGogAigCjARBCHFBA3Y6ACMgACgCACAEQfAAbGogAigCjARBEHFBBHY6ACQgACAEQQAQhxMgACAEIAMQ5xwgACgCACAEQfAAbGpBAToAJiAAIAQgAigCvAMgAigCuAMgAigCtAMgAigCsAMQ2TggAioCrAMhCCAAKAIAIARB8ABsaiIDIAIqAqgDOAIwIAMgCDgCLCACKgKkAyEIIAAoAgAgBEHwAGxqIgMgAioCoAM4AjggAyAIOAI0IAIqApwDIQggACgCACAEQfAAbGoiA0FAayACKgKYAzgCACADIAg4AjwgACgCACAEQfAAbGogAigClAM2AkwgACgCACAEQfAAbGogAigCkAMiAyAEIAMgAigCnAhIGzYCSCAAKAIAIARB8ABsaiACKAKMAyIDIAQgAyACKAKcCEgbNgJQIAAgBCACQcACaiACQZAEaiACLQDAAhsQ2DhBAAshBSAHELwHGgtBACEDIAVBBEsNAgJAIAVBAWsOAwMDAwALIARBAWoi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IARBEGokAAsJACAAIAEQwxgLpQgCD38BfiMAQUBqIgMkAAJAIAIQakEIRw0AIAIQYyEKIAIQZyEJIAIQqQEhCyACEIYBIQcgABCCDyEMIAAoAhgiBARAIAQQPQsgAEF/IAAuARCtQgN+IhKnIBJCIIinGxA/NgIYIAMgACgCDDYCPCADQThqEG8hDiAKIAkgAy4BPCAHIAMuAT5rIAsgByAOELweIAAuARBBAUgNACADQSBqQQJyIQ8gA0EoakECciEQA0AgA0EwaiAAIA0QywEgA0EoaiADQTxqELseIANBPGogA0EwahDTASADQSBqIANBPGoQux4gA0EcahBvIQQgCiAJIAMuATwgByADLgE+ayALIAcgBBC8HiADQRhqIA4gBBC6HiADQQA2AhQgA0EANgIQAkACQCADLwEqIAMvASJHDQAgAy4BGiIEIARBH3UiBGogBHNBAXQgAy4BGCIEIARBH3UiBGogBHNIDQAgAy4BICEEIAMuASghBiADQShqIANBIGoQ+wEuAQAhCCADLgEqIQUgA0EANgIMIAMgByAFayIFNgIIIAogCUEBQX8gDCAGIARMcxsiBiAIIAUgByADQRRqIANBDGogA0EIahDFExogBSEEA0AgCiAJIAYgCCAEQQFqIgQgByADQRRqIANBDGogA0EIahDFEw0ACyAFIQQDQCAKIAkgBiAIIARBf2oiBCAHIANBFGogA0EMaiADQQhqEMUTDQALIAMgAygCDEECbSABayAGbCADKAIUIAUgAygCCGtsajYCEAwBCyADLwEoIAMvASBHDQAgAy4BGCIEIARBH3UiBGogBHNBAXQgAy4BGiIEIARBH3UiBGogBHNIDQAgAy4BIiEEIAMuASohCCADLgEoIQUgECAPEJkCLgEAIQYgAhBjIREgA0EANgIMIAMgBTYCCCARIAcgBmsgCWxBAnRqIgZBAUF/IAwgCCAETHMbIgggBSALIANBFGogA0EMaiADQQhqEMQTGiAFIQQDQCAGIAggBEEBaiIEIAsgA0EUaiADQQxqIANBCGoQxBMNAAsgBSEEA0AgBiAIIARBf2oiBCALIANBFGogA0EMaiADQQhqEMQTDQALIAMgASADKAIMQQJtayAIbCADKAIUIAMoAgggBWtsajYCEAsgA0GBfzYCDCADQf8ANgIIIANBEGogA0EMaiAD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OiAlZDsgCgBlcXVhdGlvbmRldGVjdF9zYXZlX2JpX2ltYWdlACEiYCcsLjo7AENsYXNzICVzIGlzICVzIHdpdGggdG9wICVkIHZzIGxpbWl0cyBvZiAlZC0+JWQsICsvLSVkCgAubHN0bWYACgBLb3JlYW4AIABDb3JydXB0ZWQgd29yZCEgYmVzdF9jaG9pY2VbbGVuPSVkXSA9ICVzLCBib3hfd29yZFtsZW49JWRdOiAAcGl4X2JpbmFyeV8gIT0gbnVsbHB0cgBwYXIAaXZ4bG1kSVZYTE1EAApCbG9jayBkYXRhLi4uCgAudHh0AG9uZV9lbGxfY29uZmxpY3QgZGV0ZWN0ZWQKAHByZXNlcnZlX2ludGVyd29yZF9zcGFjZXMAc3ViAGNvbmZpZ3MvAHRlc3NlZGl0X3Jlc2VnbWVudF9mcm9tX2JveGVzAE5vIHRydXRoIGZvciB3b3JkIC0gc2tpcHBpbmcKAENhbm5vdCBjb252ZXJ0IFJBVyBpbWFnZSB0byBQaXggd2l0aCBicHAgPSAlZAoAaXQtPndvcmQoKSA9PSB3b3JkX3JlcwBUcnV0aCAAcm90YXRpb24ueCgpID49IGtDb3NTbWFsbEFuZ2xlAC51em4AcmIAMCA8PSBpbmRleCAmJiBpbmRleCA8IGxlbmd0aF8AbGVuZ3RoID49IDAAQ29uc3RyYWluZWQgZml0IHRvIGRpciAlZywgJWcgPSAlZCwgJWQgOiVkIGRpc3RhbmNlczoKAG1pbl9zdGVwID4gMAB2ZWNfc2l6ZSA+PSAwAEVycm9yOiBObyB0ZXh0IGNvcnJlc3BvbmRpbmcgdG8gcGFnZSAlZCBmcm9tIGltYWdlICVzIQoATExTUTo6cmVtb3ZlAGNvb3JkLlZhbGlkKCpyZXN1bHQpAFBpeCBkaW1lbnNpb25zICVkIHggJWQgeCAlZAoAUHJvcG9ydGlvbmFsPSAlcwoAbWFyZ2luOiAlZCwgZmlyc3RfaW5kZW50OiAlZCwgYm9keV9pbmRlbnQ6ICVkLCBhbGlnbm1lbnQ6ICVzAEtlcm5pbmc9ICVkCgBjb21ibyAhPSBudWxscHRyAFBUUkFJTl9ESUdJVFNfU0hPUlQAQkxPQ0tfTElORV9JVDo6Z2V0X2xpbmUAcG9seV9kZWJ1ZwBVbmtub3duAENhbid0IHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYW4gZW1wdHkgUUxTUSBhY2N1bXVsYXRvciEKAEJhc2VsaW5lIGRpZmYgJWcgZm9yICVkIHYgJWQKACgAUl9URVNTX0ZBSUxVUkU6ICVzCgAgJTYuMmYgQCAoJWQsJWQpLCBwPSVkLCBuPSVkIAB3b3JkcmVjX2Rpc3BsYXlfc3BsaXRzAGJ1Y2tldHNfW2luZGV4IC0gMV0gPiAwAEJsYW5rcz0gJWQKAFJlYWRpbmcgYW1iaWd1aXRpZXMKAGFtYmlnc19kZWJ1Z19sZXZlbABEZXN0aW5hdGlvbiBsaXN0IG11c3QgYmUgZW1wdHkgYmVmb3JlIGV4dHJhY3RpbmcgYSBzdWJsaXN0AERlc3RpbmF0aW9uIGxpc3QgbXVzdCBiZSBlbXB0eSBiZWZvcmUgZXh0cmFjdGluZyBhIHN1Ymxpc3QARGVzdGluYXRpb24gbGlzdCBtdXN0IGJlIGVtcHR5IGJlZm9yZSBleHRyYWN0aW5nIGEgc3VibGlzdAAlczoAVEVTU0RBVEFfUFJFRklYAHJlYWRfcGFyYW1zX2ZpbGU6IENhbid0IG9wZW4gJXMKACFpc193cml0aW5nXwA0LjEuMS01Ni1nYmU0NQAAaXRfICE9IG51bGxwdHIAIABjdADigI4ACgpTVU1NQVJZIE9GIEFEQVBURUQgVEVNUExBVEVTOgoKAEFkYXB0ZWRUZW1wbGF0ZXMgIT0gbnVsbHB0cgBjbGFzc2lmeV9mb250X25hbWUAYWxsb3dfYmxvYl9kaXZpc2lvbgBDbHVzdGVyZXItPlJvb3QgPT0gbnVsbHB0cgBmcC0+RkdldHMobGluZSwga01heExpbmVTaXplKSAhPSBudWxscHRyAEVycm9yIGR1cmluZyByZWFkIG9mIHNoYXBldGFibGUgcGZmbXRhYmxlIQoAbWYAVGVzdGluZyBmZWF0dXJlIHdlaWdodCAlZzoASW5kZXhGZWF0dXJlKGYpID09IGluZGV4X2ZlYXR1cmUAKCVkLCVkKSBkb2VzIG5vdCBleGlzdCBpbiBmZWF0dXJlIHNwYWNlIQoASW50ZWdlciBNYXRjaGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KAGNsYXNzaWZ5X251bV9jcF9sZXZlbHMAIXN0ZDo6aXNuYW4oRmVhdHVyZS0+UGFyYW1zW2ldKQAhIkhvdyBkaWQgTm9ybWFsaXplT3V0bGluZXMgZ2V0IGNhbGxlZCBpbiBjaGFyYWN0ZXIgbW9kZT8iAGNsYXNzaWZ5X21pbl9zbG9wZQBjbGFzc2lmeV9ub3JtX2Fkal9taWRwb2ludAAlZABjbGFzc2lmeV9waWNvX2ZlYXR1cmVfbGVuZ3RoAE1heE51bVByb3RvcyA8PSBNQVhfTlVNX1BST1RPUwAiTXVzdCBpbXBsZW1lbnQgQ2xhc3NpZnlTYW1wbGUhIiA9PSBudWxscHRyAElOVkFMSURfVU5JQ0hBUl9JRABObyBidWlsdC1pbiB0ZW1wbGF0ZXMgZm9yIGNsYXNzL3NoYXBlICVkCgBFcnJvcjogbm8gZmVhdHVyZXMgdG8gdHJhaW4gb24gb2YgdHlwZSAlcwoARmFpbGVkIHRvIGxvYWQgdW5pY2hhcnNldCBmcm9tIGZpbGUgJXMKQnVpbGRpbmcgdW5pY2hhcnNldCBmcm9tIHNjcmF0Y2guLi4KACVzAFNpemUgPiAwAGRlc3RydWN0b3IgIT0gbnVsbHB0cgBjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAHIAAHJlc2V0X2h5cGhlbl92YXJzOiBsYXN0X3dvcmRfb25fbGluZSAlZCAtPiAlZAoAY2hlY2tpbmcgdW5pZ3JhbXMgaW4gYW4gbmdyYW0gJXMKAFVOS05PV04AZWRnZV9jaGFyX29mKCkgZ2l2ZW4gbm9kZV9yZWYgJWxsZCBuZXh0X25vZGUgJWxsZCBkaXJlY3Rpb24gJWQgd29yZF9lbmQgJWQgdW5pY2hhcl9pZCAlZCwgZXhwbG9yaW5nIG5vZGU6CgAhaW50X21vZGVfACFpbnRfbW9kZV8AIkludmFsaWQgZnVsbHktY29ubmVjdGVkIHR5cGUhIiA9PSBudWxscHRyAElucHV0OjpCYWNrd2FyZCBzaG91bGQgbm90IGJlIGNhbGxlZCEhCgBubyA9PSBucwBTcGFjZSB3YXMgZ2FyYmxlZCBpbiByZWNvZGluZyEhCgBMb2FkZWQgZmlsZSAlcywgdW5wYWNraW5nLi4uCgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAFRlbnNvckZsb3cgbm90IGNvbXBpbGVkIGluISAtRElOQ0xVREVfVEVOU09SRkxPVwoAKm5ldHdvcmsgIT0gbnVsbHB0ciAmJiAoKm5ldHdvcmspLT50eXBlKCkgPT0gTlRfU0VSSUVTAGhlaWdodCA9PSBOdW1GZWF0dXJlcygpAHJlc3VsdC0+V2lkdGgoKSA9PSBvdXRwdXQtPldpZHRoKCkAbm9fID09IG5ldHdvcmstPk51bUlucHV0cygpAG51bGxfY2hhcgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAG5ldHdvcmtfaW9fID09IG51bGxwdHIATnVtIG91dHB1dHMsd2VpZ2h0cyBpbiBTZXJpZXM6CgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplACVzCgB0ZXh0b3JkX2RlYnVnX3RhYmZpbmQAQmFzZWxpbmUgKCVnLCVnKS0+KCVnLCVnKSwgYW5nbGU9JWcsIGludGVyY2VwdD0lZwoAcm90YXRpb24ueCgpID09IDAuMGYgfHwgcm90YXRpb24ueSgpID09IDAuMGYAdGV4dG9yZF91bmRlcmxpbmVfdGhyZXNob2xkAENsaWNrIGF0ICglZCwgJWQpCgBqdW5rbm9pc2VtYXNrLnBuZwB0ZXh0b3JkX3NwYWNlX3NpemVfaXNfdmFyaWFibGUAdGV4dG9yZF90YWJmaW5kX3Nob3dfaW5pdGlhbF9wYXJ0aXRpb25zAEFkZGVkIGJveCAoJWQsJWQpLT4oJWQsJWQpIGxlZnRfYmxvYl94Xz0lZCwgcmlnaHRfYmxvYl94XyA9ICVkCgBCbG9jayBib3g6ACFwYXJ0X2l0LmVtcHR5KCkAZGV2YW5hZ2FyaV9zcGxpdF9kZWJ1Z2xldmVsAHRleHRvcmRfc2hvd19maXhlZF9jdXRzAGVkZ2VzX3VzZV9uZXdfb3V0bGluZV9jb21wbGV4aXR5AElsbGVnYWwgc3VtIG9mIGNoYWluIGNvZGVzAHBpeCAhPSBudWxscHRyICYmIHBpeEdldERlcHRoKHBpeCkgPT0gMzIgJiYgYmxvYiAhPSBudWxscHRyAHRleHRvcmRfZnBfY2hvcF9lcnJvcgBnYXBtYXBfZGVidWcAdGV4dG9yZF90YWJmaW5kX3Nob3dfaW1hZ2VzAEVycm9yIGluIHBhcmFtZXRlcnMgZm9yIExpbmVGaW5kZXI6OkZpbmRBbmRSZW1vdmVMaW5lcwoAdGV4dG9yZF9oZWF2eV9ucgB0ZXh0b3JkX3JlYWxseV9vbGRfeGhlaWdodAByaWdodF9lZGdlID49IGxlZnRfZWRnZQBwaXRzeW5jX2xpbmVhcl92ZXJzaW9uAHRyaWdodC54KCkgPD0gd2lkdGgAdGV4dG9yZF90YWJmaW5kX3Nob3dfc3Ryb2tld2lkdGhzAHRleHRvcmRfdGFiZmluZF9zaG93X2luaXRpYWx0YWJzAHRleHRvcmRfc2hvd190YWJsZXMAMCA8PSByb3cgJiYgcm93IDwgcm93X2NvdW50KCkAdGV4dG9yZF90YWJ2ZWN0b3JfdmVydGljYWxfZ2FwX2ZyYWN0aW9uAEF0ICglZCwlZCksIHBpeCA9ICVkLCBwcmV2PSVkCgB0ZXh0b3JkX3NpbmdsZV9oZWlnaHRfbW9kZQB0ZXh0b3JkX2FsbF9wcm9wAElucHV0IGltYWdlIHRvbyBsYXJnZSEgKCVkLCAlZCkKAEJsb2NrICVkIFJvdyAlZDogTm93IFByb3BvcnRpb25hbAoAdGV4dG9yZF9zaG93X2luaXRpYWxfd29yZHMAdGV4dG9yZF91bmRlcmxpbmVfb2Zmc2V0AHRleHRvcmRfZnBfY2hvcHBpbmcAcGFydG5lci0+U2luZ2xldG9uUGFydG5lcihmYWxzZSkgPT0gcGFydAB3b3JkX3JlcyAhPSBudWxscHRyAEdvb2Qgc2VhbSBwaWNrZWQ9AFB1c2hpbmcgbmV3IHNlYW0gd2l0aCBwcmlvcml0eSAlZyA6AGxhbmd1YWdlX21vZGVsX2RlYnVnX2xldmVsAE5PIHBhaW4gcG9pbnQgKENsYXNzaWZpZWQpIGZvciBjb2w9JWQgcm93PSVkIHR5cGU9JXMKACVzIFZpdGVyYmlTdGF0ZUVudHJ5AFBhcmFtc01vZGVsIGZvciBwYXNzICVkIGxhbmcgJXMKAE1lcmdlZCBGcmFnbWVudHMAd29yZHJlY19kaXNwbGF5X2FsbF9ibG9icwBGaW5hbCBzZWFtIGxpc3Q6AHdvcmQtPlN0YXRlc0FsbFZhbGlkKCkAbWVyZ2VfZnJhZ21lbnRzX2luX21hdHJpeABzdHJlYW1fZmlsZWxpc3QAdwAAPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGFsdG8geG1sbnM9Imh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvYWx0by9ucy12MyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvYWx0by9ucy12MyMgaHR0cDovL3d3dy5sb2MuZ292L2FsdG8vdjMvYWx0by0zLTAueHNkIj4KCTxEZXNjcmlwdGlvbj4KCQk8TWVhc3VyZW1lbnRVbml0PnBpeGVsPC9NZWFzdXJlbWVudFVuaXQ+CgkJPHNvdXJjZUltYWdlSW5mb3JtYXRpb24+CgkJCTxmaWxlTmFtZT4AaG9jcl9mb250X2luZm8AAHBkZgAAYXV0bwBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAHBpeHMgbm90IGRlZmluZWQAZm9udHNpemUgbXVzdCBiZSBpbiB7NCwgNiwgLi4uLCAyMH0AdyBhbmQgaCBub3QgYm90aCA+PSAwACZyZXN1bHQgbm90IGRlZmluZWQAYm94YXMgbm90IGRlZmluZWQAYm94YXMgbm90IGRlZmluZWQAcGl4cyBub3QgZGVmaW5lZABwaXggbm90IGRlZmluZWQAJm91dHNpemUgbm90IGRlZmluZWQAd2lkdGggbXVzdCBiZSA+IDAAcGl4cyBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkAHBpeHMgdW5kZWZpbmVkIG9yIG5vdCAxIGJwcABwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAbm8gcmV0dXJuIHZhbCByZXF1ZXN0ZWQAcGl4cyBub3QgZGVmaW5lZABwaXhzIHVuZGVmaW5lZCBvciBub3QgMSBicHAAZGVwdGggbm90IGluIHsxLDIsNCw4fQBwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAd2l0aCBsaW5lcwBwdGEgbm90IG1hZGUAcGl4cyBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQARXJyb3IgaW4gJXM6IHNyYyBkZXB0aCBub3QgNCBvciA4IGJwcAoAbGggbm90IG1hZGUAa2VsIG5vdCBtYWRlAHByb2Nlc3NNb3JwaEFyZ3MxIGZhaWxlZABwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAcGl4cyBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkACZzY29yZSBub3QgZGVmaW5lZABwc2FtZSBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAbmEgbm90IG1hZGUAbmExLCBuYTIgbm90IGJvdGggZGVmaW5lZABuYXMgbm90IGRlZmluZWQAYmIgbm90IG1hZGUAY2NiYSBub3QgbWFkZQBwaXhzIHVuZGVmaW5lZCBvciBub3QgMSBicHAAcGl4cyBub3QgZGVmaW5lZABiYSBub3QgbWFkZQBkaXJuYW1lIG5vdCBkZWZpbmVkAGRhIG5vdCBtYWRlAGludmFsaWQga2V5dHlwZQBkYWQgbm90IGRlZmluZWQAZmlsZW5hbWUgbm90IGRlZmluZWQAZmlsZW5hbWUgbm90IGRlZmluZWQAJmRhdGEgbm90IGRlZmluZWQAcGl4ZCBub3QgbWFkZQBwaXhzMSBub3QgZGVmaW5lZAAmdmFsIG5vdCBkZWZpbmVkAHBpeGQgbm90IGRlZmluZWQAcGl4cyBub3QgZGVmaW5lZABubyBvdXRwdXQgcmVxdWVzdGVkAHBpeGEgbm90IG1hZGUAcGl4YWNjIG5vdCBtYWRlAHBpeHMgbm90IGRlZmluZWQAcGl4YSBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkAHBpeCBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAZnAgbm90IGRlZmluZWQAcGl4cyBub3QgZGVmaW5lZABwdGEgbm90IG1hZGUAcHRhcyBub3QgZGVmaW5lZABuZWdhdGl2ZSBoYXNoIHNpemUAcHRhcyBub3QgZGVmaW5lZABwYSBub3QgbWFkZQBpbnZhbGlkIGtleXR5cGUAZnAgbm90IGRlZmluZWQAZnAgbm90IGRlZmluZWQAZnVuY3Rpb24gbm90IHByZXNlbnQAZnVuY3Rpb24gbm90IHByZXNlbnQAZGlybmFtZSBub3QgZGVmaW5lZABwaXhkIG5vdCBkZWZpbmVkAE9wZXJhdGlvbiAlZCBub3QgcGVybWl0dGVkIGhlcmUhCgBwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAcGl4cyB1bmRlZmluZWQgb3Igbm90IDEgYnBwAHB0ciBhcnJheSBub3QgbWFkZQBzYWluIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAcGl4cyBub3QgZGVmaW5lZABwaXhlbCBkZXB0aCBub3Qgc3VwcG9ydGVkAHBpeHMgdW5kZWZpbmVkIG9yIG5vdCAxIGJwcABscSBub3QgbWFkZQBFcnJvciBpbiAlczogY29ubmVjdGl2aXR5IG11c3QgYmUgNCBvciA4CgBXYXJuaW5nIGluICVzOiAlZCBzZWxzCgBzZWxhIG5vdCBtYWRlAHBpeHMgbm90IGRlZmluZWQAc2hvdWxkbid0IGdldCBoZXJlCgBwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAcGl4cyBub3QgZGVmaW5lZABzdHJlYW0gbm90IGRlZmluZWQAbHN0YWNrIGFycmF5IG5vdCBtYWRlAGxlcHQvYXV0bwBwaXhzIG5vdCBkZWZpbmVkAGZpbGVuYW1lIG5vdCBkZWZpbmVkAExFUFRfTVNHX1NFVkVSSVRZAFdhcm5pbmcgaW4gJXM6IHNyYyBub3QgZGVmaW5lZAoAZnVuY3Rpb24gbm90IHByZXNlbnQAZmlsZWluIG5vdCBkZWZpbmVkAHVua25vd24AZGF0YWluIG5vdCBkZWZpbmVkAEJvZ3VzIG1lc3NhZ2UgY29kZSAlZABKUEVHTUVNAFRvbyBtYW55IGJ5dGVzIGZvciBQTkcgc2lnbmF0dXJlAE91dCBvZiBNZW1vcnkAMS40LjIyAENhbGwgdG8gTlVMTCByZWFkIGZ1bmN0aW9uAENhbid0IGRpc2NhcmQgY3JpdGljYWwgZGF0YSBvbiBDUkMgZXJyb3IAUE5HIHVuc2lnbmVkIGludGVnZXIgb3V0IG9mIHJhbmdlAExpbWl0aW5nIGdhbW1hIHRvIDIxNDc0LjgzAENhbGwgdG8gTlVMTCB3cml0ZSBmdW5jdGlvbgBNTkcgZmVhdHVyZXMgYXJlIG5vdCBhbGxvd2VkIGluIGEgUE5HIGRhdGFzdHJlYW0ASW52YWxpZCBiaXQgZGVwdGggZm9yIGdyYXlzY2FsZSBpbWFnZQBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlcyAoJWxkIGVsZW1lbnRzIG9mICVsZCBieXRlcyBlYWNoKQBUYWcgAE5vbmUAc2NhbmxpbmUAQ2FuIG5vdCB1bmxpbmsgZGlyZWN0b3J5IGluIHJlYWQtb25seSBmaWxlAFRhZyAAJXM6IEZhaWxlZCB0byByZWFkIGRpcmVjdG9yeSBhdCBvZmZzZXQgJXUARHVtcE1vZGVEZWNvZGU6IE5vdCBlbm91Z2ggZGF0YSBmb3Igc2NhbmxpbmUgJWQAeCA9PSBsYXN0eABFcnJvciB1cGRhdGluZyBUSUZGIGhlYWRlcgBTb3JyeSwgcmVxdWVzdGVkIGNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3QgY29uZmlndXJlZABzY2hlbWUgPT0gQ09NUFJFU1NJT05fSlBFRwBzY2hlbWUgPT0gQ09NUFJFU1NJT05fU0dJTE9HMjQgfHwgc2NoZW1lID09IENPTVBSRVNTSU9OX1NHSUxPRwBzY2hlbWUgPT0gQ09NUFJFU1NJT05fTFpXAE5lWFREZWNvZGU6IE5vdCBlbm91Z2ggZGF0YSBmb3Igc2NhbmxpbmUgJWxkAHNjaGVtZT09Q09NUFJFU1NJT05fT0pQRUcAIiVzIjogQmFkIG1vZGUAUGFja0JpdHNEZWNvZGU6IGRpc2NhcmRpbmcgJWxkIGJ5dGVzIHRvIGF2b2lkIGJ1ZmZlciBvdmVycnVuAHNjaGVtZSA9PSBDT01QUkVTU0lPTl9QSVhBUkxPRwBzcCAhPSAwAGxpbmsgIT0gTlVMTABUSUZGIERpcmVjdG9yeSBhdCBvZmZzZXQgMHglbHggKCVsdSkKACVsZDogU3RyaXAgb3V0IG9mIHJhbmdlLCBtYXggJWxkACVsdTogU2FtcGxlIG91dCBvZiByYW5nZSwgbWF4ICVsdQBUaHVuZGVyRGVjb2RlOiAlcyBkYXRhIGF0IHNjYW5saW5lICVsZCAoJWx1ICE9ICVsdSkAJWx1OiBDb2wgb3V0IG9mIHJhbmdlLCBtYXggJWx1ACVzOiBDYW5ub3Qgb3BlbgBDYW4gbm90IGNoYW5nZSAiSW1hZ2VMZW5ndGgiIHdoZW4gdXNpbmcgc2VwYXJhdGUgcGxhbmVzAChzY2hlbWUgPT0gQ09NUFJFU1NJT05fREVGTEFURSkgfHwgKHNjaGVtZSA9PSBDT01QUkVTU0lPTl9BRE9CRV9ERUZMQVRFKQAxLjIuNQBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBuZWVkIGRpY3Rpb25hcnkAYWRhcHRpb24gZGlzYWJsZWQKAEFQUExZX0JPWEVTOgoAdGVtcGNvbmZpZ2RhdGEuY29uZmlnAE5PIFBBR0UgUkVKRUNUSU9OICNjaGFyczogJWQgICMgUmVqZWN0czogJWQ7IAoAU2F2ZSBpbnB1dCBiaSBpbWFnZQAATWlzZml0AEZhaWxlZCB0byByZWFkIHRyYWluaW5nIGRhdGEgZnJvbSAlcyEKAGJlc3RfY2hvaWNlICE9IG51bGxwdHIASmFwYW5lc2UAd29yZC0+YmVzdF9jaG9pY2UtPmxlbmd0aCgpID09IHdvcmQtPnJlamVjdF9tYXAubGVuZ3RoKCkAd29yZF9yZXMtPmJveF93b3JkLT5sZW5ndGgoKSA9PSB3b3JkX2xlbmd0aF8AaW4gZmlsZSAlcywgbGluZSAlZABbbG1hcmcsbGluZDtyaW5kLHJtYXJnXQAKUm93IGRhdGEuLi4KAGErAG5vbi1kaWN0IG9yIGFtYmlnIHdvcmQgZGV0ZWN0ZWQKAGJsb2JfaW5kaWNlcy0+c2l6ZSgpID09IHdvcmRfbGVuZ3RoXwBzdXBlcgByYgBUYWtlIHNlZ21lbnRhdGlvbiBhbmQgbGFiZWxpbmcgZnJvbSBib3ggZmlsZQAhd29yZC0+Y2hvcHBlZF93b3JkLT5ibG9icy5lbXB0eSgpAEltYWdlIHRvbyBsYXJnZTogKCVkLCAlZCkKAGluIGZpbGUgJXMsIGxpbmUgJWQAIChubyBjaGFyIGJveGVzKQBpbiBmaWxlICVzLCBsaW5lICVkAHJiAHJlYWRfbmV4dF9ib3gAaW4gZmlsZSAlcywgbGluZSAlZABpbiBmaWxlICVzLCBsaW5lICVkACVkOiAlZCwgJWQgLT4gJWcKAGluIGZpbGUgJXMsIGxpbmUgJWQAaW4gZmlsZSAlcywgbGluZSAlZABzcmNfcGl4ICE9IG51bGxwdHIAQ2FuJ3QgZGVsZXRlIGZyb20gYW4gZW1wdHkgTExTUQBpbiBmaWxlICVzLCBsaW5lICVkAEludmVyc2UKAFRSVUUATEVGVABTcGFjaW5nPSAlZAoAaW4gZmlsZSAlcywgbGluZSAlZABQVFJBSU5fRElHSVRTX01FRABZPSVkAERlYnVnIG9sZCBwb2x5AEZsb3dpbmcgVGV4dABQb3NBbmRTaXplIGZvciAlZCB2ICVkOiBibCBkaWZmID0gJWcsIHJhbmdlcyAlZywgJWcgLyAlZyAtPiVnCgAsAFQALCAgIABEaXNwbGF5IHNwbGl0cwBpbiBmaWxlICVzLCBsaW5lICVkAEZsYWdzID0gJWQgPSAwJW8KAGFtYmlnX2ZpbGUtPkZHZXRzKGJ1ZmZlciwga0J1ZmZlclNpemUpICE9IG51bGxwdHIgJiYgc3RybGVuKGJ1ZmZlcikgPiAwAERlYnVnIGxldmVsIGZvciB1bmljaGFyIGFtYmlndWl0aWVzAENMSVNULmFzc2lnbl90b19zdWJsaXN0AEVMSVNULmFzc2lnbl90b19zdWJsaXN0AEVMSVNUMi5hc3NpZ25fdG9fc3VibGlzdABFcnJvcjolcwAuLwBXYXJuaW5nOiBQYXJhbWV0ZXIgbm90IGZvdW5kOiAlcwoAaW4gZmlsZSAlcywgbGluZSAlZABpbmRleCA+PSAwAFByZS00LjAuMABkZWJ1Z19maWxlAGluIGZpbGUgJXMsIGxpbmUgJWQAVW5pY2hhciAlZD0lcyBpcyB0b28gbG9uZyB0byBlbmNvZGUhIQoA7oCDAOKAjwBOdW0gY2xhc3NlcyA9ICVkOyAgTnVtIHBlcm1hbmVudCBjbGFzc2VzID0gJWQKCgBpbiBmaWxlICVzLCBsaW5lICVkAERlZmF1bHQgZm9udCBuYW1lIHRvIGJlIHVzZWQgaW4gdHJhaW5pbmcAVXNlIGRpdmlzaWJsZSBibG9icyBjaG9wcGluZwBpbiBmaWxlICVzLCBsaW5lICVkAGluIGZpbGUgJXMsIGxpbmUgJWQATlVMTABjbgBQZXJmZWN0IGhpdAoAaW4gZmlsZSAlcywgbGluZSAlZABDbGljayBhdCAoJWQsICVkKSAtPiglZCwgJWQpLCAtPiglZCwgJWQpCgBGaW5kIEdvb2QgUHJvdG9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KAE51bWJlciBvZiBDbGFzcyBQcnVuZXIgTGV2ZWxzAGluIGZpbGUgJXMsIGxpbmUgJWQAaW4gZmlsZSAlcywgbGluZSAlZABTbG9wZSBiZWxvdyB3aGljaCBsaW5lcyBhcmUgY2FsbGVkIGhvcml6b250YWwATm9ybSBhZGp1c3QgbWlkcG9pbnQgLi4uAHRmc2NhbmYoRmlsZSwgIiVkIiwgJk51bUZlYXR1cmVzKSA9PSAxAFBpY28gRmVhdHVyZSBMZW5ndGgAaW4gZmlsZSAlcywgbGluZSAlZABpbiBmaWxlICVzLCBsaW5lICVkAFNoYXBlAEVycm9yOiBubyBDTiBmZWF0dXJlIHRvIHRyYWluIG9uLgoARXJyb3I6IFNpemUgb2YgdW5pY2hhcnNldCBpbiBUcmFpbmluZ1NhbXBsZVNldDo6QWRkU2FtcGxlIGlzIGdyZWF0ZXIgdGhhbiBNQVhfTlVNX0NMQVNTRVMKAGluIGZpbGUgJXMsIGxpbmUgJWQAaW4gZmlsZSAlcywgbGluZSAlZABpbiBmaWxlICVzLCBsaW5lICVkAEVycm9yOiBDb3VsZCBub3Qgb3BlbiBmaWxlICVzCgB1c2VyX3dvcmRzX2ZpbGUAc2V0X2h5cGhlbl93b3JkOiAAZ2V0VW5pY2hhcnNldCgpLmVuY29kZV9zdHJpbmcobmdyYW1fc3RyLCB0cnVlLCAmZW5jb2RpbmcsIG51bGxwdHIsIG51bGxwdHIpAE5PUk1BTABuZXcgZWRnZSBpbiBub2Rlc19bJWxsZF06IABpbiBmaWxlICVzLCBsaW5lICVkAGluIGZpbGUgJXMsIGxpbmUgJWQAaW4gZmlsZSAlcywgbGluZSAlZABCYWQgcGl4IGZyb20gSW1hZ2VEYXRhIQoAaW4gZmlsZSAlcywgbGluZSAlZABGYWlsZWQgdG8gbG9hZCBhbnkgbHN0bS1zcGVjaWZpYyBkaWN0aW9uYXJpZXMgZm9yIGxhbmcgJXMhIQoAQ29kZSByYW5nZSBjaGFuZ2VkIGZyb20gJWQgdG8gJWQhCgBNcAByYW5kb21pemVyXyAhPSBudWxscHRyAGluIGZpbGUgJXMsIGxpbmUgJWQAaW4gZmlsZSAlcywgbGluZSAlZABpbiBmaWxlICVzLCBsaW5lICVkAGluIGZpbGUgJXMsIGxpbmUgJWQAbGFiZWw9JWQsIHVpZD0lZD0lcwBTAGluIGZpbGUgJXMsIGxpbmUgJWQAICAlczolZCwgJWQKAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUARGVidWcgdGFiIGZpbmRpbmcAUXVhbnQgZmFjdG9yPSVnLCBlcnJvcj0lZywgZ29vZD0lZCwgYm94OgBpbiBmaWxlICVzLCBsaW5lICVkAEZyYWN0aW9uIG9mIHdpZHRoIG9jY3VwaWVkAGp1bmtjY3Bob3RvbWFzay5wbmcASWYgdHJ1ZSwgd29yZCBkZWxpbWl0ZXIgc3BhY2VzIGFyZSBhc3N1bWVkIHRvIGhhdmUgdmFyaWFibGUgd2lkdGgsIGV2ZW4gdGhvdWdoIGNoYXJhY3RlcnMgaGF2ZSBmaXhlZCBwaXRjaC4AU2hvdyBwYXJ0aXRpb24gYm91bmRzAG90aGVyID09IHRoaXMATWVyZ2UgY2FuZGlkYXRlOgBpbiBmaWxlICVzLCBsaW5lICVkAERlYnVnIGxldmVsIGZvciBzcGxpdCBzaGlyby1yZWtoYSBwcm9jZXNzLgBEcmF3IGZpeGVkIHBpdGNoIGNlbGwgYm91bmRhcmllcwBVc2UgdGhlIG5ldyBvdXRsaW5lIGNvbXBsZXhpdHkgbW9kdWxlAGNoZWNrX3BhdGhfbGVnYWwAaW4gZmlsZSAlcywgbGluZSAlZABNYXggYWxsb3dlZCBiZW5kaW5nIG9mIGNob3AgY2VsbHMAU2F5IHdoaWNoIGJsb2NrcyBoYXZlIHRhYmxlcwBTaG93IGltYWdlIGJsb2JzAExpbmVGaW5kaW5nAFZpZ29yb3VzbHkgcmVtb3ZlIG5vaXNlAFVzZSBvcmlnaW5hbCB3aXNlb3dsIHhoZWlnaHQAaW4gZmlsZSAlcywgbGluZSAlZABVc2UgbmV3IGZhc3QgYWxnb3JpdGhtAGluIGZpbGUgJXMsIGxpbmUgJWQAU2hvdyBzdHJva2Ugd2lkdGhzAFNob3cgdGFiIGNhbmRpZGF0ZXMAU2hvdyB0YWJsZSByZWdpb25zAGluIGZpbGUgJXMsIGxpbmUgJWQAbWF4IGZyYWN0aW9uIG9mIG1lYW4gYmxvYiB3aWR0aCBhbGxvd2VkIGZvciB2ZXJ0aWNhbCBnYXBzIGluIHZlcnRpY2FsIHRleHQAUGFydGl0aW9uIGhyZXN1bHQ9JWQsIHZyZXN1bHQ9JWQgZnJvbToAU2NyaXB0IGhhcyBubyB4aGVpZ2h0LCBzbyB1c2UgYSBzaW5nbGUgbW9kZQBBbGwgZG9jIGlzIHByb3BvcnRpYWwgdGV4dAAhd29yZC0+Y2Jsb2JfbGlzdCgpLT5lbXB0eSgpAEJsb2NrICVkIFJvdyAlZDogTm93IEZpeGVkIFBpdGNoIERlY2lzaW9uOiVkIGZwIGZsYWc6JWYKAERpc3BsYXkgc2VwYXJhdGUgd29yZHMARnJhY3Rpb24gb2YgeCB0byBpZ25vcmUARG8gZml4ZWQgcGl0Y2ggY2hvcHBpbmcAaW4gZmlsZSAlcywgbGluZSAlZABpbiBmaWxlICVzLCBsaW5lICVkAAoqKiBubyBzZWFtIHBpY2tlZCAqKiogCgBzZWFtOiAATGFuZ3VhZ2UgbW9kZWwgZGVidWcgbGV2ZWwAR2VuZXJhdGluZyBwYWluIHBvaW50IGZvciBjb2w9JWQgcm93PSVkIHR5cGU9JXMKAChORVcpACVzID0gJWcKAGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkARGlzcGxheSBCbG9icwBQYWluIHBvaW50cyBxdWV1ZSBpcyBlbXB0eQoAaW4gZmlsZSAlcywgbGluZSAlZABNZXJnZSB0aGUgZnJhZ21lbnRzIGluIHRoZSByYXRpbmdzIG1hdHJpeCBhbmQgZGVsZXRlIHRoZW0gYWZ0ZXIgbWVyZ2luZwBTdHJlYW0gYSBmaWxlbGlzdCBmcm9tIHN0ZGluAC0APC9maWxlTmFtZT4KCQk8L3NvdXJjZUltYWdlSW5mb3JtYXRpb24+CgkJPE9DUlByb2Nlc3NpbmcgSUQ9Ik9DUl8wIj4KCQkJPG9jclByb2Nlc3NpbmdTdGVwPgoJCQkJPHByb2Nlc3NpbmdTb2Z0d2FyZT4KCQkJCQk8c29mdHdhcmVOYW1lPnRlc3NlcmFjdCAAaG9jcl9jaGFyX2JveGVzACAgAHEgAAoJIABkb3Rwcm9kdWN0AHBpeHMgbm90IGJpbmFyeQBibWYgbm90IG1hZGUAeCA8IDAgYW5kIGJveCBvZmYgK3F1YWQAYm94MSBhbmQgYm94MiBub3QgYm90aCBkZWZpbmVkAGJveGFkIG5vdCBtYWRlAGludmFsaWQgY29weWZsYWcAcGl4cyBub3QgMSBicHAAV2FybmluZyBpbiAlczoga2VybmVsIHRvbyBsYXJnZTsgcmVkdWNpbmchCgBpbmFycmF5IG5vdCBkZWZpbmVkAGhlaWdodCBtdXN0IGJlID4gMABwaXhkIGRlZmluZWQgYW5kIG5vdCBpbnBsYWNlAHBpeGQgbm90IG51bGwgb3IgcGl4cwBjb25uZWN0aXZpdHkgbm90IDQgb3IgOABwaXhzIG5vdCA4IGJwcABtdXN0IGJlIHJnYiBjb2xvcgBwaXhzIG5vdCBkZWZpbmVkAHBpeHMgbm90IDMyIGJwcABib3hhIG5vdCBkZWZpbmVkAGNtYXAgbm90IG1hZGUAcHRhcyBub3QgZGVmaW5lZABpbnZhbGlkIGRlcHRoAHdpdGggcG9pbnRzAFdhcm5pbmcgaW4gJXM6IHdpZHRoIDwgMTsgc2V0dGluZyB0byAxCgBwaXhzIG5vdCA4IGJwcABkZXB0aCBub3QgOCBvciAzMgBtdXN0IGJlIDggYnBwIGZvciBkaXRoZXJpbmcAdGFidmFsIG5vdCBtYWRlAHB0ciBhcnJheSBub3QgbWFkZQBkYXRhIG5vdCBhbGxvY2F0ZWQAcGl4ZCBub3QgcmV0dXJuZWQAcGl4cyBtdXN0IGJlIDEgYnBwAHBpeHMgbXVzdCBiZSAxIGJwcABwaXhzIG5vdCAxIGJwcABwaXhzIG5vdCAzMiBicHAAcGl4MSB1bmRlZmluZWQgb3Igbm90IDEgYnBwAHBpeDEgbm90IGRlZmluZWQAc2VxdWVuY2Ugbm90IGRlZmluZWQAc2VxdWVuY2Ugbm90IGRlZmluZWQAbnVtYmVyIGFycmF5IG5vdCBtYWRlAG5hMSwgbmEyIHNpemVzIGRpZmZlcgBzaXplIG11c3QgYmUgPiAwAGJ5dGUgYXJyYXkgbm90IG1hZGUAY2NiYSBwdHJzIG5vdCBtYWRlAEVycm9yIGluICVzOiBwaXggdG9vIHNtYWxsOiB3ID0gJWQsIGggPSAlZAoAbm8gY29sb3JtYXAAYmEgYXJyYXkgbm90IG1hZGUAZmlsZW91dCBub3QgZGVmaW5lZABkb3VibGUgYXJyYXkgbm90IG1hZGUAaXN0YXJ0ID4gaWVuZDsgbm90aGluZyB0byBhZGQAcmVkdWN0aW9uIG5vdCBpbiB7MSwyLDQsOH0AaW1hZ2UgZmlsZSBub3QgZm91bmQAJm5ieXRlcyBub3QgZGVmaW5lZABwaXhfbWFsbG9jIGZhaWwgZm9yIGRhdGEAcGl4czIgbm90IGRlZmluZWQAcGl4IG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IG5vIG1hc2s7IG5vdGhpbmcgdG8gZG8KAGRlcHRoIG5vdCBpbiB7MSwyLDQsOCwxNn0AcGl4YSBub3QgZGVmaW5lZABwaXggcHRycyBub3QgbWFkZQBwaXggbm90IG1hZGUAY29ubmVjdGl2aXR5IG5vdCA0IG9yIDgAbm8gY29tcG9uZW50czsgbm8gc2l6ZQBwaXhzIG5vdCA4LCAxNiBvciAzMiBicHAAaW52YWxpZCBjb21wdHlwZQBwaXhzIG5vdCA4IGJwcABpbnZhbGlkIHdpZHRoIHNwZWMAMS40LjIyAHB0YXMgbm90IGRlZmluZWQAeCBhcnJheSBub3QgbWFkZQBzdWJmYWN0b3IgPCAxAGRhaGFzaCBub3QgbWFkZQBpbnZhbGlkIHNvcnQgdHlwZQBwdHIgYXJyYXkgbm90IG1hZGUAdHJlZSBpcyBudWxsCgBkYXRhIG5vdCByZWFkAGhlYWRlciByZWFkIGZhaWxlZABwaXhSZWFkU3RyZWFtR2lmAHBpeFJlYWRKcDJrAHNhIG5vdCBtYWRlAHBpeHMgbm90IGRlZmluZWQAT3BlcmF0aW9uICVkIGludmFsaWQKAHF1YWRzIG5vdCBpbiB7MCwxLDIsM30AaW52YWxpZCBpbmNvbG9yIHZhbHVlAGRlcHRoIG11c3QgYmUgOCBvciAxNiBicHAAbiBtdXN0IGJlID4gMABpbnZhbGlkOiBub3QgaW4tcGxhY2UAcGl4cyBub3QgYmluYXJ5AHBpeCBkaW1lbnNpb24gcmVkdWNlZCB0byAwAHNyb3cgbm90IG1hZGUAcGl4bSB1bmRlZmluZWQgb3Igbm90IDEgYnBwAHB0ciBhcnJheSBub3QgbWFkZQBFcnJvciBpbiAlczogc2hvdWxkbid0IGdldCBoZXJlIQoAc2VsYSBub3QgbWFkZQBzZWxfJWRoAGludmFsaWQgaW5jb2xvciB2YWx1ZQBwaXhzIGlzIDEgYnBwAGludmFsaWQgdHlwZQByZWRzZWFyY2ggbm90IGluIHsxLDIsNH0AZGF0YSBub3QgcmVhZABXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBOVUxMCgBzdHJjb2RlIG5vdCBtYWRlAGludmFsaWQgbG9jYXRpb24AaW1hZ2UgZmlsZSBub3QgZm91bmQARXJyb3IgaW4gJXM6ICVzCgBkZXN0IG5vdCBtYWRlAHBpeFJlYWRTdHJlYW1XZWJQAGZpbGVvdXQgbm90IGRlZmluZWQAYm1wAEVycm9yIGluICVzOiBjYWxsb2MgZmFpbCBmb3IgYnVmZmVyCgBBTElHTl9UWVBFIGlzIHdyb25nLCBwbGVhc2UgZml4ACVsZCVjAFBvdGVudGlhbCBvdmVyZmxvdyBpbiBwbmdfemFsbG9jKCkASW5jb21wYXRpYmxlIGxpYnBuZyB2ZXJzaW9uIGluIGFwcGxpY2F0aW9uIGFuZCBsaWJyYXJ5AEl0J3MgYW4gZXJyb3IgdG8gc2V0IGJvdGggcmVhZF9kYXRhX2ZuIGFuZCB3cml0ZV9kYXRhX2ZuIGluIHRoZSAAQXBwbGljYXRpb24gbXVzdCBzdXBwbHkgYSBrbm93biBiYWNrZ3JvdW5kIGdhbW1hAE5vdCBhIFBORyBmaWxlAFNldHRpbmcgZ2FtbWE9MABBdHRlbXB0ZWQgdG8gc2V0IGJvdGggcmVhZF9kYXRhX2ZuIGFuZCB3cml0ZV9kYXRhX2ZuIGluAFdyaXRpbmcgemVyby1sZW5ndGggdW5rbm93biBjaHVuawBJbnZhbGlkIGJpdCBkZXB0aCBmb3IgUkdCIGltYWdlAE5vIHNwYWNlIGZvciAiVHJhbnNmZXJGdW5jdGlvbiIgdGFnAExaVwBzdHJpcABEaXJlY3RvcnkgJWQgZG9lcyBub3QgZXhpc3QAX1RJRkZTZXR1cEZpZWxkSW5mbwAlczogaW52YWxpZCBUSUZGIGRpcmVjdG9yeTsgdGFncyBhcmUgbm90IHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIAbiA+IDAAdGlmX2ZheDMuYwBFcnJvciBmZXRjaGluZyBkaXJlY3RvcnkgY291bnQAU29ycnksIGNhbiBub3QgaGFuZGxlIGltYWdlcyB3aXRoICVkLWJpdCBzYW1wbGVzAHRpZl9qcGVnLmMAdGlmX2x1di5jAHRpZl9sencuYwB0aWZfb2pwZWcuYwAlczogT3V0IG9mIG1lbW9yeSAoVElGRiBzdHJ1Y3R1cmUpAFBhY2tCaXRzRGVjb2RlOiBOb3QgZW5vdWdoIGRhdGEgZm9yIHNjYW5saW5lICVsZAB0aWZfcGl4YXJsb2cuYwB0aWZfcHJlZGljdC5jAHRpZl9leHRlbnNpb24uYwAgIFN1YmZpbGUgVHlwZToAJWx1OiBTdHJpcCBvdXQgb2YgcmFuZ2UsIG1heCAlbHUAVElGRk51bWJlck9mU3RyaXBzAE5vdCBlbm91Z2gAJWx1OiBSb3cgb3V0IG9mIHJhbmdlLCBtYXggJWx1ACVzOiAAJWQ6IFNhbXBsZSBvdXQgb2YgcmFuZ2UsIG1heCAlZAB0aWZfemlwLmMAaW5jb3JyZWN0IGhlYWRlciBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIGNvZGUAc3RyZWFtIGVuZAB0ZXNzX3dvdWxkX2FkYXB0IGJpdCBpcyBmYWxzZQoAICAgQm94ZXMgcmVhZCBmcm9tIGJveGZpbGU6ICAlNmQKAHdiAFJFSkVDVElORyBCTE9DSyAlZCAgI2NoYXJzOiAlZDsgICNSZWplY3RzOiAlZAoARVhUUkFDVEVEICglZCk6ICIAT0sARmFpbGVkIHRvIHJlYWQgYm94ZXMgZnJvbSAlcwoAaW4gZmlsZSAlcywgbGluZSAlZABGcmFrdHVyAGluIGZpbGUgJXMsIGxpbmUgJWQAaW4gZmlsZSAlcywgbGluZSAlZAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NtYWluL3BhZ2VzZWdtYWluLmNwcABtb2RlbAAKV29yZCBkYXRhLi4uCgBFcnJvcjogQ291bGQgbm90IG9wZW4gZmlsZSAlcwoAc2V0X2RvbmUoKTogZG9uZT0lZAoAaW4gZmlsZSAlcywgbGluZSAlZABDYW5kaWRhdGUgZm9yIHN1cGVyc2NyaXB0IGRldGVjdGlvbjogJXMgKAB0ZXNzY29uZmlncy8AdGVzc2VkaXRfcmVzZWdtZW50X2Zyb21fbGluZV9ib3hlcwBpbiBmaWxlICVzLCBsaW5lICVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY21haW4vd2VyZGl0LmNwcAAgQ2hvaWNlIAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3QvYmxvYmJveC5jcHAAJWQgJWQgJWQgJWQgJSpzAENhbid0IG9wZW4gYm94IGZpbGUgJXMAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L2JveHdvcmQuY3BwAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3N0cnVjdC9jb3V0bG4uY3BwAFJlc3VsdCA9ICVkCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3QvZHBwb2ludC5jcHAAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L2ZvbnRpbmZvLmNwcABpbiBmaWxlICVzLCBsaW5lICVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3N0cnVjdC9tYXRyaXguY3BwAEJsb2NrIHJvdGF0aW9uICVnLCAlZwoARkFMU0UAUklHSFQAWGhlaWdodD0gJWYKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3N0cnVjdC9wYWdlcmVzLmNwcABQVFJBSU5fRElHSVRTX0xPTkcAWSBjb29yZGluYXRlIGluIGJsb2NrIG91dCBvZiBib3VuZHMASGVhZGluZyBUZXh0AE5PUk0AKS0+KABGAAoAKCVkLCVkKS0tKCVkLCVkKQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3Qvc3RhdGlzdGMuY3BwACAgIFdfU0VHTUVOVEVEID0gJXMKAGluIGZpbGUgJXMsIGxpbmUgJWQAdXNlX2FtYmlnc19mb3JfYWRhcHRpb24AQ2FuJ3QgZXhjaGFuZ2UgZGVsZXRlZCBlbGVtZW50cyBvZiBsaXN0cwBDYW4ndCBleGNoYW5nZSBkZWxldGVkIGVsZW1lbnRzIG9mIGxpc3RzAENhbid0IGV4Y2hhbmdlIGRlbGV0ZWQgZWxlbWVudHMgb2YgbGlzdHMALwAlZAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3NlcmlhbGlzLmNwcABpbiBmaWxlICVzLCBsaW5lICVkAGlzX2xvYWRlZF8ARmlsZSB0byBzZW5kIHRwcmludGYgb3V0cHV0IHRvAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhci5jcHAAQ29kZSBzcGFjZSBleHBhbmRlZCBmcm9tIG9yaWdpbmFsIHVuaWNoYXJzZXQhIQoAxb9oAOKAqgAgICBJZCAgTkMgTlBDICBOUCBOUFAKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jbGFzc2lmeS9hZGFwdG1hdGNoLmNwcAAKAHByaW9yaXRpemVfZGl2aXNpb24AL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NsYXNzaWZ5L2NsdXN0ZXIuY3BwAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jbGFzc2lmeS9jbHVzdHRvb2wuY3BwACAAaWYALTEgaGl0CgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2xhc3NpZnkvaW50ZmVhdHVyZW1hcC5jcHAARmVhdHVyZSBmYWlsZWQgdG8gbWFwIHRvIGEgdmFsaWQgaW5kZXg6AE1hdGNoIENvbXBsZXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2xhc3NpZnkvbWYuY3BwAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jbGFzc2lmeS9tZm91dGxpbmUuY3BwAGluIGZpbGUgJXMsIGxpbmUgJWQAZGVidWcAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NsYXNzaWZ5L3Byb3Rvcy5jcHAAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NsYXNzaWZ5L3NoYXBlY2xhc3NpZmllci5jcHAAIE51bSB1bmljaGFycz0AY2hhcl9mZWF0dXJlcy0+TnVtRmVhdHVyZXMgPT0gMQBmb250X2NsYXNzX2FycmF5XyAhPSBudWxscHRyAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jdXRpbC9lbWFsbG9jLmNwcAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY3V0aWwvb2xkbGlzdC5jcHAAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgAd29yZF9maWxlAEEgZmlsZW5hbWUgb2YgdXNlci1wcm92aWRlZCB3b3Jkcy4AaW4gZmlsZSAlcywgbGluZSAlZABTVUJOT1JNQUwACgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9uZXR3b3JraW8uaAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9uZXR3b3JraW8uaAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9mdWxseWNvbm5lY3RlZC5jcHAASW1hZ2UgdG9vIHNtYWxsIHRvIHNjYWxlISEgKCVkeCVkIHZzIG1pbiB3aWR0aCBvZiAlZCkKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL2xzdG0uY3BwAExpbmUgY2Fubm90IGJlIHJlY29nbml6ZWQhIQoATXVzdCBzdXBwbHkgdGhlIG9sZCB0cmFpbmVkZGF0YSBmb3IgY29kZSBjb252ZXJzaW9uIQoALABpbiBmaWxlICVzLCBsaW5lICVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL25ldHdvcmtidWlsZGVyLmNwcAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9uZXR3b3JraW8uY3BwAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL3BhcmFsbGVsLmNwcAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9wbHVtYmluZy5jcHAAIHNjb3JlPSVnLCBjPSVnLCVzJXMlcyBwZXJtPSVkLCBoYXNoPSVsbHgALAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9uZXR3b3Jrc2NyYXRjaC5oAFRvdGFsIHdlaWdodHMgPSAlZAoAUm93IGVtcHR5IGF0OgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC9iYmdyaWQuY3BwAFRlc3RpbmcgdW5kZXJsaW5lIG9uIGJsb2IgYXQgKCVkLCVkKS0+KCVkLCVkKSwgYmFzZT0lZApPY2NzOgBBdCAlZCwgJWQsIG5vaXNlID0gJWQsIGdvb2Q9JWQsIG9yaWc9JWQsIHRocj0lZAoAUGFnZSBkb2Vzbid0IHNlZW0gdG8gY29udGFpbiBmaXhlZCBwaXRjaCByb3dzCgBpbiBmaWxlICVzLCBsaW5lICVkAE1lcmdpbmc6aG92ZXJsYXA9JWQsIHZvdmVybGFwPSVkLCBPTEk9JWQKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL2NvbHBhcnRpdGlvbnNldC5jcHAAZGVidWcAY2hhaW5zdW09JWQAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL3RleHRvcmQvZXF1YXRpb25kZXRlY3RiYXNlLmNwcABDYXNjYWRlUmVkdWNlZAB2aGxpbmVmaW5kaW5nLnBkZgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC9waXRoc3luYy5jcHAAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL3RleHRvcmQvc2NhbmVkZy5jcHAAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL3RleHRvcmQvdGFibGVyZWNvZy5jcHAAR3JhZGllbnRzOiB0b3AgPSAlZCwgYm90dG9tID0gJWQsIGxlZnQ9ICVkLCByaWdodD0gJWQgZm9yIGJveDoAdG9zcF9vbGRfdG9fbWV0aG9kAGluIGZpbGUgJXMsIGxpbmUgJWQAQjolZCBSOiVkIC0tIEluYWRlcXVhdGUgY2VydGFpbiBzcGFjZXMuCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC93b3JraW5ncGFydHNldC5jcHAAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL3dvcmRyZWMvYXNzb2NpYXRlLmNwcABibG9iX251bWJlciBmcm9tIGZpeHB0ID0gJWQKAE9sZCBzZWFtIHN0YXlpbmcgd2l0aCBwcmlvcml0eSAlZwoAbGFuZ3VhZ2VfbW9kZWxfbmdyYW1fb24ARGlzY2FyZGVkIHBhaW4gcG9pbnQgd2l0aCBhIGJhZCBzaGFwZQoAIHN0cj0lcwBQYXJhbXNNb2RlbDo6SW5jb21wbGV0ZSBsaW5lICVzCgBpbiBmaWxlICVzLCBsaW5lICVkAG51bV9mdXRpbGVfY2xhc3NpZmljYXRpb25zICVkCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvd29yZHJlYy90ZmFjZS5jcHAAd29yZHJlY19lbmFibGVfYXNzb2MAc3Rkb3V0ADwvc29mdHdhcmVOYW1lPgoJCQkJPC9wcm9jZXNzaW5nU29mdHdhcmU+CgkJCTwvb2NyUHJvY2Vzc2luZ1N0ZXA+CgkJPC9PQ1JQcm9jZXNzaW5nPgoJPC9EZXNjcmlwdGlvbj4KCTxMYXlvdXQ+CgAgIDxkaXYgY2xhc3M9J29jcl9wYWdlJwAKACAwIDAgACAARnVuY3Rpb24gdXNlZCBmb3IgY2FsY3VsYXRpb24gb2YgZG90IHByb2R1Y3QAdGFiIG5vdCBtYWRlAEluZm8gaW4gJXM6IEdlbmVyYXRpbmcgcGl4YSBvZiBiaXRtYXAgZm9udHMgZnJvbSBmaWxlCgB5IDwgMCBhbmQgYm94IG9mZiArcXVhZABib3hhcyBub3QgZGVmaW5lZABib3hzIG5vdCBmb3VuZABXYXJuaW5nIGluICVzOiBib3hhcyBpcyBlbXB0eQoAY29ubmVjdGl2aXR5IG5vdCA0IG9yIDgASW5mbyBpbiAlczogd2MgPSAlZCwgaGMgPSAlZAoAaW5zaXplIG5vdCA+IDAARXJyb3IgaW4gJXM6IHJlcXVlc3RlZCB3ID0gJWQsIGggPSAlZAoAbm90IGNtYXBwZWQgb3IgcmdiAFdhcm5pbmcgaW4gJXM6IGdhbW1hIG11c3QgYmUgPiAwLjA7IHNldHRpbmcgdG8gMS4wCgBwaXhzIG5vdCBkZWZpbmVkAGludmFsaWQgb3JpZW50ZmxhZwBwaXhkIG5vdCBtYWRlAG1pbmdyYXkgPiAyNTUAY29sb3JzIG11c3QgYmUgaW4gWzEyOCwgMjQwXQBpbnZhbGlkIHR5cGUAY3RhIG5vdCBtYWRlAHB0YWQgbm90IGRlZmluZWQAZnBpeGQgbm90IG1hZGUAd2l0aCBpbXB1bHNlcwBwdGFqIG5vdCBtYWRlAGhzaXplIG9yIHZzaXplIDwgMQBwaXhzIG5vdCA4IG9yIDMyIGJwcABpbnZhbGlkIHZhbHVlIGZvciBsb3dlcmNsaXAAdGFiMzggbm90IG1hZGUAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTAoAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTCEKAHBpeHQgbm90IG1hZGUAc2VsIGluZGV4IG5vdCBmb3VuZABzZWwgaW5kZXggbm90IGZvdW5kAGhzaXplIGFuZCB2c2l6ZSBub3QgPj0gMQBpbnZhbGlkIG1vcnBoIHR5cGUAcGl4MiB1bmRlZmluZWQgb3Igbm90IDEgYnBwAHBpeDIgbm90IGRlZmluZWQAYm94YSBub3QgbWFkZQArAGlhcnJheSBub3QgZGVmaW5lZABuYWQgZGVmaW5lZCBidXQgbm90IGluLXBsYWNlAFdhcm5pbmcgaW4gJXM6IHNlbCBzaXplIG11c3QgYmUgb2RkOyBpbmNyZWFzaW5nIGJ5IDEKAFdhcm5pbmcgaW4gJXM6IHB0ciBhZGRyZXNzIGlzIE5VTEwKAFdhcm5pbmcgaW4gJXM6IHB0ciBhZGRyZXNzIGlzIE5VTEwhCgBsZXB0AGRlcHRoIG5vdCBpbiB7MSwyLDQsOH0AZGF0YSBub3QgZGVmaW5lZABzYSBub3QgbWFkZQBpYXJyYXkgbm90IGRlZmluZWQAZGFhIG5vdCBkZWZpbmVkAGltYWdlIGZpbGUgbm90IGZvdW5kAGZwIG5vdCBkZWZpbmVkAHBpeCBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkAG1peGluZyBncmF5IG9yIGNvbG9yIHdpdGggMSBicHAAZGVwdGggbXVzdCBiZSBpbiB7MSwyLDQsOCwxNiwzMn0gYnBwAHBpeG0gbm90IDEgYnBwAHNhbXBsaW5nIG11c3QgYmUgPj0gMQAmZnJhY3Qgbm90IGRlZmluZWQAYm94YSBub3QgbWFkZQBwaXggbm90IGRlZmluZWQAaW52YWxpZCB0eXBlAFdhcm5pbmcgaW4gJXM6IG5vIGNvbXBvbmVudHM7IHJldHVybmluZyBlbXB0eSAxIGJwcCBwaXgKAHZhbCA8IDAuMABwaXhjIG5vdCBtYWRlAG5sZXZlbHMgbXVzdCBiZSBhdCBsZWFzdCAyAGludmFsaWQgaGVpZ2h0IHNwZWMAcG5nX3B0ciBub3QgbWFkZQBwdGFkIG5vdCBkZWZpbmVkAHkgYXJyYXkgbm90IG1hZGUAcHRhZCBub3QgZGVmaW5lZABkbmEgcHRyIGFycmF5IG5vdCBtYWRlAGludmFsaWQgc29ydCBvcmRlcgBXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBOVUxMCgBFcnJvciBpbiAlczogdHJlZSBpcyBudWxsCgBjZGF0YSBub3QgZGVmaW5lZABpbnZhbGlkIGJwcwBwaXhXcml0ZVN0cmVhbUdpZgBwaXhSZWFkU3RyZWFtSnAyawBzYSBub3QgZGVmaW5lZABkZXB0aHMgb2YgcGl4cyBhbmQgcGl4ZCBkaWZmZXIAT3BlcmF0aW9uICV4IGludmFsaWQKAHBpeHMgbm90IGluIHsxLDIsNCw4LDE2LDMyfSBicHAAV2FybmluZyBpbiAlczogJTYuMmYgcmFkaWFuczsgbGFyZ2UgYW5nbGUgZm9yIHNoZWFyIHJvdGF0aW9uCgBuYW5nbGVzIG5vdCBpbiB7Miw0LDYsOH0AaW5pdHN0ciBub3QgZGVmaW5lZABuYWluZGV4IG5vdCBkZWZpbmVkAGludmFsaWQgc2NhbGUgZmFjdG9yOiA8PSAwAG5laXRoZXIgd2Qgbm9yIGhkID4gMABzY29sIG5vdCBtYWRlAGNvbm5lY3Rpdml0eSBub3QgaW4gezQsOH0AV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTAoAc2VsIHB0cnMgbm90IG1hZGUAc2VsXyVkdgBwaXhzIGlzIGNvbG9ybWFwcGVkAHBpeHMgbXVzdCBiZSAzMiBicHAAaW52YWxpZCBpbmNvbG9yAHJlZHN3ZWVwIG5vdCBpbiB7MSwyLDR9AHBpeCBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBtZW1vcnkgbGVhayBvZiAlZCBpdGVtcyBpbiBsc3RhY2sKAGZpbGVpbiBub3QgZGVmaW5lZABFcnJvciBpbiAlczogbm8gYml0bWFwIGZvbnRzOyByZXR1cm5pbmcgYSBjb3B5CgBzdHJlYW0gbm90IGRlZmluZWQAJnNhbWUgbm90IGRlZmluZWQAZGVzdCBub3QgZGVmaW5lZABwaXhSZWFkTWVtV2ViUABpbWFnZSBub3QgcmVhZCBmcm9tIGZpbGUAanBnADEuMi41AE1BWF9BTExPQ19DSFVOSyBpcyB3cm9uZywgcGxlYXNlIGZpeABVbmtub3duIGZyZWVyIHBhcmFtZXRlciBpbiBwbmdfZGF0YV9mcmVlcgAxLjIuNQBzYW1lIHN0cnVjdHVyZS4gIFJlc2V0dGluZyB3cml0ZV9kYXRhX2ZuIHRvIE5VTEwAaWdub3Jpbmcgb3V0IG9mIHJhbmdlIHJnYl90b19ncmF5IGNvZWZmaWNpZW50cwBQTkcgZmlsZSBjb3JydXB0ZWQgYnkgQVNDSUkgY29udmVyc2lvbgBTZXR0aW5nIG5lZ2F0aXZlIGdhbW1hIHRvIHplcm8AdGhlIHNhbWUgc3RydWN0dXJlLiAgUmVzZXR0aW5nIHJlYWRfZGF0YV9mbiB0byBOVUxMAFZhbGlkIHBhbGV0dGUgcmVxdWlyZWQgZm9yIHBhbGV0dGVkIGltYWdlcwBJbnZhbGlkIGJpdCBkZXB0aCBmb3IgcGFsZXR0ZWQgaW1hZ2UAUGFja0JpdHMAdGlsZQBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBsaW5rAFNldHRpbmcgdXAgZmllbGQgaW5mbyBmYWlsZWQAJXM6IHdyb25nIGRhdGEgdHlwZSAlZCBmb3IgIiVzIjsgdGFnIGlnbm9yZWQAdGlmX2R1bXBtb2RlLmMAVElGRkluaXRDQ0lUVEZheDMARXJyb3IgZmV0Y2hpbmcgZGlyZWN0b3J5IGxpbmsATWlzc2luZyBuZWVkZWQgJXMgdGFnAE1lcmdpbmcgSlBFRyBjb2RlYy1zcGVjaWZpYyB0YWdzIGZhaWxlZABNZXJnaW5nIFNHSUxvZyBjb2RlYy1zcGVjaWZpYyB0YWdzIGZhaWxlZABObyBzcGFjZSBmb3IgTFpXIHN0YXRlIGJsb2NrAE1lcmdpbmcgT2xkIEpQRUcgY29kZWMtc3BlY2lmaWMgdGFncyBmYWlsZWQAT25lIG9mIHRoZSBjbGllbnQgcHJvY2VkdXJlcyBpcyBOVUxMIHBvaW50ZXIuAE1lcmdpbmcgUGl4YXJMb2cgY29kZWMtc3BlY2lmaWMgdGFncyBmYWlsZWQATWVyZ2luZyBQcmVkaWN0b3IgY29kZWMtc3BlY2lmaWMgdGFncyBmYWlsZWQAbGluay0+bmFtZSAhPSBOVUxMACAAQ29tcHJlc3Npb24gc2NoZW1lIGRvZXMgbm90IHN1cHBvcnQgYWNjZXNzIHRvIHJhdyB1bmNvbXByZXNzZWQgZGF0YQBJbnZhbGlkIFlDYkNyIHN1YnNhbXBsaW5nAFRvbyBtdWNoACVsdTogRGVwdGggb3V0IG9mIHJhbmdlLCBtYXggJWx1AFdhcm5pbmcsIABDYW4gbm90IGdyb3cgaW1hZ2UgYnkgc3RyaXBzIHdoZW4gdXNpbmcgc2VwYXJhdGUgcGxhbmVzAE1lcmdpbmcgRGVmbGF0ZSBjb2RlYy1zcGVjaWZpYyB0YWdzIGZhaWxlZAB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAAHRlc3NfYWNjZXB0ZWQgYml0IGlzIGZhbHNlCgAgICBCb3hlcyBmYWlsZWQgcmVzZWdtZW50YXRpb246ICAlNmQKAEVycm9yLCBmYWlsZWQgdG8gb3BlbiBmaWxlICIlcyIKAE5PVCBSRUpFQ1RJTkcgQkxPQ0sgJWQgI2NoYXJzOiAlZCAgIyBSZWplY3RzOiAlZDsgCgBlcXVhdGlvbmRldGVjdF9zYXZlX3NwdF9pbWFnZQBURVNURUQgKCVkKTogIgBDbGFzcyAlczogaGVpZ2h0PSVkLCBib3R0b209JWQsJWQgdG9wPSVkLCVkLCBhY3R1YWw9JWQsJWQ6IABGYWlsZWQgdG8gcmVhZCBwYWdlcyBmcm9tICVzCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NtYWluL2x0cnJlc3VsdGl0ZXJhdG9yLmNwcABDb21tb24AL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjbWFpbi9vdXRwdXQuY3BwAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY21haW4vcGFnZWl0ZXJhdG9yLmNwcAAAWyUzZCwlM2Q7JTNkLCUzZF0AQ3VycmVudCBibGFtZXIgZGVidWc6ICVzCgBvdXRwdXRfZmlsZQAAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjbWFpbi9yZXN1bHRpdGVyYXRvci5jcHAAJWQuJWQgJXMtbGVhZGluZyAAZW5nAENvbnZlcnNpb24gb2Ygd29yZC9saW5lIGJveCBmaWxlIHRvIGNoYXIgYm94IGZpbGUAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjbWFpbi90ZmFjZXBwLmNwcABBc3NlcnQgZmFpbGVkAAoAcGl0Y2g9JWQsIGZwPSVnLCBmcHM9JWcsIGZwbnM9JWcsIHBycz0lZywgcHJucz0lZywgc3BhY2luZz0lZyB4aD0lZyB5X29yaWdpbj0lZyB4ZXY9JWQsIGFzYz0lZywgZGVzYz0lZywgYm9keT0lZywgbWluc3A9JWQgbWF4bnNwPSVkLCB0aHI9JWQga2Vybj0lZyBzcD0lZwoAVVpOIGZpbGUgJXMgbG9hZGVkLgoAIABBc3NlcnQgZmFpbGVkAHBvcy54ICgpID09IHN0YXJ0cHQueCAoKSAmJiBwb3MueSAoKSA9PSBzdGFydHB0LnkgKCkAbWluID0gJWQsIG1heD0lZAoAQXNzZXJ0IGZhaWxlZAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3QvaW1hZ2VkYXRhLmNwcABSYXRpbmdzIE1hdHJpeCAodG9wIDMgY2hvaWNlcykKAElucHV0IE9yaWdpbiA9ICglZywgJWcpCgBLZXJuaW5nPSAlZAoAQ0VOVEVSAEFzY3Jpc2U9ICVmCgByYXdfY2hvaWNlIGhhcyB0b3RhbCBvZiBzdGF0ZXMgPSAlZCB2cyByYXRpbmdzIGRpbSBvZiAlZAoAUFRSQUlOX05VTV9TSE9SVABDYW4ndCBmaW5kIHJlY3RhbmdsZSBmb3IgbGluZQBwb2x5X3dpZGVfb2JqZWN0c19iZXR0ZXIAUHVsbG91dCBUZXh0AFNVQgBSX1NNQUxMX1hIVDogJXMKACVzCgBkZWJ1ZwAlNGQ6JS0zZCAAVFJVRQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL2FtYmlncy5jcHAAVXNlIGFtYmlncyBmb3IgZGVjaWRpbmcgd2hldGhlciB0byBhZGFwdCB0byBhIGNoYXJhY3RlcgBDTElTVF9JVEVSQVRPUi5leGNoYW5nZQBFTElTVF9JVEVSQVRPUi5leGNoYW5nZQBFTElTVDJfSVRFUkFUT1IuZXhjaGFuZ2UAXAAxAHNpemUgPiAwAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvc3RybmdzLmNwcABpbiBmaWxlICVzLCBsaW5lICVkAHdiAEVSUk9SOiBJbGxlZ2FsIFVURjggZW5jb3VudGVyZWQuCgAA7oCGAOKArAAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KAEFEIE1hdGNoZXMgPSAgACAAUHJpb3JpdGl6ZSBibG9iIGRpdmlzaW9uIG92ZXIgY2hvcHBpbmcAISJEaXN0cmlidXRpb24gY291bnQgbm90IGFsbG93ZWQhIgAlZABDbGFzc0lkID49IDAgJiYgQ2xhc3NJZCA8IE1BWF9OVU1fQ0xBU1NFUwB0YgAtMiBoaXQKACglZCwlZCk6JWQKACglZCwlZCk6JWQKAEZpbmQgQmFkIEZlYXR1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KAGNsYXNzaWZ5X2NwX2FuZ2xlX3BhZF9sb29zZQBBc3NlcnQgZmFpbGVkAEFzc2VydCBmYWlsZWQAY2xhc3NpZnlfbWF4X3Nsb3BlAGNsYXNzaWZ5X25vcm1fYWRqX2N1cmwAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NsYXNzaWZ5L29jcmZlYXR1cmVzLmNwcABkaXNwbGF5AE5ld051bVByb3RvcyA8PSBNQVhfTlVNX1BST1RPUwAlcwoAIGNfaWQ9AGluIGZpbGUgJXMsIGxpbmUgJWQAaW4gZmlsZSAlcywgbGluZSAlZABCdWZmZXIgIT0gbnVsbHB0cgBBc3NlcnQgZmFpbGVkAEFzc2VydCBmYWlsZWQAaW4gZmlsZSAlcywgbGluZSAlZAB1c2VyX3dvcmRzX3N1ZmZpeAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvZGljdC9wZXJtZGF3Zy5jcHAASU5DT05TSVNURU5UAGVkZ2VfY2hhcl9vZih0aGVfbmV4dF9ub2RlLCBOT19FREdFLCBCQUNLV0FSRF9FREdFLCBmYWxzZSwgdW5pY2hhcl9pZCwgJmJhY2tfZWRnZV9wdHIsICZiYWNrX2VkZ2VfaW5kZXgpAEFzc2VydCBmYWlsZWQAQXNzZXJ0IGZhaWxlZABvdGhlci50eXBlKCkgPT0gdHlwZV8AYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQBMU1RNIFNvZnRtYXgASW1hZ2UgdG9vIGxhcmdlIHRvIGxlYXJuISEgU2l6ZSA9ICVkeCVkCgBvbGRfbWdyLkluaXQob2xkX3RyYWluZWRkYXRhKQBNdXN0IG92ZXJyaWRlIE5ldHdvcms6OkRlYnVnV2VpZ2h0cyBmb3IgdHlwZSAlZAoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2xzdG0vbmV0d29yay5jcHAAWWlrZXMhIFNwbGl0dGluZyBjdXJyZW50IG5ldHdvcmsgZmFpbGVkISEKACAlZwBuZXR3b3JrX2lvXyA9PSBudWxscHRyAG5pXyA9PSBuZXR3b3JrLT5OdW1JbnB1dHMoKQAgRGF3Z1N0YXJ0AE11c3Qgb3ZlcnJpZGUgTmV0d29yazo6RGVidWdXZWlnaHRzIGZvciB0eXBlICVkCgBBc3NlcnQgZmFpbGVkAE51bSAoRXh0ZW5kZWQpIG91dHB1dHMsd2VpZ2h0cyBpbiBTZXJpZXM6CgB0ZXh0b3JkX2RlYnVnX2J1Z3MATW9kZSBhdCAlZyBoYXMgZXJyb3IgJWcgZnJvbSBtb2RlbCAKAEFzc2VydCBmYWlsZWQAJWQgJWQgJWQKAGdyaWRfeCA+PSAwICYmIGdyaWRfeCA8IGdyaWR3aWR0aCgpAGNvbXB1dGVfZml4ZWRfcGl0Y2hfY2prIGZpbmlzaGVkIGFmdGVyICV1IGl0ZXJhdGlvbiAobGltaXQ9JXUpCgB0ZXh0b3JkX3RhYmZpbmRfc2hvd19yZWplY3RfYmxvYnMAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL3RleHRvcmQvY29scGFydGl0aW9uLmNwcABPdmVybGFwcGVkIHdoZW4gbWVyZ2VkIHdpdGggaW5jcmVhc2UgJWQ6IABDb25zaWRlcmluZyBuZXcgY29sdW1uIGNhbmRpZGF0ZToKAGRldmFuYWdhcmlfc3BsaXRfZGVidWdpbWFnZQBkaXNwbGF5AGVkZ2VzX21heF9jaGlsZHJlbl9wZXJfb3V0bGluZQBBc3NlcnQgZmFpbGVkAHRleHRvcmRfZnBfY2hvcF9zbmFwAGdhcG1hcF91c2VfZW5kcwBIYWxmdG9uZU1hc2sARmluZGluZyBsaW5lIHZlY3RvciBzdGFydGluZyBhdCBiYm94ICglZCwlZCkKAHRleHRvcmRfc2hvd19pbml0aWFsX3Jvd3MAdGV4dG9yZF9vbGRibF9kZWJ1ZwBiZXN0X2Zha2UgPCBJTlQxNl9NQVgAcGl0c3luY19qb2luZWRfZWRnZQB0cmlnaHQueSgpIDw9IGhlaWdodAB0ZXh0b3JkX3RhYmZpbmRfb25seV9zdHJva2V3aWR0aHMAdGV4dG9yZF90YWJmaW5kX3Nob3dfZmluYWx0YWJzAHRleHRvcmRfdGFibGVmaW5kX3Nob3dfbWFyawAwIDw9IGNvbHVtbiAmJiBjb2x1bW4gPCBjb2x1bW5fY291bnQoKQB0ZXh0b3JkX3RhYnZlY3Rvcl92ZXJ0aWNhbF9ib3hfcmF0aW8AQm91bmRpbmcgYm94PSglZCwlZCktPiglZCwlZCkKAFNwYWNlIHN0YXRzIHVzZSBwcmVjaG9wcGluZz8AdGV4dG9yZF9kZWJ1Z19waXRjaF90ZXN0AC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL3RvcmRtYWluLmNwcABCOiVkIFI6JWQgLS0gRE9OJ1QgQkVMSUVWRSBTUEFDRSAlMy4yZiAlZCAlMy4yZi4KAHRleHRvcmRfc2hvd19uZXdfd29yZHMAdGV4dG9yZF9yZXN0b3JlX3VuZGVybGluZXMAdGV4dG9yZF9mb3JjZV9tYWtlX3Byb3Bfd29yZHMAY29tcGxldGVkX2Jsb2Nrc18ubGVuZ3RoKCkgPT0gdG9fYmxvY2tzXy5sZW5ndGgoKQBBc3NvY2lhdGVVdGlsczo6Q29tcHV0ZVN0YXRzKCkgZm9yIGNvbD0lZCwgcm93PSVkJXMKAGJsb2JfbnVtYmVyID0gJWQKAE5ldyBzZWFtIHdpdGggcHJpb3JpdHkgJWcgYmVhdHMgb2xkIHdvcnN0IHNlYW0gd2l0aCAlZwoAVHVybiBvbi9vZmYgdGhlIHVzZSBvZiBjaGFyYWN0ZXIgbmdyYW0gbW9kZWwAQWRkZWQgcGFpbiBwb2ludCB3aXRoIHByaW9yaXR5ICVnCgAgd2l0aCByYXRpbmdzX3N1bT0lLjRmIGxlbmd0aD0lZCBjb3N0PSUuNmYAICVmAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAHdvcmRyZWNfYmxvYl9wYXVzZQBEb25lIHdpdGggU2VnU2VhcmNoIChBY2NlcHRhYmxlQ2hvaWNlRm91bmQ6ICVkKQoAQXNzZXJ0IGZhaWxlZABBc3NvY2lhdG9yIEVuYWJsZQAALgAJPC9MYXlvdXQ+CjwvYWx0bz4KACBpZD0nAAkgACAwIDAgY20ACgBocyBtdXN0IGJlIGF0IGxlYXN0IDIARXJyb3IgaW4gJXM6IEZhaWxlZCB0byBtYWtlIGZvbnQ7IHVzZSBzdHJpbmcKAGJveCBub3QgbWFkZQBib3ggbm90IGRlZmluZWQAYm94IG5vdCBkZWZpbmVkAGludmFsaWQgZmlyc3QAJnBpeGEgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogcGl4IGhhcyBjb2xvcm1hcDsgcmVtb3ZpbmcKAGNoYXJhIG5vdCBtYWRlAHJlcXVlc3RlZCBieXRlcyA+PSAyXjMxAG5vdCBjbWFwcGVkIG9yIGhzdgBtaW52YWwgbm90IDwgbWF4dmFsAHBpeHMgaXMgY21hcHBlZABwaXh0IG5vdCBtYWRlAGxlcHQvc2VnbWVudABzb21lIHdoaXRlIHZhbHMgYXJlIG5lZ2F0aXZlAEluZm8gaW4gJXM6IAogIFBpeGVsIGZyYWN0aW9uIG5laXRoZXIgd2hpdGUgbm9yIGJsYWNrID0gJTYuM2YKICBDb2xvciBmcmFjdGlvbiBvZiB0aG9zZSBwaXhlbHMgPSAlNi4zZgogIFF1YW50aXppbmcgdG8gOCBicHAgZ3JheQoAdGhyZXNoIG11c3QgYmUgPCAyNTUAZGVwdGggbm90IGluIHsyLCA0LCA4fQBpbnZhbGlkIGluY29sb3IAZHBpeGQgbm90IG1hZGUAd2l0aCBsaW5lc3BvaW50cwBib3ggbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogaG9yaXogc2VsIHNpemUgbXVzdCBiZSBvZGQ7IGluY3JlYXNpbmcgYnkgMQoAc3ggYW5kIHN5IG11c3QgYmUgPj0gNABpbnZhbGlkIHZhbHVlIGZvciB1cHBlcmNsaXAAdGFiMTQgbm90IG1hZGUAV2FybmluZyBpbiAlczogbWVtb3J5IGxlYWsgb2YgJWQgaXRlbXMgaW4gbGhlYXAhCgBrZWxzIG5vdCBkZWZpbmVkAHBpeHMgbm90IGRlZmluZWQAcGl4ZCBub3QgbWFkZQBwaXhkIG5vdCBtYWRlAEluZm8gaW4gJXM6IENhbGxpbmcgdGhlIGRlY29tcG9zYWJsZSBkd2EgZnVuY3Rpb24KAGhzaXplIG9yIHZzaXplIDwgMQB0YWIgbm90IGRlZmluZWQASW5mbyBpbiAlczogcGl4IHNpemVzIGRpZmZlcgoAcGl4YWQgbm90IG1hZGUAc2VxdWVuY2Ugbm90IHZhbGlkAHNpemUgbXVzdCBiZSA+IDAAaW52YWxpZCBvcABmYXMgbm90IG1hZGUAV2FybmluZyBpbiAlczogJm5ieXRlcyBpcyBOVUxMCgBwaXhzIG5vdCBiaW5hcnkAbGVwdC9wYWdlc2VnAHNpbmRleCB0b28gbGFyZ2U7IG5vIGNtYXAgZW50cnkAbm8gYnl0ZXMgdG8gaW5pdGlhbGl6ZQBzYSBub3QgZGVmaW5lZABzaXplIG11c3QgYmUgPiAwAGRhIG5vdCBkZWZpbmVkAGltYWdlIG5vdCByZXR1cm5lZAByZWFkIGZhaWx1cmUAY2lkIG5vdCBtYWRlAGRlcHRoIG11c3QgYmUgezEsIDIsIDQsIDgsIDE2LCAyNCwgMzJ9AFdhcm5pbmcgaW4gJXM6IGJveCBkb2Vzbid0IG92ZXJsYXAgcGl4CgB4IG91dCBvZiBib3VuZHMAcGl4ZCBub3QgMSwgMiwgNCwgOCwgMTYgb3IgMzIgYnBwAG5hIG5vdCBtYWRlAHBpeHMgbm90IGRlZmluZWQgb3Igbm90IDEgYnBwAHBpeHMgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTCEAaW52YWxpZCByZWxhdGlvbgBubyBhc3NvY2lhdGVkIGJveGEAcGl4czEgbm90IGRlZmluZWQARXJyb3IgaW4gJXM6IHdyaXRlIHRvIG1lbW9yeSBmYWlsZWQKAGQgbXVzdCBiZSBpbiB7MSwyLDQsOH0ASW5mbyBpbiAlczogdGlsZSB3aWR0aCA9ICVkLCB0aWxlIGhlaWdodCA9ICVkCgBpbmZvX3B0ciBub3QgbWFkZQBpbnZhbGlkIGluY29sb3IAbmF5IG5vdCBkZWZpbmVkAGlzdGFydCA+IGllbmQ7IG5vIHB0cwBXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBOVUxMIQoAbmFpbmRleCBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb2YgJWQgaXRlbXMgaW4gcHRyYQoAdHJlZSBpcyBudWxsAGJtZiBzaXplIGVycm9yAGludmFsaWQgc3BwAHBpeFJlYWRNZW1HaWYAcGl4V3JpdGVKcDJrAFdhcm5pbmcgaW4gJXM6IHBpeCBub3QgcmVhZCBmcm9tIGZpbGUgJXMKAGludmFsaWQgdmFsdWUgZm9yIGluY29sb3IAcGl4ZCBub3QgbWFkZQBXYXJuaW5nIGluICVzOiAlNi4yZiByYWRpYW5zOyBsYXJnZSBhbmdsZSBmb3IgMi1zaGVhciByb3RhdGlvbgoAcGl4cyBub3QgZGVmaW5lZAB0ZXh0c3RyIG5vdCBkZWZpbmVkAHN0cjEgbm90IGRlZmluZWQAcGl4ZCBub3QgbWFkZQBwaXhzIG5vdCB7MSwyLDQsOCwxNiwzMn0gYnBwAGNhbGxvYyBmYWlsIGZvciB0YWIAcGl4ZCBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBtZW1vcnkgbGVhayBvZiAlZCBpdGVtcyBpbiBscXVldWUhCgBzZWwgbm90IG1hZGUAc2VsXyVkAHBpeGQgbm90IG1hZGUAcGl4cyBtdXN0IGJlIDggYnBwAEluZm8gaW4gJXM6IDEgYnBwLCBsYXJnZSBhbmdsZTsgcm90YXRlIGJ5IHNhbXBsaW5nCgAmYW5nbGUgYW5kL29yICZjb25mIG5vdCBkZWZpbmVkAGZpbGVuYW1lIG5vdCBkZWZpbmVkAGxzdGFjayBub3QgZGVmaW5lZABkYXRhIG5vdCByZWFkIGZyb20gZmlsZQBXYXJuaW5nIGluICVzOiBubyB0ZXh0c3RyaW5nIGRlZmluZWQ7IHJldHVybmluZyBhIGNvcHkKAHIAYm90aCBuYW1lcyBub3QgZGVmaW5lZABwZGVzdCBub3QgZGVmaW5lZAByZWFkSGVhZGVyV2ViUAB3YgBwbmcAZGVmbGF0ZUluaXQgZmFpbGVkAEJvZ3VzIGJ1ZmZlciBjb250cm9sIG1vZGUACmxpYnBuZyB2ZXJzaW9uIDEuNC4yMiAtIFNlcHRlbWJlciAyOCwgMjAxNwpDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA0LDIwMDYtMjAxNiBHbGVubiBSYW5kZXJzLVBlaHJzb24KQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcgQW5kcmVhcyBEaWxnZXIKQ29weXJpZ2h0IChjKSAxOTk1LTE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuCgB6bGliIG1lbW9yeSBlcnJvcgBpbnZhbGlkIGVycm9yIGFjdGlvbiBpbiBwbmdfc2V0X3JnYl90b19ncmF5AGludmFsaWQgY2h1bmsgdHlwZQBJbnZhbGlkIHBhbGV0dGUgc2l6ZSwgaElTVCBhbGxvY2F0aW9uIHNraXBwZWQATm8gSURBVHMgd3JpdHRlbiBpbnRvIGZpbGUASW52YWxpZCBiaXQgZGVwdGggZm9yIGdyYXlzY2FsZSthbHBoYSBpbWFnZQBUaHVuZGVyU2NhbgBDb21wcmVzc2lvbiBhbGdvcml0aG0gZG9lcyBub3Qgc3VwcG9ydCByYW5kb20gYWNjZXNzAFRJRkZTZXRGaWVsZABUSUZGTWVyZ2VGaWVsZEluZm8AJXM6IHVua25vd24gZmllbGQgd2l0aCB0YWcgJWQgKDB4JXgpIGVuY291bnRlcmVkAE1lcmdpbmcgQ0NJVFQgRmF4IDMgY29kZWMtc3BlY2lmaWMgdGFncyBmYWlsZWQARXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgbGluawBTb3JyeSwgY2FuIG5vdCBoYW5kbGUgY29udGlndW91cyBkYXRhIHdpdGggJXM9JWQsIGFuZCAlcz0lZCBhbmQgQml0cy9TYW1wbGU9JWQATm8gc3BhY2UgZm9yIEpQRUcgc3RhdGUgYmxvY2sAJXM6IE5vIHNwYWNlIGZvciBMb2dMdXYgc3RhdGUgYmxvY2sATFpXUHJlRGVjb2RlAE5vIHNwYWNlIGZvciBPSlBFRyBzdGF0ZSBibG9jawBDYW5ub3QgcmVhZCBUSUZGIGhlYWRlcgBObyBzcGFjZSBmb3IgUGl4YXJMb2cgc3RhdGUgYmxvY2sAUHJlZGljdG9yACVzcmVkdWNlZC1yZXNvbHV0aW9uIGltYWdlACVsdTogSW52YWxpZCBzdHJpcCBieXRlIGNvdW50LCBzdHJpcCAlbHUAVElGRlZTdHJpcFNpemUAJWx1OiBTYW1wbGUgb3V0IG9mIHJhbmdlLCBtYXggJWx1AC4KACVzOiBUaWxlICVsdSBvdXQgb2YgcmFuZ2UsIG1heCAlbHUATm8gc3BhY2UgZm9yIFpJUCBzdGF0ZSBibG9jawBpbnZhbGlkIHdpbmRvdyBzaXplAGZpbGUgZXJyb3IAd29yZCBub3QgaW4gZGF3Z3MKAHJvdyB4aGVpZ2h0PSVnLCBidXQgbWVkaWFuIHhoZWlnaHQgPSAlZwoAeyBpZihNb2R1bGVbJ1Rlc3NlcmFjdFByb2dyZXNzJ10pIE1vZHVsZVsnVGVzc2VyYWN0UHJvZ3Jlc3MnXSgkMCk7IH0AUkVKRUNUSU5HIFJPVyAlZCAgI2NoYXJzOiAlZDsgICNSZWplY3RzOiAlZAoAU2F2ZSBzcGVjaWFsIGNoYXJhY3RlciBpbWFnZQBSRVRVUk5FRCAoJWQpOiAiACB4aHQgcmFuZ2UgbWluPSVkLCBtYXg9JWQKAEZhaWxlZCB0byB3cml0ZSB0cmFpbmluZyBkYXRhIHRvICVzIQoAIABOVUxMAERpY3Qgd29yZDogIiVzIjogJWQKAHdvcmRfLT5jYmxvYl9saXN0KCkgIT0gbnVsbHB0cgBFbXB0eSBwYWdlCgA6AGluIGZpbGUgJXMsIGxpbmUgJWQAQkFEIHRlc3NlZGl0X3JlamVjdF9tb2RlCgBOZXh0KFJJTF9XT1JEKTogJWQgLT4gJWQKACVkLiVkICVzLXRyYWlsaW5nIAAuAHRlc3NlZGl0X3RyYWluX2Zyb21fYm94ZXMAcmVjb2dfd29yZCBBU1NFUlQgRkFJTCBTdHJpbmc6IiVzIjsgU3RybGVuPSVkOyAjQmxvYnM9JWQKAExvb2tpbmcgZm9yIHRydXRoIHNwbGl0IGF0AEFzc2VydCBmYWlsZWQAAAkAc3RlcGNvdW50ID49IDQAQXQgcG9pbnQgJWQsIGxvY2FsIGNvc3Q9JWQsIHRvdGFsX2Nvc3Q9JWQsIHN0ZXBzPSVkCgBzcGFjaW5nX3ZlYyAhPSBudWxscHRyICYmIHNwYWNpbmdfdmVjLT5zaXplKCkgPiB1Y2hfaWQAU2NhbGluZyBwaXggb2Ygc2l6ZSAlZCwgJWQgYnkgZmFjdG9yICVnIG1hZGUgbnVsbCBwaXghIQoAY29sPSVkIHJvdz0lZCAAeCBtYXA6CgBTcGFjaW5nPSAlZAoAVU5LTk9XTgBEZXNjZHJvcD0gJWYKAENvb2tlZCAjJWQgaGFzIHRvdGFsIG9mIHN0YXRlcyA9ICVkIHZzIHJhdGluZ3MgZGltIG9mICVkCgBQVFJBSU5fTlVNX01FRABNb3JlIGFjY3VyYXRlIGFwcHJveCBvbiB3aWRlIHRoaW5ncwBFcXVhdGlvbgBTVVBFUgBSX0VER0VfQ0hBUjogJXMKACUyZDogICAAZGlzcGxheQAKAEZBTFNFAHJlYWQgbGluZSAlcwoAZGVidWcAQ2FuJ3QgZmluZCBzdWJsaXN0IGVuZCBwb2ludCBpbiBvcmlnaW5hbCBsaXN0AENhbid0IGZpbmQgc3VibGlzdCBlbmQgcG9pbnQgaW4gb3JpZ2luYWwgbGlzdABDYW4ndCBmaW5kIHN1Ymxpc3QgZW5kIHBvaW50IGluIG9yaWdpbmFsIGxpc3QAMABjb3VudCA+PSAwACVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdGVzc2RhdGFtYW5hZ2VyLmNwcABkZWJ1ZwBJbmRleCAlZCBjaGFyID0gMHgleAoALADFv2kAJTVkICAlcyAlM2QgJTNkICUzZCAlM2QKAAoKQWRhcHRpbmcgdG8gd29yZCA9ICVzCgBCbG9iIGxlYXJuZWQgd2FzIGludmFsaWQhCgBjbGFzc2lmeV9lbmFibGVfbGVhcm5pbmcAQXNzZXJ0IGZhaWxlZABzc2NhbmYobGluZSwgIiVkIiwgJlNhbXBsZVNpemUpID09IDEAaW4gZmlsZSAlcywgbGluZSAlZABwZgBUb3RhbCBtaXNzCgBBc3NlcnQgZmFpbGVkAENvbmZpZyAlZCwgcmF0aW5nPSVkCgBDbGFzcyBQcnVuZXIgQW5nbGUgUGFkIExvb3NlAFNsb3BlIGFib3ZlIHdoaWNoIGxpbmVzIGFyZSBjYWxsZWQgdmVydGljYWwATm9ybSBhZGp1c3QgY3VybCAuLi4ATnVtRmVhdHVyZXMgPj0gMABDbGFzcy0+TnVtUHJvdG9zIDw9IE1BWF9OVU1fUFJPVE9TACVnOiBjX2lkPSVkPSVzAD0AL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NsYXNzaWZ5L3RyYWluaW5nc2FtcGxlLmNwcAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2xhc3NpZnkvdHJhaW5pbmdzYW1wbGVzZXQuY3BwAHNpemUgPiAwIHx8IChzaXplID09IDAgJiYgcHRyICE9IG51bGxwdHIpAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9kaWN0L2Rhd2cuY3BwAEEgc3VmZml4IG9mIHVzZXItcHJvdmlkZWQgd29yZHMgbG9jYXRlZCBpbiB0ZXNzZGF0YS4AdWNoX2lkICE9IElOVkFMSURfVU5JQ0hBUl9JRAAKU3RvcHBlcjogICVzICh3b3JkPSVjLCBjYXNlPSVjLCB4aHRfb2s9JXM9WyVnLCVnXSkKAGluIGZpbGUgJXMsIGxpbmUgJWQAbmV0d29ya19pb18gPT0gbnVsbHB0cgBpbnRfbW9kZV8AACVkIGlzIGludmFsaWQgdHlwZSBvZiBMU1RNIQoASW52ZXJ0aW5nIGltYWdlOiBvbGQgbWluPSVnLCBtZWFuPSVnLCBzZD0lZywgaW52ICVnLCVnLCVnCgBpbiBmaWxlICVzLCBsaW5lICVkAEludmFsaWQASW52YWxpZCBuZXR3b3JrIHNwZWM6JXMKAAoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2xzdG0vbmV0d29ya3NjcmF0Y2guaAA6AABSeABzdGFja19zaXplID4gMQBUdXJuIG9uIG91dHB1dCByZWxhdGVkIHRvIGJ1Z3MgaW4gdGFiIGZpbmRpbmcAQXR0ZW1wdGluZyBsaW5lc3BhY2luZyBtb2RlbCBmaXQgd2l0aCBtb2RlICVnIHRvIHJvdyBhdDoAZ3JpZF94ID49IDAgJiYgZ3JpZF94IDwgZ3JpZHdpZHRoKCkAQm90dG9tPSVkLCB0b3A9JWQsIGJhc2U9JWQsIHg9JWQKAGluIGZpbGUgJXMsIGxpbmUgJWQAZGVidWcAU2hvdyBibG9icyByZWplY3RlZCBhcyBub2lzZQBiYmxvYi0+b3duZXIoKSA9PSB0aGlzIHx8IGJibG9iLT5vd25lcigpID09IG51bGxwdHIATm8gY2FuZGlkYXRlIG5laWdoYm91ciByZXR1cm5lZAoATm90IGEgbGVnYWwgY29sdW1uIGNhbmRpZGF0ZToKAFdoZXRoZXIgdG8gY3JlYXRlIGEgZGVidWcgaW1hZ2UgZm9yIHNwbGl0IHNoaXJvLXJla2hhIHByb2Nlc3MuAE1heCBudW1iZXIgb2YgY2hpbGRyZW4gaW5zaWRlIGEgY2hhcmFjdGVyIG91dGxpbmUATWF4IGRpc3RhbmNlIG9mIGNob3AgcHQgZnJvbSB2ZXJ0ZXgAVXNlIGxhcmdlIHNwYWNlIGF0IHN0YXJ0IGFuZCBlbmQgb2Ygcm93cwBIYWxmdG9uZVJlcGxpY2F0ZWQASW1hZ2UgcmVzb2x1dGlvbiA9ICVkLCBtYXggbGluZSB3aWR0aCA9ICVkLCBtaW4gbGVuZ3RoPSVkCgBEaXNwbGF5IHJvdyBhY2N1bXVsYXRpb24ARGVidWcgb2xkIGJhc2VsaW5lIGdlbmVyYXRpb24AeD0lZCwgQz0lZywgcz0lZywgc3E9JWcsIHByZXY9JWQKAERpc3QgaW5zaWRlIGJpZyBibG9iIGZvciBjaG9wcGluZwBBc3NlcnQgZmFpbGVkAE9ubHkgcnVuIHN0cm9rZSB3aWR0aHMAU2hvdyB0YWIgdmVjdG9ycwBEZWJ1ZyB0YWJsZSBtYXJraW5nIHN0ZXBzIGluIGRldGFpbAAwIDw9IHJvd19zdGFydCAmJiByb3dfc3RhcnQgPD0gcm93X2VuZCAmJiByb3dfZW5kIDwgcm93X2NvdW50KCkARnJhY3Rpb24gb2YgYm94IG1hdGNoZXMgcmVxdWlyZWQgdG8gZGVjbGFyZSBhIGxpbmUgdmVydGljYWwAdG9zcF9vbGRfdG9fY29uc3RyYWluX3NwX2tuAERlYnVnIG9uIGZpeGVkIHBpdGNoIHRlc3QAY2xlYW51cF9ibG9ja3M6ICMgcm93cyA9ICVkIC8gJWQKAEI6JWQgUjolZCAtLSBET04nVCBCRUxJRVZFIFNQQUNFICUzLjJmICVkICUzLjJmIC0+ICUzLjJmLgoAQ2hvcCB1bmRlcmxpbmVzICYgcHV0IGJhY2sARm9yY2UgcHJvcG9ydGlvbmFsIHdvcmQgc2VnbWVudGF0aW9uIG9uIGFsbCByb3dzAEFzc2VydCBmYWlsZWQAIChmaXhlZCBwaXRjaCkASW5pdGlhbDoAUGFydGlhbCBwcmlvcml0eSAgICAAbGFuZ3VhZ2VfbW9kZWxfbmdyYW1fb3JkZXIAUGFpbiBwb2ludHMgaGVhcCBpcyBmdWxsCgAgdG9wX2Nob2ljZV9mbGFncz0weCV4AFBhcmFtc01vZGVsOjpVbmtub3duIHBhcmFtZXRlciAlcwoAQXNzZXJ0IGZhaWxlZABCbG9iIHBhdXNlAFN0YXJ0aW5nIFNlZ1NlYXJjaCBvbiByYXRpbmdzIG1hdHJpeCVzOgoAZm9yY2Vfd29yZF9hc3NvYwBkb2N1bWVudF90aXRsZQB3YgB4bWwAcGFnZV8AIAAgL0ltMSBEbwBXb3JkU3RyIABnZW5lcmljAHBpeGQgbm90IG1hZGUAZm9udCBwaXhhIG5vdCBtYWRlAHcgYW5kIGggbm90IGJvdGggPiAwACZjb3VudCBub3QgZGVmaW5lZABib3hzIG5vdCBkZWZpbmVkAGZpcnN0ID4gbGFzdABwaXhzIHVuZGVmaW5lZCBvciBub3QgMSBicHAAZGVwdGggbm90IDggb3IgMzIgYnBwAGludmFsaWQgY2hhciBpbiBpbmFycmF5AExFUFRfQ0FMTE9DIGZhaWwgZm9yIGZwaXhkACZodmFsLCAmc3ZhbCwgJnZ2YWwgbm90IGFsbCBkZWZpbmVkAGRlcHRoIG5vdCA4IG9yIDMyIGJwcABpZiBwaXhkLCBtdXN0IGJlIGluLXBsYWNlAG5vIG91dHB1dCByZXF1ZXN0ZWQAL3RtcC9sZXB0L3NlZ21lbnQvY29sb3JzZWcxLnBuZwB3aGl0ZSB2YWxzIG5vdCBhbGwgemVybyBvciBhbGwgbm9uemVybwBJbmZvIGluICVzOiAKICBQcm9jZXNzIGluIGNvbG9yIGJ5IGRlZmF1bHQKAFdhcm5pbmcgaW4gJXM6IHRocmVzaG9sZCBzZXQgdmVyeSBoaWdoCgBkIG5vdCBpbiB7MSwgMiwgNCwgOH0AcHRhcyBjb3VudCBub3QgMwBmcGl4cyBub3QgZGVmaW5lZAB3aXRoIGRvdHMAYm94IGhhcyB3ID0gMCBvciBoID0gMABXYXJuaW5nIGluICVzOiB2ZXJ0IHNlbCBzaXplIG11c3QgYmUgb2RkOyBpbmNyZWFzaW5nIGJ5IDEKAFdhcm5pbmcgaW4gJXM6IG1pbmNvdW50IHRvbyBsYXJnZSBmb3IgdGlsZSBzaXplCgBwaXhkIG5vdCBtYWRlAGxoIG5vdCBkZWZpbmVkAGtlbGQgbm90IG1hZGUAc2VsIG5vdCBkZWZpbmVkAHBpeHQgbm90IG1hZGUAcGl4dCBub3QgbWFkZQAmbiBhbmQgJmV4dHJhIG5vdCBib3RoIGRlZmluZWQAV2FybmluZyBpbiAlczogaG9yaXogc2VsIHNpemUgbXVzdCBiZSBvZGQ7IGluY3JlYXNpbmcgYnkgMQoAYXJlYXMgbXVzdCBiZSA+IDAASW5mbyBpbiAlczoganVzdCBvbmUgcGl4IGhhcyBhIG5vbi1vcGFxdWUgYWxwaGEgbGF5ZXIKAHBpeGFzIG5vdCBkZWZpbmVkACAKCQBmYXJyYXkgbm90IGRlZmluZWQAbmEyIGhhcyAwIGVsZW1lbnQAbmFkIG5vdCBtYWRlAFdhcm5pbmcgaW4gJXM6IGNhbGxvYyBmYWlsdXJlIGZvciBhcnJheQoAY2NiIG5vdCBtYWRlAC90bXAvbGVwdC9wYWdlc2VnL3RiX291dGxpbmVzLnB0YWEAZXJyb3IgYWRkaW5nIGNtYXAgZW50cnkAZm5hbWUgbm90IGRlZmluZWQAcGRmIGRhdGEgbm90IG1hZGUAZGFycmF5IG5vdCBkZWZpbmVkAG5hIG5vdCBkZWZpbmVkAGZwIG5vdCBkZWZpbmVkAGRhdGEgbm90IGRlZmluZWQAbHBkIG5vdCBtYWRlAHdpZHRoIG11c3QgYmUgPiAwAHBpeHMxIGlzIDEgYnBwAHkgb3V0IG9mIGJvdW5kcwBXYXJuaW5nIGluICVzOiBwaXhkIGFuZCBwaXhtIHNpemVzIGRpZmZlcgoAcGl4cyBuZWl0aGVyIDggYnBwIG5vciBjb2xvcm1hcHBlZAAmcmF0aW8gbm90IGRlZmluZWQAbiBtdXN0IGJlID4gMABwaXhhY2Mgbm90IGRlZmluZWQAcGl4YXMgbm90IGRlZmluZWQAcGl4ZCBub3QgbWFkZQBwaXhzMiBub3QgZGVmaW5lZABkYXRhIG5vdCBkZWZpbmVkAHBpeGQgbm90IG1hZGUAb3ZlcmxhcCB0b28gbGFyZ2UAZW5kX2luZm8gbm90IG1hZGUAcHRhcyBjb3VudCBub3QgNABuYXggYW5kIG5heSBzaXplcyBkaWZmZXIAcHRhYWQgbm90IGRlZmluZWQAZGFoYXNoIG5vdCBkZWZpbmVkAHB0YWQgbm90IG1hZGUAcGEgbm90IGRlZmluZWQASW5mbyBpbiAlczogdHJlZSBpcyBlbXB0eQoAbm90IGJtZiBmb3JtYXQAcGl4IG5vdCBtYWRlAHBpeFdyaXRlTWVtR2lmAHBpeFdyaXRlU3RyZWFtSnAyawBmaWxlbmFtZSBub3QgZGVmaW5lZABidyBtdXN0IGJlID4gMABpbnZhbGlkIGRpcmVjdGlvbgBwaXgxIG5vdCBtYWRlAHBpeHMgbm90IDEgYnBwAHNhIG5vdCBtYWRlAHN0cjIgbm90IGRlZmluZWQAZmFjdG9yIG11c3QgYmUgaW4gezIsNCw4LDE2fQBzY2FsZSBmYWN0b3IgPD0gMABwaXh0IG5vdCBtYWRlAGxxIG5vdCBkZWZpbmVkAGRhdGEgbm90IGFsbG9jYXRlZABzZWxfMmRwAHBpeHMgbm90IDgsIDMyIGJwcCwgb3IgY21hcABJbmZvIGluICVzOiAxIGJwcDsgcm90YXRlIGJ5IHNoZWFyCgBwaXhzIG5vdCAxIGJwcABpbnB1dCBwdHIocykgbm90IGRlZmluZWQAaXRlbSBub3QgZGVmaW5lZABzYSBub3QgbWFkZQBsaW5lIHN0cmluZyBzYSBub3QgbWFkZQB0aWYgbm90IG9wZW5lZABhcnJheTEgbm90IHJlYWQAc3JjIG5vdCBkZWZpbmVkAHJlYWRIZWFkZXJNZW1XZWJQAGZpbGUgbm90IG9wZW5lZCBmb3Igd3JpdGUAdGlmAEludmFsaWQgY29tcG9uZW50IElEICVkIGluIFNPUwAxLjQuMjIAemxpYiB2ZXJzaW9uIGVycm9yAGludmFsaWQgYmFja2dyb3VuZCBnYW1tYSB0eXBlAGNodW5rIGRhdGEgaXMgdG9vIGxhcmdlAEluc3VmZmljaWVudCBtZW1vcnkgZm9yIGhJU1QgY2h1bmsgZGF0YQAxLjQuMjIASW52YWxpZCBiaXQgZGVwdGggZm9yIFJHQkEgaW1hZ2UATmVYVABUSUZGUmVnaXN0ZXJDT0RFQwAlczogVW5rbm93biAlc3RhZyAldQBNZXJnaW5nIGJsb2NrIG9mICVkIGZpZWxkcyBmYWlsZWQAUmVnaXN0ZXJpbmcgYW5vbnltb3VzIGZpZWxkIHdpdGggdGFnICVkICgweCV4KSBmYWlsZWQAVElGRkluaXRDQ0lUVEZheDQARXJyb3IgcG9zdC1lbmNvZGluZyBiZWZvcmUgZGlyZWN0b3J5IHdyaXRlAFNhbXBsZXMvcGl4ZWwASlBFR1RhYmxlcwBTR0lMb2dEYXRhRm10AHNwICE9IE5VTEwASnBlZ0ludGVyY2hhbmdlRm9ybWF0AEVycm9yIHdyaXRpbmcgVElGRiBoZWFkZXIAAHNwICE9IE5VTEwALwAlczogSW52YWxpZCBzdHJpcCBieXRlIGNvdW50ICVsdSwgc3RyaXAgJWx1ACVsdTogSW52YWxpZCBzdHJpcCBieXRlIGNvdW50LCBzdHJpcCAlbHUAVElGRk51bWJlck9mVGlsZXMAJXM6IEZpbGUgbm90IG9wZW4gZm9yIHdyaXRpbmcAAHVua25vd24gaGVhZGVyIGZsYWdzIHNldABzdHJlYW0gZXJyb3IAAAAAd29yZCBoYXMgZWxsIGNvbmZsaWN0CgBNYXhpbWFsbHkgY2hvcHBpbmcgd29yZCBhdDoAcHJfaXQtPndvcmQoKSAhPSBudWxscHRyAE5PVCBSRUpFQ1RJTkcgUk9XICVkICNjaGFyczogJWQgICMgUmVqZWN0czogJWQ7IAoAJXMvJTFkIAAgYm90dG9tIHNoaWZ0IG1pbj0lZCwgbWF4PSVkCgAJAGl0Xy0+d29yZCgpLT51Y2hfc2V0ICE9IG51bGxwdHIAT3JpZW50YXRpb24gaWQgIyVkAEFzc2VydCBmYWlsZWQAQm91bmRpbmcgYm94PSglZCwlZCktPiglZCwlZCkKAFBhZ2VTZWdJbnB1dAAsAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY21haW4vcmVjb2d0cmFpbmluZy5jcHAAIkZhdGFsIGVycm9yIGVuY291bnRlcmVkISIgPT0gbnVsbHB0cgBOZXh0KFJJTF9XT1JEKTogJWQgLT4gRU9MCgApCgBFcnJvciBvcGVuaW5nIGRhdGEgZmlsZSAlcwoAR2VuZXJhdGUgdHJhaW5pbmcgZGF0YSBmcm9tIGJveGVkIGNoYXJzAHdvcmQtPmJlc3RfY2hvaWNlLT5sZW5ndGgoKSA9PSB3b3JkLT5ib3hfd29yZC0+bGVuZ3RoKCkAIGVuZDFfeCAALmJveABkZXN0cG9zLnggKCkgPT0gc3RhcnQueCAoKSAmJiBkZXN0cG9zLnkgKCkgPT0gc3RhcnQueSAoKQBBc3NlcnQgZmFpbGVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3N0cnVjdC9mb250aW5mby5oAEVycm9yOiBObyBib3hlcyBmb3IgcGFnZSAlZCBmcm9tIGltYWdlICVzIQoAJXMgcmF0PSVnIGNlcnQ9JWcgACVnIABGaXhlZF9waXRjaD0lZAoAaGFzX2Ryb3BfY2FwPSAlZAoACkJlc3QgUmF3IENob2ljZQBQVFJBSU5fTlVNX0xPTkcASW5saW5lIEVxdWF0aW9uAERST1BDAFJfMUlMX0NPTkZMSUNUOiAlcwoAAFRvdGFsIGNvdW50PSVkCgAgICBXX0lUQUxJQyA9ICVzCgBpZF90b19pbnNlcnQgIT0gSU5WQUxJRF9VTklDSEFSX0lEAGRpc3BsYXkAQ0xJU1RfSVRFUkFUT1IuZXh0cmFjdF9zdWJsaXN0AEVMSVNUX0lURVJBVE9SLmV4dHJhY3Rfc3VibGlzdABFTElTVDJfSVRFUkFUT1IuZXh0cmFjdF9zdWJsaXN0AGVycm9yAGlzX3dyaXRpbmdfAEFzc2VydCBmYWlsZWQAVmVyc2lvbiBzdHJpbmc6JXMKAGRpc3BsYXkAV0FSTklORzogSWxsZWdhbCBVVEY4IGVuY291bnRlcmVkCgAJAO6AhwAKTGVhcm5pbmcgJXMKAC50cgBFbmFibGUgYWRhcHRpdmUgY2xhc3NpZmllcgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAFNhbXBsZVNpemUgPj0gMCAmJiBTYW1wbGVTaXplIDw9IE1BWFNBTVBMRVNJWkUAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NsYXNzaWZ5L2N1dG9mZnMuY3BwAG9mAEZlYXR1cmVzIHByZXNlbnQ6AGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAAEFzc2VydCBmYWlsZWQAIEZvbnQgVmVjdG9yOgAsIABFcnJvcjogbm8gR2VvIGZlYXR1cmUgdG8gdHJhaW4gb24uCgAgAEJ1ZmZlciAhPSBudWxscHRyIHx8IHNpemUgPT0gMABNaXNzaW5nIHdvcmQ6ICVzCgB1c2VyX3BhdHRlcm5zX2ZpbGUAdW5pZ3JhbSAlcyBpcyAlcwoAU3RvcHBlcjogIFJhdGluZyA9ICU0LjFmLCBDZXJ0YWludHkgPSAlNC4xZiwgVGhyZXNob2xkID0gJTQuMWYKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9kaWN0L3RyaWUuY3BwAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL25ldHdvcmtzY3JhdGNoLmgAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2xzdG0vbmV0d29ya2lvLmgALABmYWxzZQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9sc3RtdHJhaW5lci5jcHAASW5wdXQAJWQsJWQsJWQsJWQlbgBpbnRfbW9kZV8gPT0gc3JjLmludF9tb2RlXwBBc3NlcnQgZmFpbGVkACpuZXh0X2lkID09ICc6JwAgU3RhcnQAUnkAaW4gZmlsZSAlcywgbGluZSAlZABMaW5lc3BhY2luZyBtb2RlbCBvbmx5IG1vdmVzIGN1cnJlbnQgbGluZSBieSAlZyBmb3Igcm93IGF0OgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC9iYmdyaWQuaABkZWJ1ZwAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC9iYmdyaWQuaABkaXNwbGF5ACFsZWZ0X2tleV90YWJfICYmICFyaWdodF9rZXlfdGFiXwBGaW5kaW5nIGJlc3QgbWVyZ2UgY2FuZGlkYXRlIGZyb20gJWQsICVkIG5laWdoYm91cnMgZm9yIGJveDoAR29vZCBvbmUKAEZpbmVNYXNrAEltcG9zc2libGUgc3FzdW09JWcsIG1lYW49JWcsIHRvdGFsPSVkCgAwIDw9IGNvbHVtbl9zdGFydCAmJiBjb2x1bW5fc3RhcnQgPD0gY29sdW1uX2VuZCAmJiBjb2x1bW5fZW5kIDwgY29sdW1uX2NvdW50KCkAQ29uc3RyYWluIHJlbGF0aXZlIHZhbHVlcyBvZiBpbnRlciBhbmQgaW50cmEtd29yZCBnYXBzIGZvciBvbGRfdG9fbWV0aG9kLgBjbGVhbnVwX2Jsb2NrczogIyBibG9ja3MgPSAlZCAvICVkCgBCOiVkIFI6JWQgLS0gRE9OJ1QgQkVMSUVWRSBUSFJFU0ggJTMuMmYgJWQgJTMuMmYtPiVkLgoAAEZpbmFsIFJhdGluZ3MgTWF0cml4OgoARnVsbCBteV9wcmlvcml0eSAlMC4wZiwgIABNYXhpbXVtIG9yZGVyIG9mIHRoZSBjaGFyYWN0ZXIgbmdyYW0gbW9kZWwATE1fUFBUWVBFX0JMQU1FUgAgaW5jb25zaXN0ZW50PShwdW5jICVkIGNhc2UgJWQgY2hhcnR5cGUgJWQgc2NyaXB0ICVkIGZvbnQgJWQpAE1pc3NpbmcgZmllbGQgJXMuCgAgKHdpdGggYXNzb2MpAGZvcmNlIGFzc29jaWF0b3IgdG8gcnVuIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBlbmFibGVfYXNzb2MgaXMuIFRoaXMgaXMgdXNlZCBmb3IgQ0pLIHdoZXJlIGNvbXBvbmVudCBncm91cGluZyBpcyBuZWNlc3NhcnkuAFRpdGxlIG9mIG91dHB1dCBkb2N1bWVudCAodXNlZCBmb3IgaE9DUiBhbmQgUERGIG91dHB1dCkAdHh0AAkJPFBhZ2UgV0lEVEg9IgAnAGJveAAgUQoAICMAbmF0aXZlAHBpeHMgbXVzdCBiZSBiaW5hcnkAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgbnVsbCEKAGJveCBub3QgZGVmaW5lZABib3hhIG5vdCBkZWZpbmVkAG9yZGVyIGludmFsaWQAYmFhcyBub3QgZGVmaW5lZABFcnJvciBpbiAlczogcGl4MSBvciBwaXgyIG5vdCBtYWRlCgBwaXhzIG5vdCBkZWZpbmVkAGJ5dGVhIG5vdCBtYWRlAExFUFRfQ0FMTE9DIGZhaWwgZm9yIGRhdGEAJnJ2YWwsICZndmFsLCAmYnZhbCBub3QgYWxsIGRlZmluZWQAbmFnIG5vdCBtYWRlAGJveGEgbm90IGRlZmluZWQAcGl4cyBub3QgZGVmaW5lZCBvciBub3QgMSBicHAAY291bnRhcnJheSBub3QgbWFkZQBwaXhzIG5laXRoZXIgY21hcHBlZCBub3IgMzIgYnBwAHRyZWUgbm90IG1hZGUAdGhyZXNoIG11c3QgYmUgPiAwAGludmFsaWQgbmxldmVscwBwdGFkIGNvdW50IG5vdCAzAGludmFsaWQgbmVndmFscwBMSU5FUwBib3hhIG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiBwaXhiIGFuZCBwaXh0IG5vdCBtYWRlCgBwaXhpbSBhbGwgZm9yZWdyb3VuZABwaXh0IG5vdCBtYWRlAGl0ZW0gbm90IGRlZmluZWQAJnZhbCBub3QgZGVmaW5lZABwaXhzIG5vdCAxIGJwcABXYXJuaW5nIGluICVzOiB2ZXJ0IHNlbCBzaXplIG11c3QgYmUgb2RkOyBpbmNyZWFzaW5nIGJ5IDEKAGNvdW50ICVkIDwgdGhyZXNob2xkICVkIGJ1dCBzY29yZSAlZyA+PSBzY29yZV90aHJlc2hvbGQgJWcKAEluZm8gaW4gJXM6IG5vIGNvbG9ybWFwcywgcGl4IGRlcHRocyB1bmVxdWFsLCBhbmQgb25lIG9mIHRoZW0gaXMgUkdCCgBubyBwaXggaW4gcGl4YXMAJWQuJWQAaW52YWxpZCBjb3B5ZmxhZwAgVW5rbm93biBhcml0aCBvcDogJWQKAG5vdGhpbmcgcmVxdWVzdGVkAGJiIG5vdCBkZWZpbmVkAGJveGEgbm90IG1hZGUAL3RtcC9sZXB0L3BhZ2VzZWcvaHRtYXNrLmJveGEAYm94YSBub3QgZGVmaW5lZABmaWxlIHN0cmVhbSBub3Qgb3BlbmVkAHcAaW52YWxpZCBjb3B5ZmxhZwBkYTEgbm90IGRlZmluZWQAaW50ZXJuYWwganBlZyBlcnJvcgBzaXplIDwgODAAcGRmIG91dHB1dCBub3QgbWFkZQBoZWlnaHQgbXVzdCBiZSA+IDAAcGl4czIgbm90IDEgYnBwAG5vIG91dHB1dCByZXF1ZXN0ZWQAc2hvdWxkbid0IGdldCBoZXJlAHBpeG0gbm90IDEgYnBwAHBpeG0gdW5kZWZpbmVkIG9yIG5vdCAxIGJwcABwaXgxIG5vdCBtYWRlAHBpeGEgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogbm8gYm94IGZvdW5kIQoAcGl4czIgYW5kIHBpeHMxIG11c3QgZGlmZmVyAGludmFsaWQgY29weWZsYWcAaW52YWxpZCB2YWx1ZSBmb3IgaWZub2NtYXAAcHQgbm90IG1hZGUAaW50ZXJuYWwgcG5nIGVycm9yAHB0YWQgY291bnQgbm90IDQAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTCEKAHB0YWQgbm90IG1hZGUAZGEgbm90IG1hZGUAJm5haW5kZXggbm90IGRlZmluZWQAaXRlbSBub3QgZGVmaW5lZABuIG5vdCBkZWZpbmVkAGJtcGloIG5vdCBkZWZpbmVkAHJlYWQgYWJlbmQAcGl4UmVhZE1lbUpwMmsARXJyb3IgaW4gJXM6IGltYWdlIGZpbGUgbm90IGZvdW5kOiAlcwoAYmggbXVzdCBiZSA+IDAARXJyb3IgaW4gJXM6IGlsbGVnYWwgZGVwdGg6ICVkCgBwaXhkIG5vdCBtYWRlAGludmFsaWQgZGlyZWN0aW9uAGNzdHJpbmcgbm90IG1hZGUAc2ExIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IHN2YWwgPSAlZDsgc2hvdWxkIGJlIDwgMTYKAHBpeHQgbm90IG1hZGUARXJyb3IgaW4gJXM6IHhtYXggYW5kIHltYXggbXVzdCBiZSBub24tbmVnYXRpdmUAaXRlbSBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBOVUxMIQoAc2VsXzJkbQB5bG9jIG5vdCBpbiBbMCAuLi4gaC0xXQBJbmZvIGluICVzOiBsYXJnZSBhbmdsZTsgcm90YXRlIGJ5IHNhbXBsaW5nCgAmYW5nbGUgbm90IGRlZmluZWQAaW1hZ2UgZmlsZSBub3QgZm91bmQAc3RyZWFtIG5vdCBkZWZpbmVkAG5vIGZpbGVuYW1lcyBpbiB0aGUgZmlsZQBibWYgbm90IGRlZmluZWQAcGl4IG5vdCBkZWZpbmVkAGFycmF5MiBub3QgcmVhZABzaXplIDwgMTsgdG9vIHNtYWxsAHBpeFdyaXRlV2ViUABzdHJlYW0gbm90IG9wZW4AcG5tAEludmFsaWQgY3JvcCByZXF1ZXN0ACBsaWJwbmcgdmVyc2lvbiAxLjQuMjIgLSBTZXB0ZW1iZXIgMjgsIDIwMTcKCgBVbmtub3duIHpsaWIgZXJyb3IATlVMTCByb3cgYnVmZmVyAENSQyBlcnJvcgBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBwQ0FMIHB1cnBvc2UASW5jb21wYXRpYmxlIGxpYnBuZyB2ZXJzaW9uIGluIGFwcGxpY2F0aW9uIGFuZCBsaWJyYXJ5AEludmFsaWQgaW1hZ2UgY29sb3IgdHlwZSBzcGVjaWZpZWQASlBFRwBObyBzcGFjZSB0byByZWdpc3RlciBjb21wcmVzc2lvbiBzY2hlbWUgJXMAcHNldWRvLQBGYWlsZWQgdG8gYWxsb2NhdGUgZmllbGQgaW5mbyBhcnJheQAAAAAAAFRJRkZSZWFkRGlyZWN0b3J5AE1lcmdpbmcgQ0NJVFQgRmF4IDQgY29kZWMtc3BlY2lmaWMgdGFncyBmYWlsZWQARXJyb3IgZmx1c2hpbmcgZGF0YSBiZWZvcmUgZGlyZWN0b3J5IHdyaXRlAFNvcnJ5LCBjYW4gbm90IGhhbmRsZSBSR0IgaW1hZ2Ugd2l0aCAlcz0lZAAAU0dJTG9nRW5jb2RlAE5vIHNwYWNlIGZvciBMWlcgY29kZSB0YWJsZQBKcGVnSW50ZXJjaGFuZ2VGb3JtYXRMZW5ndGgATm90IGEgVElGRiBvciBNREkgZmlsZSwgYmFkIG1hZ2ljIG51bWJlciAlZCAoMHgleCkAc3AgIT0gTlVMTABzcC0+dmdldHBhcmVudCAhPSBOVUxMACVzbXVsdGktcGFnZSBkb2N1bWVudAAlczogUmVhZCBlcnJvciBvbiBzdHJpcCAlbHU7IGdvdCAlbHUgYnl0ZXMsIGV4cGVjdGVkICVsdQBUSUZGU2NhbmxpbmVTaXplAFRJRkZUaWxlUm93U2l6ZQBDYW4gbm90IHdyaXRlIHRpbGVzIHRvIGEgc3RyaXBwZWQgaW1hZ2UAJXM6IHpsaWIgZXJyb3I6ICVzAGhlYWRlciBjcmMgbWlzbWF0Y2gAZGF0YSBlcnJvcgB3b3JkIGNvbnRhaW5zIHNwYWNlcwoAIXdvcmRfcmVzLT5jaG9wcGVkX3dvcmQtPmJsb2JzLmVtcHR5KCkAaW4gZmlsZSAlcywgbGluZSAlZABUIENSVU5DSElORzogIiVzIgoAIgoAIGFscmVhZHkgT0sKAE5vIGJsb2NrIG92ZXJsYXBwaW5nIHRleHRsaW5lOiAlcwoAcmVzdWx0X2l0Lml0Xy0+d29yZCgpICE9IE5VTEwAJTEycwk6ICVmCgBpbmRleCA8IGxlbgBBc3NlcnQgZmFpbGVkAE5vTGluZXMAQ3JMAC5ib3gAaW4gZmlsZSAlcywgbGluZSAlZABmYWxzZQAgQ2VydGFpbnRpZXMgLS0gQXZlcmFnZTogJS4yZiAgVW5saWtlbHkgdGhyZXNoOiAlLjJmICAAUGxlYXNlIG1ha2Ugc3VyZSB0aGUgVEVTU0RBVEFfUFJFRklYIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0byB5b3VyICJ0ZXNzZGF0YSIgZGlyZWN0b3J5LgoAdGVzc2VkaXRfbWFrZV9ib3hlc19mcm9tX2JveGVzAE5vdCBhbGwgd29yZHMgaGF2ZSB2YWxpZCBzdGF0ZXMgcmVsYXRpdmUgdG8gcmF0aW5ncyBtYXRyaXghIQAgYmVnaW4yX3ggAEJveCBmaWxlIGZvcm1hdCBlcnJvciBvbiBsaW5lICVpOyBpZ25vcmVkCgBkZXN0aW5kZXggPD0gc3RlcGNvdW50AFNlcmlhbGl6ZSBmYWlsZWQ6ICVzCgAKAAp5IG1hcDoKAEZpbGVuYW1lPSAlcwoAbG1hcmdpbj0gJWQsIHJtYXJnaW49ICVkCgAKQ29va2VkIENob2ljZSAjAFBUUkFJTl9ET0NfU0hPUlQAcG9zLnggKCkgPT0gY19vdXRsaW5lLT5zdGFydF9wb3MgKCkueCAoKSAmJiBwb3MueSAoKSA9PSBjX291dGxpbmUtPnN0YXJ0X3BvcyAoKS55ICgpAFRhYmxlAFNQX1VOS05PV04AUl9QT1NUTk5fMUlMOiAlcwoATWluPSUuMmYgUmVhbGx5PSVkCgAgICBXX0JPTCA9ICVzCgAlcyBBbWJpZ3VpdGllcyBmb3IgJXM6CgBJbGxlZ2FsIGVycm9yIGFjdGlvbgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAFNJWkVfTUFYIC8gc2l6ZSA+IGNvdW50AGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAJWQ6JXM6c2l6ZT0lZCwgb2Zmc2V0PSVkCgAACgDFv2wAQWRhcHRpbmcgdG8gY2hhciA9ICVzLCB0aHI9ICVnIGZvbnRfaWQ9ICVkCgB3YgBjbGFzc2lmeV9kZWJ1Z19sZXZlbABDbHVzdGVyaW5nIGVycm9yOiBNYXRyaXggaW52ZXJzZSBmYWlsZWQgd2l0aCBlcnJvciAlZwoAIXN0cmVhbS5mYWlsKCkAQXNzZXJ0IGZhaWxlZAAgAApNaW51cyBvbmUgZmVhdHVyZXM6AGluIGZpbGUgJXMsIGxpbmUgJWQAZGVidWcACkNoYXIgbm9ybSBmb3IgY2xhc3MgJXMKAAoAICVkACBmb250cyA9AEFzc2VydCBmYWlsZWQAZm9udF9pbmRleCA+PSAwAHB0ciAhPSBudWxscHRyAEZhaWxlZCB0byBjcmVhdGUgYSB2YWxpZCB3b3JkIGZyb20gJXMKAEEgZmlsZW5hbWUgb2YgdXNlci1wcm92aWRlZCBwYXR0ZXJucy4AT0sAQWNjZXB0YWJsZUNob2ljZSgpIHJldHVybmVkIGZhbHNlIChub19kYW5nX2FtYmlnOiVkIGNlcnQ6JS40ZyB0aHJlc2g6JWcgdW5pZm9ybTolZCkKAHJlcGV0aXRpb25zLT5zaXplKCkgPT0gd29yZC5sZW5ndGgoKQBDAEFzc2VydCBmYWlsZWQATXVzdCBvdmVycmlkZSBOZXR3b3JrOjpEZWJ1Z1dlaWdodHMgZm9yIHR5cGUgJWQKACBHYXRlIHdlaWdodHMgADxudWxsPgBQcmV2aW91cyBudWxsIGNoYXI9JWQgbWFwcGVkIHRvICVkCgBDb252b2x2ZQBNdXN0IHNwZWNpZnkgYW4gaW5wdXQgbGF5ZXIgYXMgdGhlIGZpcnN0IGxheWVyLCBub3QgJXMhIQoAIWludF9tb2RlXwBMMnh5AG90aGVyLnR5cGUoKSA9PSB0eXBlXwAgRW5kAFR4eQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9zZXJpZXMuY3BwAExpbmVzcGFjaW5nIG1vZGVsIG5vdCBjbG9zZSBlbm91Z2ggdG8gYW55IG1vZGUgZm9yIHJvdyBhdDoAZ3JpZF95ID49IDAgJiYgZ3JpZF95IDwgZ3JpZGhlaWdodCgpAGRpc3BsYXkAZ3JpZF95ID49IDAgJiYgZ3JpZF95IDwgZ3JpZGhlaWdodCgpAGJsb2NrLT54aGVpZ2h0ID4gMABCb3VuZGluZyBib3ggaW52YWxpZAoAQ2FuZGlkYXRlIG5vdCBjb25maXJtZWQ6AER1cGxpY2F0ZQoAc3BsaXRfc3RyYXRlZ3kgPT0gTUlOSU1BTF9TUExJVCB8fCBzcGxpdF9zdHJhdGVneSA9PSBNQVhJTUFMX1NQTElUAFJvdyB3aXRob3V0IGVub3VnaCBjaGFyIGNlbGxzIQoAQ29hcnNlTWFzawBBc3NlcnQgZmFpbGVkAFRleHREaXIgaGJveD0lZCB2cyB2Ym94PSVkLCAlZEgsICVkViwgJWROIG9zZCBibG9icwoASW5zZXJ0ZWQgJWQgYmxvYnMgaW50byBncmlkLCAlZCByZWplY3RlZC4KADAgPD0gcm93ICYmIHJvdyA8PSByb3dfY291bnQoKQBUZXN0aW5nIGNvbnN0cmFpbnQgY29tcGF0aWJpbGl0eQoAdG9zcF9vbmx5X3VzZV9wcm9wX3Jvd3MAQmxvYiBhdCAoJWQsJWQpIC0+ICglZCwlZCksIG9scz0lZCwgdGM9JWQsIGJsZGlmZj0lZwoAQjolZCBSOiVkIC0tIFNVU1BFQ1QgTk8gU1BBQ0VTICUzLjJmICVkICUzLjJmLgoAdGV4dG9yZF9zaG93X2ZpeGVkX3dvcmRzAHVfbGluZS0+Y2Jsb2IgKCkgIT0gbnVsbHB0cgBub3JtYWxpemluZyBoZWlnaHQgPSAlZyAoc2NhbGUgJWcgeGhlaWdodCAlZyBhc2NlbmRlcnMgJWcpCgBDaG9wMQBDb21ibyBwcmlvcml0eSAgICAgICAAbGFuZ3VhZ2VfbW9kZWxfdml0ZXJiaV9saXN0X21heF9udW1fcHJ1bmFibGUATE1fUFBUWVBFX0FNQklHUwAgcGVybXV0ZXI9JWQAAGRlYnVnAAByZXBhaXJfdW5jaG9wcGVkX2Jsb2JzAHBhZ2Vfc2VwYXJhdG9yACIgSEVJR0hUPSIAIHRpdGxlPSdpbWFnZSAiAEJUCjMgVHIAYm94AHN0ZDo6aW5uZXJfcHJvZHVjdABsZXZlbHMgbXVzdCBub3QgZXhjZWVkIDQAYm1mIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IHB0ciBhZGRyZXNzIGlzIG51bGwhCgBib3gxIG5vdCBkZWZpbmVkAHJvdGF0aW9uIG5vdCBpbiB7MCwxLDIsM30AZW1wdHkgYmFhcwBFcnJvciBpbiAlczogc3RhY2sgbm90IG1hZGUKAHBpeHMgbm90IDggYnBwAG91dGJ1ZiBub3QgbWFkZQBmcGl4cyBub3QgZGVmaW5lZABpbnZhbGlkIGh2YWwAaW52YWxpZDogcGl4cyBoYXMgYSBjb2xvcm1hcABpbnZhbGlkIG9wAGludmFsaWQgc2lkZQAvdG1wL2xlcHQvc2VnbWVudC9jb2xvcnNlZzIucG5nAGludmFsaWQgdHlwZQBJbmZvIGluICVzOiBTbWFsbCBpbWFnZTogZGl0aGVyaW5nIHR1cm5lZCBvZmYKAFdhcm5pbmcgaW4gJXM6IHRocmVzaG9sZCBzZXQgdmVyeSBsb3cKAGNtYXBzIG5vdCBkZWZpbmVkAHZjIG5vdCBkZWZpbmVkAG91dGRlcHRoIG5vdCBpbiB7MCw4LDE2LDMyfQBQT0lOVFMAc3BhY2luZyBub3QgPiAxAEVycm9yIGluICVzOiBidWZmZXIgYW5kIG1pbmFycmF5IG5vdCBtYWRlCgBXYXJuaW5nIGluICVzOiBtYXAgbm90IG1hZGU7IHJldHVybiBhIGNvcHkgb2YgdGhlIHNvdXJjZQoAYnVmczEsIGJ1ZnMyIG5vdCBib3RoIG1hZGUAaW52YWxpZCBpbmRleABrZXJuZWwgbm90IGRlZmluZWQAcGl4dDEgbm90IG1hZGUASW5mbyBpbiAlczogb25lIHBpeCBpcyAxNiBicHAKAFdhcm5pbmcgaW4gJXM6IGJveGEgc2l6ZSAhPSBuCgAlZABzdHIgbm90IGRlZmluZWQgb3IgZW1wdHkAbmFkIGRlZmluZWQ7IG5vdCBpbi1wbGFjZQBuYSBub3QgZGVmaW5lZABzcmMgbm90IGRlZmluZWQAc3RhcnQgcHRhIG5vdCBtYWRlAC90bXAvbGVwdC9wYWdlc2VnL3RleHRtYXNrLmJveGEAZGVwdGggbm90IDggYnBwAHN0cmVhbSBub3QgZGVmaW5lZABFcnJvciBpbiAlczogcGRmIGRhdGEgbm90IHdyaXR0ZW4gdG8gZmlsZQoAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTAoAZGEyIG5vdCBkZWZpbmVkAEluZm8gaW4gJXM6IHJlYWRpbmcgbHVtaW5hbmNlIGNoYW5uZWwgb25seQoAbm90IGpwMiBmaWxlAHBhX2RhdGEgbm90IGRlZmluZWQARXJyb3IgaW4gJXM6IHJlcXVlc3RlZCB3ID0gJWQsIGggPSAlZCwgZCA9ICVkCgBpbnBsYWNlOyBwaXhzMSBoYXMgY29sb3JtYXAAcGl4IG5vdCAzMiBicHAAcGl4ZCBub3QgOCwgMTYgb3IgMzIgYnBwAG54IGFuZCBueSBtdXN0IGJvdGggYmUgPiAwAHBpeG0gbm90IGRlZmluZWQgb3Igbm90IDEgYnBwAGJveGEgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogY2FuJ3QgZ2V0IGhlcmUhCgBubyBjb21wb25lbnRzAHBpeHMyIGFuZCBwaXhkIG11c3QgZGlmZmVyAGhlYWRlciBkYXRhIG5vdCByZWFkAFdhcm5pbmcgaW4gJXM6IEludmFsaWQgdHlwZTsgY29udmVydGluZyBiYXNlZCBvbiBzcmMKAFdhcm5pbmcgaW4gJXM6IHB0ciBhZGRyZXNzIGlzIG51bGwhCgBJbmZvIGluICVzOiBub3Qgc3RyaXBwaW5nIDE2IC0tPiA4IGluIHBuZyByZWFkaW5nCgB2YyBub3QgZGVmaW5lZABwdGEgbm90IGRlZmluZWQAc3RhcnQgYW5kIGVuZCBwdHMgbm90IHNhbWUAZGEgbm90IGRlZmluZWQAbmEgbm90IG1hZGUAZXh0ZW5zaW9uIGZhaWx1cmUARXJyb3IgaW4gJXM6IHN0cmVhbSBub3QgZGVmaW5lZAoAY2Fubm90IHJlYWQgY29tcHJlc3NlZCBCTVAgZmlsZXMAcmVhZCBlcnJvciBpbiA0AHBpeFdyaXRlTWVtSnAyawBwaXggbm90IHJlYWQAcGl4ZCBub3QgbWFkZQBidWZmZXIgbm90IG1hZGUAV2FybmluZyBpbiAlczogJTYuMmYgcmFkaWFuczsgbGFyZ2UgYW5nbGUgZm9yIDMtc2hlYXIgcm90YXRpb24KAHBpeGQgbm90IG1hZGUAc3Vic3RyaW5nIG5vdCBtYWRlAHNhMiBub3QgZGVmaW5lZAB0YWIgbm90IG1hZGUAcGl4cyBub3QgZGVmaW5lZCBvciAxIGJwcABwaXgxIG5vdCBtYWRlAHN0cmVhbSBub3QgZGVmaW5lZABzZWwgbm90IGRlZmluZWQAc2VsXzVkcAB4bG9jIG5vdCBpbiBbMCAuLi4gdy0xXQBwaXhkIG5vdCBtYWRlAHJlZHVjdGlvbiBtdXN0IGJlIGluIHsxLDIsNCw4fQBmaWxlIHRvbyBzbWFsbCB0byBiZSBzcGl4AAogU3RhY2s6IG5hbGxvYyA9ICVkLCBuID0gJWQsIGFycmF5ID0gJXAKAEVycm9yIGluICVzOiBGaWxlICVzIGhhcyBubyByZWNvZ25pemFibGUgdHlwZQoAdGV4dHN0ciBub3QgZGVmaW5lZAB3AGZpbGVpbiBhbmQgZmlsZW91dCBub3QgYm90aCBzcGVjaWZpZWQAbm8gdGVybWluYXRpbmcgbnVsIGJ5dGUAcGl4V3JpdGVTdHJlYW1XZWJQAHBpeCBub3QgZGVmaW5lZABwcwBEQ1QgY29lZmZpY2llbnQgb3V0IG9mIHJhbmdlAElnbm9yaW5nIGF0dGVtcHQgdG8gc2V0IG5lZ2F0aXZlIGNocm9tYXRpY2l0eSB2YWx1ZQBNaXNzaW5nIElIRFIgYmVmb3JlIElEQVQAUGFsZXR0ZSBpcyBOVUxMIGluIGluZGV4ZWQgaW1hZ2UAaW52YWxpZCBjaHVua2xlbmd0aABJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBwQ0FMIHVuaXRzAHBuZ193cml0ZV9pbmZvIHdhcyBuZXZlciBjYWxsZWQgYmVmb3JlIHBuZ193cml0ZV9yb3cASW52YWxpZCBjb21wcmVzc2lvbiB0eXBlIHNwZWNpZmllZABPbGQtc3R5bGUgSlBFRwBUSUZGVW5SZWdpc3RlckNPREVDAAAlczogCgBQbGFuYXJjb25maWcgdGFnIHZhbHVlIGFzc3VtZWQgaW5jb3JyZWN0LCBhc3N1bWluZyBkYXRhIGlzIGNvbnRpZyBpbnN0ZWFkIG9mIGNodW5reQBJbml0Q0NJVFRGYXgzAENhbm5vdCB3cml0ZSBkaXJlY3RvcnksIG91dCBvZiBzcGFjZQBDb2xvciBjaGFubmVscwBGYXhSZWN2UGFyYW1zAEluYXBwcm9wcmlhdGUgcGhvdG9tZXRyaWMgaW50ZXJwcmV0YXRpb24gJWQgZm9yIFNHSUxvZyBjb21wcmVzc2lvbjsgJXMAT2xkLXN0eWxlIExaVyBjb2RlcywgY29udmVydCBmaWxlAEpwZWdRVGFibGVzAFRoaXMgaXMgYSBCaWdUSUZGIGZpbGUuICBUaGlzIGZvcm1hdCBub3Qgc3VwcG9ydGVkCmJ5IHRoaXMgdmVyc2lvbiBvZiBsaWJ0aWZmLgBQaXhhckxvZyBjb21wcmVzc2lvbiBjYW4ndCBoYW5kbGUgYml0cyBkZXB0aC9kYXRhIGZvcm1hdCBjb21iaW5hdGlvbiAoZGVwdGg6ICVkKQBzcC0+dnNldHBhcmVudCAhPSBOVUxMACVzdHJhbnNwYXJlbmN5IG1hc2sAJXM6IERhdGEgYnVmZmVyIHRvbyBzbWFsbCB0byBob2xkIHN0cmlwICVsdQBUSUZGUmFzdGVyU2NhbmxpbmVTaXplAFRJRkZWVGlsZVNpemUAQ2FuIG5vdCB3cml0ZSBzY2FubGluZXMgdG8gYSB0aWxlZCBpbWFnZQBzcCAhPSBOVUxMAGludmFsaWQgYmxvY2sgdHlwZQBpbnN1ZmZpY2llbnQgbWVtb3J5AHdvcmQgaXMgYW1iaWd1b3VzCgBpbiBmaWxlICVzLCBsaW5lICVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY21haW4vY29udHJvbC5jcHAAUDEgQ1JVTkNISU5HOiAiJXMiCgBlcXVhdGlvbmRldGVjdF9zYXZlX3NlZWRfaW1hZ2UARklYIFNQQUNJTkcgIiVzIiA9PiAiAEFwcGx5aW5nIGJvdHRvbSBzaGlmdD0lZAoAQmVzdCBjaG9pY2UgY2VydGFpbnR5PSVnLCBzcGFjZT0lZywgc2NhbGVkPSVnLCBmaW5hbD0lZwoAcmVzdWx0X2l0Lml0Xy0+d29yZCgpICE9IG51bGxwdHIAdGVzcy0+cGl4X2JpbmFyeSgpICE9IG51bGxwdHIAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L3JlamN0bWFwLmgATm9JbWFnZXMAQ3JSAHIAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjbWFpbi9yZWplY3QuY3BwAGl0Xy0+d29yZCgpLT5iZXN0X2Nob2ljZSAhPSBudWxscHRyAE9yaWcuIGxlYWRpbmcgKG1pbik6ICUuMmYgIABXYXJuaW5nOiBUaGUgcGFyYW1ldGVyICclcycgd2FzIG5vdCBmb3VuZC4KAEdlbmVyYXRlIG1vcmUgYm94ZXMgZnJvbSBib3hlZCBjaGFycwB3b3JkLT5TdGF0ZXNBbGxWYWxpZCgpAApub3JtX3RydXRoX3dvcmQgYm94ZXM6CgAAZGlyZGlmZiA9PSAwIHx8IGRpcmRpZmYgPT0gMzIgfHwgZGlyZGlmZiA9PSAtMzIAVW5sb2FkZWQgZG9jdW1lbnQgJXMsIHNhdmluZyAlbGxkIG1lbW9yeQoACSVkAAoATGVmdCBzaWRlIGNvb3JkcyBhcmU6CgBCb3VuZGluZyBib3g9KCVkLCVkKS0+KCVkLCVkKQoAQmVzdCBjaG9pY2U6IGFjY2VwdGVkPSVkLCBhZGFwdGFibGU9JWQsIGRvbmU9JWQgOiAAUFRSQUlOX0RPQ19NRUQAaW4gZmlsZSAlcywgbGluZSAlZABWZXJ0aWNhbCBUZXh0AHN0YXJ0ID49IDAgJiYgc3RhcnQgKyBudW0gPD0gbGVuZ3RoXwBSX1JFSl9DQkxPQjogJXMKAExvd2VyIHF1YXJ0aWxlPSUuMmYKACAgIFdfRU9MID0gJXMKAFJlcGxhY2VhYmxlAHJiAFRlc3NkYXRhVHlwZUZyb21GaWxlU3VmZml4KGZpbGVzdWZmaXgsICZ0eXBlKQBBc3NlcnQgZmFpbGVkAEludmFsaWQgZm9ybWF0IGluIHJhZGljYWwgdGFibGUgYXQgbGluZSAlZDogJXMKAO6AiABDYW4ndCBhZGFwdCB0byAlcyBub3QgaW4gdW5pY2hhcnNldAoAZGVidWcAQ2xhc3NpZnkgZGVidWcgbGV2ZWwAJTc5cyAlNzlzICVkAAoACk1pbnVzIHR3byBmZWF0dXJlczoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgAY2xhc3NpZnlfY3BfYW5nbGVfcGFkX21lZGl1bQBkaXNwbGF5AFlNaWRkbGU6IFByb3RvPSVnLCBEZWx0YT0lZywgVmFyPSVnLCBEaXN0PSVnCgBBc3NlcnQgZmFpbGVkAAoAIABGb250IGlkID0gJWQvJWQsIGNsYXNzIGlkID0gJWQvJWQgb24gc2FtcGxlICVkCgBBc3NlcnQgZmFpbGVkAE51bWJlciBvZiBsb3N0IHdvcmRzPSVkCgB1c2VyX3BhdHRlcm5zX3N1ZmZpeABub3QgT0sAClJlamVjdGVyOiAlcyAod29yZD0lYywgY2FzZT0lYywgdW5hbWJpZz0lYywgbXVsdGlwbGU9JWMpCgAKQWRkaW5nIHdvcmQ6IAAsAEZ0AG90aGVyLnR5cGUoKSA9PSB0eXBlXwAlcz0lZCBPbiBbJWQsICVkKSwgc2NvcmVzPQA6AE1heHBvb2wASW5wdXQAY29tYmluZXJfb3V0cHV0Lk51bUZlYXR1cmVzKCkgPT0gbm8gKyAxAExieHMAcGx1bWJpbmctPnN0YWNrXy5zaXplKCkgPT0gc3RhY2tfLnNpemUoKQAgcHJldjoASW52YWxpZCBzcGxpdCBpbmRleCAlZCBtdXN0IGJlIGluIHJhbmdlIFswLCVkXSEKAHRleHRvcmRfdGVzdHJlZ2lvbl9sZWZ0AENvbnN0cmFpbmVkIGVycm9yID0gJWcsIG9yaWdpbmFsID0gJWcAQXNzZXJ0IGZhaWxlZABpbiBmaWxlICVzLCBsaW5lICVkAHRleHRvcmRfdGFiZmluZF9zaG93X3BhcnRpdGlvbnMATWFyZ2lucyBpbnZhbGlkCgBOZXcgYmVzdCBtZXJnZSBjYW5kaWRhdGUgaGFzIGluY3JlYXNlICVkLCBhcmVhICVkLCBvdmVyIGJveDoAQWRkZWQgdG8gZW5kCgBpbiBmaWxlICVzLCBsaW5lICVkAGVkZ2VzX21heF9jaGlsZHJlbl9sYXllcnMATGVmdG1vc3QgYmxvYiBpcyBhdCAoJWQsJWQpCgBnYXBtYXBfbm9faXNvbGF0ZWRfcXVhbnRhAE1hc2tEaWxhdGVkAHRleHRvcmRfc2hvd19wYXJhbGxlbF9yb3dzAHRleHRvcmRfZGVidWdfYmFzZWxpbmVzAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAcGl0c3luY19vZmZzZXRfZnJlZWN1dF9mcmFjdGlvbgBNYXggbmVpZ2hib3VyIHNpemU9JWQgZm9yIGNhbmRpZGF0ZSBsaW5lIGJveCBhdDoATG9va2luZyBpbiBndXR0ZXIKAHRleHRvcmRfdGFibGVmaW5kX3Nob3dfc3RhdHMAMCA8PSBjb2x1bW4gJiYgY29sdW1uIDw9IGNvbHVtbl9jb3VudCgpAFJlc3VsdGluZyByYW5nZSA9IFslZCwlZF0KAEJsb2NrIHN0YXRzIHRvIHVzZSBmaXhlZCBwaXRjaCByb3dzPwB0ZXh0b3JkX2Rpc2FibGVfcGl0Y2hfdGVzdABSb3cgZW5kaW5nIGF0ICglZCwlZyk6AEI6JWQgUjolZCBMOiVkLS0gS246JWQgU3A6JWQgVGhyOiVkIC0tIEtuOiUzLjJmICglZCkgVGhyOiVkICglZCkgU3A6JTMuMmYKAERpc3BsYXkgZm9yY2VkIGZpeGVkIHBpdGNoIHdvcmRzAGluIGZpbGUgJXMsIGxpbmUgJWQAdGV4dG9yZF9jaG9wcGVyX3Rlc3QAd2hfcmF0aW89JWcgKG1heF9jaGFyX3doX3JhdGlvPSVnKSBnYXBfc3VtPSVkICVzCgBDaG9wMgBNYXhpbXVtIG51bWJlciBvZiBwcnVuYWJsZSAodGhvc2UgZm9yIHdoaWNoIFBydW5hYmxlUGF0aCgpIGlzIHRydWUpIGVudHJpZXMgaW4gZWFjaCB2aXRlcmJpIGxpc3QgcmVjb3JkZWQgaW4gQkxPQl9DSE9JQ0VzAExNX1BQVFlQRV9QQVRIACBuZ3JhbV9jbF9jb3N0PSVnIGNvbnRleHQ9JXMgbmdyYW0gcHJ1bmVkPSVkAFJlZnVzaW5nIHRvIHNhdmUgUGFyYW1zTW9kZWwgdGhhdCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCgBkaXNwbGF5AHJhdGluZ3MtPmRpbWVuc2lvbigpID09IHBlbmRpbmctPnNpemUoKQBGaXggYmxvYnMgdGhhdCBhcmVuJ3QgY2hvcHBlZAA0LjEuMS01Ni1nYmU0NQB0c3YAIiBQSFlTSUNBTF9JTUdfTlI9IgB1bmtub3duACAAV2FybmluZywgaWdub3JpbmcgdW5zdXBwb3J0ZWQgY29uZmlnIHZhcmlhYmxlIHZhbHVlOiBkb3Rwcm9kdWN0PSVzCgBXYXJuaW5nIGluICVzOiBubyByZWR1Y3Rpb24gYmVjYXVzZSBsZXZlbDEgbm90ID4gMAoARXJyb3IgaW4gJXM6IG5vIGJpdG1hcCByZXByZXNlbnRhdGlvbiBmb3IgJWQKACZ2YWxpZCBub3QgZGVmaW5lZABib3gyIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGJveGFzIGlzIGVtcHR5CgBpbnZhbGlkIHR5cGUARXJyb3IgaW4gJXM6IGJveCBub3QgbWFkZQoAV2FybmluZyBpbiAlczogcGl4YWNjIG5vdCAzMiBicHA7IG1ha2luZyBuZXcgb25lCgBvdXRhIG5vdCBtYWRlAGZwaXggbm90IGRlZmluZWQAY21hcCBub3QgZGVmaW5lZABwaXhzIHVuZGVmaW5lZCBvciBub3QgMzIgYnBwAFdhcm5pbmcgaW4gJXM6IG5vIGJveGVzIHRvIG1hc2sKAGludmFsaWQgbWluanVtcDsgbXVzdCBiZSA+PSAxAC90bXAvbGVwdC9zZWdtZW50L2NvbG9yc2VnMy5wbmcAcGl4cyBub3QgY21hcHBlZCBvciAzMiBicHAAcGl4ZCBub3QgbWFkZQBwaXhzIG5vdCBkZWZpbmVkAG5hbGxvYyA+IDI1NgBkZXB0aCBub3QgMSwgMiwgNCwgOCBvciAxNgBFcnJvciBpbiAlczogTnVtYmVyIG9mIG5lZ2F0aXZlIHZhbHVlczogJWQKAElNUFVMU0VTAGludmFsaWQgbGluZSBvcmllbnRhdGlvbgBFcnJvciBpbiAlczogcGl4ZCBub3QgbWFkZQoAcGl4bWkgbm90IG1hZGUAcGl4cyBtdXN0IGJlIDQgb3IgOCBicHAAc3RyZWFtIG5vdCBkZWZpbmVkAGtlcm5lbCByb3cgb3V0IG9mIGJvdW5kcwBwaXh0MiBub3QgbWFkZQBJbmZvIGluICVzOiBmYWlsdXJlIHRvIGNvbnZlcnQgdG8gOCBicHAKAGRlcHRoIG5vdCAxIGJwcAAvdG1wL2xlcHQvc2VxX291dHB1dF8lZC5wZGYALAAgVW5rbm93biBsb2dpY2FsIG9wOiAlZAoAbmEgaXMgZW1wdHkAbm8gYnl0ZXMgdG8gcmVhZABsb2NhbCBwdGFhIG5vdCBtYWRlAC90bXAvbGVwdC9wYWdlc2VnL3RleHRibG9jay5ib3hhAGludmFsaWQgdHlwZQBkYXRhIG5vdCByZWFkACZkYXRhIG5vdCBkZWZpbmVkAGRhIG5vdCBkZWZpbmVkAGRhcyBub3QgZGVmaW5lZABzcHAgbXVzdCBiZSAxIG9yIDMsIG9yIFlDQ0sgb3IgQ01ZSwBpbWFnZSBwYXJhbWV0ZXJzIG5vdCBmb3VuZABFcnJvciBpbiAlczogY2FuJ3QgcGFyc2UgZmlsZSAlczsgc2tpcHBpbmcKAHdwbCA+PSAyXjI5AHBpeGQgbXVzdCBiZSBOVUxMIG9yIHBpeHMxAGlsbGVnYWwgZGVwdGggaW4gc2V0UGl4ZWxMb3coKQoAcGl4bXUgbm90IG1hZGUAbmFhIG5vdCBtYWRlAHBpeHMxIG5vdCBkZWZpbmVkIG9yIG5vdCAxIGJwcABwaXhhZCBub3QgbWFkZQBubWluID4gbm1heABub3QgYWxsIGNvbXBvbmVudHMgYXJlIDEgYnBwAHBpeCBhcmUgbm90IDgsIDE2IG9yIDMyIGJwcABmaWxlbmFtZSBub3QgZGVmaW5lZABwaXhzIG11c3QgYmUgezEsMiw0LDh9IGJwcABwdCBub3QgZGVmaW5lZABIZWxwOiBzcHAgPSAzIGFuZCBkZXB0aCA9ICVkICE9IDgKISEAZGVwdGggbm90IDEsIDIsIDQsIDggb3IgMTYAbnB0YSBub3QgbWFkZQBzdGFydCBwdCBub3QgaW4gcHRhcwAmZGFkIG5vdCBkZWZpbmVkAG5haW5kZXggbm90IGRlZmluZWQAaW5kZXggbm90IGluIFswIC4uLiBuYWxsb2NdAEVycm9yIGluICVzOiB0cmVlIG5vdCBkZWZpbmVkCgB3aWR0aCA8IDEAZXJyb3IgaW4gNQBpbWFnZSBmaWxlIG5vdCBmb3VuZABjYWxsb2MgZmFpbCBmb3IgdGFiAGludmFsaWQgdmFsdWUgZm9yIGluY29sb3IAc3RhcnQgbm90IG1hZGUADQoAc2FzIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IHNjYWxpbmcgZmFjdG9ycyA8IDAuNzsgZG8gcmVndWxhciBzY2FsaW5nCgBjb25uZWN0aXZpdHkgbm90IDQgb3IgOAAKIExfUXVldWU6IG5hbGxvYyA9ICVkLCBuaGVhZCA9ICVkLCBuZWxlbSA9ICVkLCBhcnJheSA9ICVwCgBjc2VsIG5vdCBtYWRlAHNlbF81ZG0AV2FybmluZyBpbiAlczogYW5nbGUgY2xvc2UgdG8gcGkvMjsgc2hpZnRpbmcgYXdheQoAaW52YWxpZCBkZXB0aABwaXggYW5kIHBpeHQgbm90IGJvdGggbWFkZQBMRVBUX0NBTExPQyBmYWlsIGZvciBkYXRhAGFycmF5WyVkXSA9ICVwCgBJbmZvIGluICVzOiBGaWxlICVzIGlzIHR5cGUgJXMKAFdhcm5pbmcgaW4gJXM6IHJlZHVjaW5nIHdpZHRoIG9mIHRleHRibG9jawoAYQBsb2MgbXVzdCBiZSBpbiBbMC4wIC4uLiAxLjApAGRlc3QgdG9vIHNtYWxsIGZvciBhcHBlbmQAcGl4V3JpdGVNZW1XZWJQAHBpeGMgbm90IG1hZGUAZ2lmAERDVCBzY2FsZWQgYmxvY2sgc2l6ZSAlZHglZCBub3Qgc3VwcG9ydGVkAElnbm9yaW5nIGF0dGVtcHQgdG8gc2V0IGNocm9tYXRpY2l0eSB2YWx1ZSBleGNlZWRpbmcgMjE0NzQuODMATWlzc2luZyBQTFRFIGJlZm9yZSBJREFUAHBuZ19kb19yZ2JfdG9fZ3JheSBmb3VuZCBub25ncmF5IHBpeGVsAEV4Y2VlZGVkIHNpemUgbGltaXQgd2hpbGUgZXhwYW5kaW5nIGNodW5rAEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHBDQUwgcGFyYW1zAHpsaWIgZXJyb3IASW52YWxpZCBmaWx0ZXIgdHlwZSBzcGVjaWZpZWQAQ0NJVFQgUkxFAENhbm5vdCByZW1vdmUgY29tcHJlc3Npb24gc2NoZW1lICVzOyBub3QgcmVnaXN0ZXJlZAAlczogQ2Fubm90IG1vZGlmeSB0YWcgIiVzIiB3aGlsZSB3cml0aW5nAGZpZWxkWyUyZF0gJTVsdSwgJTJkLCAlMmQsICVkLCAlMmQsICU1cywgJTVzLCAlcwoASW1hZ2VMZW5ndGgATWVyZ2luZyBjb21tb24gQ0NJVFQgRmF4IGNvZGVjLXNwZWNpZmljIHRhZ3MgZmFpbGVkAEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGNvdW50AFNvcnJ5LCBjYW4gbm90IGhhbmRsZSBzZXBhcmF0ZWQgaW1hZ2Ugd2l0aCAlcz0lZABGYXhTdWJBZGRyZXNzAG11c3QgYmUgZWl0aGVyIExvZ0xVViBvciBMb2dMAExaV0RlY29kZTogU3RyaXAgJWQgbm90IHRlcm1pbmF0ZWQgd2l0aCBFT0kgY29kZQBKcGVnRGNUYWJsZXMATm90IGEgVElGRiBmaWxlLCBiYWQgdmVyc2lvbiBudW1iZXIgJWQgKDB4JXgpADEuMi41ACAgUHJlZGljdG9yOiAAICglbHUgPSAweCVseCkKACVsZDogVGlsZSBvdXQgb2YgcmFuZ2UsIG1heCAlbGQASW50ZWdlciBvdmVyZmxvdyBpbiAlcwBJbnZhbGlkIFlDYkNyIHN1YnNhbXBsaW5nACVzOiBNdXN0IHNldCAiSW1hZ2VXaWR0aCIgYmVmb3JlIHdyaXRpbmcgZGF0YQAxLjIuNQBpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzAGJ1ZmZlciBlcnJvcgByZXR1cm5pbmcgc3RhdHVzICVkCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NtYWluL2FwcGx5Ym94LmNwcABQYXNzJWQ6ICVzIFslc10KAFAyIENSVU5DSElORzogIiVzIgoAU2F2ZSB0aGUgc2VlZCBpbWFnZQBGUCBmaXhzcGFjZSB3b3JraW5nIG9uICIlcyIKAGJhc2VsaW5lIHNoaWZ0PSVnCgBjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAEFzc2VydCBmYWlsZWQAaW4gZmlsZSAlcywgbGluZSAlZABjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAHRvX2Jsb2Nrcy0+c2luZ2xldG9uKCkAMABib3hfZmlsZQBQZXJtdXRlciBUeXBlID0gJWQKAFN0cm9uZyBTY3JpcHQgZGlycyAgICAgWyVwL1A9JXNdOiAAT3JpZy4gdHJhaWxpbmcgKG1pbik6ICUuMmYgIAB3YgB0ZXNzZWRpdF90cmFpbl9saW5lX3JlY29nbml6ZXIAUGVybXV0ZXIgVHlwZSBGbGlwcGVkIGZyb20gJWQgdG8gJWQKAFNwbGl0IGZvdW5kAEJhZCBib3ggY29vcmRpbmF0ZXMgaW4gYm94ZmlsZSBzdHJpbmchICVzCgBjb3VudCA9PSAxMjggfHwgY291bnQgPT0gLTEyOABEZXNlcmlhbGl6ZSBoZWFkZXIgZmFpbGVkOiAlcwoAJWQJAFNjYWxlID0gKCVnLCAlZykKACglZCwlZCkgADxOdWxsIGNob2ljZT4KAFBUUkFJTl9ET0NfTE9ORwAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3QvcG9seWFwcnguY3BwAENhcHRpb24gVGV4dABpbiBmaWxlICVzLCBsaW5lICVkAFJfTU1fUkVKRUNUOiAlcwoATWVkaWFuPSUuMmYsIGlsZSgwLjUpPSUuMmYKACAgIFdfTk9STUFMSVpFRCA9ICVzCgBEYW5nZXJvdXMAQXNzZXJ0IGZhaWxlZAByYgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAxb/FvwAuYQBkaXNwbGF5AGNsYXNzaWZ5X25vcm1fbWV0aG9kAEludmFsaWQgcHJvdG90eXBlOiAlcwoAJWQACgBBc3NlcnQgZmFpbGVkAENsYXNzIFBydW5lciBBbmdsZSBQYWQgTWVkaXVtAEhlaWdodDogUHJvdG89JWcsIERlbHRhPSVnLCBWYXI9JWcsIERpc3Q9JWcKACVmACVnOgAgLi4uIABmb250X2lkID49IDAgJiYgZm9udF9pZCA8IGZvbnRfaWRfbWFwXy5TcGFyc2VTaXplKCkAbWF0Y2hfd29yZHMoKSBmb3VuZDogAEEgc3VmZml4IG9mIHVzZXItcHJvdmlkZWQgcGF0dGVybnMgbG9jYXRlZCBpbiB0ZXNzZGF0YS4AZm91bmQgd29yZCA9ICVzCgBSZWplY3RlcjogQ2VydGFpbnR5ID0gJTQuMWYsIFRocmVzaG9sZCA9ICU0LjFmICAgAEFkZGluZyBsZXR0ZXIgJWQKAE11c3Qgb3ZlcnJpZGUgTmV0d29yazo6RGVidWdXZWlnaHRzIGZvciB0eXBlICVkCgBGcwBXZWlnaHQgc3RhdGU6JXMKACAlLjNnKCVzPSVkPSUuM2cpAEJ1aWx0IG5ldHdvcms6JXMgZnJvbSByZXF1ZXN0ICVzCgBQYXJhbGxlbABTZXJpZXMAZndkX2RlbHRhcy5OdW1GZWF0dXJlcygpID09IG5vAExieABBc3NlcnQgZmFpbGVkAAoATWFzdGVyU2VyaWVzAExlZnQgZWRnZSBvZiBkZWJ1ZyByZXBvcnRpbmcgcmVjdGFuZ2xlACBhbmdsZXMgPSAlZywgJWcsIGRlbHRhPSVnIHZzIHRocmVzaG9sZCAlZwoAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC9jamtwaXRjaC5jcHAAU2hvdyBwYXJ0aXRpb24gYm91bmRzLCB3YWl0aW5nIGlmID4xAEtleSBpbnNpZGUgYm94OiAlZCB2ICVkIG9yICVkIHYgJWQKAHJpZ2h0X3BhcnQgIT0gbnVsbHB0cgBDb21wYXRpYmxlQ29sdW1ucyB0ZXN0aW5nIGNvbXBhdGliaWxpdHkKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL2RldmFuYWdhcmlfcHJvY2Vzc2luZy5jcHAATWF4IGxheWVycyBvZiBuZXN0ZWQgY2hpbGRyZW4gaW5zaWRlIGEgY2hhcmFjdGVyIG91dGxpbmUAIWNlbGxfaXQuZW1wdHkgKCkgJiYgIXJvdy0+Y2hhcl9jZWxscy5zaW5nbGV0b24gKCkARW5zdXJlIGdhcHMgbm90IGxlc3MgdGhhbiAycXVhbnRhIHdpZGUARmluYWxNYXNrAERpc3BsYXkgcGFnZSBjb3JyZWxhdGVkIHJvd3MARGVidWcgYmFzZWxpbmUgZ2VuZXJhdGlvbgBGcmFjdGlvbiBvZiBjdXQgZm9yIGZyZWUgY3V0cwBJbml0aWFsIHRleHRsaW5lIEJsb2JzAExvb2tpbmcgZm9yIG5laWdoYm91cgoAU2hvdyBwYWdlIHN0YXRzIHVzZWQgaW4gdGFibGUgZmluZGluZwAha0NlbGxCb3gubnVsbF9ib3goKQBNZXJnaW5nIGNvbnN0cmFpbnRzCgB0b3NwX2ZvcmNlX3dvcmRicmVha19vbl9wdW5jdABUdXJuIG9mZiBkcCBmaXhlZCBwaXRjaCBhbGdvcml0aG0AIFI9JWcsIGRjPSVkLCBuYz0lZCwgJXMKAHJvdy0+a2Vybl9zaXplID0gJTMuMmYsIHJvdy0+c3BhY2Vfc2l6ZSA9ICUzLjJmLCByb3ctPnNwYWNlX3RocmVzaG9sZCA9ICVkCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC91bmRlcmxpbi5jcHAAQ2hvcHBlciBpcyBiZWluZyB0ZXN0ZWQuAGJhZF9zaGFwZQByYXRpbmdfY2VpbGluZyA9ICU4LjRmCgBsYW5ndWFnZV9tb2RlbF92aXRlcmJpX2xpc3RfbWF4X3NpemUATE1fUFBUWVBFX1NIQVBFACBzaGFwZV9jb3N0PSVnAHdiAGluIGZpbGUgJXMsIGxpbmUgJWQAdGVzc2VkaXRfY2VydGFpbnR5X3RocmVzaG9sZABEZXByZWNhdGVkIG1ldGhvZCBDYXRjaFNpZ25hbHMgaGFzIG9ubHkgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiEKAGxldmVsCXBhZ2VfbnVtCWJsb2NrX251bQlwYXJfbnVtCWxpbmVfbnVtCXdvcmRfbnVtCWxlZnQJdG9wCXdpZHRoCWhlaWdodAljb25mCXRleHQKACIAIjsgYmJveCAAIFRtIABTdXBwb3J0IHZhbHVlcyBmb3IgZG90cHJvZHVjdDogYXV0byBnZW5lcmljIG5hdGl2ZSBzdGQ6OmlubmVyX3Byb2R1Y3QuCgBsZXZlbCBtdXN0IGJlIGluIHNldCB7MSwyLDMsNH0AcGl4YSBub3QgZm91bmQAYm94YSBub3QgbWFkZQAmZnJhY3Qgbm90IGRlZmluZWQAaW52YWxpZCBzb3J0IHR5cGUAaW52YWxpZCByZWxhdGlvbgBwaXgxIG5vdCBtYWRlAHBpeHQgbm90IG1hZGUASW5mbyBpbiAlczogICVkIGV4dHJhIGJ5dGVzIG91dHB1dAoAZnBpeGQgbm90IG1hZGUAcGl4cyB1bmRlZmluZWQgb3Igbm90IDMyIGJwcABXYXJuaW5nIGluICVzOiBmYWN0b3IgbXVzdCBiZSA+PSAwLjA7IHVzaW5nIDAuMAoAV2FybmluZyBpbiAlczogbm8gYm94ZXMgdG8gcGFpbnQ7IHJldHVybmluZyBhIGNvcHkKAGludmFsaWQgbWlucmV2ZXJzYWw7IG11c3QgYmUgPj0gMQBJbmZvIGluICVzOiBTdWNjZXNzIHdpdGggJWQgY29sb3JzIGFmdGVyICVkIGl0ZXJzCgAmcGl4ZnJhY3QgYW5kICZjb2xvcmZyYWN0IG5vdCBkZWZpbmVkAGNxbGV2ZWxzIG11c3QgYmUgaW4gezEsLi4uNn0AcGl4cyBub3QgY21hcHBlZCwgOCBicHAgb3IgcmdiAGNtYXBkIG5vdCBtYWRlAHBpeHMgbXVzdCBiZSAzMiBicHAARXJyb3IgaW4gJXM6IE51bWJlciBvZiB0b28tbGFyZ2UgdmFsdWVzOiAlZAoATElORVNQT0lOVFMAYm94IGhhcyBidyA9IDAgb3IgYmggPSAwAEVycm9yIGluICVzOiBidWZmZXIgYW5kIG1heGFycmF5IG5vdCBtYWRlCgBub3QgYWxsIHBpeG0qaSBhcmUgbWFkZQB0aHJlc2ggbXVzdCBiZSBub24tbmVnYXRpdmUACiBMX0hlYXA6IG5hbGxvYyA9ICVkLCBuID0gJWQsIGFycmF5ID0gJXAKAGtlcm5lbCBjb2wgb3V0IG9mIGJvdW5kcwBoc2l6ZSBhbmQgdnNpemUgbm90ID49IDEAJnNhbWUgbm90IGRlZmluZWQAcGl4MSBub3QgZm91bmQAc2Egbm90IGRlZmluZWQAJWYAbmFzIG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiBpbnZhbGlkOiBmaXJzdCglZCkgPiBsYXN0KCVkKQoAZnAgbm90IGRlZmluZWQAY2NiYSBub3QgZGVmaW5lZABEZWJ1ZyBwYWdlIHNlZ21lbnRhdGlvbgBubyByb29tOyBjbWFwIGZ1bGwAYmFzIG5vdCBkZWZpbmVkACZuYnl0ZXMgbm90IGRlZmluZWQAZGFjIG5vdCBtYWRlAHJvd2J1ZmZlciBvciBwaXggbm90IG1hZGUAdW5yZWFsaXN0aWNhbGx5IGxhcmdlIHNpemVzAEVycm9yIGluICVzOiBjYW4ndCBwYXJzZSBmaWxlICVkOyBza2lwcGluZwoAcmVxdWVzdGVkIGJ5dGVzID49IDJeMzEAV2FybmluZyBpbiAlczogZnJhY3QgbXVzdCBiZSBpbiBbMC4wLCAxLjBdOyBzZXR0aW5nIHRvIDAuNQoAcGl4cyBub3QgZGVmaW5lZABwaXhjIG5vdCBtYWRlACZuYXIsICZuYWcsICZuYWIgbm90IGFsbCBkZWZpbmVkAHBpeHMyIG5vdCBkZWZpbmVkIG9yIG5vdCAxIGJwcABueCBhbmQgbnkgbXVzdCBiZSA+IDAAbmEgbm90IGRlZmluZWQAcGl4YXMgbm90IGRlZmluZWQAZGVwdGhzIGRpZmZlciAocGl4czEsIHBpeHMyKQBFcnJvciBpbiAlczogdW5yZWFkYWJsZSBmaWxlOiAlcwoAY29sb3JtYXAgYXJyYXlzIG5vdCBtYWRlAHBpeCBub3QgZm91bmQAbm90IGltcGxlbWVudGVkIGZvciB0aGlzIGRlcHRoAHBpeHMgbXVzdCBiZSAzMiBicHAAcHRhcyBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBwdGFzIGlzIGVtcHR5CgBkYXMgbm90IGRlZmluZWQAcHRhYXMgbm90IGRlZmluZWQAaW52YWxpZCBzaGlmdGZsYWcACgB3aWR0aCB0b28gbGFyZ2UAMTYgYnBwIGVycm9yAGltYWdlIG5vdCByZXR1cm5lZABwaXhzIGlzIGNvbG9ybWFwcGVkAGVuZCBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBOVUxMIQoAc2Egbm90IGRlZmluZWQAcGl4cyBub3QgezIsNCw4LDE2LDMyfSBicHAAcGl4c2kgbm90IG1hZGUAYXJyYXlbJWRdID0gJXAKAHNlbCBkYXRhIG5vdCBtYWRlAHNlbF8zaG0AV2FybmluZyBpbiAlczogYW5nbGUgY2xvc2UgdG8gLXBpLzI7IHNoaWZ0aW5nIGF3YXkKAHBpeHMgdW5kZWZpbmVkIG9yIG5vdCAxIGJwcABuYXRoZXRhIGFuZCBuYXNjb3JlIG5vdCBib3RoIG1hZGUAZXJyb3IgcmVhZGluZyBkYXRhAG5ldyBsc3RhY2sgYXJyYXkgbm90IGRlZmluZWQAc3RyY29kZSBub3QgZGVmaW5lZAB3dGV4dCB0b28gc21hbGw7IG5vIHJvb20gZm9yIHRleHQAbW9kZXN0ciBub3QgJ3cnIG9yICdhJwBzaXplIG11c3QgYmUgPiAwLjAAY2FsbG9jIGZhaWwgZm9yIGRlc3QAcGl4cyBub3QgZGVmaW5lZABqcDIAQ29tcG9uZW50IGluZGV4ICVkOiBtaXNtYXRjaGluZyBzYW1wbGluZyByYXRpbyAlZDolZCwgJWQ6JWQsICVjAEludmFsaWQgY0hSTSB3aGl0ZSBwb2ludABJZ25vcmluZyBleHRyYSBwbmdfcmVhZF91cGRhdGVfaW5mbygpIGNhbGw7IHJvdyBidWZmZXIgbm90IHJlYWxsb2NhdGVkAHBuZ19kb19xdWFudGl6ZSByZXR1cm5lZCByb3dieXRlcz0wAHBuZ19pbmZsYXRlIGxvZ2ljIGVycm9yAEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHBDQUwgcGFyYW1ldGVyAFVua25vd24gcm93IGZpbHRlciBmb3IgbWV0aG9kIDAASW52YWxpZCBpbnRlcmxhY2UgdHlwZSBzcGVjaWZpZWQAQ0NJVFQgUkxFL1cAJXMgJXMgZW5jb2RpbmcgaXMgbm90IGltcGxlbWVudGVkAE5vbnN0YW5kYXJkIHRpbGUgd2lkdGggJWQsIGNvbnZlcnQgZmlsZQBUUlVFACVzOiBjYW5ub3QgaGFuZGxlIHplcm8gbnVtYmVyIG9mICVzACVzOiBObyBzcGFjZSBmb3Igc3RhdGUgYmxvY2sARXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgY29udGVudHMASW5rU2V0AEZheFJlY3ZUaW1lAHNwICE9IE5VTEwATFpXRGVjb2RlOiBDb3JydXB0ZWQgTFpXIHRhYmxlIGF0IHNjYW5saW5lICVkAEpwZWdBY1RhYmxlcwAlczogJXMAbm9uZSAAICBJbWFnZSBXaWR0aDogJWx1IEltYWdlIExlbmd0aDogJWx1ACVsdTogVGlsZSBvdXQgb2YgcmFuZ2UsIG1heCAlbHUASW50ZWdlciBvdmVyZmxvdyBpbiAlcwAlczogTXVzdCBzZXQgIlBsYW5hckNvbmZpZ3VyYXRpb24iIGJlZm9yZSB3cml0aW5nIGRhdGEAJXM6ICVzAHRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzAGluY29tcGF0aWJsZSB2ZXJzaW9uAApBUFBMWV9CT1g6IGluIFJlc2VnbWVudENoYXJCb3goKSBmb3IgJXMKAFNraXBwaW5nIGJlY2F1c2Ugb25lIG9mIHRoZSB3b3JkcyBpcyBXX1JFUF9DSEFSCgBQMyBDUlVOQ0hJTkc6ICIlcyIKAGJsb2JfY291bnQgPD0gNTEyAE1lZGlhbiB4aHQ9JWYKAGluIGZpbGUgJXMsIGxpbmUgJWQAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NtYWluL29zZGV0ZWN0LmNwcAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaABFc3RpbWF0aW5nIHJlc29sdXRpb24gYXMgJWQKAEVuY291bnRlcmVkIGJhZCB2YWx1ZSBpbiBoeXBvdGhlc2lzIGxpc3Q6ICVjCgBUT0RPKGFudG9ub3ZhKTogY2xlYW4gdXAgcmVjb2dfdHJhaW5pbmdfc2VnbWVudGVkOyAgSXQgZXhhbWluZWQgb25seSBhIHNtYWxsIGZyYWN0aW9uIG9mIHRoZSBhbWJpZ3MgaW1hZ2UuCgBDZXJ0YWludHk6ICVmICAgICBSYXRpbmc6ICVmCgBsdHIACgBGYWlsZWQgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyBwYXJhbXMuCgBCcmVhayBpbnB1dCBpbnRvIGxpbmVzIGFuZCByZW1hcCBib3hlcyBpZiBwcmVzZW50ACh3b3JkLT5iZXN0X2Nob2ljZSA9PSBudWxscHRyKSA9PSAod29yZC0+cmF3X2Nob2ljZSA9PSBudWxscHRyKQBUcnV0aCBzcGxpdCBub3QgZm91bmQAQmFkIFVURi04IHN0ciAlcyBzdGFydHMgd2l0aCAweCUwMnggYXQgY29sICVkCgB0aGlzID09IGl0LT5kYXRhKCkARGVzZXJpYWxpemVza2lwIGZhaWxlZAoAIAkAUm90YXRpb24gPSAoJWcsICVnKQoACgAKRmlsdGVyaW5nIGFnYWluc3QgYmVzdCBjaG9pY2UAUFRSQUlOX0RJQ1RfU0hPUlQAUG9seTI6c3RhcnRpbmcgYXQgKCVkLCVkKSslZD0oJWQsJWQpLCVkIHRvICglZCwlZCkKAEZsb3dpbmcgSW1hZ2UAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L3JhdG5ncy5jcHAAUl9CQURfUkVQRVRJVElPTjogJXMKAFVwcGVyIHF1YXJ0aWxlPSUuMmYKACAgIFdfU0NSSVBUX0hBU19YSEVJR0hUID0gJXMKAHdyb25nX25ncmFtOgB3YgBMb2FkIG9mIGZpbGUgJXMgZmFpbGVkIQoAPG51bD4A7oCJAHdiAE5vcm1hbGl6YXRpb24gTWV0aG9kICAgLi4uAEludmFsaWQgcHJvdG90eXBlIHN0eWxlIHNwZWNpZmljYXRpb246JXMKAHRmc2NhbmYoRmlsZSwgIiVkIiwgJk51bVNldHNUb1JlYWQpID09IDEAKCVkLCVkKTolZAoARj0lM2QoJWQsJWQsJWQpLABXaWR0aDogUHJvdG89JWcsIERlbHRhPSVnLCBWYXI9JWcKAHRmc2NhbmYoRmlsZSwgIiVmIiwgJihGZWF0dXJlLT5QYXJhbXNbaV0pKSA9PSAxAFtKXQBOdW1iZXIgb2Ygc2hhcGVzID0gAGNsYXNzX2lkID49IDAgJiYgY2xhc3NfaWQgPCB1bmljaGFyc2V0X3NpemVfAHVuaWNoYXJzZXRfc2l6ZSA+IDAAbG9hZF9zeXN0ZW1fZGF3ZwBBQ0NFUFRFRAoAZXhwbG9yaW5nIGVkZ2UgJWxsZCBpbiBub2RlICVsbGQKAEZyAEdhdGUgJWQsIGlucHV0cwoALCBNZWFuPSVnLCBtYXg9JWcKAFRyYWluaW5nIHBhcmFtZXRlcnM6CiAgRGVidWcgaW50ZXJ2YWwgPSAlZCwgd2VpZ2h0cyA9ICVnLCBsZWFybmluZyByYXRlID0gJWcsIG1vbWVudHVtPSVnCgBSZXBsaWNhdGVkAE1pc3NpbmcgXSBhdCBlbmQgb2YgW1Nlcmllc10hCgBiYXNlX291dHB1dC5OdW1GZWF0dXJlcygpID09IG5vAFIAU3ViLWNsYXNzZXMgb2YgUGx1bWJpbmcgbXVzdCBpbXBsZW1lbnQgc3BlYygpIQAKU2Vjb25kIGNob2ljZSBwYXRoOgoAQm9vc3RlZFNlcmllcwBSZXBsYWNpbmcgd2l0aCBjb25zdHJhaW5lZCBiYXNlbGluZSwgZ29vZCA9ICVkCgBDbGljayBhdCAoJWQsICVkKQoAQXNzZXJ0IGZhaWxlZABCbG9iIGlzIG5vdCBhIGRpYWNyaXRpYzoAaW4gZmlsZSAlcywgbGluZSAlZABDb21wYXRpYmxlQ29sdW1ucyB0cnVlIGR1ZSB0byBlbXB0eSBvdGhlcgoAb3JpZ19waXhfAGluIGZpbGUgJXMsIGxpbmUgJWQAQ29ubmNvbXBpbWFnZQBEZXRlY3RlZCAlZCBkaWFjcml0aWNzCgBGb3VuZCBuZWlnaGJvdXI6AGNlbGxfeV8ubGVuZ3RoKCkgPj0gMiAmJiBjZWxsX3hfLmxlbmd0aCgpID49IDIATWVyZ2UARm9yY2Ugd29yZCBicmVha3Mgb24gcHVuY3QgdG8gYnJlYWsgbG9uZyBsaW5lcyBpbiBub24tc3BhY2UgZGVsaW1pdGVkIGxhbmdzAFJFSkVDVEVEAEI6JWQgUjolZCAtLSBDYW4ndCBkbyBpc29sYXRlZCByb3cgc3RhdHMuCgBkZWJ1ZwBsZWZ0X2dhcCAlZywgbGVmdF9zZWFtICVnICVzCgByYXRpbmdfY2VpbGluZyA9IE5vIExpbWl0CgBNYXhpbXVtIHNpemUgb2Ygdml0ZXJiaSBsaXN0cyByZWNvcmRlZCBpbiBCTE9CX0NIT0lDRXMAIHNjcmlwdD0lZCwgZm9udDE9JWQsIGZvbnQyPSVkLCB5c2hpZnQ9JWcsIGNsYXNzaWZpZXI9JWQKACAlcwBDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZy4KAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy93b3JkcmVjL3NlZ3NlYXJjaC5jcHAAR29vZCBibG9iIGxpbWl0AGVuZwB1bmx2ACBJRD0icGFnZV8AIAAgVGQgAGRlYnVnACZ3IG5vdCBkZWZpbmVkAGJveGEgcHRycyBub3QgbWFkZQAmYXJlYSBub3QgZGVmaW5lZABpbnZhbGlkIHNvcnQgb3JkZXIAbmEgbm90IG1hZGUAJmNvdW50IG5vdCBkZWZpbmVkAHBpeGQgbm90IG1hZGUAbGVhZHNwYWNlIG11c3QgYmUgPj0gMABmcGl4ZCBub3QgZGVmaW5lZABpbnZhbGlkIHJlZ2lvbmZsYWcAbmFjIG5vdCBtYWRlAHBpeGQgbm90IG1hZGUAZWRnZSBwcm9maWxlIG5vdCBtYWRlAFdhcm5pbmcgaW4gJXM6IHRvbyBtYW55IGl0ZXJzOyBuZXdtYXhkaXN0ID0gJWQKAHBpeHMgbm90IGRlZmluZWQgb3Igbm90IDMyIGJwcABub3QgYWxsICZ0YWJzIGRlZmluZWQAdGhyZXNoIG11c3QgYmUgPCAyNTU7IGVsc2UgdGhpcyBpcyBhIG5vLW9wAGNtYXAgYXJyYXkgbm90IG1hZGUAcGl4cyBtdXN0IGJlIDggYnBwAHBpeGQgbm90IG1hZGUARE9UUwBwdGFzIG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiBidWZmZXIgYW5kIGFycmF5IG5vdCBtYWRlCgBwaXhkIG5vdCBtYWRlADQgYnBwIHRocmVzaCBub3QgaW4gezAtMTZ9AGtleXZhbFslZF0gPSAlZgoAa2VsIG5vdCBkZWZpbmVkAG5laXRoZXIgJnNlbDEgbm9yICZzZWwyIGFyZSBkZWZpbmVkAEluZm8gaW4gJXM6IGJvdGggaW1hZ2VzIGRvbid0IGhhdmUgY29sb3JtYXAKAHBpeDIgbm90IG1hZGUAKioqIG9wOiAlcyBpbnZhbGlkCgBFcnJvciBpbiAlczogc3Vic3RyICVkIG5vdCBmbG9hdAoAJnNpbWlsYXIgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogZmlsdGVyIHdpZGVyIHRoYW4gaW5wdXQgYXJyYXkhCgBuZXcgcHRyIGFycmF5IG5vdCByZXR1cm5lZABjY2Igbm90IGRlZmluZWQAL3RtcC9sZXB0L3BhZ2VzZWcvZGVidWcucGRmAG1hcCBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBudWxsIQoAV2FybmluZyBpbiAlczogaW52YWxpZCBjb21wcmVzc2lvbiB0eXBlOyB1c2luZyBwZXItcGFnZSBkZWZhdWx0CgBpbmRleCBub3QgaW4gezAuLi5ufQBFcnJvciBpbiAlczogcmVhZCBlcnJvciBhdCBzY2FubGluZSAlZAoAJnhyZXMgYW5kICZ5cmVzIG5vdCBib3RoIGRlZmluZWQAbm8gcGFyc2FibGUgcGRmIGZpbGVzIGZvdW5kAExFUFRfQ0FMTE9DIGZhaWwgZm9yIHBpeGQAV2FybmluZyBpbiAlczogaW52YWxpZCBibGVuZCB0eXBlOyBzZXR0aW5nIHRvIExfQkxFTkRfV0lUSF9JTlZFUlNFCgBpbnZhbGlkIG9wAHBpeHMgbm90IGRlZmluZWQAY29sb3JtYXAgYW5kIG5vdCAyLCA0LCBvciA4IGJwcABwaXhzIHVuZGVmaW5lZCBvciBub3QgMSBicHAAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTCEKAHBpeGEgYW5kIG5hIHNpemVzIG5vdCBlcXVhbABpbnZhbGlkIGRpcmVjdGlvbgBkZXB0aHMgZGlmZmVyIChwaXhzMSwgcGl4ZCkAcGl4YyBub3QgbWFkZSAoc3RyaW5nKQBXYXJuaW5nIGluICVzOiBub3QgMSBicHA7IGNhbid0IHJlbW92ZSBjbWFwIHRvIGJpbmFyeQoAaW52YWxpZCByb3cgaW5kZXggaQBwaXggbm90IG1hZGUAcGl4cyBtdXN0IGJlIDggYnBwAGlzdGFydCBvdXQgb2YgYm91bmRzAGludmFsaWQgZmlyc3QAJmRhaGFzaCwgJmRhYywgJmRhdiBub3QgYWxsIGRlZmluZWQAbnVtYSBhbmQgcHRhYSBzaXplcyBkaWZmZXIAaW5kZXggbm90IGluIFswIC4uLiBpbWF4XQA8ZW1wdHkgdHJlZT4AaGVpZ2h0IDwgMQByZWFkIGVycm9yIHR5cGUgNgBpbmRleCBvdXQgb2YgYm91bmRzAFdhcm5pbmcgaW4gJXM6ICU2LjJmIHJhZGlhbnM7IGxhcmdlIGFuZ2xlIGZvciBpbi1wbGFjZSAzLXNoZWFyIHJvdGF0aW9uCgBidWZmZXIgbm90IG1hZGUAc2Egbm90IGRlZmluZWQAJnNhZCBub3QgZGVmaW5lZABwaXhzIHVuZGVmaW5lZCBvciBub3QgMzIgYnBwAHBpeHMgbm90IGRlZmluZWQgb3Igbm90IDggYnBwAG5ldyBwdHIgYXJyYXkgbm90IHJldHVybmVkAGggYW5kIHcgbXVzdCBib3RoIGJlID4gMABzZWxfM2RlAHBpeHMgbm90IGNtYXBwZWQgb3IgMzIgYnBwAHBpeHMgbm90IGRlZmluZWQgb3Igbm90IDEgYnBwAGRhdGEgbm90IGRlZmluZWQAdHlwZSBub3QgZGVmaW5lZAB0ZXN0c3RyIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGludmFsaWQgY29tcHJlc3Npb24gdHlwZSBmb3IgYnBwID4gMQoASW5mbyBpbiAlczogUmVtb3ZlZCAlZCBieXRlcyBhdCBsb2NhdGlvbiAlZAoAJnNyYzEgbm90IGRlZmluZWQAcGl4IG5vdCBtYWRlAHdlYnAAQm9ndXMgSHVmZm1hbiB0YWJsZSBkZWZpbml0aW9uAEludmFsaWQgY0hSTSByZWQgcG9pbnQASW52YWxpZCBhdHRlbXB0IHRvIHJlYWQgcm93IGRhdGEATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb21wcmVzcyBjaHVuawBJbnZhbGlkIHBhbGV0dGUgbGVuZ3RoAENhbid0IGFkZCBVcCBmaWx0ZXIgYWZ0ZXIgc3RhcnRpbmcAMS4yLjUAQ0NJVFQgR3JvdXAgMwBDb21wcmVzc2lvbiBzY2hlbWUgJXUgJXMgZW5jb2RpbmcgaXMgbm90IGltcGxlbWVudGVkAE5vbnN0YW5kYXJkIHRpbGUgbGVuZ3RoICVkLCBjb252ZXJ0IGZpbGUARkFMU0UAdGlsZXMARmF4TW9kZQAlczogRXJyb3Igd3JpdGluZyBTdWJJRkQgZGlyZWN0b3J5IGxpbmsAU29ycnksIExvZ0wgZGF0YSBtdXN0IGhhdmUgJXM9JWQARmF4RGNzAHRkLT50ZF9waG90b21ldHJpYyA9PSBQSE9UT01FVFJJQ19MT0dMVVYATFpXRGVjb2RlQ29tcGF0OiBDb3JydXB0ZWQgTFpXIHRhYmxlIGF0IHNjYW5saW5lICVkAEpwZWdQcm9jACVkIGJpdCBpbnB1dCBub3Qgc3VwcG9ydGVkIGluIFBpeGFyTG9nAGhvcml6b250YWwgZGlmZmVyZW5jaW5nIAAgSW1hZ2UgRGVwdGg6ICVsdQAlbHU6IEludmFsaWQgdGlsZSBieXRlIGNvdW50LCB0aWxlICVsdQAlczogTm8gc3BhY2UgZm9yICVzIGFycmF5cwBzcC0+c3RhdGUgPT0gWlNUQVRFX0lOSVRfREVDT0RFAGludmFsaWQgY29kZSBsZW5ndGhzIHNldAAxLjIuNQBDaGVja2luZyB3b3JkIGJveDoAVG9wIGNob2ljZSAiJXMgJXMiIHZlcmlmaWVkIGJ5IGJpZ3JhbSBtb2RlbC4KAE5PIENSVU5DSDogIiVzIgoAaW4gZmlsZSAlcywgbGluZSAlZABNb2RlMjA6QTogTmV3IHgtaGVpZ2h0ID0gJWYgKG5vcm0pLCAlZiAob3JpZykKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAFRvbyBmZXcgY2hhcmFjdGVycy4gU2tpcHBpbmcgdGhpcyBwYWdlCgBKYXBhbmVzZQBUcnlpbmcgdG8gc2V0IGEgbGluZSB0byBiZSBTVEFSVCB3aGVuIGl0J3MgYWxyZWFkeSBCT0RZLgoAcmVjb2dfdHJhaW5pbmdfc2VnbWVudGVkOiBleGFtaW5lZCAlZCAvICVkIHdvcmRzLgoARGljdCB3b3JkOiAlZAoAcnRsACByZWNvZ25pemluZyBmaXJzdCAlZCBjaG9wcGVkIGJsb2JzCgBsc3RtX3JlY29nbml6ZXJfLT5Mb2FkKCB0aGlzLT5wYXJhbXMoKSwgbHN0bV91c2VfbWF0cml4ID8gbGFuZ3VhZ2UgOiBudWxscHRyLCBtZ3IpAHRlc3NlZGl0X2R1bXBfcGFnZXNlZ19pbWFnZXMAIAAgKG5vIHRydXRoIGNoYXIgYm94ZXMpCgBDYW4ndCBvcGVuIGZpbGUAQXNzZXJ0IGZhaWxlZABEZXNlcmlhbGl6ZSBmYWlsZWQ6ICVzIHJlYWQgJWQvJWQgbGluZXMKACVzIABGaW5hbCBPcmlnaW4gPSAoJWcsICVnKQoAUmlnaHQgc2lkZSBjb29yZHMgYXJlOgoAV29yc3RDZXJ0YWludHlEaWZmV29yc2VUaGFuAFBUUkFJTl9ESUNUX01FRABDdXRsaW5lOkZpbmFsIHBlcnA9JWQKAEhlYWRpbmcgSW1hZ2UAc3RhcnQgPj0gMCAmJiBzdGFydCA8PSBsZW5ndGhfAFJfUE9PUl9NQVRDSDogJXMKAE1heD0lLjJmIFJlYWxseT0lZAoAICAgV19TQ1JJUFRfSVNfTEFUSU4gPSAlcwoAY29ycmVjdF9mcmFnbWVudHM6AEVycm9yOiB0cmFpbmVkZGF0YSBmaWxlIG11c3QgY29udGFpbiBhdCBsZWFzdCAoYSB1bmljaGFyc2V0IGZpbGVhbmQgaW50dGVtcCkgT1IgYW4gbHN0bSBmaWxlLgoAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQDZgABVbmFibGUgdG8gc2F2ZSBhZGFwdGVkIHRlbXBsYXRlcyB0byAlcyEKAGNsYXNzaWZ5X2NoYXJfbm9ybV9yYW5nZQBTYW1wbGVDb3VudCA+PSAwAGluIGZpbGUgJXMsIGxpbmUgJWQAICVzPSVkLABUb3RhbCBEaXN0PSVnLCBzY2FsZWQ9JWcsIHNpZ21vaWQ9JWcsIHBlbmFsdHk9JWcKACAAW0JdACBtYXggdW5pY2hhcnMgPSAAZmVhdHVyZSB0YWJsZSBzaXplICVkCgBGT1JXQVJEAExvYWQgc3lzdGVtIHdvcmQgZGF3Zy4Ad2IrAFJFSkVDVEVECgBhZGRpbmcgbm9kZSAlbGxkCgBGbABSb3cgJWQ6ACAAbnVsbCBjaGFyPSVkCgBQYXJCaWRpTFNUTQBQYXJhbGxlbABzcmMuaW50X21vZGVfID09IGludF9tb2RlXwAoAFBvc2l0aW9uICVkOiAlcyslcyBiZWFtCgBzcmMtPnR5cGUoKSA9PSBOVF9TRVJJRVMAS2VlcGluZyBvbGQgYmFzZWxpbmUKAHJvdyAhPSBudWxscHRyAE9LRGlhY3JpdGljIQoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL3RleHRvcmQvY29scGFydGl0aW9uZ3JpZC5jcHAAQ29tcGF0aWJsZUNvbHVtbnMgaWdub3JpbmcgaW1hZ2UgcGFydGl0aW9uCgBTcGxpdHRpbmcgc2hpcm8tcmVraGEgLi4uCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC9mcGNob3AuY3BwAEEgY29tcG9uZW50AExlZnQgZ2FwPSVkLCByaWdodD0lZCwgYWJvdmU9JWQsIGJlbG93PSVkLCBob3J6PSVkLCB2ZXJ0PSVkCkdvb2Q9ICAgICVkICAgICAgICAlZCAgICAgICAgJWQgICAgICAgICVkCgBNb3ZlZCAlZCBsYXJnZSBibG9icyB0byBub3JtYWwgbGlzdAoAdGV4dC0+Ym91bmRpbmdfYm94KCkubGVmdCgpIDwgdGV4dC0+Ym91bmRpbmdfYm94KCkucmlnaHQoKQBDb25zdHJhaW50IGlzIFslZCwlZF0AdG9zcF91c2VfcHJlX2Nob3BwaW5nAEFDQ0VQVEVEAEI6JWQgUjolZCAtLSBJc29sYXRlZCByb3cgc3RhdHMgU0FOSVRZIEZBSUxVUkU6ICVmICVkICVmCgB0ZXh0b3JkX2Jsb2Nrc2FsbF9maXhlZABkaXNwbGF5AEFzc2lnbmluZyBkZWZhdWx0cyAlZCBub24sICVkIHNwYWNlIHRvIHJvdyBhdCAlZwoAcmlnaHRfZ2FwICVnIHJpZ2h0X3NlYW0gJWcgJXMKAHdvcnN0X2luZGV4X25lYXJfZnJhZ21lbnQ9JWQgZXhwYW5kX2ZvbGxvd2luZ19mcmFnbWVudD0lZCBleHBhbmRfcHJlY2VkaW5nX2ZyYWdtZW50PSVkCgBsYW5ndWFnZV9tb2RlbF9uZ3JhbV9zbWFsbF9wcm9iAHIlLjJmIGMlLjJmIHhbJWcsJWddOiAlZCAlcwAKACVzICVmCgByYXRpbmdzLT5kaW1lbnNpb24oKSA9PSBiZXN0X2Nob2ljZV9idW5kbGUtPmJlYW0uc2l6ZSgpAGNob3BfZGVidWcAUGxlYXNlIGNhbGwgU2V0SW1hZ2UgYmVmb3JlIFNldFNvdXJjZVJlc29sdXRpb24uCgBib3gAIj4KADsgcHBhZ2VubyAAL2YtMC0wIABkaXNwbGF5ACZiYXNlbGluZSBub3QgZGVmaW5lZABib3hhIG5vdCBkZWZpbmVkAGludmFsaWQgb3AAbmEgbm90IG1hZGUAYm94YSBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkIG9yIG5vdCAxIGJwcABwaXhzIG5vdCAxLCA4IG9yIDMyIGJwcABsaW5lY2hhcnMgJSA0IG11c3QgYmUgMABMRVBUX01BTExPQyBmYWlsIGZvciBkYXRhACZwdGEgYW5kICZuYXRvdCBub3QgYm90aCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGZhY3RvciBtdXN0IGJlID49IDAuMDsgdXNpbmcgMC4wOyBubyBlbmhhbmNlbWVudAoAY21hcCBmdWxsOyBjYW4ndCBhZGQAcGl4cyB1bmRlZmluZWQgb3Igbm90IDEgYnBwAGZhaWx1cmUgaW4gcGhhc2UgMQBXYXJuaW5nIGluICVzOiBObyBwaXhlbHMgZm91bmQgZm9yIGNvbnNpZGVyYXRpb24KAGNxbGV2ZWxzIG5vdCBpbiBbMS4uLjZdAHRocmVzaCBtdXN0IGJlID4gMDsgZWxzZSB0aGlzIGlzIGEgbm8tb3AAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgbnVsbCEKAHBpeHMgbm90IGNtYXBwZWQgb3IgMzIgYnBwAGZwaXggbm90IGRlZmluZWQAAG54IGFuZCBueSBtdXN0IGJlID4gMABwaXggaGFzIGNvbG9ybWFwAHJlZHVjdGlvbiBtdXN0IGJlIGJldHdlZW4gMiBhbmQgMTYAOCBicHAgdGhyZXNoIG5vdCBpbiB7MC0yNTZ9AG5ldyBwdHIgYXJyYXkgbm90IHJldHVybmVkACZzdW0gbm90IGRlZmluZWQAc2l6ZSA8IDEASW5mbyBpbiAlczogcGl4IGRlcHRoIG5vdCBpbiB7MSwgMiwgNCwgOH0KAHBpeG0gbm90IGRlZmluZWQAKioqIG9wOiAlczsgdyA9ICVkLCBoID0gJWQ7IG11c3QgYm90aCBiZSA+IDAKAG5vbi1mbG9hdHMgaW4gc3RyaW5nAG5hMSBhbmQgbmEyIG5vdCBib3RoIGRlZmluZWQAc3VtYSBub3QgbWFkZQBkZXN0IG5vdCBkZWZpbmVkAGluZGV4IG91dCBvZiBib3VuZHMASW5mbyBpbiAlczogV3JpdGluZyBkZWJ1ZyBwZGYgdG8gL3RtcC9sZXB0L3BhZ2VzZWcvZGVidWcucGRmCgBkZXB0aCBub3QgaW4gezIsIDQsIDh9AGJhIG5vdCBkZWZpbmVkAC4uICVkIABpbmRleCBub3QgaW4gezAuLi5uIC0gMX0AYmFkIGRhdGEAc3RyZWFtIG5vdCBvcGVuZWQAZmlsZSBub3QgZm91bmQAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgbnVsbCEKAFdhcm5pbmcgaW4gJXM6IGQgbmVpdGhlciA4IG5vciAzMiBicHA7IG5vIGJsZW5kCgBjbWFwIGVudHJ5IGRvZXMgbm90IGV4aXN0AHBpeHMgYW5kIHBpeGQgZGVwdGhzIGRpZmZlcgBubyBjb2xvcm1hcCBhbmQgbm90IHJnYgBkaXN0IG11c3QgYmUgPj0gMABwaXhhIG5vdCBkZWZpbmVkAHN0ciBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBtaXNzaW5nIHBpeCBhdCBpbmRleCAlZAoAV2FybmluZyBpbiAlczogcGl4czEgYW5kIHBpeHMyIG5vdCBlcXVhbCBpbiBzaXplCgBwaXggbm90IHJlYWQARXJyb3IgaW4gJXM6IHBpeGQgbm90IG1hZGUKAGludmFsaWQgY29sdW1uIGluZGV4IGoASW5mbyBpbiAlczogY29udmVydGluZyAoZ3JheSArIGFscGhhKSA9PT4gUkdCQQoAcGl4cyBub3QgY21hcHBlZCBvciAzMiBicHAAaXN0YXJ0ID4gaWVuZDsgbm8gcHRzAGZpcnN0ID4gbGFzdABubyBkYXRhIGluIGRhcwAmdmFsIG5vdCBkZWZpbmVkAGludmFsaWQgaW5kZXg6IG5vdCBpbiBbMCAuLi4gaW1heF0AIABoZWlnaHQgdG9vIGxhcmdlAHJlYWQgZXJyb3IgdHlwZSA3AEVycm9yIGluICVzOiBwaXggbm90IHJlYWQgZnJvbSBmaWxlICVzCgAmbiBub3QgZGVmaW5lZABjc2Egbm90IG1hZGUAJmluZGV4IG5vdCBkZWZpbmVkAHBpeGQgbm90IG1hZGUAcGl4bSBub3QgZGVmaW5lZCBvciBub3QgOCBicHAAaW52YWxpZCBzZWwgZWxlbWVudCB0eXBlAHNlbF8zdWUAV2FybmluZyBpbiAlczogcGl4ZyBub3QgOCBicHA7IHVzaW5nICdmcmFjdCcgdHJhbnNwYXJlbnQgYWxwaGEKAHJlZHN3ZWVwIG11c3QgYmUgaW4gezEsMiw0LDh9AG5vdCBhIHZhbGlkIHNwaXggZmlsZQBkYXRhIHR5cGUgdW5rbm93bgBwaXhhcyBub3QgZGVmaW5lZAB0aWYgd3JpdGUgZXJyb3IAdwBzZXBzIG5vdCBkZWZpbmVkAGhleGRhdGEgbm90IG1hZGUAcGRmAEJvZ3VzIGlucHV0IGNvbG9yc3BhY2UASW52YWxpZCBjSFJNIGdyZWVuIHBvaW50AE5vdCBlbm91Z2ggaW1hZ2UgZGF0YQBVbmtub3duIHpUWHQgY29tcHJlc3Npb24gdHlwZQBJbnN1ZmZpY2llbnQgbWVtb3J5IHRvIHByb2Nlc3MgaUNDUCBjaHVuawBDYW4ndCBhZGQgQXZlcmFnZSBmaWx0ZXIgYWZ0ZXIgc3RhcnRpbmcAemxpYiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wcmVzc29yIC0tIHZlcnNpb24gZXJyb3IAQ0NJVFQgR3JvdXAgNAAlcyAlcyBkZWNvZGluZyBpcyBub3QgaW1wbGVtZW50ZWQAJXM6IFNvcnJ5LCBjYW5ub3QgbmVzdCBTdWJJRkRzAFRJRkZGaWVsZFdpdGhUYWcAc3RyaXBzAEZheEZpbGxGdW5jAEVycm9yIHdyaXRpbmcgVElGRiBoZWFkZXIAQ29tcHJlc3Npb24Ac3AgIT0gTlVMTABTR0lMb2cgY29tcHJlc3Npb24gY2Fubm90IGhhbmRsZSBub24tY29udGlndW91cyBkYXRhAExaV0RlY29kZUNvbXBhdDogV3JvbmcgbGVuZ3RoIG9mIGRlY29kZWQgc3RyaW5nOiBkYXRhIHByb2JhYmx5IGNvcnJ1cHRlZCBhdCBzY2FubGluZSAlZABKcGVnUmVzdGFydEludGVydmFsACVzOiBEZWNvZGluZyBlcnJvciBhdCBzY2FubGluZSAlZCwgJXMAZmxvYXRpbmcgcG9pbnQgcHJlZGljdG9yIAAlczogRGF0YSBidWZmZXIgdG9vIHNtYWxsIHRvIGhvbGQgdGlsZSAlbGQAdGlsZQAlczogRGVjb2RpbmcgZXJyb3IgYXQgc2NhbmxpbmUgJWQsICVzAGludmFsaWQgYml0IGxlbmd0aCByZXBlYXQAQ2hlY2tpbmcgYmxvYjoARXhhbWluaW5nIGFsdCBjaG9pY2VzIGZvciAiJXMgJXMiLgoAIABlcXVhdGlvbmRldGVjdF9zYXZlX21lcmdlZF9pbWFnZQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NtYWluL2ZpeHNwYWNlLmNwcABjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAEFzc2VydCBmYWlsZWQAAEtvcmVhbgBUcnlpbmcgdG8gc2V0IGEgbGluZSB0byBiZSBCT0RZIHdoZW4gaXQncyBhbHJlYWR5IFNUQVJULgoAYmVzdF9jaG9pY2UgIT0gbnVsbHB0cgB3b3JkLT5yZWplY3RfbWFwLmxlbmd0aCgpID09IGJsb2Jjb3VudABMb2dpY2FsIHRleHRsaW5lIG9yZGVyIFslcC9QPSVzXTogACBUaGUgbGVhZGluZyBiaXRzIGxvb2sgbGlrZSAlcyAlcwoAaW4gZmlsZSAlcywgbGluZSAlZABEdW1wIGludGVybWVkaWF0ZSBpbWFnZXMgbWFkZSBkdXJpbmcgcGFnZSBzZWdtZW50YXRpb24AcmVjb2dfd29yZDogRGlzY2FyZGVkIGxvbmcgc3RyaW5nICIlcyIgKCVkIGNoYXJhY3RlcnMgdnMgJWQgYmxvYnMpCgAATG9hZGVkICVkLyVkIGxpbmVzICglZC0lZCkgb2YgZG9jdW1lbnQgJXMKAAkAUHJlZGVjZXNzb3I6CgBCbG9jayBsaXN0IHN0YXRzOgpCbG9ja3MgPSAlZApSb3dzID0gJWQKV29yZHMgPSAlZApCbG9icyA9ICVkCgBpICVkIGogJWQgQ2hvaWNlLT5CbG9iW2ldLkNlcnRhaW50eSAlLjRnIFdvcnN0T3RoZXJDaG9pY2VDZXJ0YWludHkgJWcgVGhyZXNob2xkICVnCgBQVFJBSU5fRElDVF9MT05HAHBlcnAgIT0gMABQdWxsb3V0IEltYWdlAGVuZCA+PSAwICYmIGVuZCA8PSBsZW5ndGhfAFJfTk9UX1RFU1NfQUNDRVBURUQ6ICVzCgBSYW5nZT0lZAoAICAgV19ET05UX0NIT1AgPSAlcwoAJXNBbWJpZ3MgZm9yIGFkYXB0aW9uIGZvciAlczoKAEZhaWxlZCB0byByZWFkIGNvbXBvbmVudCBmaWxlOiVzCgBpbiBmaWxlICVzLCBsaW5lICVkAAAKU2F2aW5nIGFkYXB0ZWQgdGVtcGxhdGVzIHRvICVzIC4uLgBDaGFyYWN0ZXIgTm9ybWFsaXphdGlvbiBSYW5nZSAuLi4AUHJvdG8tPk1lYW4gIT0gbnVsbHB0cgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2xhc3NpZnkvZmVhdGRlZnMuY3BwAAoAY2xhc3NpZnlfY3BfYW5nbGVfcGFkX3RpZ2h0AEVycm9yOiB1bmljaGFyICVzIGluIG5vcm1wcm90byBmaWxlIGlzIG5vdCBpbiB1bmljaGFyIHNldC4KACAlcwoAIG51bWJlciB3aXRoIG11bHRpcGxlIHVuaWNoYXJzID0gAFNraXBwaW5nIGNsYXNzICVkCgAgICAgICAgAGxvYWRfZnJlcV9kYXdnAEZhaWxlZCB0byBvcGVuIG91dHB1dF9hbWJpZ193b3Jkc19maWxlICVzCgAKUnVubmluZyBOb0Rhbmdlcm91c0FtYmlnKCkgZm9yICVzCgBSZS1pbml0aWFsaXppbmcgZG9jdW1lbnQgZGljdGlvbmFyeS4uLgoARnAAICVnADxVbmRlY29kYWJsZT4ARW5jb2RlU3RyaW5nKHRyYWluaW5nZGF0YS0+dHJhbnNjcmlwdGlvbigpLCAmdHJ1dGhfbGFiZWxzKQBEZXBQYXJVRExTVE0ATWlzc2luZyApIGF0IGVuZCBvZiAoUGFyYWxsZWwpIQoAIXNyYy5pbnRfbW9kZV8AKQBEaWN0AEFzc2VydCBmYWlsZWQAdGV4dG9yZF90ZXN0cmVnaW9uX3RvcABJbml0aWFsIGJsb2NrIHNrZXcgYW5nbGUgPSAlZywgZ29vZCA9ICVkCgByb3ctPnhoZWlnaHQgPiAwAHRleHRvcmRfdGFiZmluZF9zaG93X2NvbHVtbnMAeSByYW5nZXMgZG9uJ3Qgb3ZlcmxhcDogJWQtJWQgLyAlZC0lZAoAAENvbXBhdGlibGVDb2x1bW5zIGZhbHNlIGR1ZSB0byBwYXJ0aXRpb24gZWRnZSBvdXRzaWRlCgBTcGxpdCBzdHJhdGVneSA9ICVzCgBlZGdlc19kZWJ1ZwB3b3JkICE9IG51bGxwdHIAZ2FwbWFwX2JpZ19nYXBzAHBpeCAhPSBudWxscHRyAHRleHRvcmRfc2hvd19leHBhbmRlZF9yb3dzAHRleHRvcmRfb2xkYmxfcGFyYWRlZgBwaXRzeW5jX2Zha2VfZGVwdGgAVmVydGljYWxMaW5lcwB0ZXh0b3JkX3RhYmxlZmluZF9yZWNvZ25pemVfdGFibGVzAHRleHQtPmJvdW5kaW5nX2JveCgpLmJvdHRvbSgpIDwgdGV4dC0+Ym91bmRpbmdfYm94KCkudG9wKCkAIGZvcgB0b3NwX29sZF90b19idWdfZml4AHRleHRvcmRfZmFzdF9waXRjaF90ZXN0AEFzc2VydCBmYWlsZWQAQjolZCBSOiVkIC0tIElzb2xhdGVkIHJvdyBzdGF0czogJWYgJWQgJWYKAE1vYW4gYWJvdXQgcHJvcCBibG9ja3MAQXNzZXJ0IGZhaWxlZABSb3cgYXQgJWcgaGFzIDMgc2l6ZXMgb2YgZ2FwOiVnLCVnLCVnCgBmdWxsX3doX3JhdGlvICVnIGZ1bGxfd2hfcmF0aW9fdG90YWwgJWcgZnVsbF93aF9yYXRpb192YXIgJWcKAHJvdyA+PSBjb2x1bW4AVG8gYXZvaWQgb3Zlcmx5IHNtYWxsIGRlbm9taW5hdG9ycyB1c2UgdGhpcyBhcyB0aGUgZmxvb3Igb2YgdGhlIHByb2JhYmlsaXR5IHJldHVybmVkIGJ5IHRoZSBuZ3JhbSBtb2RlbC4AACVzIFZTRXMgKG1heF9jb3N0PSVnIHBybl9sZW49JWQgdG90X2xlbj0lZCk6CgBQVFJBSU5fRElHSVRTX1NIT1JUAAoKVXBkYXRlU2VnU2VhcmNoTm9kZXM6IGNvbD0lZCwgcm93cz1bJWQsJWRdLCBhbGxqdXN0PSVkCgBDaG9wIGRlYnVnAHBhcmFncmFwaF90ZXh0X2Jhc2VkAG9zZAAJCQk8UHJpbnRTcGFjZSBIUE9TPSIwIiBWUE9TPSIwIgAnPgoAIFRmIABmb250IHNpemUgaW52YWxpZABpbnZhbGlkIGNvcHlmbGFnAFdhcm5pbmcgaW4gJXM6IHJhbmdlIGlzIDAKAFdhcm5pbmcgaW4gJXM6IGludmFsaWQgc29ydCB0eXBlCgBib3hhIGlzIGVtcHR5AHN0YWNrIG5vdCBtYWRlCgBwaXhzYiBub3QgbWFkZQBmbGF0YSBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBudWxsIQoAaW52YWxpZCBIU1YgaGlzdG8gdHlwZQBwaXhzIG5vdCA4LzMyIGJwcCBvciBjbWFwcGVkAGludmFsaWQgZGVwdGgAJmxvYyBub3QgZGVmaW5lZABwaXhkIG5vdCBkZWZpbmVkACZjb2xvcmZyYWN0IG5vdCBkZWZpbmVkAGxldmVsIG5vdCBpbiB7Myw0fQBwaXhtIHVuZGVmaW5lZCBvciBub3QgMSBicHAAY21hcCBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBwaXhnIG5vdCA4IGJwcDsgdXNpbmcgJ2ZyYWN0JyB0cmFuc3BhcmVudCBhbHBoYQoAZHBpeCBub3QgbWFkZQBQTkcAdyBhbmQvb3IgaCB0b28gc21hbGwAaW52YWxpZCBzaXplOiBtdXN0IGJlIDEgb3IgMwBwaXhtIG5vdCBtYWRlAHBpeGcgbm90IGRlZmluZWQAbmVpdGhlciAmbWluIG5vciAmbWF4IGRlZmluZWQAaW52YWxpZCBkaXJlY3Rpb24AY21hcDEgbm90IGRlZmluZWQAcGl4cyBhbmQgcGl4bSBub3QgYm90aCAxIGJwcAAqKiogb3AgPSAlczsgbnVtIHJlZHVjdCA9ICVkOyBtdXN0IGJlIGluIHsxLDIsMyw0fQoAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTAoAbmEgbm90IGRlZmluZWQAbmVpdGhlciAmbmF2IG5vciAmbmFydiBhcmUgZGVmaW5lZABubyBieXRlcyByZXF1ZXN0ZWQgdG8gd3JpdGUAcGl4cyBub3QgZGVmaW5lZAAmcGl4dndzIG5vdCBkZWZpbmVkAHBpeG0gdW5kZWZpbmVkIG9yIG5vdCAxIGJwcAAmc2l6ZSBub3QgZGVmaW5lZABFcnJvciBpbiAlczogaW1hZ2Ugbm90IHJlYWRhYmxlIGZyb20gZmlsZSAlcwoAbmV3IHB0ciBhcnJheSBub3QgcmV0dXJuZWQAb3V0cHV0IHNwcCA9ICVkLCBzcHAgPSAlZAoAV2FybmluZyBpbiAlczogaW1hZ2UgcmVzb2x1dGlvbiBub3QgZm91bmQKAGZpbGUgbm90IHRpZmYgZm9ybWF0AHJlYWxsb2NhdGlvbiBvZiBkYXRhIGZhaWxlZABXYXJuaW5nIGluICVzOiBpbnZhbGlkIGJpbmFyeSBtYXNrIGJsZW5kIHR5cGUKAFdhcm5pbmcgaW4gJXM6IGdyYXl2YWwgPCAwOyBzZXR0aW5nIHRvIDAKAHBpeGQgbm90IDEsIDggb3IgMzIgYnBwAHNhbXBsaW5nIGZhY3RvciBtdXN0IGJlID49IDEAaW52YWxpZCBwYXJhbWV0ZXJzAGludmFsaWQgY29weWZsYWcAbmEgbm90IG1hZGUASW5mbyBpbiAlczogcGl4KCVkKSBvbWl0dGVkOyBzaXplICVkeCV4CgBXYXJuaW5nIGluICVzOiBwaXhzMSBhbmQgcGl4ZCBub3QgZXF1YWwgaW4gc2l6ZQoAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgbnVsbCEKAFdhcm5pbmcgaW4gJXM6IHBpeGVsIHZhbHVlIG91dCBvZiBib3VuZHMKAHBpeGQgbm90IGRlZmluZWQASW5mbyBpbiAlczogdHJhbnNwYXJlbmN5LCAxIHNwcCwgbm8gY29sb3JtYXAsIG5vIHRyYW5zcGFyZW5jeSBhcnJheTogY29udmVudGlvbiBpcyBmdWxseSB0cmFuc3BhcmVudCBpbWFnZQoAV2FybmluZyBpbiAlczogcGl4ZyBub3QgOCBicHA7IHVzaW5nICdmcmFjdCcgdHJhbnNwYXJlbnQgYWxwaGEKAHB0YWQgbm90IG1hZGUAcHRhIG5vdCBkZWZpbmVkAGRhMSBub3QgZGVmaW5lZABwdGEgbm90IGRlZmluZWQARXJyb3IgaW4gJXM6IGluZGV4ID0gJWQ7ICE9IG5hY3R1YWwKACVsbGQKAG5waXhlbHMgdG9vIGxhcmdlAGZpbGVuYW1lIG5vdCBkZWZpbmVkAHN0cmVhbSBub3QgZGVmaW5lZABwaXggbm90IGRlZmluZWQAc3RyaW5nIG5vdCBkZWZpbmVkAGRhaGFzaCBub3QgZGVmaW5lZABFcnJvciBpbiAlczogcGl4ZCBub3QgbWFkZQoAcGl4cyBhbmQgcGl4bSBzaXplcyBkaWZmZXIAZmFjdG9ycyBtdXN0IGJlID49IDEAc2VsXzNyZQBXYXJuaW5nIGluICVzOiBpbnZhbGlkIGZyYWN0OyB1c2luZyBmdWxseSBvcGFxdWUKAHJlZHNlYXJjaCBtdXN0IGJlIGluIHsxLDIsNCw4fQBwaXggbm90IGRlZmluZWQAc3RyZGF0YSBub3QgbWFkZQAlZABmbmFtZSBub3QgZGVmaW5lZABJbmZvIGluICVzOiBSYW5kb21pemluZyAlZCBieXRlcyBhdCBsb2NhdGlvbiAlZAoAJnNhdmVwdHIgbm90IGRlZmluZWQAb3V0c3RyIG5vdCBtYWRlAGRlZmF1bHQAQm9ndXMgSlBFRyBjb2xvcnNwYWNlAEludmFsaWQgY0hSTSBibHVlIHBvaW50AEV4dHJhIGNvbXByZXNzZWQgZGF0YQBPdXQgb2YgcGxhY2UgSUhEUgBJbnN1ZmZpY2llbnQgbWVtb3J5IHRvIHByb2Nlc3MgaUNDUCBwcm9maWxlAENhbid0IGFkZCBQYWV0aCBmaWx0ZXIgYWZ0ZXIgc3RhcnRpbmcAemxpYiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wcmVzc29yIC0tIHN0cmVhbSBlcnJvcgBJU08gSkJJRwBDb21wcmVzc2lvbiBzY2hlbWUgJXUgJXMgZGVjb2RpbmcgaXMgbm90IGltcGxlbWVudGVkACVzOiBJbnZhbGlkICVzdGFnICIlcyIgKG5vdCBzdXBwb3J0ZWQgYnkgY29kZWMpAEludGVybmFsIGVycm9yLCB1bmtub3duIHRhZyAweCV4AFRpbGVPZmZzZXRzAEJhZEZheExpbmVzAEVycm9yIHdyaXRpbmcgZGF0YSBmb3IgZmllbGQgIiVzIgBTb3JyeSwgTG9nTHV2IGRhdGEgbXVzdCBoYXZlICVzPSVkIG9yICVkAEpQRUdMaWIATm8gc3VwcG9ydCBmb3IgY29udmVydGluZyB1c2VyIGRhdGEgZm9ybWF0IHRvIExvZ0x1dgBMWldEZWNvZGVDb21wYXQ6IE5vdCBlbm91Z2ggZGF0YSBhdCBzY2FubGluZSAlZCAoc2hvcnQgJWxkIGJ5dGVzKQBzcC0+c3Vic2FtcGxpbmdjb3JyZWN0X2RvbmU9PTAAJXM6IHpsaWIgZXJyb3I6ICVzACV1ICgweCV4KQoAICBUaWxlIFdpZHRoOiAlbHUgVGlsZSBMZW5ndGg6ICVsdQAodGlmLT50aWZfZmxhZ3MmVElGRl9OT1JFQURSQVcpPT0wAHN0cmlwACVzOiBOb3QgZW5vdWdoIGRhdGEgYXQgc2NhbmxpbmUgJWQgKHNob3J0ICVkIGJ5dGVzKQBpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2sAQ3VycmVudCBtaXNzIG1ldHJpYyA9ICVnLCBuZXh0ID0gJWcKAFRvcCBjaG9pY2UgIiVzICVzIiB2ZXJpZmllZCAoc2FucyBjYXNlKSBieSBiaWdyYW0gbW9kZWwuCgBUZXJyaWJsZV93b3JkX2NydW5jaCAoJWQpIG9uICIlcyIKAFNhdmUgdGhlIG1lcmdlZCBpbWFnZQBGUCBmaXhzcGFjZSBOb2lzZSBtZXRyaWNzIGZvciAiJXMiOiAAaW4gZmlsZSAlcywgbGluZSAlZAAAQXNzZXJ0IGZhaWxlZABIYW5ndWwAVmFsaWRGaXJzdExpbmUoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBzdHJvbmcgbW9kZWxzIQoATm90IG91dHB1dHRpbmcgaWxsZWdhbCB1bmljaGFyICVzCgAtACVkIAAgcmVjb2duaXppbmcgbWlkZGxlICVkIGNob3BwZWQgYmxvYnMKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY21haW4vdGVzc2VkaXQuY3BwAHRlc3NlZGl0X2RvX2ludmVydABXb3JkIGlzIGF0OgBCbGFtZSBmcm9tIHBhcnQgMTogAExvYWQgb2YgcGFnZSAwIGZhaWxlZCEKAHJvdyA+PSBjb2wAbWlucnVucy0+ZGltMSgpID09IHdpZHRoAEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgBEaXNjYXJkaW5nIGJhZCBjaG9pY2UgIyVkCgBQVFJBSU5fRlJFUV9TSE9SVABDdXRsaW5lOkE9JWQsIG1heD0lLjJmKCUuMmYlJSksIG1zZD0lLjJmKCUuMmYlJSkKAEhvcml6b250YWwgTGluZQAAUl9DT05UQUlOU19CTEFOS1M6ICVzCgBNZWFuPSAlLjJmCgAgICBXX1JFUF9DSEFSID0gJXMKAAB0ZXNzZXJhY3Q6OlRlc3NkYXRhTWFuYWdlcjo6VGVzc2RhdGFUeXBlRnJvbUZpbGVOYW1lKGZpbGVuYW1lLCAmdHlwZSkAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgA76yBAAoAY2xhc3NpZnlfbWF4X3JhdGluZ19yYXRpbwBSZWFkTkZsb2F0cyhmcCwgMSwgJihQcm90by0+VmFyaWFuY2UuU3BoZXJpY2FsKSkgIT0gbnVsbHB0cgBOdW1TZXRzVG9SZWFkID49IDAAQ1A6JWQgY2xhc3NlcywgJWQgZmVhdHVyZXM6CgBDTGFzcyBQcnVuZXIgQW5nbGUgUGFkIFRpZ2h0AGRlYnVnAEFzc2VydCBmYWlsZWQARm91bmQgJWQgc2FtcGxlcyBvZiBjbGFzcyAlZD0lcywgZm9udCAlZCwgZGlzdCByYW5nZSBbJWcsICVnXSwgd29yc3QgcGFpcj0gJXMsICVzCgBMQVNUAExvYWQgZnJlcXVlbnQgd29yZCBkYXdnLgAgAExvb2tpbmcgZm9yICVzIG5ncmFtcyBzdGFydGluZyB3aXRoICVzOgoAcmIARmMACgAuLgAwLDA9AFBhcjJkTFNUTQBSZXZlcnNlACFzY2FsZS5pbnRfbW9kZV8ATm9uLURpY3QAbmV0d29ya19pb18gPT0gbnVsbHB0cgBUb3AgZWRnZSBvZiBkZWJ1ZyByZXBvcnRpbmcgcmVjdGFuZ2xlAEFkanVzdGluZyBibG9jayB0byBza2V3IGFuZ2xlICVnCgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAFNob3cgY29sdW1uIGJvdW5kcwB0eXBlIDwgQlNUVF9DT1VOVABibG9iLT5jYmxvYigpLT5hcmVhKCkgIT0gMABDb21wYXRpYmxlQ29sdW1ucyBmYWxzZSBkdWUgdG8gZ29vZCB3aWR0aCBpbiBtdWx0aXBsZSBjb2xzCgBNaW5pbWFsAHR1cm4gb24gZGVidWdnaW5nIGZvciB0aGlzIG1vZHVsZQBsZWZ0X2NoLmVtcHR5KCkgJiYgcmlnaHRfY2guZW1wdHkoKQB4aHQgbXVsdGlwbGllcgBpbiBmaWxlICVzLCBsaW5lICVkAERpc3BsYXkgcm93cyBhZnRlciBleHBhbmRpbmcAVXNlIHBhcmEgZGVmYXVsdCBtZWNoYW5pc20ATWF4IGFkdmFuY2UgZmFrZSBnZW5lcmF0aW9uAENoZWNraW5nIGZvciBCcm9rZW4gQ0pLIChtYXggc2l6ZT0lZCk6AENvbHVtbiBlZGdlcyBmb3IgYmxvYiBhdCAoJWQsJWQpLT4oJWQsJWQpIGFyZSBbJWQsICVkXQoARW5hYmxlcyB0aGUgdGFibGUgcmVjb2duaXplciBmb3IgdGFibGUgbGF5b3V0IGFuZCBmaWx0ZXJpbmcuAG1pbl9saXN0Lmxlbmd0aCgpID09IG1heF9saXN0Lmxlbmd0aCgpAENvbnN0cnVjdGVkIGEgbmV3IHRhYiB2ZWN0b3I6AEZpeCBzdXNwZWN0ZWQgYnVnIGluIG9sZCBjb2RlAERvIGV2ZW4gZmFzdGVyIHBpdGNoIGFsZ29yaXRobQBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAEltcHJvdmUgcm93IHRocmVzaG9sZCAwAEhhZCB0byBzd2l0Y2ggbW9zdCBjb21tb24gZnJvbSBsb3dlciB0byB1cHBlciEhCgBzaGFwZV9jb3N0ICVnCgBpbiBmaWxlICVzLCBsaW5lICVkAGxhbmd1YWdlX21vZGVsX25ncmFtX25vbm1hdGNoX3Njb3JlAHJvdyA+PSBjb2wAAFBUUkFJTl9ESUdJVFNfTUVEAEFkZGVkIGNoaWxkIGNvbD0lZCB0byBwZW5kaW5nCgBjaG9wX2VuYWJsZQBQbGVhc2UgY2FsbCBTZXRJbWFnZSBiZWZvcmUgYXR0ZW1wdGluZyByZWNvZ25pdGlvbi4KACBXSURUSD0iACAgIDxkaXYgY2xhc3M9J29jcl9jYXJlYScAMDAyMAAmYmwgbm90IGFsbCBkZWZpbmVkAGJveGFjIG5vdCBtYWRlAG5vdGhpbmcgdG8gZG8AbmFpbmRleCBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBjYW4ndCBnZXQgaGVyZSEKAHN0YWNrIG5vdCBkZWZpbmVkAHBpeGFjYyBub3QgbWFkZQBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvAG5vIHJldHVybiB2YWwgcmVxdWVzdGVkAHB0YSBub3QgbWFkZQBmcmFjdCBub3QgaW4gWzAuMCAuLi4gMS4wXQBXYXJuaW5nIGluICVzOiBmcmFjdCBtdXN0IGJlIGluIFswLjAsIDEuMF07IHNldHRpbmcgdG8gMC41CgBjbWFwIG5vdCBmb3VuZABJbmZvIGluICVzOiBwaXhtIGhhcyBiaWcgZmc6ICVmNS4yCgBzaXplIG5vdCByZXR1cm5lZABwaXhzIG5vdCBjbWFwcGVkLCA4IGJwcCBncmF5IG9yIDMyIGJwcABubyBmcmVlIGNvbG9yIGVudHJpZXMAV2FybmluZyBpbiAlczogaW52YWxpZCBmcmFjdDsgdXNpbmcgMS4wIChmdWxseSB0cmFuc3BhcmVudCkKAGRwaXhzIG5vdCBkZWZpbmVkAFBTAHJhZGl1cyBtdXN0IGJlID49IDEAbm90IGFsbCBwaXhtKgBwaXggc2l6ZXMgbm90IGVxdWFsAFdhcm5pbmcgaW4gJXM6IG51bGwgc3VtOyBub3Qgbm9ybWFsaXppbmc7IHJldHVybmluZyBhIGNvcHkKAGZhY3RvcnMgbm90IGZvdW5kAGNtYXAyIG5vdCBkZWZpbmVkAHBpeHMgbm90IDEgYnBwACoqKiBvcCA9ICVzOyBsZXZlbFslZF0gPSAlZCBpcyBpbnZhbGlkCgBuYSBub3QgZGVmaW5lZABpbmRleCBub3QgaW4gezAuLi5uIC0gMX0AbmFtIG5vdCBkZWZpbmVkACZub3V0IG5vdCBkZWZpbmVkAHBpeCBub3QgZm91bmQAbzgwLjYwAFdhcm5pbmcgaW4gJXM6IHdtID0gJWQgZGlmZmVycyBmcm9tIHcgPSAlZAoAbmV3ZGF0YSBub3QgZGVmaW5lZABFcnJvciBpbiAlczogZW5jb2RpbmcgdHlwZSBzZWxlY3Rpb24gZmFpbGVkIGZvciBmaWxlICVzCgAmdmFsIG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiBmYWlsIHdpdGggJWQgd2FybmluZyhzKSBvZiBiYWQgZGF0YQoAd2Vhc2VsMgBwaXhkIG5vdCBkZWZpbmVkAGNhbid0IGRvIGluLXBsYWNlIHdpdGggY21hcABXYXJuaW5nIGluICVzOiBncmF5dmFsID4gMjU1OyBzZXR0aW5nIHRvIDI1NQoAcGl4cyBhbmQvb3IgcGl4ZCBpcyBjbWFwcGVkAHBpeHMgbm90IGNtYXBwZWQAJmNvbmZvcm1zIG5vdCBkZWZpbmVkAHBpeGFjIG5vdCBtYWRlAG5vIGluZGljZXMgZm91bmQAbnggYW5kIG55IG11c3QgYmUgPiAwAHBpeGQgZXhpc3RzIGFuZCBpcyBub3QgcGl4cwBwaXhjcyBub3QgZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkIG9yIG5vdCA4IGJwcABJbmZvIGluICVzOiBjb252ZXJ0aW5nIChmdWxseSB0cmFuc3BhcmVudCAxIHNwcCkgPT0+IFJHQkEKAFdhcm5pbmcgaW4gJXM6IGludmFsaWQgZnJhY3Q7IHVzaW5nIDEuMCAoZnVsbHkgdHJhbnNwYXJlbnQpCgBwdGFkIG5vdCBkZWZpbmVkAG5vIG91dHB1dCByZXF1ZXN0ZWQAZGEyIG5vdCBkZWZpbmVkAGZyYWN0IG5vdCBpbiBbMC4wIC4uLiAxLjBdAHBhMSBub3QgZGVmaW5lZAAlbGx4CgBkZXB0aCBub3QgaW4gezEsIDIsIDQsIDgsIDE2LCAyNCwgMzJ9AGltYWdlIGZpbGUgbm90IGZvdW5kAGJtcDogbm8gcGl4IHJldHVybmVkAHBpeCBub3QgMSBicHAAaW52YWxpZCBjb3B5ZmxhZwBzYSBub3QgbWFkZQBwaXhzIHVuZGVmaW5lZCwgY21hcHBlZCBvciBub3QgOCBicHAAcGl4YiB1bmRlZmluZWQgb3Igbm90IDEgYnBwAGludmFsaWQgZGlyZWN0aW9uAHNlbF8zbGUAV2FybmluZyBpbiAlczogdHJhbnNwYXJlbnQgYWxwaGE7IGltYWdlIHdpbGwgbm90IGJlIGJsZW5kZWQKAHJlZHNlYXJjaCBtdXN0IG5vdCBleGNlZWQgcmVkc3dlZXAAZmFpbHVyZSB0byB3cml0ZSBwaXggdG8gbWVtb3J5AE5vIGlucHV0IGRhdGEAV2FybmluZyBpbiAlczogVGhlcmUgYXJlICVkIHN0cmluZ3MgYW5kICVkIHBpeAoAJm9mZnNldCBub3QgZGVmaW5lZAAmdmFsIG5vdCBkZWZpbmVkACZoZWFkIG5vdCBkZWZpbmVkAGhleGRhdGEgbm90IGRlZmluZWQAAEJvZ3VzIG1hcmtlciBsZW5ndGgASWdub3JpbmcgYXR0ZW1wdCB0byBzZXQgY0hSTSBSR0IgdHJpYW5nbGUgd2l0aCB6ZXJvIGFyZWEARGVjb21wcmVzc2lvbiBlcnJvcgBJbnZhbGlkIElIRFIgY2h1bmsASW5zdWZmaWNpZW50IG1lbW9yeSB0byBzdG9yZSB0ZXh0AFVua25vd24gY3VzdG9tIGZpbHRlciBtZXRob2QAemxpYiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wcmVzc29yIC0tIG1lbSBlcnJvcgBEZWZsYXRlAFVua25vd24AZmlwICE9IE5VTEwAU3RyaXBPZmZzZXRzAENsZWFuRmF4RGF0YQBObyBzcGFjZSB0byB3cml0ZSBSQVRJT05BTCBhcnJheQBTb3JyeSwgY2FuIG5vdCBoYW5kbGUgTG9nTHV2IGltYWdlcyB3aXRoICVzPSVkACVzACVzOiBObyBzcGFjZSBmb3IgU0dJTG9nIHRyYW5zbGF0aW9uIGJ1ZmZlcgBzcC0+ZGVjX2NvZGV0YWIgIT0gTlVMTABTdWJzYW1wbGluZyB0YWcgbm90IGFwcHJvcHJpYXRlIGZvciB0aGlzIFBob3RvbWV0cmljIGFuZC9vciBTYW1wbGVzUGVyUGl4ZWwAJXM6IE5vdCBlbm91Z2ggZGF0YSBhdCBzY2FubGluZSAlZCAoc2hvcnQgJWQgYnl0ZXMpAEhvcml6b250YWwgZGlmZmVyZW5jaW5nICJQcmVkaWN0b3IiIG5vdCBzdXBwb3J0ZWQgd2l0aCAlZC1iaXQgc2FtcGxlcwAgVGlsZSBEZXB0aDogJWx1AHRpZl9yZWFkLmMAJXM6IE5vIHNwYWNlIGZvciBvdXRwdXQgYnVmZmVyAHNwLT5zdGF0ZSA9PSBaU1RBVEVfSU5JVF9FTkNPREUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0AEluZGV4IFslZCwgJWQpIHNlZW0gZ29vZC4KAFRoaXMgd2FzIHRoZSB1bmlxdWUgYmlncmFtIGNob2ljZS4AUG90ZW50aWFsIHBvb3IgcmF0aW5nIG9uICIlcyIKACUxLjFmIAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaABwaXggIT0gbnVsbHB0cgBPU0Q6IFdlYWsgbWFyZ2luICglLjJmKSwgaG9yaXogdGV4dGxpbmVzLCBub3QgQ0pLOiBEb24ndCByb3RhdGUuCgBWYWxpZEJvZHlMaW5lKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggc3Ryb25nIG1vZGVscyEKAEFzc2VydCBmYWlsZWQALgAKACByZWNvZ25pemluZyBsYXN0ICVkIGNob3BwZWQgYmxvYnMKAEVycm9yOiBMU1RNIHJlcXVlc3RlZCwgYnV0IG5vdCBwcmVzZW50ISEgTG9hZGluZyB0ZXNzZXJhY3QuCgBUcnkgaW52ZXJ0aW5nIHRoZSBpbWFnZSBpbiBgTFNUTVJlY29nbml6ZVdvcmRgAHNwbGl0X2luZGV4ID4gMABCbGFtZSBmcm9tIHBhcnQgMjogAG51bV9kb2NzID4gMAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3QvbWF0cml4LmgAaW4gZmlsZSAlcywgbGluZSAlZABEaXNjYXJkaW5nIGNob2ljZSAiJXMiIHdpdGggYW4gb3Zlcmx5IGxvdyBjZXJ0YWludHkgJS4zZiB2cyBiZXN0IGNob2ljZSBjZXJ0YWludHkgJS4zZiAoVGhyZXNob2xkOiAlLjNmKQoAUFRSQUlOX0ZSRVFfTUVEAGRlYnVnAFZlcnRpY2FsIExpbmUAdW5pY2hhcnNldF8gPT0gc2Vjb25kLnVuaWNoYXJzZXRfAFJfQkFEX1BFUk1VVEVSOiAlcwoAU0Q9ICUuMmYKACAgIFdfRlVaWllfU1AgPSAlcwoAUmV2ZXJzZSAAQXNzZXJ0IGZhaWxlZABBc3NlcnQgZmFpbGVkAGZpAG1nci0+R2V0Q29tcG9uZW50KFRFU1NEQVRBX0lOVFRFTVAsICZmcCkAVmV0byByYXRpbyBiZXR3ZWVuIGNsYXNzaWZpZXIgcmF0aW5ncwBQcm90by0+VmFyaWFuY2UuRWxsaXB0aWNhbCAhPSBudWxscHRyAE51bVNldHNUb1JlYWQgPD0gRmVhdHVyZURlZnMuTnVtRmVhdHVyZVR5cGVzACVzOkluaXRpYWw9JWQsIEU9JWQsIFhodC1hZGo9JWQsIE49JWQsIFJhdD0lLjJmCgBkaXNwbGF5AEdsb2JhbCB3b3JzdCBkaXN0ID0gJWcsIGJldHdlZW4gc2FtcGxlICVkIGFuZCAlZAoAICAgIABsb2FkX3VuYW1iaWdfZGF3ZwByZXBsYWNlYWJsZQBSZWFkICVkIHdvcmRzIHNvIGZhcgoARm0AR2F0ZSAlZCwgb3V0cHV0cwoAc3JjLmRhd2dzID09IG51bGxwdHIAcj0lZywgYz0lZywgdHJ1dGg9JXMsIG9jcj0lcywgd2RlcnI9JWcsIHRydXRoWzBdPSVkCgBTZXJpZXMASW52YWxpZCBSIHNwZWMhOiVzCgBzdGQ6OmlzZmluaXRlKHNyY19tYXgpAFN0ZXAgJWQ6IERhd2cgYmVhbSAlZDoKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL25ldHdvcmtzY3JhdGNoLmgAU3BhY2luZyAlZywgaW4gJWQgcm93cywgJWQgZ2FwcyBmaXR0ZWQgb3V0IG9mICVkIG5vbi10cml2aWFsCgBwaXRjaF8gPiAwLjBmAG93bnNfYmxvYnMoKSA9PSBvdGhlci0+b3duc19ibG9icygpAENvbXB1dGVkIG1hcmdpbnMgZm9yIHBhcnQ6AENvbXBhdGlibGVDb2x1bW5zIGZhbHNlIGR1ZSB0byAyIHBhcnRzIG9mIGdvb2Qgd2lkdGgKAE1heGltYWwAaGVhZF9pbmRleCAhPSB0YWlsX2luZGV4AC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL2ltYWdlZmluZC5jcHAAQmFkIGZpbmFsIGFzcGVjdHJhdGlvOgBOZWlnaGJvdXIgYXQgKCVkLCVkKS0+KCVkLCVkKQoAbWluX2xpc3QuZ2V0KDApIDwgbWF4X2xpc3QuZ2V0KDApAEltcG9zc2libGU6IGhhcyBubyBjb25zdHJhaW50cwB0b3NwX2Jsb2NrX3VzZV9jZXJ0X3NwYWNlcwBDbGljayBhdCAoJWQsICVkKQoAIDEARGlzYWdyZWVtZW50IGJldHdlZW4gYmxvY2sgYW5kIHJvdyBhdCAlZyEhCgBBc3NlcnQgZmFpbGVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3N0cnVjdC9tYXRyaXguaABBdmVyYWdlIGNsYXNzaWZpZXIgc2NvcmUgb2YgYSBub24tbWF0Y2hpbmcgdW5pY2hhci4AaW4gZmlsZSAlcywgbGluZSAlZABYSF9HT09EAFBUUkFJTl9ESUdJVFNfTE9ORwB3b3JkX3Jlcy0+U3RhdGVzQWxsVmFsaWQoKQBDaG9wIGVuYWJsZQAlcwAgSEVJR0hUPSIAYmxvY2tfACBUegBXYXJuaW5nIGluICVzOiBwaXhhIG9mIGNoYXIgYml0bWFwcyBub3QgZm91bmQKAGJveGMgbm90IG1hZGUAJmNvbnRhaW5zIG5vdCBkZWZpbmVkAG5haW5kZXggbm90IGRlZmluZWQAbmEgbm90IGRlZmluZWQAYm94IG5vdCBtYWRlAFdhcm5pbmcgaW4gJXM6IHRpbGUgd2lkdGggdG9vIHNtYWxsOyBueCByZWR1Y2VkIHRvICVkCgBmcGl4cyBhbmQgZnBpeGQgbm90IGJvdGggZGVmaW5lZABuYXRvdCBub3QgbWFkZQBzYW1wbGluZyBmYWN0b3IgPCAxAHBpeGQgbm90IGRlZmluZWQAcGl4cyBub3QgMzIgYnBwAHJhbmsgY29sb3IgYXJyYXkgbm90IG1hZGUAV2FybmluZyBpbiAlczogc2hvdWxkbid0IGdldCBoZXJlCgBXYXJuaW5nIGluICVzOiB3bSA9ICVkIGRpZmZlcnMgZnJvbSB3ID0gJWQKACZpbmRleCBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBmdWxseSBvcGFxdWUgYWxwaGE7IGltYWdlIHdpbGwgbm90IGJlIGJsZW5kZWQKAGRwaXggbm90IGRlZmluZWQARVBTAHNpZGUgbXVzdCBiZSA+IDAAJnBpeGQgbm90IGRlZmluZWQAcGl4cyBtdXN0IGJlIDggYnBwAHB0ciBhcnJheSBub3QgbWFkZQAmZmFjdG9yMSBvciAmZmFjdG9yMiBub3QgZGVmaW5lZABuY29tcHMgbm90IDMgb3IgNABwaXhhbSBub3QgZGVmaW5lZAAqKiogb3A6ICVzOyBmYWN0IGludmFsaWQKAGNuYSBub3QgbWFkZQBub3RoaW5nIHRvIGRvAG5hbXMgbm90IGRlZmluZWQAb3V0cHV0IHN0cmVhbSBub3QgZGVmaW5lZABib3ggbm90IGZvdW5kAG81LjEgKyBvMS4yMDAAV2FybmluZyBpbiAlczogaG0gPSAlZCBkaWZmZXJzIGZyb20gaCA9ICVkCgBzdHIgbm90IGRlZmluZWQARXJyb3IgaW4gJXM6IHBkZiBlbmNvZGluZyBmYWlsZWQgZm9yICVzCgBpbmRleCBub3QgdmFsaWQAV2FybmluZyBpbiAlczogJWQgd2FybmluZyhzKSBvZiBiYWQgZGF0YQoAJmNpZCBub3QgZGVmaW5lZABjbWFwZCBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBpbnZhbGlkIGJsZW5kIHR5cGU7IHNldHRpbmcgdG8gTF9CTEVORF9HUkFZCgBFcnJvciBpbiAlczogaW52YWxpZCBkZXB0aDogJWQKAHBpeGQgaGFzIGNvbG9ybWFwAGQgbm90IDIsIDQgb3IgOABXYXJuaW5nIGluICVzOiBhdXRvbWF0aWMgY29uZm9ybWF0aW9uOiBkaXN0YW5jZSB0b28gbGFyZ2UKAHBpeCBub3QgZGVmaW5lZABFcnJvciBpbiAlczogbWF4IGluZGV4ID0gJWQsIHNpemUgb2YgcGl4YSA9ICVkCgBuICE9IG54ICogbnkAdGhyZXNodmFsICYgc2V0dmFsIG5vdCA8IDAAcGl4Y2Qgbm90IG1hZGUAcGl4cyB1bmRlZmluZWQgb3Igbm90IDggYnBwAEluZm8gaW4gJXM6IGNvbnZlcnRpbmcgKGNtYXAgKyBhbHBoYSkgPT0+IFJHQkEKAFdhcm5pbmcgaW4gJXM6IGZ1bGx5IG9wYXF1ZSBhbHBoYTsgaW1hZ2Ugd2lsbCBub3QgYmUgYmxlbmRlZAoAaW5kZXggbm90IGluIHswLi4ubn0Abm8gcG9pbnRzIGluIHB0YQAmaW5kZXggbm90IGRlZmluZWQAcHRhIGVtcHR5ACZtYXhpbmRleCBub3QgZGVmaW5lZAAlZgoAaW52YWxpZCBpbWFnZWJ5dGVzAFAlZAoAanBlZzogbm8gcGl4IHJldHVybmVkAHkgbm90IGluIFswIC4uLiBoIC0gMV0AYXJyYXkgbm90IHJldHVybmVkACVkAEVycm9yIGluICVzOiBmYWN0b3IgbXVzdCBiZSA+PSAxOyByZXR1cm5pbmcgYSBjb3B5CgBwaXhtIHVuZGVmaW5lZCBvciBub3QgOCBicHAAcHRyIGFycmF5IG5vdCBtYWRlAHNlbF9zbDEAaW52YWxpZCBwaXZvdAAmZGF0YSBhbmQgJm5ieXRlcyBub3QgYm90aCBkZWZpbmVkAEluZm8gaW4gJXM6IG5vIG91dGRpciBzcGVjaWZpZWQ7IHdyaXRpbmcgdG8gL3RtcC9sZXB0L2F1dG8KAHBpeGEgbm90IGRlZmluZWQARXJyb3IgaW4gJXM6IHRpZiBvcGVuIGZhaWxlZCBmb3IgJXMKAHJhbmdlIG11c3QgYmUgPj0gMgAmdGFpbCBub3QgZGVmaW5lZABzYSBub3QgbWFkZQByb290bmFtZSBub3QgZGVmaW5lZABXcm9uZyBKUEVHIGxpYnJhcnkgdmVyc2lvbjogbGlicmFyeSBpcyAlZCwgY2FsbGVyIGV4cGVjdHMgJWQASW1hZ2Ugd2lkdGggaXMgemVybyBpbiBJSERSAFRvbyBtYW55IElEQVRzIGZvdW5kAE1pc3NpbmcgSUhEUiBiZWZvcmUgUExURQB0ZXh0IGNvbXByZXNzaW9uIG1vZGUgaXMgb3V0IG9mIHJhbmdlAE9ubHkgY29tcHJlc3Npb24gd2luZG93cyA8PSAzMmsgc3VwcG9ydGVkIGJ5IFBORwB6bGliIGZhaWxlZCB0byBpbml0aWFsaXplIGNvbXByZXNzb3IAQWRvYmVEZWZsYXRlACVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIGxpc3Qgb2YgY3VzdG9tIHZhbHVlcwB0aWZfZGlyaW5mby5jAHRvIHJlYWQgIlRyYW5zZmVyRnVuY3Rpb24iIHRhZwBDb25zZWN1dGl2ZUJhZEZheExpbmVzACIlcyI6IEluZm9ybWF0aW9uIGxvc3Qgd3JpdGluZyB2YWx1ZSAoJWcpIGFzICh1bnNpZ25lZCkgUkFUSU9OQUwAUGxhbmFyY29uZmlndXJhdGlvbgAgIEpQRUcgVGFibGVzOiAoJWx1IGJ5dGVzKQoAcyA9PSAwAExaV0RlY29kZTogV3JvbmcgbGVuZ3RoIG9mIGRlY29kZWQgc3RyaW5nOiBkYXRhIHByb2JhYmx5IGNvcnJ1cHRlZCBhdCBzY2FubGluZSAlZABTdWJzYW1wbGluZyB0YWcgaXMgbm90IHNldCwgeWV0IHN1YnNhbXBsaW5nIGluc2lkZSBKUEVHIGRhdGEgWyVkLCVkXSBkb2VzIG5vdCBtYXRjaCBkZWZhdWx0IHZhbHVlcyBbMiwyXTsgYXNzdW1pbmcgc3Vic2FtcGxpbmcgaW5zaWRlIEpQRUcgZGF0YSBpcyBjb3JyZWN0ACVzOiBzdHJpZGUgJWQgaXMgbm90IGEgbXVsdGlwbGUgb2Ygc2FtcGxlIGNvdW50LCAlZCwgZGF0YSB0cnVuY2F0ZWQuAEZsb2F0aW5nIHBvaW50ICJQcmVkaWN0b3IiIG5vdCBzdXBwb3J0ZWQgd2l0aCAlZCBkYXRhIGZvcm1hdAAgIFJlc29sdXRpb246ICVnLCAlZwAlczogTm8gc3BhY2UgZm9yIGRhdGEgYnVmZmVyIGF0IHNjYW5saW5lICVsZAB0ZC0+dGRfcGxhbmFyY29uZmlnID09IFBMQU5BUkNPTkZJR19DT05USUcAJXM6IEVuY29kZXIgZXJyb3I6ICVzAGludmFsaWQgZGlzdGFuY2VzIHNldAAlZCBCbG9icyBtYXRjaDogYmxvYiBib3g6ACwgAFBvdGVudGlhbCBwb29yIGNlcnQgb24gIiVzIgoAZXF1AAoAQXNzZXJ0IGZhaWxlZABXYXJuaW5nLiBJbnZhbGlkIHJlc29sdXRpb24gJWQgZHBpLiBVc2luZyAlZCBpbnN0ZWFkLgoAT1NEOiBXZWFrIG1hcmdpbiAoJS4yZikgZm9yICVkIGJsb2IgdGV4dCBibG9jaywgYnV0IHVzaW5nIG9yaWVudGF0aW9uIGFueXdheTogJWQKAENyb3duQ29tcGF0aWJsZSgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGNyb3duIG1vZGVscyEKADAAIAAgVGhlIHRyYWlsaW5nIGJpdHMgbG9vayBsaWtlICVzICVzCgBFcnJvcjogVGVzc2VyYWN0IChsZWdhY3kpIGVuZ2luZSByZXF1ZXN0ZWQsIGJ1dCBjb21wb25lbnRzIGFyZSBub3QgcHJlc2VudCBpbiAlcyEhCgB0ZXNzZWRpdF9wYWdlc2VnX21vZGUAc3BsaXRfcHQgPjAgJiYgc3BsaXRfcHQgPCB3b3JkLT5jaG9wcGVkX3dvcmQtPk51bUJsb2JzKCkAdW5pY2hhciAARmlyc3QgZG9jdW1lbnQgY2Fubm90IGJlIGVtcHR5ISEKAEFzc2VydCBmYWlsZWQAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L25vcm1hbGlzLmNwcABEaXNjYXJkaW5nIGR1cGxpY2F0ZSBjaG9pY2UgIiVzIiwgcmF0aW5nICVnIHZzICVnCgBQVFJBSU5fRlJFUV9MT05HAGRpc3BsYXkATm9pc2UATW9zdCBjaGFyYWN0ZXJzIG9mICVzIGFyZSBzdWJzY3JpcHQgb3Igc3VwZXJzY3JpcHQuClRoYXQgc2VlbXMgd3JvbmcsIHNvIEknbGwgYXNzdW1lIHdlIGdvdCB0aGUgYmFzZWxpbmUgd3JvbmcKAFJfSFlQSEVOOiAlcwoAQXNzZXJ0IGZhaWxlZAAgICBXX0ZVWlpZX05PTiA9ICVzCgAlcyAAd2IA76yCAEVycm9yIGxvYWRpbmcgc2hhcGUgdGFibGUhCgBjbGFzc2lmeV9tYXhfY2VydGFpbnR5X21hcmdpbgBJbnZhbGlkIHByb3RvdHlwZSBzdHlsZQoAJXMARiA9ICUzZCwgUCA9ICUzZCwgRSA9ICUzZCwgQ29uZmlncyA9IAByYgBFT1cATG9hZCB1bmFtYmlndW91cyB3b3JkIGRhd2cuAGxhc3QgdW5pY2hhciBub3QgT0sgYXQgaW5kZXggJWQgaW4gJXMKAGFtYmlndW91cwBSZWFkICVkIHdvcmRzIHRvdGFsLgoAIWludF9tb2RlXwBHYXRlICVkLCBiaWFzCgBpbiBmaWxlICVzLCBsaW5lICVkACAAUmVjb25maWcAUmVwbGljYXRlZABzdGQ6OmlzZmluaXRlKHNjYWxlX21heCkAU3RlcCAlZDogTm9uLURhd2cgYmVhbSAlZDoKAFsARXN0aW1hdGUgb2YgbGluZXNwYWNpbmcgPSAlZwoAZmluYWxpemVkXwBNZXJnaW5nOgBGaW5kaW5nIGZpZ3VyZSBjYXB0aW9ucyBmb3IgaW1hZ2UgcGFydDoAcGFydDEgJWQtJWQsIHBhcnQyICVkLSVkCgBJbml0aWFsIHBhZ2VzZWcgYXZhaWxhYmxlID0gJXMKAHRhaWxfcG9zLnggKCkgPT0gaGVhZF9wb3MueCAoKQBUYWJsZSBmb3VuZAoAcGl4ICE9IG51bGxwdHIgJiYgcGl4R2V0RGVwdGgocGl4KSA9PSAzMgBiZXN0X2VuZCAhPSBudWxscHRyAFRvbyBtYW55IG5laWdoYm91cnM6ICVkCgBOb3QgYSBsZWZ0IHRhYgoAcGFydCAhPSBudWxscHRyAG1pbl9saXN0LmdldChtaW5fbGlzdC5sZW5ndGgoKSAtIDEpIDwgbWF4X2xpc3QuZ2V0KG1heF9saXN0Lmxlbmd0aCgpIC0gMSkAVGhpcyB2ZWN0b3IgaGFzIGl0IGFzIGEgcGFydG5lcgBPbmx5IHN0YXQgT0JWSU9VUyBzcGFjZXMAIHJlcWRfel93aWR0aDogJWQgZm91bmQgJWQgMCdzLCBzdGFydGluZyAlZDsgdGhyZXNoOiAlZC9uAHRleHRvcmRfYmxvY2tzYWxsX3Byb3AATG93ZXI9JWcsIHVwcGVyPSVnLCBTdGF0czoKAHJvdyAtIGNvbHVtbiA8IHRoaXMtPmRpbTJfAGxhbmd1YWdlX21vZGVsX25ncmFtX3VzZV9vbmx5X2ZpcnN0X3VmdDhfc3RlcAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3QvbWF0cml4LmgAWEhfU1VCTk9STUFMAFBUUkFJTl9OVU1fU0hPUlQAQ2xhc3NpZnlpbmcgcGFpbiBwb2ludCAlcyBwcmlvcml0eT0lLjRmLCBjb2w9JWQsIHJvdz0lZAoAY2hvcF92ZXJ0aWNhbF9jcmVlcABJbWFnZSBmaWxlICVzIGNhbm5vdCBiZSByZWFkIQoACQkJCTxDb21wb3NlZEJsb2NrIElEPSJjYmxvY2tfAF8AIFsgPABwaXhhIG5vdCBtYWRlAG5ldyBwdHIgYXJyYXkgbm90IHJldHVybmVkACZib3ggbm90IGRlZmluZWQAYm94YXMgaXMgZW1wdHkAYm94YWQgZGVmaW5lZCBidXQgaW4tcGxhY2UARXJyb3IgaW4gJXM6IHN0YWNrIG5vdCBkZWZpbmVkCgBXYXJuaW5nIGluICVzOiB0aWxlIGhlaWdodCB0b28gc21hbGw7IG55IHJlZHVjZWQgdG8gJWQKAHB2YWwgbm90IGRlZmluZWQAaW52YWxpZCBodWVodwBwaXggbm90IGRlZmluZWQAd2lkdGggbXVzdCBiZSA+PSAxAGxldmVsIG5vdCBpbiBbMSAuLi4gNl0ASW5mbyBpbiAlczogbGlnaHRlc3QgYmFja2dyb3VuZCBjb2xvcjogKHIsZyxiKSA9ICglZCwlZCwlZCkKAG1heGNvbG9ycyBub3QgaW4gezguLi4yNTZ9AFdhcm5pbmcgaW4gJXM6IGhtID0gJWQgZGlmZmVycyBmcm9tIGggPSAlZAoAV2FybmluZyBpbiAlczogbm8gZnJlZSBjb2xvciBlbnRyaWVzCgAmdmMgbm90IGRlZmluZWQAZnBpeCBub3QgbWFkZQBMQVRFWAAmeCBhbmQgJnkgbm90IGJvdGggZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkIG9yIG5vdCA4IGJwcABwaXhzIHVuZGVmaW5lZCBvciBub3QgOCBicHAAYXJyYXkgbm90IG1hZGUAV2FybmluZyBpbiAlczogaW52YWxpZCBiYzsgdXNpbmcgYXN5bW1ldHJpYwoASW5mbyBpbiAlczogY29sb3JtYXAgc2l6ZXMgYXJlIGRpZmZlcmVudAoAbWFzayBkZXB0aCBub3QgMSBicHAAKioqIG9wID0gJXM7IGludmFsaWQgZmFjdCA9ICVkCgBpbmRleCBub3QgaW4gezAuLi5ufQAmc3VtIG5vdCBkZWZpbmVkAHNpemVzIG9mIG5hbSBhbmQgbmFtcyBkaWZmZXIAYm94IG5vdCBkZWZpbmVkAHBpeHZ3cyBub3QgZGVmaW5lZABjbWFwIG5vdCBkZWZpbmVkAGJhMSBub3QgZGVmaW5lZABFcnJvciBpbiAlczogbm8gcGRmIGZpbGVzIG1hZGUKACZpdmFsIG5vdCBkZWZpbmVkAG5vIHJlc3VsdHMgcmVxdWVzdGVkAG5laXRoZXIgZm5hbWUgbm9yIHBpeCBhcmUgZGVmaW5lZABwaXgxIGFuZCBwaXgyIG5vdCBib3RoIGRlZmluZWQAaW5wbGFjZTsgcGl4czEgbm90IDMyIGJwcABXYXJuaW5nIGluICVzOiBpbmRleCBub3QgaW4gY29sb3JtYXA7IHVzaW5nIGxhc3QgY29sb3IKAHBpeGQgbm90IDggb3IgMzIgYnBwAHBpeHMgbm90IGRlZmluZWQgb3Igbm90IDMyIGJwcABwaXhzIG5vdCBkZWZpbmVkAHBpeGMgbm90IG1hZGUARXJyb3IgaW4gJXM6IGluZGV4ICVkIG91dCBvZiByYW5nZSBvZiBwaXgKAGRlcHRocyBub3QgZXF1YWwAc2V0dmFsID4gMjU1IGZvciA4IGJwcABwaXhjIG5vdCBkZWZpbmVkAHBpeHMgbm90IDMyIGJwcABjbWFwLCB0Uk5TLCBidXQgbm8gdHJhbnNwYXJlbmN5IGFycmF5ACZ2YyBub3QgZGVmaW5lZABpbmRleCBub3QgaW4gezAuLi5uIC0gMX0AYm94IG5vdCBkZWZpbmVkAHB0YTEgbm90IGRlZmluZWQAJmNvdW50IG5vdCBkZWZpbmVkADwlbGxkPgoAaW52YWxpZDogY21hcCBzaXplIDwgMCBvciAxAGludmFsaWQgcmVhZCBmb3IgdHlwZQBwbmc6IG5vIHBpeCByZXR1cm5lZAB4c3RhcnQgbm90IGRlZmluZWQAYXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kcwBkZXB0aCBub3QgMzIgYnBwAFdhcm5pbmcgaW4gJXM6IGRlbHRhIDw9IDA7IHJldHVybmluZyBhIGNvcHkgb2YgcGl4bQoAYXJyYXkgbm90IG1hZGUAc2VsX3VsYwBwaXhzY2ggYW5kIHBpeHN3IG5vdCBib3RoIG1hZGUAcGl4cyBub3QgZGVmaW5lZAAvdG1wL2xlcHQvYXV0bwBXYXJuaW5nIGluICVzOiBubyB0ZXh0c3RyaW5nIGRlZmluZWQ7IGluc2VydGluZyBjb3B5AHN0cmVhbSBub3Qgb3BlbmVkAHN0ciBub3QgZGVmaW5lZCBvciBlbXB0eQBjc3RyIG5vdCBkZWZpbmVkACUhQWRvYmUtUFMAcGl4YSBub3QgZGVmaW5lZABTYW1wbGluZyBmYWN0b3JzIHRvbyBsYXJnZSBmb3IgaW50ZXJsZWF2ZWQgc2NhbgBJbnZhbGlkIGltYWdlIHdpZHRoIGluIElIRFIASW1hZ2UgaXMgdG9vIGhpZ2ggdG8gcHJvY2VzcyB3aXRoIHBuZ19yZWFkX3BuZygpAEludmFsaWQgUExURSBhZnRlciBJREFUAElnbm9yaW5nIGludmFsaWQgdGltZSB2YWx1ZQBPbmx5IGNvbXByZXNzaW9uIHdpbmRvd3MgPj0gMjU2IHN1cHBvcnRlZCBieSBQTkcASW52YWxpZCBudW1iZXIgb2YgY29sb3JzIGluIHBhbGV0dGUAUGl4YXJMb2cAJXM6IEJhZCBmaWVsZCB0eXBlICVkIGZvciAiJXMiAFRJRkZGaWVsZFdpdGhOYW1lAFBob3RvbWV0cmljIHRhZyBpcyBtaXNzaW5nLCBhc3N1bWluZyBkYXRhIGlzIFlDYkNyAEZheFJlY3ZQYXJhbXMATm8gc3BhY2UgdG8gd3JpdGUgcGVyLXNhbXBsZSBzaG9ydHMAU29ycnksIGNhbiBub3QgaGFuZGxlIGltYWdlIHdpdGggJXM9JWQAICBGYXggUmVjZWl2ZSBQYXJhbWV0ZXJzOiAlMDhseAoAc3AtPnRidWZsZW4gPj0gbnBpeGVscwBMWldEZWNvZGU6IE5vdCBlbm91Z2ggZGF0YSBhdCBzY2FubGluZSAlZCAoc2hvcnQgJWxkIGJ5dGVzKQBTdWJzYW1wbGluZyBpbnNpZGUgSlBFRyBkYXRhIFslZCwlZF0gZG9lcyBub3QgbWF0Y2ggc3Vic2FtcGxpbmcgdGFnIHZhbHVlcyBbJWQsJWRdOyBhc3N1bWluZyBzdWJzYW1wbGluZyBpbnNpZGUgSlBFRyBkYXRhIGlzIGNvcnJlY3QAUGl4YXJMb2dEZWNvZGU6IHVuc3VwcG9ydGVkIGJpdHMvc2FtcGxlOiAlZAAiUHJlZGljdG9yIiB2YWx1ZSAlZCBub3Qgc3VwcG9ydGVkACAodW5pdGxlc3MpAChjYyAmIDEpID09IDAAdGlmX3dyaXRlLmMAc3AgIT0gMABpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUATWF0Y2hlcyBib3g6ACAAUG90ZW50aWFsIGdhcmJhZ2Ugb24gIiVzIgoAV2FybmluZzogZXF1YXRpb24gcmVnaW9uIGRldGVjdGlvbiByZXF1ZXN0ZWQsIGJ1dCAlcyBmYWlsZWQgdG8gbG9hZCBmcm9tICVzCgAgIiVzIiAAS2F0YWthbmEAQXNzZXJ0IGZhaWxlZABEb24ndCBjYWxsIEZpcnN0V29yZFdvdWxkSGF2ZUZpdChyLCBzLCBKVVNUSUZJQ0FUSU9OX1VOS05PV04pLgoACSVzCSUuNGYJJS40ZgoATwBOdW0gc3BhY2VzPSVkLCB0ZXh0PSVzCgAlcyBzdXBlcnNjcmlwdCBmaXg6ICVzCgBFcnJvcjogU2l6ZSBvZiB1bmljaGFyc2V0IGlzIGdyZWF0ZXIgdGhhbiBNQVhfTlVNX0NMQVNTRVMKAFBhZ2Ugc2VnIG1vZGU6IDA9b3NkIG9ubHksIDE9YXV0bytvc2QsIDI9YXV0b19vbmx5LCAzPWF1dG8sIDQ9Y29sdW1uLCA1PWJsb2NrX3ZlcnQsIDY9YmxvY2ssIDc9bGluZSwgOD13b3JkLCA5PXdvcmRfY2lyY2xlLCAxMD1jaGFyLDExPXNwYXJzZV90ZXh0LCAxMj1zcGFyc2VfdGV4dCtvc2QsIDEzPXJhd19saW5lIChWYWx1ZXMgZnJvbSBQYWdlU2VnTW9kZSBlbnVtIGluIHB1YmxpY3R5cGVzLmgpAHdvcmQtPnJhdGluZ3MtPmRpbWVuc2lvbigpID09IHJhdDEgKyByYXQyACBub3QgZm91bmQgaW4gY2xhc3NpZmljYXRpb24gbGlzdABudW1fcGFnZXNfcGVyX2RvY18gPiAwAHJvdyA+PSBjb2x1bW4AbWlucnVucy0+ZGltMigpID09IGhlaWdodABOZXcgJXMAUFRSQUlOX1NIQVBFX0NPU1RfUEVSX0NIQVIAQXNzZXJ0IGZhaWxlZAAAU2V0U2NyaXB0UG9zaXRpb24gb24gJXMKAFJfRFVCSU9VUzogJXMKAENvcnJlY3Q9ICVzCgAKAGZsAG1nci0+R2V0Q29tcG9uZW50KFRFU1NEQVRBX1BGRk1UQUJMRSwgJmZwKQBWZXRvIGRpZmZlcmVuY2UgYmV0d2VlbiBjbGFzc2lmaWVyIGNlcnRhaW50aWVzAGNpcmN1bGFyIAAhIklsbGVnYWwgc2hvcnQgbmFtZSBmb3IgYSBmZWF0dXJlIgAxAGNsYXNzaWZ5X2NwX2VuZF9wYWRfbG9vc2UAQXNzZXJ0IGZhaWxlZAAgICAAbG9hZF9wdW5jX2Rhd2cAcGVybXV0ZV9kYXdnX2RlYnVnAGNhbmRpZGF0ZSBuZ3JhbTogAEVycm9yOiB3b3JkICclcycgbm90IGluIERBV0cgYWZ0ZXIgYWRkaW5nIGl0CgAhdl9pby5pbnRfbW9kZV8ARGVsdGEgc3RhdGU6JXMKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL3JlY29kZWJlYW0uaAAsAFJUTFJldmVyc2VkAEludmFsaWQgcmVwbGljYXRlZCBuZXR3b3JrIQoAd2lkdGggPD0gV2lkdGgoKQBlbnRyeS5kYXRhLmRhd2dzID09IG51bGxwdHIAXQB0ZXh0b3JkX3Rlc3RyZWdpb25fcmlnaHQARmluYWwgbGluZXNwYWNpbmcgbW9kZWwgPSAlZyArIG9mZnNldCAlZywgZXJyb3IgJWcKAEZQQW5hbHl6ZXI6IGZpbmFsIHJlc3VsdAoAdGV4dG9yZF90YWJmaW5kX3Nob3dfYmxvY2tzACh3MSArIHcyKSA+IDAAQ29uc2lkZXJpbmcgcGFydG5lcjoAQ29tcGF0aWJsZUNvbHVtbnMgdHJ1ZSEKAHllcwBlZGdlc19jaGlsZHJlbl9wZXJfZ3JhbmRjaGlsZAB0YWlsX2luZGV4ICE9IGhlYWRfaW5kZXgAZGVidWcAcGl4R2V0V3BsKHNjYWxlZCkgPT0gd2lkdGhfcGFkAHRleHRvcmRfc2hvd19maW5hbF9yb3dzAHRleHRvcmRfb2xkYmxfc3BsaXRfc3BsaW5lcwBpbiBmaWxlICVzLCBsaW5lICVkAEJhZCBzdHJva2Ugd2lkdGhzOgBNYXliZSBhIGxlZnQgdGFiCgBpbiBmaWxlICVzLCBsaW5lICVkAGNoZWNrAE1lcmdpbmcAdG9zcF9yb3dfdXNlX2NlcnRfc3BhY2VzAHRleHRvcmRfZGVidWdfcGl0Y2hfbWV0cmljACAyAE1vYW4gYWJvdXQgZml4ZWQgcGl0Y2ggYmxvY2tzAEdBUCBTVEFUUwoAQXNzZXJ0IGZhaWxlZABVc2Ugb25seSB0aGUgZmlyc3QgVVRGOCBzdGVwIG9mIHRoZSBnaXZlbiBzdHJpbmcgd2hlbiBjb21wdXRpbmcgbG9nIHByb2JhYmlsaXRpZXMuAEFzc2VydCBmYWlsZWQAWEhfSU5DT05TSVNURU5UAFBUUkFJTl9OVU1fTUVEAHBhaW5fcG9pbnRzICE9IG51bGxwdHIAVmVydGljYWwgY3JlZXAAUGFnZSAlZCA6ICVzCgAKAAogICAgPHAgY2xhc3M9J29jcl9wYXInAD4gXSBUSgBjaGFycy00LnBhAGluZGV4IG5vdCB2YWxpZABuID0gMABib3hhIG5vdCBtYWRlAGkgaW52YWxpZABFcnJvciBpbiAlczogYXV4c3RhY2sgbm90IGRlZmluZWQKAG5vIG91dHB1dCByZXF1ZXN0ZWQAeCBvdXQgb2YgYm91bmRzAGludmFsaWQgc3ZhbC9zYXRodwBwaXggbm90IDggYnBwAFdhcm5pbmcgaW4gJXM6IG5vIGJveGVzIHRvIGRyYXc7IHJldHVybmluZyBhIGNvcHkKAEVycm9yIGluICVzOiBmYWlsdXJlIHRvIG1ha2UgYSB0YWJsZQoASW5mbyBpbiAlczogYmFja2dyb3VuZCBub3QgcmVkZGlzaAoAb3FjYSBub3QgbWFkZQBwaXhkIG5vdCBudWxsIG9yID09IHBpeHMAJnVzYWJsZSBub3QgZGVmaW5lZABiIG5vdCBtYWRlAG5vIHJldHVybiB2YWwgcmVxdWVzdGVkAHJvb3RuYW1lIG5vdCBkZWZpbmVkACZwaXggbm90IGRlZmluZWQAcGl4cyBpcyBjb2xvcm1hcHBlZABub3QgMiwgNCBvciA4IGJwcABmbmFtZSBub3QgZGVmaW5lZABpbnZhbGlkIHR5cGUAJmNvbG9yIG5vdCBkZWZpbmVkAG1pc3NpbmcgY29tcHMgaW4gcGl4YW0AKioqIG9wID0gJXM7IG11c3QgYmUgZmlyc3Qgb3AKAGluZGV4IG5vdCBpbiB7MC4uLm4gLSAxfQAmYWxsaW50cyBub3QgZGVmaW5lZABFcnJvciBpbiAlczogZmlsdGVyIHRvbyBzbWFsbDsgcmV0dXJuaW5nIGEgY29weQoAcGl4cyBhbGwgMABjMS4xMCArIG80LjEAV2FybmluZyBpbiAlczogbm8gcm9vbTsgY29sb3JtYXAgZnVsbAoAJmJhMiBub3QgZGVmaW5lZAAKY29uY2F0ZW5hdGluZyAuLi4gAGFycmF5IG5vdCBtYWRlAHN0cmVhbSBub3QgZGVmaW5lZAAtACZwaXhzIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGludmFsaWQgc2hpZnQ7IHNldHRpbmcgdG8gNjQKAFdhcm5pbmcgaW4gJXM6IHZhbCA9ICVkIHRvbyBsYXJnZSBmb3IgZGVwdGg7IHVzaW5nIG1heHZhbCA9ICVkCgB4IGFuZCB5IG11c3QgYmUgbm9uLW5lZ2F0aXZlAHBpeHMgbm90IDMyIGJwcABib3hhIG5vdCBkZWZpbmVkAGJveCBub3QgZGVmaW5lZABpbnZhbGlkIGluZGV4AG91dGRlcHRoIG5vdCBpbiB7MSwgOCwgMzJ9AHNldHZhbCA+IDB4ZmZmZiBmb3IgMTYgYnBwACZmb3JtYXQgbm90IGRlZmluZWQAd2VpZ2h0cyBub3QgYWxsID49IDAuMABJbmZvIGluICVzOiBjb252ZXJ0aW5nIDEgYnBwIGNtYXAgd2l0aCBhbHBoYSA9PT4gUkdCQQoAYiBub3QgbWFkZQBpbnZhbGlkIGluZGV4AHBpeHMgbm90IGRlZmluZWQAcHRhMiBub3QgZGVmaW5lZABpbmRleCBub3QgaW4gWzAgLi4uIG5hbGxvYy0xXQA8JWxseD4KAGludmFsaWQgY21hcDogdG9vIGxhcmdlAGludmFsaWQgcG5tIGZpbGUAdGlmZjogbm8gcGl4IHJldHVybmVkAHhlbmQgbm90IGRlZmluZWQAbmV3c3RyIG5vdCBkZWZpbmVkAGZhY3RvciBtdXN0IGJlID49IDEAIXBpeHMgb3IgcGl4cyBub3QgMSBicHAAc2VsYSBub3QgZGVmaW5lZABzZWxfdXJjAHBpeHQxIGFuZCBwaXh0MiBub3QgYm90aCBtYWRlAGRhdGEgbm90IG1hZGUAc3RyaW5ndGVtcGxhdGUxLnR4dABwaXgzIG5vdCBtYWRlAEluZm8gaW4gJXM6ICBUaWZmOiAlZCBwYWdlcwoAJmhhc2ggbm90IGRlZmluZWQAc3ViIG5vdCBkZWZpbmVkACUlJSVCb3VuZGluZ0JveDogJTcuMmYgJTcuMmYgJTcuMmYgJTcuMmYAaW52YWxpZCBmb3JtYXQASW52YWxpZCBtZW1vcnkgcG9vbCBjb2RlICVkAEltYWdlIHdpZHRoIGlzIHRvbyBsYXJnZSBmb3IgdGhpcyBhcmNoaXRlY3R1cmUARHVwbGljYXRlIFBMVEUgY2h1bmsASWdub3JpbmcgaW52YWxpZCBudW1fdHJhbnMgdmFsdWUAQ29tcHJlc3Npb24gd2luZG93IGlzIGJlaW5nIHJlc2V0IHRvIDUxMgBJZ25vcmluZyByZXF1ZXN0IHRvIHdyaXRlIGEgUExURSBjaHVuayBpbiBncmF5c2NhbGUgUE5HAFNHSUxvZwBUYWcgVmFsdWUASW50ZXJuYWwgZXJyb3IsIHVua25vd24gdGFnICVzAFBob3RvbWV0cmljIHRhZyB2YWx1ZSBhc3N1bWVkIGluY29ycmVjdCwgYXNzdW1pbmcgZGF0YSBpcyBZQ2JDciBpbnN0ZWFkIG9mIFJHQgBGYXhTdWJBZGRyZXNzAE5vIHNwYWNlIHRvIHdyaXRlIHBlci1zYW1wbGUgdmFsdWVzAE1pc3NpbmcgcmVxdWlyZWQgIkNvbG9ybWFwIiB0YWcAICBGYXggU3ViQWRkcmVzczogJXMKAExvZ0x1dkRlY29kZTI0OiBOb3QgZW5vdWdoIGRhdGEgYXQgcm93ICVkIChzaG9ydCAlZCBwaXhlbHMpAExaV0RlY29kZTogQm9ndXMgZW5jb2RpbmcsIGxvb3AgaW4gdGhlIGNvZGUgdGFibGU7IHNjYW5saW5lICVkAFN1YnNhbXBsaW5nIHRhZyBpcyBub3Qgc2V0LCB5ZXQgc3Vic2FtcGxpbmcgaW5zaWRlIEpQRUcgZGF0YSBkb2VzIG5vdCBtYXRjaCBkZWZhdWx0IHZhbHVlcyBbMiwyXSAobm9yIGFueSBvdGhlciB2YWx1ZXMgYWxsb3dlZCBpbiBUSUZGKTsgYXNzdW1pbmcgc3Vic2FtcGxpbmcgaW5zaWRlIEpQRUcgZGF0YSBpcyBjb3JyZWN0IGFuZCBkZXN1YnNhbXBsaW5nIGluc2lkZSBKUEVHIGRlY29tcHJlc3Npb24AUGl4YXJMb2cgY29tcHJlc3Npb24gY2FuJ3QgaGFuZGxlICVkIGJpdCBsaW5lYXIgZW5jb2RpbmdzAHNwLT5kZWNvZGVyb3cgIT0gTlVMTAAgcGl4ZWxzL2luY2gAKGNjICUgMykgPT0gMAAlczogTm8gc3BhY2UgdG8gZXhwYW5kIHN0cmlwIGFycmF5cwBpbnZhbGlkIGRpc3RhbmNlIGNvZGUAV2l0aCBuZXh0IGJveDoAVGhlcmUgd2VyZSBtYW55IGNob2ljZXM6IHsAQk9MIENSVU5DSCBERUxFVElORyglZCk6ICIlcyIKAFdhcm5pbmc6IGlucHV0IHRvX2Jsb2NrIGlzIG51bGxwdHIhCgBCbG9iIGNvdW50OiAlZCAod29yZCk7ICVkLyVkIChyZWJ1aWxkIHdvcmQpCgBIaXJhZ2FuYQBFbmQgb2YgUGFzcyAxAGwAJWQgd29yZHMgcHJpbnRlZAoAQUNDRVBUAEZhaWxlZCBsb2FkaW5nIGxhbmd1YWdlICclcycKAHRlc3NlZGl0X29jcl9lbmdpbmVfbW9kZQBBc3NlcnQgZmFpbGVkAGJldHRlciByYXRpbmcgZm9yIGFkYXB0ZWQgAEFzc2VydCBmYWlsZWQAcm93IC0gY29sdW1uIDwgdGhpcy0+ZGltMl8AQXNzZXJ0IGZhaWxlZABCZXN0AFBUUkFJTl9OR1JBTV9DT1NUX1BFUl9DSEFSAGxlbmd0aCA9PSBsZW5ndGhfAFJfTk9fQUxQSEFOVU1TOiAlcwoAUmVqZWN0ZWQgY2Jsb2IgY291bnQgPSAlZAoAVG9vIG1hbnkgdW5pY2hhcnMgaW4gYW1iaWd1aXR5IG9uIGxpbmUgJWQKACAAbWdyLT5HZXRDb21wb25lbnQoVEVTU0RBVEFfTk9STVBST1RPLCAmZnApAHRlc3NfY25fbWF0Y2hpbmcAbGluZWFyICAgAEFzc2VydCBmYWlsZWQAMABDbGFzcyBQcnVuZXIgRW5kIFBhZCBMb29zZQBmZWF0dXJlc19hcmVfaW5kZXhlZF8AJWxsZCA6IG5leHQgPSAlbGxkLCB1bmljaGFyX2lkID0gJWQsICVzICVzICVzCgBMb2FkIGRhd2cgd2l0aCBwdW5jdHVhdGlvbiBwYXR0ZXJucy4AJXMgcGVybXV0ZV9jaG9pY2VzOiBjaGFyX2Nob2ljZV9pbmRleD0lZCBsaW1pdD0lZyByYXRpbmc9JWcsIGNlcnRhaW50eT0lZyB3b3JkPSVzCgBjdXJyZW50IG5ncmFtIGZyb20gc3BlYzogAHBsZWFzZSBjYWxsIGluaXRpYWxpemVfcGF0dGVybnMoKSBiZWZvcmUgcmVhZF9wYXR0ZXJuX2xpc3QoKQoAQXNzZXJ0IGZhaWxlZABBc3NlcnQgZmFpbGVkAD0AVFRCUmV2ZXJzZWQASW52YWxpZCBTIHNwZWMhOiVzCgBudW1fZmVhdHVyZXMgKyBmZWF0dXJlX29mZnNldCA8PSBOdW1GZWF0dXJlcygpAGluIGZpbGUgJXMsIGxpbmUgJWQAUmlnaHQgZWRnZSBvZiBkZWJ1ZyByZWN0YW5nbGUAJWQ6ICVnCgBSb3cgJWQ6IHBpdGNoX2RlY2lzaW9uPSVkLCBmaXhlZF9waXRjaD0lZiwgbWF4X25vbnNwYWNlPSVkLCBzcGFjZV9zaXplPSVmLCBzcGFjZV90aHJlc2hvbGQ9JWQsIHhoZWlnaHQ9JWYKAFNob3cgZmluYWwgYmxvY2sgYm91bmRzAHByZXZfb3duZXIgPT0gb3RoZXIgfHwgcHJldl9vd25lciA9PSBudWxscHRyAEJlc3QgY2FwdGlvbiBjYW5kaWRhdGU6ACpmaXJzdF9jb2wgPj0gMCAmJiAqbGFzdF9jb2wgPj0gMABubwBJbXBvcnRhbmNlIHJhdGlvIGZvciBjaHVja2luZyBvdXRsaW5lcwBzdGVwY291bnQgPiAwAGRpc3BsYXkASW1hZ2VDb21wb25lbnQARGlzcGxheSByb3dzIGFmdGVyIGZpbmFsIGZpdHRpbmcAU3BsaXQgc3RlcHBlZCBzcGxpbmVzAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL3BpdHN5bmMxLmNwcABEb25lISBGaW5hbCBib3g6AE1heWJlIE5vdCBhIGxlZnQgdGFiCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC90YWJsZWZpbmQuY3BwAGJvdW5kaW5nX2JveC0+YXJlYSgpID49IG9sZF9hcmVhAGJ5IGRlbGV0aW5nAHRvc3BfbmFycm93X2Jsb2JzX25vdF9jZXJ0AFdyaXRlIGZ1bGwgbWV0cmljIHN0dWZmAEltcHJvdmUgcm93IGtuOiU1LjJmIHNwOiU1LjJmIDAnczogJWQgLT4gJWQgIHRocmVzaDolZCAtPiAlZAoAU1BBQ0Ugc3RhdHMKAHVuaWNoYXJzZXQtPmNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAbGFuZ3VhZ2VfbW9kZWxfbmdyYW1fc2NhbGVfZmFjdG9yAFBUUkFJTl9OVU1fTE9ORwBwYWluX3BvaW50LlZhbGlkKCpyYXRpbmdzKQBjaG9wX3NwbGl0X2xlbmd0aABQYWdlICVkCgAJCQkJCTxUZXh0QmxvY2sgSUQ9ImJsb2NrXwAgZGlyPSdydGwnACAKAGNoYXJzLTYucGEAaW52YWxpZCBhY2Nlc3NmbGFnAGVpdGhlciB4IG9yIHkgbXVzdCBiZSA8IDAAZWxlbWVudCBjb3VudCBtaXNtYXRjaABqIGludmFsaWQARXJyb3IgaW4gJXM6IGZpbGxzZWcgbm90IG1hZGUKAHBpeHMgbm90IGRlZmluZWQgb3Igbm90IDggYnBwAHkgb3V0IG9mIGJvdW5kcwBpbnZhbGlkIG5zYW1wIG9yIHJlcC4gZmFjdG9yAFdhcm5pbmcgaW4gJXM6IGZyYWN0ID0gMC4wOyBubyBlcXVhbGl6YXRpb24gcmVxdWVzdGVkCgBiYWEgbm90IGRlZmluZWQAcGl4cyBub3QgOCBicHAASW5mbyBpbiAlczogYmFja2dyb3VuZCB0b28gZGFyawoAYnBwIG5vdCA0IG9yIDghAHBpeHMgaXMgPCA4IGJwcAAmbWluZGVwdGggbm90IGRlZmluZWQAYVtpXSBub3QgbWFkZQBmcGl4czEgbm90IGRlZmluZWQAb3V0Zm9ybWF0IGludmFsaWQAcGl4IG5vdCBkZWZpbmVkAHBpeGltIG5vdCAxIGJwcAB2YWwgb3V0IG9mIDggYnBwIHJhbmdlAHN0cmVhbSBub3Qgb3BlbmVkAGludmFsaWQgZGVwdGgAcGl4cyBub3QgZGVmaW5lZABFcnJvciBpbiAlczogcGl4MyBub3QgbWFkZSBpbiBpdGVyICVkOyBhYm9ydGluZwoAKioqIG5vbmV4aXN0ZW50IG9wID0gJXMKAG5ldyBwdHIgYXJyYXkgbm90IHJldHVybmVkAG5hIGVtcHR5AEluZm8gaW4gJXM6IHJlZHVjaW5nIGZpbHRlciB0byBoYWxmd2luID0gJWQKAHBpeGggbm90IG1hZGUAYzMwLjMwICsgZDMuMwBXYXJuaW5nIGluICVzOiBubyBtYXNrOyBub3RoaW5nIHRvIGRvCgBzcGxpdGxvYyBpbnZhbGlkAGRvbmUKAG5laXRoZXIgJnN0YXJ0eCBub3IgJmRlbHggYXJlIGRlZmluZWQAJnhyZXMgYW5kICZ5cmVzIG5vdCBib3RoIGRlZmluZWQAc3RkaW4AcGl4ZCA9PSBwaXhzAG5vIGltYWdlIG92ZXJsYXAAcGl4IG5vdCBkZWZpbmVkIG9yIG5vdCAzMiBicHAAaW52YWxpZCBzZWFyY2hkaXIAYW1hcCBub3QgZGVmaW5lZABib3ggbm90IGRlZmluZWQAbmV3IHB0ciBhcnJheSBub3QgcmV0dXJuZWQAcGl4cyBub3QgMSBicHAAV2FybmluZyBpbiAlczogb25seSBnb3QgJWQgY29tcG9uZW50cwoAV2FybmluZyBpbiAlczogc2V0dmFsID09IHRocmVzaHZhbDsgbm8gb3BlcmF0aW9uCgBJbmZvIGluICVzOiBwaXggd2lkdGggJWQgIT0gcGl4YyB3aWR0aCAlZAoAV2FybmluZyBpbiAlczogd2VpZ2h0cyBkb24ndCBzdW0gdG8gMTsgbWFpbnRhaW5pbmcgcmF0aW9zCgBJbmZvIGluICVzOiBudW1fdHJhbnMgPSAxOyBzZWNvbmQgY29sb3Igb3BhcXVlIGJ5IGRlZmF1bHQKAGFbaV0gbm90IG1hZGUAbm8gb3V0cHV0IHJlcXVlc3RlZABwaXhzIG5vdCAxIGJwcAAmcHRhZCBub3QgZGVmaW5lZABuIG11c3QgYmUgPiAwADwlZj4KAHNpemUgaW5jb21tZW5zdXJhdGUgd2l0aCBpbWFnZSBkYXRhAG5vIGRhdGEgaW4gZmlsZQBwbm06IG5vIHBpeCByZXR1cm5lZAB4IG5vdCBpbiBbMCAuLi4gdyAtIDFdAGluZGV4IG5vdCB2YWxpZABpbnZhbGlkIGNvbG9yAG91dGRlcHRoIG5vdCA4IG9yIDE2IGJwcABhZGRlZCBzZWwgbXVzdCBoYXZlIG5hbWUAc2VsX2xsYwBXYXJuaW5nIGluICVzOiBtYXggZm91bmQgYXQgc3dlZXAgZWRnZQoAaW52YWxpZCBkYXRhAGZpbGVzdHIgbm90IG1hZGUAc2F3b3JkcyBub3QgbWFkZQBmaWxlIG5vdCB0aWZmACZwcmltZSBub3QgZGVmaW5lZABzdWJzdHJpbmcgbGVuZ3RoIDAAZ3NhdmUAJXMlMDNkLiVzAFVuc3VwcG9ydGVkIEpQRUcgZGF0YSBwcmVjaXNpb24gJWQASW1hZ2Ugd2lkdGggZXhjZWVkcyB1c2VyIGxpbWl0IGluIElIRFIASWdub3JpbmcgUExURSBjaHVuayBpbiBncmF5c2NhbGUgUE5HAHRSTlMgY2h1bmsgaGFzIG91dC1vZi1yYW5nZSBzYW1wbGVzIGZvciBiaXRfZGVwdGgAT25seSBjb21wcmVzc2lvbiBtZXRob2QgOCBpcyBzdXBwb3J0ZWQgYnkgUE5HAEludmFsaWQgemxpYiBjb21wcmVzc2lvbiBtZXRob2Qgb3IgZmxhZ3MgaW4gSURBVABTR0lMb2cyNAAlczogQmFkIHZhbHVlICVkIGZvciAiJXMiIHRhZwBUYWcgJWQAQml0c1BlclNhbXBsZSB0YWcgaXMgbWlzc2luZywgYXNzdW1pbmcgOCBiaXRzIHBlciBzYW1wbGUARmF4UmVjdlRpbWUATm8gc3BhY2UgdG8gd3JpdGUgYXJyYXkAT3V0IG9mIG1lbW9yeSBmb3IgY29sb3JtYXAgY29weQAgIEZheCBSZWNlaXZlIFRpbWU6ICVsdSBzZWNzCgBMb2dMdXZEZWNvZGUzMjogTm90IGVub3VnaCBkYXRhIGF0IHJvdyAlZCAoc2hvcnQgJWQgcGl4ZWxzKQBObyBzcGFjZSBmb3IgTFpXIGhhc2ggdGFibGUAU3Vic2FtcGxpbmcgaW5zaWRlIEpQRUcgZGF0YSBkb2VzIG5vdCBtYXRjaCBzdWJzYW1wbGluZyB0YWcgdmFsdWVzIFslZCwlZF0gKG5vciBhbnkgb3RoZXIgdmFsdWVzIGFsbG93ZWQgaW4gVElGRik7IGFzc3VtaW5nIHN1YnNhbXBsaW5nIGluc2lkZSBKUEVHIGRhdGEgaXMgY29ycmVjdCBhbmQgZGVzdWJzYW1wbGluZyBpbnNpZGUgSlBFRyBkZWNvbXByZXNzaW9uACVzOiBFbmNvZGVyIGVycm9yOiAlcwBzcC0+ZGVjb2RlcGZ1bmMgIT0gTlVMTAAgcGl4ZWxzL2NtAChjYyAmIDMpID09IDAAdGQtPnRkX25zdHJpcHMgPiAwAGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrAEJlc3Qgc3RhdGUgPSAAfQBFT0wgQ1JVTkNIIERFTEVUSU5HKCVkKTogIiVzIgoAYmxvYm5ib3ggIT0gbnVsbHB0cgBUZXNzIEFjY2VwdGVkOiAlcwoASGFuAEVuZCBvZiBQYXNzIDIASQBiaWRpX2RlYnVnAFJFSkVDVABUZXNzZXJhY3QgY291bGRuJ3QgbG9hZCBhbnkgbGFuZ3VhZ2VzIQoAV2hpY2ggT0NSIGVuZ2luZShzKSB0byBydW4gKFRlc3NlcmFjdCwgTFNUTSwgYm90aCkuIERlZmF1bHRzIHRvIGxvYWRpbmcgYW5kIHJ1bm5pbmcgdGhlIG1vc3QgYWNjdXJhdGUgYXZhaWxhYmxlLgBCb3VuZGluZyBib3g9KCVkLCVkKS0+KCVkLCVkKQoAIHRoYW4gZm9yIGNvcnJlY3QgAGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAU2Vjb25kYXJ5AFBUUkFJTl9OVU1fQkFEX1BVTkMAJXMgQ2hhcmFjdGVyICVzW2JvdDolZCB0b3A6ICVkXSAgYm90X3JhbmdlWyVkLCVkXSAgdG9wX3JhbmdlWyVkLCAlZF0gc3ViX3RocmVzaFtib3Q6JWQgdG9wOiVkXSAgc3VwX3RocmVzaF9ib3QgJWQKAFJfTU9TVExZX1JFSjogJXMKAFNjcmlwdCA9ICVkCgAlZABKb2luZWQAClJlYWRpbmcgcHJlLWFkYXB0ZWQgdGVtcGxhdGVzIGZyb20gJXMgLi4uCgBDaGFyYWN0ZXIgTm9ybWFsaXplZCBNYXRjaGluZwBub24tZXNzZW50aWFsIABGPSUzZCwgQz0AL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NsYXNzaWZ5L3RyYWluaW5nc2FtcGxlLmgAJWxsZCA6IG5vIGVkZ2VzIGluIHRoaXMgbm9kZQoAbG9hZF9udW1iZXJfZGF3ZwBwZXJtdXRlX2Nob2ljZXMoKTogYXR0ZW1wdHNfbGVmdCBpcyAwCgBjb21wYXJpc29uIHJlc3VsdDogJWQKAEVycm9yIG9wZW5pbmcgcGF0dGVybiBmaWxlICVzCgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplACFpbnRfbW9kZV8AIE5ldyBiZXN0IGNoYXIgZXJyb3IgPSAAWFlUcmFuc3Bvc2UAUmVjb25maWcAbnVtX2ZlYXR1cmVzICsgZmVhdHVyZV9vZmZzZXQgPD0gc3JjLk51bUZlYXR1cmVzKCkAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2xzdG0vcmVjb2RlYmVhbS5jcHAATWVkaWFuIG9mZnNldCA9ICVnLCBjb21wYXJlZCB0byBtZWFuIG9mICVnLgoAQ2hhciAldTogaXNfZmluYWw9JWQgaXNfZ29vZD0lZCBudW1fYmxvYnM9JWQ6IABWZXJ0aWNhbCBwYXJ0aXRpb24KAExpbmUgY291bnQ9JWQsIGJpZ2dlc3QgZ2FwICVkLCBzbWFsbGVzdCVkLCBtZWFuIGhlaWdodCAlZAoAKmZpcnN0X2NvbCA8PSAqbGFzdF9jb2wAUGVyZm9ybWluZyBhIGdsb2JhbCBjbG9zZSBvcGVyYXRpb24uLgoAb3V0bGluZSA9PSBudWxscHRyAENvbXBvbmVudCBoYXMgJWQgcGFydHMKAGJlc3RfZW5kID09IG51bGxwdHIAQWRkZWQ6AE5vdCBhIHJhZ2dlZCBsZWZ0CgBwYXJ0LT5tZWRpYW5fd2lkdGgoKSA+IDAAQXNzZXJ0IGZhaWxlZABQcm9kdWNpbmcAdG9zcF9yb3dfdXNlX2NlcnRfc3BhY2VzMQBSZXBjaCB3ZCBhdCBCT0woJWQsICVkKS4gcmVwIHNwYWNpbmcgJTUuMmY7ICBSZ2FwOiVkICAATk9OU1BBQ0Ugc3RhdHMKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9kaWN0L2RpY3QuaABTdHJlbmd0aCBvZiB0aGUgY2hhcmFjdGVyIG5ncmFtIG1vZGVsIHJlbGF0aXZlIHRvIHRoZSBjaGFyYWN0ZXIgY2xhc3NpZmllciAAUFRSQUlOX0RPQ19TSE9SVABVcGRhdGVkIHJhdGluZ3MgbWF0cml4IHdpdGggYSBuZXcgZW50cnk6AFNwbGl0IExlbmd0aAAlZAAJCQkJCQk8VGV4dExpbmUgSUQ9ImxpbmVfAHBhcl8ARVQKAGNoYXJzLTgucGEAYm94IG5vdCByZXR1cm5lZABlaXRoZXIgeCBvciB5IG11c3QgYmUgPj0gMABubyBvdXRwdXQgcmVxdWVzdGVkAGkgPT0gagB3YyBhbmQgaGMgbm90ID49IDIAZnBpeGEgbm90IG1hZGUAaW52YWxpZCB2dmFsAGhpc3RvZ3JhbSBub3QgbWFkZQBwaXhhcyBub3QgZGVmaW5lZABjb3VudGFycmF5IG5vdCBkZWZpbmVkAEluZm8gaW4gJXM6IG5vIGxpZ2h0IGNvbG9yIHBpeGVscyBmb3VuZAoAbWF4IDggZ3JheSBsZXZlbHMAY21hcCBub3QgZm91bmQAJnJ2YWwsICZndmFsLCAmYnZhbCBub3QgYWxsIGRlZmluZWQAJnZjaSBub3QgZGVmaW5lZABmcGl4czIgbm90IGRlZmluZWQAZ3Bsb3Qgbm90IG1hZGUAbmEgbm90IGRlZmluZWQAJnBpeHIsICZwaXhnLCAmcGl4YiBub3QgYWxsIGRlZmluZWQAdmFsIG91dCBvZiA0IGJwcCByYW5nZQBrZWwgbm90IHJldHVybmVkACZwaXh0IG5vdCBkZWZpbmVkACZwdmFsIG5vdCBkZWZpbmVkAHBpeHMgdW5kZWZpbmVkIG9yIG5vdCAxIGJwcAAqKiogb3AgPSAlczsgYm9yZGVyIGFkZGVkIGJ1dCBuZXQgcmVkdWN0aW9uIG5vdCAwCgAmdmFsIG5vdCBkZWZpbmVkAHN1YmZhY3RvciA8IDEAJmJpbnNpemUgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogbm8gaG9sZSBwaXhlbCBmb3VuZCEKAHBpeHMgbm90IGRlZmluZWQAbm8gY29sb3JtYXAgaW4gcGl4cwAmZGEgbm90IGRlZmluZWQAcGl4IG5vdCBkZWZpbmVkAGRhcyBhbmQgZGFkIG5vdCBib3RoIGRlZmluZWQAc3RyZWFtIG5vdCBvcGVuZWQAV2FybmluZyBpbiAlczogZmlsZSAlcyBmb3JtYXQgaXMgdW5rbm93bgoAJnBpeGQgbm90IGRlZmluZWQAcGl4cyBub3QgZGVmaW5lZABpbnZhbGlkIGNvbXBvbmVudAB0aWxlc2l6ZSBtdXN0IGJlID49IDIAJnZhbHVlIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGJveCBkb2Vzbid0IG92ZXJsYXAgcGl4CgBpbmRleCBub3QgdmFsaWQAbm90IGFsbCBwaXggd2l0aCBkID09IDEAcm93aHQgYXJyYXkgbm90IG1hZGUAcGl4ZCBub3QgbWFkZQBFcnJvciBpbiAlczogcGl4IHdpZHRoICVkICE9IHBpeGMgd2lkdGgKAGludmFsaWQgdHlwZQBJbmZvIGluICVzOiBjb252ZXJ0aW5nIDggYnBwIGNtYXAgd2l0aCBhbHBoYSA9PT4gUkdCQQoAcHRhIGlzIGVtcHR5AHB0YSBub3QgbWFkZQAmaW5kZXggbm90IGRlZmluZWQAcGFhIG5vdCBtYWRlAEVycm9yIGluICVzOiB1bmtub3duIGtleXR5cGUgJWQKAGNtYXBCdWYgYWxsb2MgZmFpbABmb3VuZCBubyBuZXh0IHRhZwBnaWY6IG5vIHBpeCByZXR1cm5lZAB5c3RhcnQgbm90IGRlZmluZWQAaW52YWxpZCBhZGRubGZsYWcAZGVwdGggbm90IDggYnBwAGludmFsaWQgYm91bmRjb25kAGludmFsaWQgY29weWZsYWcAc2VsX2xyYwAmc3VtIG5vdCBkZWZpbmVkAGludmFsaWQgaWQgc3RyaW5nAHNhMSBub3QgbWFkZQBuYSBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBwaXggbm90IHJlYWQgZm9yIHBhZ2UgJWQKAHN0YXJ0IG11c3QgYmUgPiAwAHN1YjEgbm90IGRlZmluZWQAezEgZXhjaCBzdWJ9IHNldHRyYW5zZmVyICAgICVpbnZlcnQgYmluYXJ5AHBpeCBub3QgZGVmaW5lZABJbnZhbGlkIHByb2dyZXNzaXZlIHBhcmFtZXRlcnMgU3M9JWQgU2U9JWQgQWg9JWQgQWw9JWQASW1hZ2UgaGVpZ2h0IGlzIHplcm8gaW4gSUhEUgBJbnZhbGlkIHBhbGV0dGUgY2h1bmsATm8gbWVtb3J5IGZvciBzUExUIHBhbGV0dGVzAEludmFsaWQgc1JHQiByZW5kZXJpbmcgaW50ZW50IHNwZWNpZmllZAAlZAAlczogQmFkIHZhbHVlICV1IGZvciAiJXMiIHRhZwBTdWJmaWxlVHlwZQBTYW1wbGVzUGVyUGl4ZWwgdGFnIGlzIG1pc3NpbmcsIGFzc3VtaW5nIGNvcnJlY3QgU2FtcGxlc1BlclBpeGVsIHZhbHVlIGlzIDMARmF4RGNzAFNvcnJ5LCBjYW4gbm90IGhhbmRsZSBpbWFnZQAgIEZheCBEQ1M6ICVzCgB0ZC0+dGRfcGhvdG9tZXRyaWMgPT0gUEhPVE9NRVRSSUNfTE9HTABzcC0+ZW5jX2hhc2h0YWIgIT0gTlVMTABTdWJzYW1wbGluZyB2YWx1ZXMgWyVkLCVkXSBhcmUgbm90IGFsbG93ZWQgaW4gVElGRgBzcCAhPSAwAHNwLT5kZWNvZGV0aWxlICE9IE5VTEwAICh1bml0ICV1ID0gMHgleCkAKGNjICYgNykgPT0gMABTZWVrIGVycm9yIGF0IHNjYW5saW5lICVsdQBpbmNvcnJlY3QgZGF0YSBjaGVjawAlZCAAVGhlcmUgd2VyZSAALQBpbiBmaWxlICVzLCBsaW5lICVkAFRSVUUASGFuZ3VsAEVuZCBvZiBQYXNzIDMALABjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpACBSZWplY3Rpbmc6IHN1cGVyc2NyaXB0IGlzIGl0YWxpYy4KAFVzaW5nIHBhcmFtcyBtb2RlbCBvZiB0aGUgcHJpbWFyeSBsYW5ndWFnZQoAAABEZXRlY3RlZCBtaXNzaW5nIGNob3AgKHRvbGVyYW5jZT0AL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgAUG9vcgBQVFJBSU5fTlVNX0JBRF9DQVNFACVzIDogAFJfWEhUX0ZJWFVQOiAlcwoAQm91bmRpbmcgYm94IGNvdWxkbid0IGJlIGFzY2VydGFpbmVkCgAlcwB8QnJva2VufDB8MQBSZXNldHRpbmcgYWRhcHRpdmUgY2xhc3NpZmllciAoTnVtQWRhcHRhdGlvbnNGYWlsZWQ9JWQpCgB0ZXNzX2JuX21hdGNoaW5nAGVzc2VudGlhbCAgICAgACU0ZAAKAExvYWQgZGF3ZyB3aXRoIG51bWJlciBwYXR0ZXJucy4AJXMgY2hlY2sgZnJhZ21lbnRzOiBjaG9pY2U9JXMgd29yZF9lbmRpbmc9JWQKAGZpeHB0Kz0oJWQgJWQgJWQgJWQgJXMpCgBQbGVhc2UgcHJvdmlkZSBhdCBsZWFzdCAlZCBjb25jcmV0ZSBjaGFyYWN0ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdHRlcm4KAGludF9tb2RlXwAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9uZXR3b3JraW8uaAAgVHJhbnNpdGlvbmVkIHRvIHN0YWdlIABMU1RNAEdlbmVyaWMgcmVzaGFwZSBub3QgeWV0IGltcGxlbWVudGVkISEKAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAJWQgAExpbmVzcGFjaW5nIG9mIHk9JWcgeCArICVnIGltcHJvdmVkIHRvICVnIHggKyAlZywgcm1zPSVnCgBCb3VuZGluZyBib3g9KCVkLCVkKS0+KCVkLCVkKQoAVm92ZXJsYXAgJWQgKCVkKQoARW5kIHBhcnRuZXI6AFBhcnRpdGlvbiBzZXQgb2YgJWQgcGFydHMsICVkIGdvb2QsIGNvdmVyYWdlPSVkKyVkICglZCwlZCktPiglZCwlZCkKAHdvcmRfcGl4AHRvcC0+c3RlcHMgIT0gbnVsbHB0cgBXaXRoIEltYWdlcwAhb3V0c2VnX2l0LmVtcHR5ICgpAFRlc3RpbmcgZm9yIG92ZXJsYXAgd2l0aDoATm90IGEgcmlnaHQgdGFiCgBJbml0aWFsIFRhYmxlIFBhcnRpdGlvbnMAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQBHYXJiYWdlIHJlc3VsdCBvZiBtZXJnZT8AdG9zcF9yZWNvdmVyeV9pc29sYXRlZF9yb3dfc3RhdHMAUmVwY2ggd2QgKCVkLCVkKSByZXAgZ2FwICU1LjJmOyAgTGdhcDolZCAoJWQgYmxhbmtzKTsAdGV4dG9yZF9ibG9ja3NhbGxfdGVzdGluZwBSb3cgYXQgJWcgaGFzIG1pbnNwYWNlPSVkKCVnKSwgbWF4X25vbj0lZCglZykKAGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAbGFuZ3VhZ2VfbW9kZWxfbmdyYW1fcmF0aW5nX2ZhY3RvcgBQVFJBSU5fRE9DX01FRABMTV9QUFRZUEVfQkxBTUVSAGNob3Bfc2FtZV9kaXN0YW5jZQBhcHBseWJveF9wYWdlAAkJCQkJCQk8U3RyaW5nIElEPSJzdHJpbmdfACBsYW5nPScAJVBERi0xLjUKJd6tvusKAGNoYXJzLTEwLnBhAGJveCBub3QgZm91bmQhACZjeCwgJmN5IG5vdCBib3RoIGRlZmluZWQAYm94YSBub3QgZGVmaW5lZABuY29ybmVycyBub3QgMiBvciA0AHBpeHMgbm90IDggb3IgMzIgYnBwAGZwaXhhIHB0cnMgbm90IG1hZGUAJnl2YWwsICZ1dmFsLCAmdnZhbCBub3QgYWxsIGRlZmluZWQAcGl4cyBpcyBjb2xvcm1hcHBlZABubyBib3hhIGluIGJhYQBuYXNpIG5vdCBtYWRlAEluZm8gaW4gJXM6IGZyYWN0aW9uIG9mIGxpZ2h0IGNvbG9yIHBpeGVscyA9ICU1LjNmCgBtYXggMTkyIGdyYXkgbGV2ZWxzAEluZm8gaW4gJXM6IG5vdGhpbmcgdG8gZG8KAGluZGV4IG91dCBvZiBib3VuZHMAJnZhbCBub3QgZGVmaW5lZABmcGl4czEgPT0gZnBpeHMyACVzLmNtZABpbnZhbGlkIHBsb3Rsb2MAcGl4cyBub3QgMzIgYnBwAHZhbCBvdXQgb2YgMiBicHAgcmFuZ2UAc3RyZWFtIG5vdCBkZWZpbmVkAHNlbCBvZiBzaXplIDAAcGl4MSwgcGl4MiBub3QgYm90aCBkZWZpbmVkAHNlbGEgbm90IGRlZmluZWQAKioqIG9wOiAlczsgdyA9ICVkLCBoID0gJWQ7IG11c3QgYm90aCBiZSBvZGQKAGluZGV4IG5vdCB2YWxpZABuYSBub3QgbWFkZQBhbGwgdmFsdWVzIDwgMABwaXhzIGVtcHR5AG8xLjIgKyBjOS45ICsgbzMuNQBkZXB0aCBub3QgaW4gezIsNCw4fQBzZXF1ZW5jZSBub3QgZGVmaW5lZAAmdHlwZSBub3QgZGVmaW5lZABmaWxlbmFtZSBub3QgZGVmaW5lZAAmY29tbWVudCBub3QgZGVmaW5lZABFcnJvciBpbiAlczogZmlsZSAlcyBpcyB1bnN1cHBvcnRlZCBmb3JtYXQgJWQKACZwaXhkID09ICZwaXhzAHBpeGIgbm90IGRlZmluZWQAdmFsIG5vdCBpbiBbMCAuLi4gMjU1XQBkaXN0YmxlbmQgbXVzdCBiZSA+PSAwAHBpeHMgbm90IDggb3IgMzIgYnBwLCBvciBjbWFwcGVkAHBpeGQgbm90IG1hZGUARXJyb3IgaW4gJXM6IG5vIHBpeCBhdCBwaXhhWyVkXQoAaW52YWxpZCBzb3J0IHR5cGUAaW52YWxpZCBtYXh3aWR0aABwaXhzIG5vdCAzMiBicHAARXJyb3IgaW4gJXM6IHBpeCBoZWlnaHQgJWQgIT0gcGl4YyBoZWlnaHQKAHBpeHMgbm90IGNtYXBwZWQgb3IgcmdiAEVycm9yIGluICVzOiBzcHAgPT0gMSwgY21hcCwgdHJhbnMgYXJyYXksIGludmFsaWQgZGVwdGg6ICVkCgBuYXggbm90IG1hZGUAcHRhMSBub3QgZGVmaW5lZABkYWhhc2ggbm90IGRlZmluZWQAcGFhIG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiByb290IGFuZCBjaGlsZCBvZiByb290IGhhdmUgbm8gdW5jbGUKAHBpeCBub3QgbWFkZQBXSURUSABqcDI6IG5vIHBpeCByZXR1cm5lZAB5ZW5kIG5vdCBkZWZpbmVkAABwaXggbm90IGRlZmluZWQAIXBpeHMgb3IgcGl4cyBub3QgOCBicHAAaW52YWxpZCBpbmRleABzZWxfY29tYl8lZGgAbmEgbm90IG1hZGUAaW52YWxpZCB3aWR0aABzYTMgbm90IG1hZGUAbm8gd29yZHMgaW4gdGV4dHN0cgBwaXhhIG5vdCBkZWZpbmVkACZpc19wcmltZSBub3QgZGVmaW5lZABzdWIyIG5vdCBkZWZpbmVkAC9icGwgJWQgc3RyaW5nIGRlZiAgICAgICAgICUlYnBsIGFzIGEgc3RyaW5nAGZuYW1lIG5vdCBkZWZpbmVkAEludmFsaWQgcHJvZ3Jlc3NpdmUgcGFyYW1ldGVycyBhdCBzY2FuIHNjcmlwdCBlbnRyeSAlZABJbnZhbGlkIGltYWdlIGhlaWdodCBpbiBJSERSAFRydW5jYXRpbmcgaW5jb3JyZWN0IHRSTlMgY2h1bmsgbGVuZ3RoAE91dCBvZiBtZW1vcnkgd2hpbGUgcHJvY2Vzc2luZyBzUExUIGNodW5rAFVua25vd24gY29tcHJlc3Npb24gdHlwZSBpbiBpQ0NQIGNodW5rACVzIGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgbm90IGNvbmZpZ3VyZWQAJXM6IEludmFsaWQgSW5rTmFtZXMgdmFsdWU7IGV4cGVjdGluZyAlZCBuYW1lcywgZm91bmQgJWQAT2xkU3ViZmlsZVR5cGUAU2FtcGxlc1BlclBpeGVsIHRhZyBpcyBtaXNzaW5nLCBhc3N1bWluZyBjb3JyZWN0IFNhbXBsZXNQZXJQaXhlbCB2YWx1ZSBpcyAxAHNwICE9IDAATm8gImdldCIgcm91dGluZSBzZXR1cABzcC0+Y2luZm8uY29tbS5pc19kZWNvbXByZXNzb3IATm8gc3VwcG9ydCBmb3IgY29udmVydGluZyB1c2VyIGRhdGEgZm9ybWF0IHRvIExvZ0wAbmJpdHMgPD0gQklUU19NQVgAQ29ycnVwdCBKUEVHIGRhdGEAcm93c2l6ZSA+IDAAICBQb3NpdGlvbjogJWcsICVnCgAlbHU6IFJvdyBvdXQgb2YgcmFuZ2UsIG1heCAlbHUAV3JpdGUgZXJyb3IgYXQgc2NhbmxpbmUgJWx1AGluY29ycmVjdCBsZW5ndGggY2hlY2sACgAgY29tcGF0aWJsZSBiaWdyYW1zLgB+AC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY21haW4vZXF1YXRpb25kZXRlY3QuY3BwAEZBTFNFAExhdGluAEVuZCBvZiBQYXNzIDQAaW5kZXggPCBsZW4AL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgAIFJlamVjdGluZzogcHVuY3R1YXRpb24gcHJlc2VudC4KAEFzc2VydCBmYWlsZWQAdGVzc2VkaXRfY2hhcl9ibGFja2xpc3QAKSBhdCBCb3VuZGluZyBCb3g9ACBXb3JkIENob2ljZQBQVFJBSU5fWEhFSUdIVF9DT05TSVNURU5DWQAlcwBSX0JBRF9RVUFMSVRZOiAlcwoAQm91bmRpbmcgYm94PSglZCwlZCktPiglZCwlZCkKAEFzc2VydCBmYWlsZWQATlVMTABTd2l0Y2ggdG8gYmFja3VwIGFkYXB0aXZlIGNsYXNzaWZpZXIgKE51bUFkYXB0YXRpb25zRmFpbGVkPSVkKQoAQmFzZWxpbmUgTm9ybWFsaXplZCBNYXRjaGluZwAlMTAuNmYgJTEwLjZmCgBjbGFzc2lmeV9jcF9lbmRfcGFkX21lZGl1bQBOT19FREdFCgBsb2FkX2JpZ3JhbV9kYXdnAHByZXZfZnJhZ21lbnQgJXMKAHJlcGxhY2UgYW1iaWd1aXR5IHdpdGggJXMgOiAASW52YWxpZCB1c2VyIHBhdHRlcm4gJXMKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL25ldHdvcmtpby5oAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAIGZhaWxlZCB0byB3cml0ZSBiZXN0IG1vZGVsOgBTdW1tTFNUTQBJbnZhbGlkIG5vbmxpbmVhcml0eSBvbiBDLXNwZWMhOiAlcwoAQXNzZXJ0IGZhaWxlZAAlZCAlZD0lcyByPSVnLCBjPSVnLCBzPSVkLCBlPSVkLCBwZXJtPSVkCgB0ZXh0b3JkX3Rlc3RyZWdpb25fYm90dG9tAEZpdHRpbmcgaW5pdGlhbCBiYXNlbGluZXMuLi4KAHRleHRvcmRfdGFiZmluZF9maW5kX3RhYmxlcwBFeGNlc3NpdmUgYm94IG92ZXJsYXAKAFNldCBjYXB0aW9uIHR5cGUgZm9yIHBhcnRpdGlvbjoAQXNzZXJ0IGZhaWxlZABDQyBkcm9wcGVkIGZyb20gc3BsaXR0aW5nOiAlZCwlZCAoJWQsICVkKQoAZWRnZXNfY2hpbGRyZW5fY291bnRfbGltaXQAdG9wLT5zdGVwcyA9PSBudWxscHRyAGRlYnVnAHRleHRvcmRfc2hvd19maW5hbF9ibG9icwB0ZXh0b3JkX29sZGJsX21lcmdlX3BhcnRzAEltcG9zc2libGUgc3FzdW09JWcsIG1lYW49JWcsIHRvdGFsPSVkCgBGaW5hbCBib3ggb3ZlcmxhcHMgbmVhcmVzdAoATWF5YmUgYSByaWdodCB0YWIKAEZpbHRlcmVkIFRhYmxlIFBhcnRpdGlvbnMAJXMgJXMgKCVkLCVkKS0+KCVkLCVkKSB3PSVkIHM9JWQsIHNvcnQga2V5PSVkLCBib3hlcz0lZCwgcGFydG5lcnM9JWQKAFVzZSByb3cgYWxvbmUgd2hlbiBpbmFkZXF1YXRlIGNlcnQgc3BhY2VzAHRleHRvcmRfc2hvd19yb3dfY3V0cwAgUmdhcDolZCAoJWQgYmxhbmtzKQoARHVtcCBzdGF0cyB3aGVuIG1vYW5pbmcAY2x1c3Rlcl9jb3VudD0lZDoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgARmFjdG9yIHRvIGJyaW5nIGxvZy1wcm9icyBpbnRvIHRoZSBzYW1lIHJhbmdlIGFzIHJhdGluZ3Mgd2hlbiBtdWx0aXBsaWVkIGJ5IG91dGxpbmUgbGVuZ3RoIABQVFJBSU5fRE9DX0xPTkcATE1fUFBUWVBFX0FNQklHUwBTYW1lIGRpc3RhbmNlAFdyaXRlIG9mIFRSIGZpbGUgZmFpbGVkOiAlcwoAIENPTlRFTlQ9IgAKICAgICA8c3BhbiBjbGFzcz0nADEgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAyIDAgUgo+PgplbmRvYmoKAGNoYXJzLTEyLnBhACZmdWxsIG5vdCBkZWZpbmVkACZ4MSwgJnkxLCAmeDIsICZ5MiBub3QgYWxsIGRlZmluZWQAbm8gdmFsaWQgYm94ZXMAcHRhIG5vdCBtYWRlAEVycm9yIGluICVzOiBwaXhjIG5vdCBtYWRlCgBmcGl4YSBub3QgZGVmaW5lZABwaXhzIHVuZGVmaW5lZCBvciBub3QgcmdiAG5hIG5vdCBkZWZpbmVkAG5vIHBpeCBpbiBwaXhhcwBwaXhkIG5vdCA4IGJwcAAmbmNvbG9ycyBub3QgZGVmaW5lZABvdXRwdXQgZGVwdGggbm90IDQgb3IgOCBicHAAdGFiIG5vdCBtYWRlACZ2YWwzMiBub3QgZGVmaW5lZABkYXRhcyBub3QgZGVmaW5lZABmcGl4czIgPT0gZnBpeGQAJXMucG5nAGludmFsaWQgb3JpZW50AG5vdCBhbGwgcGl4bSogbWFkZQBsb3dlciA8IDAgb3IgbG93ZXIgPiB1cHBlciEAICBLZXJuZWwgVmVyc2lvbiAlZAoAcGl4ZCBub3QgbWFkZQBwaXgxIGFuZCBwaXgyIG5vdCAxIGJwcABubyBzZWxzIGluIHNlbGEAKioqIG9wID0gJXM7IGFyZyAlYyBtdXN0IGJlICd3JyBvciAnYicKACZpdmFsIG5vdCBkZWZpbmVkAG5hZCBhbmQgbm90IGluLXBsYWNlAG51bWJlcnMgdG9vIGxhcmdlAHB0YWxvYyBub3QgbWFkZQBjNTAuNTAAcGl4bSBub3QgMSBicHAAd2IAdHlwZSBzZWxlY3Rpb24gZmFpbHVyZQBzdHJlYW0gbm90IG9wZW5lZABwaXggbm90IGRlZmluZWQAcGl4dCBub3QgbWFkZQBwaXggbm90IGRlZmluZWQAcGl4cyBpcyAxIGJwcABib3ggbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogbm8gZmcgaW4gbWFzawoAbm8gcmVzdWx0cyByZXF1ZXN0ZWQAJnBpeGQxIGFuZCAmcGl4ZDIgbm90IGJvdGggZGVmaW5lZABwaXggbm90IGZvdW5kIQBpbnZhbGlkIHNvcnQgb3JkZXIAV2FybmluZyBpbiAlczogaW52YWxpZCBzY2FsZWZhY3Rvcjsgc2V0dGluZyB0byAxLjAKAGRlc3QgZGVwdGggbm90IDgsIDE2LCAzMiBicHAAV2FybmluZyBpbiAlczogcGl4IGRlcHRoICVkICE9IHBpeGMgZGVwdGggMTYKAHJlZnZhbCBub3QgaW4gWzEgLi4uIDI1NV0AZmlsZW5hbWUgbm90IGRlZmluZWQAbmF5IG5vdCBtYWRlAHB0YTIgbm90IGRlZmluZWQAJnNpemUgbm90IGRlZmluZWQAdW5jbGUAc3RyZWFtIG5vdCBkZWZpbmVkAGZhaWxlZCByZWFkaW5nIHdpZHRoAHdlYnA6IG5vIHBpeCByZXR1cm5lZABkaXJlY3Rpb24gaW52YWxpZAAKAFdhcm5pbmcgaW4gJXM6IHNjYWxpbmcgZmFjdG9yIG5vdCA8IDAuNzsgZG8gcmVndWxhciBzY2FsaW5nCgBuZWl0aGVyICZwaXhtaW4sICZwaXhtYXggYXJlIGRlZmluZWQAV2FybmluZyBpbiAlczogbWlzc2luZyBzZWwKAHNlbF9jb21iXyVkdgBub3RoaW5nIHRvIGRvAGludmFsaWQgaGVpZ2h0AC0tAHNhIG5vdCBkZWZpbmVkAGRpcmluIG5vdCBkZWZpbmVkAG4gbXVzdCBiZSA+IDAAZGF0YSAmIHNlcXVlbmNlIG5vdCBib3RoIGRlZmluZWQAJTcuMmYgJTcuMmYgdHJhbnNsYXRlICAgICAgICAgJSVzZXQgaW1hZ2Ugb3JpZ2luIGluIHB0cwB3YisAQm9ndXMgc2FtcGxpbmcgZmFjdG9ycwBJbWFnZSBoZWlnaHQgZXhjZWVkcyB1c2VyIGxpbWl0IGluIElIRFIAVHJ1bmNhdGluZyBpbmNvcnJlY3QgaW5mbyB0Uk5TIGNodW5rIGxlbmd0aABPdXQgb2YgbWVtb3J5IHdoaWxlIHByb2Nlc3NpbmcgdW5rbm93biBjaHVuawBFbWJlZGRlZCBwcm9maWxlIGxlbmd0aCBpbiBpQ0NQIGNodW5rIGlzIG5lZ2F0aXZlAF9USUZGVkdldEZpZWxkAEltYWdlV2lkdGgAQ29sb3JtYXAAc3AtPnZzZXRwYXJlbnQgIT0gMABObyAicHV0IiByb3V0aW5lIHNldHVwbDsgcHJvYmFibHkgY2FuIG5vdCBoYW5kbGUgaW1hZ2UgZm9ybWF0AEJvZ3VzIEpQRUdUYWJsZXMgZmllbGQATG9nTDE2RGVjb2RlOiBOb3QgZW5vdWdoIGRhdGEgYXQgcm93ICVkIChzaG9ydCAlZCBwaXhlbHMpAHRpZi0+dGlmX2RhdGEgIT0gMABzcC0+cGxhbmVfc2FtcGxlX29mZnNldD09MABzcC0+ZW5jb2RlcGZ1bmMgIT0gTlVMTAAgIEJpdHMvU2FtcGxlOiAldQoAJWx1OiBTYW1wbGUgb3V0IG9mIHJhbmdlLCBtYXggJWx1AENvcnJlY3QgdGV4dCA9IFtbIABSZXBsYWNlZCAiJXMgJXMiIHdpdGggIiVzICVzIiB3aXRoIGJpZ3JhbSBtb2RlbC4gJXMKAF4ARG9uZSBmbGFnOiAlcwoKAEZpbmFsIFBhcmFncmFwaCBTZWdtZW50YXRpb24AL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L3JlamN0bWFwLmgAQXNzZXJ0IGZhaWxlZAAgUmVqZWN0aW5nOiBkb24ndCBiZWxpZXZlIGNoYXJhY3RlciAlcyB3aXRoIGNlcnRhaW50eSAlLjJmIHdoaWNoIGlzIGxlc3MgdGhhbiB0aHJlc2hvbGQgJS4yZgoAQmxhY2tsaXN0IG9mIGNoYXJzIG5vdCB0byByZWNvZ25pemUACk5vIGNob3AgZm9yIHRydXRoIGF0IHg9ACIsICIAUFRSQUlOX05VTV9CQURfQ0hBUl9UWVBFACA6IFI9JWcsIEM9JWcsIEY9JWcsIFBlcm09JWQsIHhodD1bJWcsJWddLCBhbWJpZz0lZAoAUl9ET0NfUkVKOiAlcwoAW0VtcHR5XQBpZCA8IHRoaXMtPnNpemUoKQBBZGRlZCBuZXcgY2xhc3MgJyVzJyB3aXRoIGNsYXNzIGlkICVkIGFuZCAlZCBwcm90b3MuCgBjbGFzc2lmeV9lbmFibGVfYWRhcHRpdmVfbWF0Y2hlcgBzaWduaWZpY2FudCAgIABDbGFzcyBQcnVuZXIgRW5kIFBhZCBNZWRpdW0AJWxsZCA6IG5leHQgPSAlbGxkLCB1bmljaGFyX2lkID0gJyVkJywgJXMgJXMgJXMKAExvYWQgZGF3ZyB3aXRoIHNwZWNpYWwgd29yZCBiaWdyYW1zLgB0aGlzX2ZyYWdtZW50ICVzCgBmb3VuZCBhbWJpZ3VpdHk6IABJbnNlcnRpbmcgZXhwYW5kZWQgdXNlciBwYXR0ZXJuICVzCgBuZXR3b3JrX2lvXyA9PSBudWxscHRyACB3cm90ZSBiZXN0IG1vZGVsOgBMb2dpc3RpYwBJbnZhbGlkIEMgc3BlYyE6JXMKAFBhdGggdG90YWwgcmF0aW5nID0gJWcKAEJvdHRvbSBlZGdlIG9mIGRlYnVnIHJlY3RhbmdsZQBQYWdlIHNrZXcgYW5nbGUgPSAlZwoAcnVuIHRhYmxlIGRldGVjdGlvbgAhb3duc19ibG9icygpIHx8IHByZXZfb3duZXIgPT0gdGhpcyB8fCBwcmV2X293bmVyID09IG51bGxwdHIAQ29tYmluZWQgYm94IG92ZXJsYXBzIGFub3RoZXIgdGhhdCBpcyBub3QgT0sgZGVzcGl0ZSBhbGxvd2FuY2Ugb2YgJWQ6AHBhZ2VzZWdfc3BsaXQATWF4IGhvbGVzIGFsbG93ZWQgaW4gYmxvYgBib3R0b20tPmVuZC54ICgpID09IHRvcC0+c3RhcnQueCAoKQBkaXNwbGF5AERpc3BsYXkgYmxvYiBib3VuZHMgYWZ0ZXIgcHJlLWFzcwBNZXJnZSBzdXNwZWN0IHBhcnRpdGlvbnMAb2Zmc2V0ID49IDAATWF5YmUgTm90IGEgcmlnaHQgdGFiCgBTbW9vdGhlZCBUYWJsZSBQYXJ0aXRpb25zAEJveCBhdCAoJWQsJWQpLT4oJWQsJWQpCgB0b3NwX29ubHlfc21hbGxfZ2Fwc19mb3Jfa2VybgBEcmF3IHJvdy1sZXZlbCBjdXRzAFJlcGNoIHdkIGF0IEVPTCAoJWQsJWQpLiByZXAgc3BhY2luZyAlNS4yZjsgTGdhcDolZCAoJWQgYmxhbmtzKQoAICVnKCVkKQBsYW5ndWFnZV9tb2RlbF9uZ3JhbV9zcGFjZV9kZWxpbWl0ZWRfbGFuZ3VhZ2UAUFRSQUlOX0RJQ1RfU0hPUlQATE1fUFBUWVBFX1BBVEgAY2hvcF9taW5fb3V0bGluZV9wb2ludHMAc3RkaW4AIi8+AG9jcl9oZWFkZXIAAGNoYXJzLTE0LnBhAGluZGV4IG5vdCBpbiB7MC4uLm59ACZuIG5vdCBkZWZpbmVkAGZyYWN0IG5vdCBpbiBbMC4wIC4uLiAxLjBdAHB0YSBub3QgZGVmaW5lZABFcnJvciBpbiAlczogdyBvciBoIGlzIHRvbyBzbWFsbCBmb3IgdGhlIGtlcm5lbAoAaW52YWxpZCBjb3B5ZmxhZwBmcGl4YSB1bmRlZmluZWQgb3IgaW52YWxpZABuYSBub3Qgb2Ygc2l6ZSAyNTYAbnVtIHBpeCAhPSBudW0gYm94YQBJbmZvIGluICVzOiBtYXhjb2xvcnMgZXhjZWVkZWQgZm9yIG1heGRpc3QgPSAlZAoAcGl4cyBub3QgZGVmaW5lZCBvciBub3QgOCBicHAARXJyb3IgaW4gJXM6IGNhbGxvYyBmYWlsIGZvciBhbiBhcnJheQoAcGl4cyBpcyBub3QgMzIgYnBwAHJnYiB2YWx1ZXMgbm90IGZvdW5kAGEgbm90IGRlZmluZWQAZHBpeHMxIG5vdCBkZWZpbmVkACVzLnBzAFdhcm5pbmcgaW4gJXM6IGxpbmV3aWR0aCA8IDE7IHNldHRpbmcgdG8gMQoAcGl4cyBub3QgOCBicHAAZCA9PSA4IGFuZCB1cHBlciA+IDI1NQBub3QgYSBrZXJuZWwgZmlsZQAmcGZyYWN0IG5vdCBkZWZpbmVkAGludmFsaWQgdHlwZQBzZXF1ZW5jZSBpbnZhbGlkAGFycmF5IG5vdCBtYWRlAGludmFsaWQgdHlwZQBuYWkgbm90IG1hZGUAcGl4cyBub3QgbWFkZQBJbmZvIGluICVzOiBmb3VuZCBvbmx5IG5vaXNlIG9uIHBhZ2UgJWQKAG5vIHJvb20gaW4gY21hcABzdHJlYW0gbm90IG9wZW5lZABmbmFtZSBub3QgZGVmaW5lZABkYSBub3QgcmVhZAB3YisARXJyb3IgaW4gJXM6IHRvdGFsbHkga2VyZmx1bW1veGVkCgB3aWR0aCBtdXN0IGJlID49IDAAcGl4YiBub3QgOCBicHAAbm8gb3ZlcmxhcCBvZiBib3ggd2l0aCBpbWFnZQBXYXJuaW5nIGluICVzOiAlZCBjb21wb25lbnRzOyBjYW4gbm90IGJsZW5kIGF0IGVkZ2VzCgByYW5rIG5vdCBpbiBbMC4wIC4uLiAxLjBdAHBpeHMxIGFuZCBwaXhzMiBub3QgZGVmaW5lZABpbnZhbGlkIGFjY2Vzc3R5cGUAaW52YWxpZCBjb3B5IGZsYWcAV2FybmluZyBpbiAlczogY2hhbmdlZCBmb250c2l6ZSBmcm9tICVkIHRvICVkCgBwaXhkIG5vdCBkZWZpbmVkIG9yIG5vdCAzMiBicHAARXJyb3IgaW4gJXM6IHBpeCBkZXB0aCAlZCAhPSBwaXhjIGRlcHRoCgBhbGwgY29lZmZpY2llbnRzIDw9IDAAaW1hZ2UgZmlsZSBub3QgZm91bmQAZmlsZW5hbWUgbm90IGRlZmluZWQAJmluc2lkZSBub3QgZGVmaW5lZABpbnZhbGlkIGluZGV4AEVycm9yIGluICVzOiByb290IGhhcyBubyBzaWJsaW5nCgBwaXggbm90IGRlZmluZWQASEVJR0hUAEVycm9yIGluICVzOiBQb3N0U2NyaXB0IHJlYWRpbmcgaXMgbm90IHN1cHBvcnRlZAoAcGl4IHVuZGVmaW5lZCBvciBub3QgMSBicHAAIABXYXJuaW5nIGluICVzOiBwaXggaGFzIGNvbG9ybWFwOyByZW1vdmluZwoAJnBpeG1pbiBhbmQgJnBpeG1heCBub3QgYm90aCBkZWZpbmVkACZ0eXBlIG5vdCBkZWZpbmVkAGhsc2l6ZSBub3QgPiAwAGFyZWEgdG9vIGxhcmdlACAqICAgYXV0b2dlbi4lZC5jACZ3IG5vdCBkZWZpbmVkAGZpbGVvdXQgbm90IGRlZmluZWQAbGVwdG9uaWNhLSVkLiVkLiVkACZvZmZzZXQgYW5kICZmb3VuZCBub3QgZGVmaW5lZAAlNy4yZiAlNy4yZiBzY2FsZSAgICAgICAgICAgICAlJXNldCBpbWFnZSBzaXplIGluIHB0cwBzdHJlYW0gbm90IG9wZW5lZABJbnZhbGlkIHNjYW4gc2NyaXB0IGF0IGVudHJ5ICVkAEludmFsaWQgYml0IGRlcHRoIGluIElIRFIATm8gaW1hZ2UgaW4gZmlsZQB6ZXJvIGxlbmd0aCBrZXl3b3JkAEVtYmVkZGVkIHByb2ZpbGUgbGVuZ3RoIHRvbyBsYXJnZSBpbiBpQ0NQIGNodW5rACVzOiBFcnJvciBmZXRjaGluZyBkaXJlY3RvcnkgY291bnQASW1hZ2VMZW5ndGgAU3RyaXBCeXRlQ291bnRzACAAJXMASW1wcm9wZXIgSlBFRyBzdHJpcC90aWxlIHNpemUsIGV4cGVjdGVkICVkeCVkLCBnb3QgJWR4JWQAY2Mlcm93bGVuID09IDAAVW5rbm93biBtYXJrZXIgdHlwZSAlZCBpbiBKUEVHIGRhdGEAc3AtPmVuY29kZXJvdyAhPSBOVUxMACAgU2FtcGxlIEZvcm1hdDogACVzOiBTZWVrIGVycm9yIGF0IHNjYW5saW5lICVsdSwgc3RyaXAgJWx1ACVzIABRVUFMSVRZOiBudW1fY2hzPSAlZCAgbnVtX3JlanM9ICVkICU1LjNmIGJsb2JfcXVhbD0gJWQgJTUuM2Ygb3V0bGluZV9lcnJzPSAlZCAlNS4zZiBjaGFyX3F1YWw9ICVkICU1LjNmIGdvb2RfY2hfcXVhbD0gJWQgJTUuM2YKAGdhcmJhZ2Vfd29yZDogIiVzIgoAJwAgADBPbyouLCsuAEFzc2VydCBmYWlsZWQATiAAIFJlamVjdGluZzogY2hhcmFjdGVyICVzIHNlZW1zIHRvbyBzbWFsbCBAICUuMmYgdmVyc3VzIGV4cGVjdGVkICUuMmYKAHRlc3NlZGl0X2NoYXJfd2hpdGVsaXN0AE1pc3NpbmcgY2hvcHMgZm9yIGxhc3QgAEFsdGVybmF0ZXMgZm9yICIlcyI6IHsiJXMifQoAUFRSQUlOX05VTV9CQURfU1BBQ0lORwBwb3MAUl9CTE9DS19SRUo6ICVzCgAoIABpbiBmaWxlICVzLCBsaW5lICVkAEZvdW5kIGdvb2QgbWF0Y2ggdG8gcGVybSBjb25maWcgJWQgPSAlNC4xZiUlLgoAY2xhc3NpZnlfdXNlX3ByZV9hZGFwdGVkX3RlbXBsYXRlcwBpbnNpZ25pZmljYW50IAAAeGhlaWdodF9wZW5hbHR5X3N1YnNjcmlwdHMAU2tpcCBjaG9pY2Ugd2l0aCBpbmNvbXBsZXRlIGZyYWdtZW50CgAKUmVzdWx0aW5nIGFtYmlnX2Jsb2JfY2hvaWNlczoKAEVycm9yOiBmYWlsZWQgdG8gaW5zZXJ0IHBhdHRlcm4gJyVzJwoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2xzdG0vbmV0d29ya3NjcmF0Y2guaAAgTmV3IHdvcnN0IGNoYXIgZXJyb3IgPSAATGluTG9naXN0aWMAQ29udjF4MQAhaW50X21vZGVfAEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgAhaXQuZW1wdHkoKQBSZWFzb246AG9jcl9zcGxpdABzdGFydC54ICgpID09IGVuZC54ICgpAEFzc2VydCBmYWlsZWQAbWFkZSBmYWtlIGF0ICVkCgBOb3QgYSByYWdnZWQgcmlnaHQKAEZpbmFsIFRhYmxlIFBhcnRpdGlvbnMAWmVybyBsZW5ndGggaW4gZXZhbHVhdGUAQmV0dGVyIGd1ZXNzAFJvdzogTWFkZSAlZCB3b3JkcyBpbiByb3cgKCglZCwlZCkoJWQsJWQpKQoACgBXb3JkcyBhcmUgZGVsaW1pdGVkIGJ5IHNwYWNlAFBUUkFJTl9ESUNUX01FRABMTV9QUFRZUEVfU0hBUEUATWluIE51bWJlciBvZiBQb2ludHMgb24gT3V0bGluZQAtAAoJCQkJCQk8L1RleHRMaW5lPgoAb2NyX3RleHRmbG9hdAAzIDAgb2JqCjw8CiAgL0Jhc2VGb250IC9HbHlwaExlc3NGb250CiAgL0Rlc2NlbmRhbnRGb250cyBbIDQgMCBSIF0KICAvRW5jb2RpbmcgL0lkZW50aXR5LUgKICAvU3VidHlwZSAvVHlwZTAKICAvVG9Vbmljb2RlIDYgMCBSCiAgL1R5cGUgL0ZvbnQKPj4KZW5kb2JqCgBjaGFycy0xNi5wYQBpbmRleCBub3QgaW4gezAuLi5uIC0gMX0AYm94IG91dHNpZGUgcmVjdGFuZ2xlAG5vIHZhbGlkIGJveGVzIGluIGJveGEAc2l6ZSAlIG5jb3JuZXJzICE9IDAARXJyb3IgaW4gJXM6IHBpeGQgbm90IG1hZGUKAGZwaXhhYyBub3QgbWFkZQBmcGl4YSBkaW1lbnNpb25zIG5vdCBmb3VuZABwaXhzIG5vdCA4IG9yIDMyIGJwcABpbnZhbGlkIGNvbG9yZmxhZwBtaW5mcmFjdCA+IDEuMABFcnJvciBpbiAlczogcGl4ZCBub3QgbWFkZQoAJmRjb2xvciBub3QgZGVmaW5lZAAmcnZhbCwgJmd2YWwsICZidmFsLCAmYXZhbCBub3QgYWxsIGRlZmluZWQAYiBub3QgZGVmaW5lZABkcGl4czIgbm90IGRlZmluZWQAJXMuZXBzAFdhcm5pbmcgaW4gJXM6IGxpbmV3aWR0aCA+IDc7IHNldHRpbmcgdG8gNwoAcGl4aW0gYWxsIGZnOyBubyBiYWNrZ3JvdW5kAGQgPT0gNCBhbmQgdXBwZXIgPiAxNQBpbnZhbGlkIGtlcm5lbCB2ZXJzaW9uAHBpeDEgbm90IGRlZmluZWQgb3Igbm90IDEgYnBwAEVycm9yIGluICVzOiBwaXgyIG5vdCBtYWRlIGluIGl0ZXIgJWQKAG5vIHJldHVybiB2YWwgcmVxdWVzdGVkAGJvcmRlciB0b28gbGFyZ2UAbmFoaXN0IG5vdCBtYWRlAG5vIHN0YXJ0IHBpeGVsIGZvdW5kAEluZm8gaW4gJXM6IG5vIGZnIHJlZ2lvbiBmb3VuZCBmb3IgcGFnZSAlZAoAaW52YWxpZCBzdGFydGxvYwBXYXJuaW5nIGluICVzOiBmaWxlICVzIGZvcm1hdCBpcyB1bmtub3duOyBza2lwCgBzdHJlYW0gbm90IGRlZmluZWQAcGl4IG5vdCB3cml0dGVuIHRvIHN0cmVhbQBmbmFtZSBub3QgZGVmaW5lZABoIG11c3QgYmUgPj0gMABmYWN0b3Igbm90IGluIFswLjAuLi4yNTUuMF0AZGVwdGggbm90IDJ8NHw4fDE2fDMyIGJwcABXYXJuaW5nIGluICVzOiB0aWxlIHJlZ2lvbiBub3Qgc2VsZWN0ZWQ7IHBhaW50IGNvbG9yIG5lYXIgYm91bmRhcnkKACZ2YWwgbm90IGRlZmluZWQAY3JvcHBlZCBpbWFnZSBmYWlsdXJlAGJveCBub3QgZm91bmQhAEluZm8gaW4gJXM6IG5vIHBpeCBpbiBwaXhhCgAlcwBwaXhzIG5vdCAxLCA4LCAxNiBvciAzMiBicHAARXJyb3IgaW4gJXM6IHBpeCBjbWFwIGZsYWcgaW5jb25zaXN0ZW50CgBwaXhzIHVuZGVmaW5lZCBvciBub3QgMzIgYnBwAHN0cmVhbSBub3QgZGVmaW5lZABzdHJlYW0gbm90IG9wZW5lZABXYXJuaW5nIGluICVzOiBwdGEgaXMgZW1wdHkKAHB0cmEgYWxyZWFkIHN0b3JlZCBhdCBpbmRleABzaWJsaW5nAFdyaXRlIGVycm9yAGZhaWxlZCByZWFkaW5nIGhlaWdodABFcnJvciBpbiAlczogUGRmIHJlYWRpbmcgaXMgbm90IHN1cHBvcnRlZAoAJnNpemUgbm90IGRlZmluZWQAZmlyc3Qgbm90IHZhbGlkAFdhcm5pbmcgaW4gJXM6IGRlcHRoIG5vdCA4IG9yIDMyIGJwcDsgZG8gcmVndWxhciBzY2FsaW5nCgBwaXhzMSB1bmRlZmluZWQgb3Igbm90IDggYnBwAHNlbCByb3cgb3V0IG9mIGJvdW5kcwBub3JpZW50IG5vdCBpbiBbMSwgLi4uIDhdAGludmFsaWQgbmNvbG9ycwAjaW5jbHVkZSAiYXV0b2dlbi4lZC5oIgBzYWxpbmVzIG5vdCBtYWRlAHNhIG5vdCBkZWZpbmVkACZ0aW1lciBub3QgZGVmaW5lZABpbnB1dCBkYXRhIG5vdCBkZWZpbmVkACVkICVkICVkICAgICAgICAgICAgICAgICAlJWltYWdlIGRpbWVuc2lvbnMgaW4gcGl4ZWxzAHBpeCBub3Qgd3JpdHRlbiB0byBzdHJlYW0ASW1wcm9wZXIgY2FsbCB0byBKUEVHIGxpYnJhcnkgaW4gc3RhdGUgJWQASW52YWxpZCBjb2xvciB0eXBlIGluIElIRFIASW5jb3JyZWN0IElFTkQgY2h1bmsgbGVuZ3RoAE91dCBvZiBtZW1vcnkgd2hpbGUgcHJvY2VzaW5nIGtleXdvcmQAVHJ1bmNhdGluZyBwcm9maWxlIHRvIGFjdHVhbCBsZW5ndGggaW4gaUNDUCBjaHVuawAlczogRXJyb3IgZmV0Y2hpbmcgZGlyZWN0b3J5IGxpbmsAQml0c1BlclNhbXBsZQAlczogVElGRiBkaXJlY3RvcnkgaXMgbWlzc2luZyByZXF1aXJlZCAiJXMiIGZpZWxkLCBjYWxjdWxhdGluZyBmcm9tIGltYWdlbGVuZ3RoACAgR3JvdXAgNCBPcHRpb25zOgBDYW4ndCB1c2UgVElGRlJlYWRSR0JBU3RyaXAoKSB3aXRoIHRpbGVkIGZpbGUuAEpQRUcgc3RyaXAvdGlsZSBzaXplIGV4Y2VlZHMgZXhwZWN0ZWQgZGltZW5zaW9ucywgZXhwZWN0ZWQgJWR4JWQsIGdvdCAlZHglZABTR0lMb2cgY29tcHJlc3Npb24gc3VwcG9ydGVkIG9ubHkgZm9yICVzLCBvciByYXcgZGF0YQBzcC0+aW5fYnVmZmVyX3RvZ28+MABzcC0+ZW5jb2RldGlsZSAhPSBOVUxMAHZvaWQKACVzOiBSZWFkIGVycm9yIGF0IHNjYW5saW5lICVsdTsgZ290ICVsdSBieXRlcywgZXhwZWN0ZWQgJWx1AF1dCgBCbGFtZSByZWFzb25zOgoATEVOOiAlZCAgYmFkOiAlZCAgaXNvX046ICVkICBpc29fQTogJWQgIHJlajogJWQKAGAAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQAwMTIzNDU3ODkAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQBMIAAgQWNjZXB0OiB3b3JzdCByZXZpc2VkIGNlcnRhaW50eSBpcyAlLjJmCgBXaGl0ZWxpc3Qgb2YgY2hhcnMgdG8gcmVjb2duaXplACB0cnV0aCBib3goZXMpAGJlc3RfY2hvaWNlICE9IG51bGxwdHIAUFRSQUlOX05VTV9CQURfRk9OVAAJJXMAUl9ST1dfUkVKOiAlcwoAJWQgAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5jcHAASW5jcmVhc2luZyByZWxpYWJpbGl0eSBvZiB0ZW1wIGNvbmZpZyAlZCB0byAlZC4KAFVzZSBwcmUtYWRhcHRlZCBjbGFzc2lmaWVyIHRlbXBsYXRlcwAlNmQKCQBSZWFkaW5nIHNxdWlzaGVkIGRhd2cKAFNjb3JlIHBlbmFsdHkgKDAuMSA9IDEwJSkgYWRkZWQgaWYgdGhlcmUgYXJlIHN1YnNjcmlwdHMgb3Igc3VwZXJzY3JpcHRzIGluIGEgd29yZCwgYnV0IGl0IGlzIG90aGVyd2lzZSBPSy4ATm9uLW1hdGNoaW5nIGZyYWdtZW50IHBpZWNlCgAAUmVhZCAlZCB2YWxpZCBwYXR0ZXJucyBmcm9tICVzCgAhaW50X21vZGVfAApEaXZlcmdlbmNlISAATGluVGFuaABDb252U2VyaWVzAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL25ldHdvcmtpby5oAFZlcnRpY2FsPSVkLCBvcmllbnRhdGlvbj0lZCwgZmluYWwgcm90YXRpb249KCVmLCAlZikrKCVmLCVmKQoAQ29tcHV0ZWQgbGVmdC1pbGxlZ2FsIHBhcnRpdGlvbgoALi4uYW5kOgBTa2lwcGluZyBzcGxpdHRpbmcgQ0MgYXQgKCVkLCAlZCk6IHNoaXJvcmVraGEgaW4gbG93ZXIgaGFsZi4uCgBkZWJ1ZwBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAGRlYnVnAEZHTiBpbiBkaXIgJWQgZm9yIGJsb2I6AExlZnQgcmVzdWx0ID0gJXMsIFJpZ2h0IHJlc3VsdD0lcwoAcGFydC0+SXNUZXh0VHlwZSgpAEFmdGVyIGFscmVhZHkgZGVsZXRpbmcgJWQgYm94ZXMsIAB0b3NwX2FsbF9mbGlwc19mdXp6eQBSb3c6TWFkZSAlZCB3b3JkcyBpbiByb3cgKCglZCwlZCkoJWQsJWQpKQoAdGV4dG9yZF90ZXN0X21vZGUATm8gY2x1c3RlciBiZWxvdyBibG9jayB0aHJlc2hvbGQhLCB1c2luZyBkZWZhdWx0PSVnCgBsYW5ndWFnZV9tb2RlbF9taW5fY29tcG91bmRfbGVuZ3RoAFBUUkFJTl9ESUNUX0xPTkcAQXNzZXJ0IGZhaWxlZABjaG9wX3NlYW1fcGlsZV9zaXplAGh0dHA6ADxTUCBXSURUSD0iAG9jcl9jYXB0aW9uADQgMCBvYmoKPDwKICAvQmFzZUZvbnQgL0dseXBoTGVzc0ZvbnQKICAvQ0lEVG9HSURNYXAgNSAwIFIKICAvQ0lEU3lzdGVtSW5mbwogIDw8CiAgICAgL09yZGVyaW5nIChJZGVudGl0eSkKICAgICAvUmVnaXN0cnkgKEFkb2JlKQogICAgIC9TdXBwbGVtZW50IDAKICA+PgogIC9Gb250RGVzY3JpcHRvciA3IDAgUgogIC9TdWJ0eXBlIC9DSURGb250VHlwZTIKICAvVHlwZSAvRm9udAogIC9EVyAAY2hhcnMtMTgucGEAYm94YXMgbm90IGRlZmluZWQAaW52YWxpZCBwdHIgaW5wdXQAYm94YSBpcyBlbXB0eQBib3hhIG5vdCBtYWRlAHBpeHMgdW5kZWZpbmVkIG9yIG5vdCA4IGJwcABXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBOVUxMIQoAJnh2YWwsICZ5dmFsLCAmenZhbCBub3QgYWxsIGRlZmluZWQAcGl4bSBub3QgMSBicHAAcGl4IHVuZGVmaW5lZCBvciBub3QgMSBicHAAV2FybmluZyBpbiAlczogbWluZnJhY3QgdG9vIGJpZzsgbGlrZWx5IHRvIHVuZGVyZXN0aW1hdGUgbmNvbG9ycwoAaW52YWxpZCBsZXZlbABwaXhzIG5vdCBjbWFwcGVkIG9yIDMyIGJwcAByZ2JhIHZhbHVlcyBub3QgZm91bmQARXJyb3IgaW4gJXM6IGFycmF5IG5vdCBtYWRlCgBkcGl4czEgPT0gZHBpeHMyACVzLnRleABwaXggaXMgY29sb3JtYXBwZWQAZDcuMSArIGQxLjcAZCA9PSAyIGFuZCB1cHBlciA+IDMAICBzeSA9ICVkLCBzeCA9ICVkLCBjeSA9ICVkLCBjeCA9ICVkCgBwaXgyIG5vdCBkZWZpbmVkIG9yIG5vdCAxIGJwcABwaXhwIG5vdCBkZWZpbmVkAG5hcyBhbmQgbmFkIG5vdCBib3RoIGRlZmluZWQAbGVuIDwgMCBhZnRlciByZW1vdmFsAGJpbnNpemUgbXVzdCBiZSA+IDAuMABwdGEgbm90IG1hZGUAbGVwdC8lcwBlbmRsb2MgbXVzdCBiZSA+PSBzdGFydGxvYwBXYXJuaW5nIGluICVzOiBmaWxlICVzIGZvcm1hdCBpcyAlZDsgc2tpcAoACkxfRG5hIFZlcnNpb24gJWQKAHN0cmVhbSBub3Qgb3BlbgBwaXggbm90IG1hZGUAZCBtdXN0IGJlID49IDEAaW52YWxpZCBmYWRlIHR5cGUAcGl4cyBub3QgZGVmaW5lZCBvciBub3QgMzIgYnBwAHBpeCBub3QgMiwgNCBvciA4IGJwcABubyB2YWx1ZXMgcmVxdWVzdGVkAGJvdGggdyBhbmQgaCBub3QgPiAwAGludmFsaWQgYWNjZXNzIHR5cGUAYm94YSBub3QgZm91bmQhAG5hIG5vdCBkZWZpbmVkAG9wIG11c3QgYmUgaW4ge0xfQVJJVEhfQURELCBMX0FSSVRIX1NVQlRSQUNUfQBFcnJvciBpbiAlczogcGl4IGNvbXB0eXBlICVkIG5vdCBlcXVhbCB0byBwaXhjIGNvbXB0eXBlCgBpbnZhbGlkIHJlbGF0aW9uAGZpbGUgdG9vIHNtYWxsIHRvIGJlIHBuZwBwdGEgbm90IHJlYWQAaW52YWxpZCB0eXBlAGludmFsaWQgYWNjZXNzZmxhZwBFcnJvciBpbiAlczogcm9vdCBhbmQgY2hpbGQgb2Ygcm9vdCBoYXZlIG5vIGdyYW5kcGFyZW50CgAmZmRhdGEgbm90IGRlZmluZWQAREVQVEgAc3BpeDogbm8gcGl4IHJldHVybmVkAHBpeCBub3QgZGVmaW5lZCBvciBub3QgMSBicHAAc3RyIG5vdCBmb3VuZABwaXhzIHRvbyBzbWFsbABwaXhzMiB1bmRlZmluZWQgb3Igbm90IDggYnBwAHNlbCBjb2wgb3V0IG9mIGJvdW5kcwBzZWxfY3Jvc3NfJWQAZmFpbGVkIHRvIG1ha2UgaGVhZGVyACAqICBsX2F1dG9kZWNvZGVfJWQoKQAmdmEgbm90IGRlZmluZWQASW5mbyBpbiAlczogZm9ybWF0IG9mICVzIG5vdCBrbm93bgoAdGltZXIgbm90IGRlZmluZWQAbmV3ZGF0YSBub3QgbWFkZQBbJWQgJWQgJWQgJWQgJWQgJWRdICAgICAlJW1hcHBpbmcgbWF0cml4OiBbdyAwIDAgLWggMCBoXQBmaWxlbmFtZSBub3QgZGVmaW5lZABKUEVHIHBhcmFtZXRlciBzdHJ1Y3QgbWlzbWF0Y2g6IGxpYnJhcnkgdGhpbmtzIHNpemUgaXMgJXUsIGNhbGxlciBleHBlY3RzICV1AEludmFsaWQgY29sb3IgdHlwZS9iaXQgZGVwdGggY29tYmluYXRpb24gaW4gSUhEUgBNaXNzaW5nIElIRFIgYmVmb3JlIGdBTUEAaW52YWxpZCBjaGFyYWN0ZXIgaW4ga2V5d29yZABJbnZhbGlkIHNCSVQgZGVwdGggc3BlY2lmaWVkAENvbXByZXNzaW9uACVzOiBCb2d1cyAiJXMiIGZpZWxkLCBpZ25vcmluZyBhbmQgY2FsY3VsYXRpbmcgZnJvbSBpbWFnZWxlbmd0aAAlc3VuY29tcHJlc3NlZCBkYXRhAFJvdyBwYXNzZWQgdG8gVElGRlJlYWRSR0JBU3RyaXAoKSBtdXN0IGJlIGZpcnN0IGluIGEgc3RyaXAuAEltcHJvcGVyIEpQRUcgY29tcG9uZW50IGNvdW50AFksIEwAbj4wAE91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyAlZCBieXRlIHRlbXAgYnVmZmVyLgBzaWduZWQgaW50ZWdlcgoAJXM6IFJlYWQgZXJyb3IgYXQgc2NhbmxpbmUgJWx1LCBzdHJpcCAlbHU7IGdvdCAlbHUgYnl0ZXMsIGV4cGVjdGVkICVsdQBGQUlMIQoAJXMgJWQKAGluZGV4IDwgbGVuACIAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgAW3soAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAFIgAAB0ZXNzZWRpdF9jaGFyX3VuYmxhY2tsaXN0AApNYXhpbWFsbHkgY2hvcHBlZCB3b3JkIGJveGVzOgoAAFBUUkFJTl9SQVRJTkdfUEVSX0NIQVIACnN0cgBSX1VOTFZfUkVKOiAlcwoAKQoAIFsARm91bmQgcG9vciBtYXRjaCB0byB0ZW1wIGNvbmZpZyAlZCA9ICU0LjFmJSUuCgBjbGFzc2lmeV9zYXZlX2FkYXB0ZWRfdGVtcGxhdGVzAGNsYXNzaWZ5X2NwX2VuZF9wYWRfdGlnaHQAQmFkIG1hZ2ljIG51bWJlciBvbiBkYXdnOiAlZCB2cyAlZAoAeGhlaWdodF9wZW5hbHR5X2luY29uc2lzdGVudABCdWlsdCBjaGFyYWN0ZXIgJXMgZnJvbSBmcmFnbWVudHMKAAoAZWRnZV9jaGFyX29mKG5vZGUxLCBub2RlMiwgZGlyZWN0aW9uLCB3b3JkX2VuZCwgdW5pY2hhcl9pZCwgJmVkZ2VfcHRyLCAmZWRnZV9pbmRleCkATGZ4AFJldmVydGVkIHRvAFRhbmgAQ29udm9sdmUAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQB0ZXh0b3JkX2RlYnVnX3ByaW50YWJsZQBkZW5vcm1fID09IG51bGxwdHIAQ29tcHV0ZWQgcmlnaHQtaWxsZWdhbCBwYXJ0aXRpb24KAE92ZXJsYXA6AFNraXBwaW5nIHNwbGl0dGluZyBDQyBhdCAoJWQsICVkKTogc3Ryb2tlIHdpZHRoIHRvbyBodWdlLi4KAGVkZ2VzX2NoaWxkcmVuX2ZpeABkaXNwbGF5ACFwYXJ0X2xpc3QtPmVtcHR5KCkAdGV4dG9yZF90ZXN0X2xhbmRzY2FwZQBvbGRibF9jb3JyZml4AGRpc3BsYXkATmVpZ2hib3VyIGF0OgBBbGlnbmVkACZwYXJ0ICE9IGxlYWRlcgBTdGFydGluZyBldmFsdWF0aW9uAFBhc3MgQU5ZIGZsaXAgdG8gY29udGV4dD8AdGV4dG9yZF9zaG93X3BhZ2VfY3V0cwB3b3JkIGJyZWFrID0gJWQgY3VycmVudF9nYXAgPSAlZCwgcHJldl9nYXAgPSAlZCwgbmV4dF9nYXAgPSAlZAoARG8gY3VycmVudCB0ZXN0AE5vIGNsdXN0ZXIgYWJvdmUgYmxvY2sgdGhyZXNob2xkISwgdXNpbmcgZGVmYXVsdD0lZwoATWluaW11bSBsZW5ndGggb2YgY29tcG91bmQgd29yZHMAUFRSQUlOX0ZSRVFfU0hPUlQATWF4IG51bWJlciBvZiBzZWFtcyBpbiBzZWFtX3BpbGUAaHR0cHM6ACIgVlBPUz0iAG9jcl9saW5lAAo+PgplbmRvYmoKAGNoYXJzLTIwLnBhAGJhYSBub3QgbWFkZQBib3ggb3V0c2lkZSBpbWFnZQBubyBwdHJzIGRlZmluZWQAYm94IG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiBkcGl4IG5vdCBtYWRlCgBmcGl4YyBub3QgbWFkZQBmcGl4YXMgdW5kZWZpbmVkL2ludmFsaWQAcGl4cyBub3QgZGVmaW5lZCBvciAxIGJwcABpbnZhbGlkIHcgb3IgaABpbnZhbGlkIHRocmVzaG9sZHMAV2FybmluZyBpbiAlczogJWQgY29sb3JzIGZvdW5kOyBtb3JlIHRoYW4gMjU2CgAmcGl4ZWwgZGVmaW5lZAAmY29sb3Igbm90IGRlZmluZWQARXJyb3IgaW4gJXM6IHNpbmd1bGFyIG1hdHJpeAoAZHBpeHMyID09IGRwaXhkAFdhcm5pbmcgaW4gJXM6IHB0ciBhZGRyZXNzIGlzIG51bGwhCgBwdGEgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogY2FuJ3QgbWFrZSB0aGUgbWFwCgBwaXhzIG5vdCA4IGJwcABkaW1lbnNpb25zIG5vdCByZWFkAGludmFsaWQgY29tcHR5cGUAcGl4ZSBub3QgZGVmaW5lZABpbnZhbGlkIHR5cGUAcGZpcnN0IGFuZCBwbGFzdCBub3QgYm90aCBkZWZpbmVkAG5ld3NpemUgbXVzdCBiZSA+IDEAaXNvbGF0ZWQgaG9sZSBib3JkZXIgcG9pbnQhAC90bXAvbGVwdC8lcy8lMDRkLnBuZwBuZXcgYXJyYXkgbm90IHJldHVybmVkAEVycm9yIGluICVzOiBmaWxlICVzIGZvcm1hdCBpcyAlZDsgdW5yZWFkYWJsZQoAbm90IGEgbF9kbmEgZmlsZQBwaXhzIG5vdCBkZWZpbmVkAHN0cmVhbSBub3Qgb3BlbmVkAHNwcCBtdXN0IGJlID49IDEAcGl4czIgbm90IDggb3IgMzIgYnBwAHN0YXJ0IHkgbm90IGluIGltYWdlAHRhYiBub3QgZGVmaW5lZABwaXhzIG5laXRoZXIgMzIgYnBwIG5vciBjb2xvcm1hcHBlZABtYXNrIHNpemUgMABwaXggZGVwdGggbm90IGZvdW5kAFdhcm5pbmcgaW4gJXM6IHNvcnQgYnkgeCBvciB5IHdoZXJlIGFsbCB2YWx1ZXMgYXJlIDAKAG5vIHBpeGEgY29tcG9uZW50cwBzcmMxIGFuZCBzcmMyIGRlcHRocyB1bmVxdWFsAHBpeGFjIG5vdCBtYWRlAHBpeHMgbm90IDIsIDQgb3IgOCBicHAATEVQVF9DQUxMT0MgZmFpbCBmb3IgZGF0YQBzdHJlYW0gbm90IGRlZmluZWQAaW52YWxpZCByZWxhdGlvbgBuZXcgcHRyIGFycmF5IG5vdCByZXR1cm5lZABncmFuZHBhcmVudAAmZnNpemUgbm90IGRlZmluZWQAZmFpbGVkIHJlYWRpbmcgZGVwdGgAVW5rbm93biBmb3JtYXQ6IG5vIHBpeCByZXR1cm5lZABidWZmZXIgbm90IGRlZmluZWQAZGVzdCBub3QgbWFkZQBwaXhkIHRvbyBzbWFsbAAmcHRhIG5vdCBkZWZpbmVkAHNlbCBvcmlnaW4gbm90IGZvdW5kAGxlcHQvc2VsAEVycm9yIGluICVzOiBwaXhkYXRhX3NpemUgPSAlZCwgbWVtZGF0YV9zaXplID0gJWQsIGltZGF0YV9zaXplID0gJWQgbm90IGFsbCBlcXVhbCEKAGxfYXV0b2RlY29kZV8lZChsX2ludDMyIGluZGV4KQBXYXJuaW5nIGluICVzOiBwaXggbm90IG1hZGUgZm9yIGZpbGU6ICVzCgAlWSVtJWQlSCVNJVMAcG5ieXRlcyBub3QgZGVmaW5lZAB7Y3VycmVudGZpbGUgYnBsIHJlYWRoZXhzdHJpbmcgcG9wfSBpbWFnZQBhdXRvIGZvcm1hdCBub3QgcmV0dXJuZWQAQm9ndXMgdmlydHVhbCBhcnJheSBhY2Nlc3MAVW5rbm93biBpbnRlcmxhY2UgbWV0aG9kIGluIElIRFIASW52YWxpZCBnQU1BIGFmdGVyIElEQVQAdHJhaWxpbmcgc3BhY2VzIHJlbW92ZWQgZnJvbSBrZXl3b3JkAEludmFsaWQgbnVtYmVyIG9mIHRyYW5zcGFyZW50IGNvbG9ycyBzcGVjaWZpZWQAUGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbgAlczogV3JvbmcgIiVzIiBmaWVsZCwgaWdub3JpbmcgYW5kIGNhbGN1bGF0aW5nIGZyb20gaW1hZ2VsZW5ndGgAICBHcm91cCAzIE9wdGlvbnM6AENhbid0IHVzZSBUSUZGUmVhZFJHQkFUaWxlKCkgd2l0aCBzdHJpcHBlZCBmaWxlLgBJbXByb3BlciBKUEVHIGRhdGEgcHJlY2lzaW9uAFhZWiwgTHV2AG48PU9KUEVHX0JVRkZFUgAoY2MwJXJvd3NpemUpPT0wAHVuc2lnbmVkIGludGVnZXIKACVzOiBTZWVrIGVycm9yIGF0IHJvdyAlbGQsIGNvbCAlbGQsIHRpbGUgJWxkAApBUFBMWV9CT1g6IGluIFJlc2VnbWVudFdvcmRCb3goKSBmb3IgJXMKAE1pc2FkYXB0aW9uIGxvZzoKAGluIGZpbGUgJXMsIGxpbmUgJWQAXABBc3NlcnQgZmFpbGVkADo7LS4sAFogAGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkATGlzdCBvZiBjaGFycyB0byBvdmVycmlkZSB0ZXNzZWRpdF9jaGFyX2JsYWNrbGlzdABUcnV0aCAgYm91bmRpbmcgIGJveGVzOgoAYm94X3dvcmQgIT0gbnVsbHB0cgAKc3RhdGU6AFJfSFlQSEVOX0FDQ0VQVDogJXMKAGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAJXgAQU0gTWF0Y2hlcyA9ICAAU2F2ZSBhZGFwdGVkIHRlbXBsYXRlcyB0byBhIGZpbGUAICU5cwBDbGFzcyBQcnVuZXIgRW5kIFBhZCBUaWdodABudW1fZWRnZXNfID4gMABTY29yZSBwZW5hbHR5ICgwLjEgPSAxMCUpIGFkZGVkIGlmIGFuIHhoZWlnaHQgaXMgaW5jb25zaXN0ZW50LgBSZWNvcmQgZnJhZ21lbnQgY29udGludWF0aW9uCgBTdG9wcGVyOiBQb3NzaWJsZSBhbWJpZ3VvdXMgd29yZCA9ICVzCgByZW1vdmVkIGVkZ2UgaW4gbm9kZXNfWyVsbGRdOiAATGZ4cwBGYWlsZWQgdG8gUmV2ZXJ0IGF0AFJlbHUAQ29udk5MAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAE1ha2UgZGVidWcgd2luZG93cyBwcmludGFibGUAaW4gZmlsZSAlcywgbGluZSAlZABNYWRlIHBhcnRpdGlvbiB3aXRoIGJhZCByaWdodCBjb29yZHMAQWRkaW5nIGNhbmRpZGF0ZToAc2VnbWVudGF0aW9uX2Jsb2NrX2xpc3RfAFJlbW92ZSBib3h5IHBhcmVudHMgb2YgY2hhci1saWtlIGNoaWxkcmVuAEFzc2VydCBmYWlsZWQAU2VhcmNoaW5nIGZvciBtZXJnZSB3aXRoIGltYWdlIHBhcnQ6AFRlc3RzIHJlZmVyIHRvIGxhbmQvcG9ydABJbXByb3ZlIGNvcnJlbGF0aW9uIG9mIGhlaWdodHMAQXNzZXJ0IGZhaWxlZABCYWQgc2l6ZQoAUmFnZ2VkAHBhZ2VfaGVpZ2h0ID4gMABCb3ggKCVkLCVkKS0+KCVkLCVkKSBoYXMgZ3V0dGVyICVkLCBuZGlzdCAlZAoAdG9zcF9mdXp6eV9saW1pdF9hbGwARHJhdyBwYWdlLWxldmVsIGN1dHMAZmFsc2UAbGFuZ3VhZ2VfbW9kZWxfcGVuYWx0eV9ub25fZnJlcV9kaWN0X3dvcmQAUFRSQUlOX0ZSRVFfTUVEAGNob3BfbmV3X3NlYW1fcGlsZQBFcnJvciwgdGhpcyB0ZXNzZXJhY3QgaGFzIG5vIFVSTCBzdXBwb3J0CgAiIEhQT1M9IgAnIGlkPScANSAwIG9iago8PAogIC9MZW5ndGggAGRpciBub3QgZGVmaW5lZABib3hhIHB0ciBhcnJheSBub3QgbWFkZQBpbnZhbGlkIGNsaXBwaW5nIGJveABiYWEgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogZmFjdG9yIG11c3QgYmUgPiAwLjA7IHJldHVybmluZyBjb3B5CgBFcnJvciBpbiAlczogdyBvciBoIHRvbyBzbWFsbCBmb3Iga2VybmVsCgBpbmRleCBub3QgdmFsaWQAZnBpeGFzIHNpemVzIG5vdCBmb3VuZABXYXJuaW5nIGluICVzOiBubyBzaGFycGVuaW5nIHJlcXVlc3RlZDsgY2xvbmUgcmV0dXJuZWQKAGludmFsaWQgZGlyZWN0aW9uAG5hIG5vdCBtYWRlAGxldmVsIG5vdCBpbiB7NCwgNSwgNn0AZnJhY3Rpb24gbm90IGluIFstMSAuLi4gKzFdAGNvbG9ybWFwIGFycmF5cyBub3QgbWFkZQB5MSA9PSB5MyEAd2lkdGggJiBoZWlnaHQgbm90IGJvdGggPiAwAGdwbG90IG5vdCBkZWZpbmVkAGludmFsaWQgb3AAJnBpeG0qIG5vdCBhbGwgZGVmaW5lZABubGV2ZWxzIG5vdCBpbiB7MiwgMywgNH0AJTE1ZgBwaXgxIGRlcHRoIDwgOCBicHAgYW5kIG5vdCBjbWFwcGVkAGFsbCBpbnB1dCBwaXggbm90IDEgYnBwACUlMCVkZAAmY291bnQgbm90IGRlZmluZWQAbm8gYmlucyBpbiBuYXMAcHRhYWcgbm90IG1hZGUAcGl4cyBub3QgZGVmaW5lZCBvciBub3QgMSBicHAAcGl4YSBub3QgZGVmaW5lZABpbnZhbGlkIGxfZG5hIHZlcnNpb24ASW5mbyBpbiAlczogcmVtb3ZpbmcgY29sb3JtYXA7IG1heSBiZSBiZXR0ZXIgdG8gY29tcHJlc3MgbG9zc2xlc3NseQoAdW5hYmxlIHRvIHJlYWQgZmlsZQBubyBvdXRwdXQgcmVxdWVzdGVkAGlucGxhY2UgYW5kIHBpeGQgIT0gcGl4czEAb3AgbXVzdCBiZSBQSVhfU0VUIG9yIFBJWF9DTFIAcGl4cyB1bmRlZmluZWQgb3Igbm90IDMyIGJwcABpbnZhbGlkIG1lYXN1cmUgdHlwZQBpbnZhbGlkIGhvcml6IGZyYWN0aW9ucwAmbnRleHQgbm90IGRlZmluZWQAYm94YSBhbmQgcGl4YSBjb3VudHMgZGlmZmVyAHBpeGEgYW5kIG5hIGNvdW50cyBkaWZmZXIAZGVwdGhzIG5vdCBpbiB7OCwgMTYsIDMyfQBwaXhjIHB0cnMgbm90IG1hZGUASW5mbyBpbiAlczogcGl4cyBhbHJlYWR5IGhhcyBhIGNvbG9ybWFwCgBlcnJvciByZWFkaW5nIGRhdGEACiBQdGEgVmVyc2lvbiAlZAoAcGl4bSB1bmRlZmluZWQgb3Igbm90IDEgYnBwAEVycm9yIGluICVzOiBpZGVudGl0eSBjb25mdXNpb24KAHBpeHMgbm90IGRlZmluZWQATUFYVkFMAGJtcDogcGl4IG5vdCByZWFkAHN0YXJ0IG5vdCBkZWZpbmVkAHNhMSBub3QgZGVmaW5lZABwaXhzIG5vdCAzMiBicHAAcGl4cyB1bmRlZmluZWQgb3Igbm90IDggYnBwAHNlbCBub3QgZm91bmQAL3RtcC9sZXB0L3NlbC94c2VsMS5wbmcAY21hcCBub3QgbWFkZQBsX2ludDMyICAgbmZ1bmMgPSAlZDsKAHRpZmZpbGUgbm90IGRlZmluZWQAJWMlMDJkJyUwMmQnAGZpbGVuYW1lIG5vdCBkZWZpbmVkAHtjdXJyZW50ZmlsZSBicGwgcmVhZGhleHN0cmluZyBwb3B9IGZhbHNlIDMgY29sb3JpbWFnZQBzdHJlYW0gbm90IGRlZmluZWQAQnVmZmVyIHBhc3NlZCB0byBKUEVHIGxpYnJhcnkgaXMgdG9vIHNtYWxsAFVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIElIRFIAT3V0IG9mIHBsYWNlIGdBTUEgY2h1bmsAbGVhZGluZyBzcGFjZXMgcmVtb3ZlZCBmcm9tIGtleXdvcmQASWdub3JpbmcgYXR0ZW1wdCB0byB3cml0ZSB0Uk5TIGNodW5rIG91dC1vZi1yYW5nZSBmb3IgYml0X2RlcHRoAFRocmVzaGhvbGRpbmcAJXM6IGNhbm5vdCBoYW5kbGUgemVybyBzY2FubGluZSBzaXplACVzMi1kIGVuY29kaW5nAFJvdy9jb2wgcGFzc2VkIHRvIFRJRkZSZWFkUkdCQVRpbGUoKSBtdXN0IGJlIHRvcGxlZnQgY29ybmVyIG9mIGEgdGlsZS4ASW1wcm9wZXIgSlBFRyBzYW1wbGluZyBmYWN0b3JzICVkLCVkCkFwcGFyZW50bHkgc2hvdWxkIGJlICVkLCVkLgBzcCAhPSAwAElFRUUgZmxvYXRpbmcgcG9pbnQKACVzOiBSZWFkIGVycm9yIGF0IHJvdyAlbGQsIGNvbCAlbGQ7IGdvdCAlbHUgYnl0ZXMsIGV4cGVjdGVkICVsdQBDaGVja2luZyB3b3JkOgAlcwoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L3JlamN0bWFwLmgALABpbmRleCA8IGxlbgBdfSkAPyAAaW4gZmlsZSAlcywgbGluZSAlZAB0ZXNzZWRpdF9hbWJpZ3NfdHJhaW5pbmcAIWJsb2JfY2hvaWNlX2l0LmVtcHR5KCkAYmxvYl9jb3VudCA9PSBib3hfd29yZC0+bGVuZ3RoKCkACSVkIABSX05OX0FDQ0VQVDogJXMKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAF0AdG9wPSVkLCB2cyBbJWQsICVkXSwgYm90dG9tPSVkLCB2cyBbJWQsICVkXQoAY2xhc3NpZnlfZW5hYmxlX2FkYXB0aXZlX2RlYnVnZ2VyAG5vcm1hbAB0eXBlOiAlZCBsYW5nOiAlcyBwZXJtOiAlZCB1bmljaGFyc2V0X3NpemU6ICVkIG51bV9lZGdlczogJWQKAHNlZ21lbnRfcGVuYWx0eV9kaWN0X2ZyZXF1ZW50X3dvcmQAUmVjb3JkIGZyYWdtZW50IGJlZ2lubmluZwoAZml4cHQtPmRhbmdlcm91cys9KCVkICVkICVkICVkICVzKQoAQmVmb3JlIHJlZHVjdGlvbjoATFMAIGZhaWxlZCB0byB3cml0ZSBjaGVja3BvaW50LgBMaW5lYXIASW52YWxpZCBNcCBzcGVjITolcwoAQW55dGhpbmcAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL3RleHRvcmQvY29sZmluZC5jcHAATWFkZSBwYXJ0aXRpb24gd2l0aCBiYWQgbGVmdCBjb29yZHMAU21vb290aGluZyBwYXJ0IGF0OgBCZWZvcmUgcmVmcmVzaGluZyBibG9iczoKAFRleHQgYm94PQBPbiB3cm9uZyBzaWRlCgBOb25lAHBhZ2Vfd2lkdGggPiAwAEJveCBhbmQgcHJldiBnb29kLCBnYXA9JWQsIHRhcmdldCAlZywgZ29vZGxlbmd0aD0lZAoARG9uJ3QgcmVzdHJpY3Qga24tPnNwIGZ1enp5IGxpbWl0IHRvIHRhYmxlcwBpbiBmaWxlICVzLCBsaW5lICVkAFBlbmFsdHkgZm9yIHdvcmRzIG5vdCBpbiB0aGUgZnJlcXVlbnQgd29yZCBkaWN0aW9uYXJ5AFBUUkFJTl9GUkVRX0xPTkcAVXNlIG5ldyBzZWFtX3BpbGUAcmIAIi8+CgBsaW5lXwAgL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCgBFcnJvciBpbiAlczogcGl4IG5vdCBmb3VuZCBmb3IgZm9udCBzaXplICVkCgBiYWFzIG5vdCBkZWZpbmVkAGJveHMgbm90IGRlZmluZWQAbm8gYm94YSBpbiBiYWEAV2FybmluZyBpbiAlczogbWF4ZGlmZiBtdXN0IGJlID49IDA7IHJldHVybmluZyBjb3B5CgBwaXhtIHVuZGVmaW5lZCBvciBub3QgOCBicHAAaW52YWxpZCBhY2Nlc3N0eXBlACZsdmFsLCAmYXZhbCwgJmJ2YWwgbm90IGFsbCBkZWZpbmVkAHBpeHQgbm90IG1hZGUAc2l6ZSA8IDEAcGl4cyBub3QgOCBvciAzMiBicHAAbmNvbG9ycyA+IDI1NgAmb3BhcXVlIG5vdCBkZWZpbmVkAHkxcCA9PSB5M3AhAGZwaXhkIG5vdCBkZWZpbmVkAG5heSBub3QgZGVmaW5lZABkZXB0aCBub3QgaW4gezEsMiw0LDgsMzJ9AFdhcm5pbmcgaW4gJXM6IGNhbid0IG1ha2UgdGhlIG1hcHMKAG5sZXZlbHMgbm90IGluIFsyLC4uLiwxNl0ACgBwaXgyIGRlcHRoIDwgOCBicHAgYW5kIG5vdCBjbWFwcGVkAGRzaXplIG5vdCBpbiB7MCwxLDIsMyw0fQAlJSVkZAByYW5nZSBub3QgdmFsaWQAdHN1bSBtdXN0IGJlID4gMC4wAHB0YWcgbm90IG1hZGUAYzEuMTAAY29udmVyc2lvbiB0byBwZGYgZmFpbGVkAE51bWJlciBvZiBudW1iZXJzID0gJWQKAEluZm8gaW4gJXM6IGNvbnZlcnRpbmcgZnJvbSAlZCB0byA4IGJwcAoAdW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeQBkYXRhIG5vdCBtYWRlAGlucGxhY2UgYW5kIHBpeHMxIGNtYXBwZWQAZGVwdGggbXVzdCBiZSA4LCAxNiBvciAzMiBicHAAcGl4MSBub3QgbWFkZQBwaXhzIG5vdCA4IG9yIDE2IGJwcCBvciBjb2xvcm1hcHBlZABpbnZhbGlkIHZlcnQgZnJhY3Rpb25zAHBpeGEgYW5kIHNhIHNpemVzIGRpZmZlcgBXYXJuaW5nIGluICVzOiBpbnZhbGlkIHNvcnQgdHlwZQoAaW52YWxpZCB3aWR0aABwaXhzMSBub3QgY21hcHBlZCBvciByZ2IAYm94YSBub3QgbWFkZQBXYXJuaW5nIGluICVzOiBpbnZhbGlkIHZhbHVlIG9mIG1pbmRlcHRoOyBzZXR0aW5nIHRvIDgKAGRhdGEgbm90IGRlZmluZWQAbm90IGEgcHRhIGZpbGUASW5mbyBpbiAlczogcHRhcyBpcyBlbXB0eQoAaW5zZXJ0X2Nhc2U1AFdhcm5pbmcgaW4gJXM6IDIgYnBwIGZpbGVzIGNhbid0IGJlIHJlYWQ7IGNvbnZlcnRpbmcgdG8gOCBicHAKAGZhaWxlZCByZWFkaW5nIG1heHZhbABqcGVnOiBubyBoZWFkZXIgaW5mbyByZXR1cm5lZABlbmQgbm90IGRlZmluZWQAc2EyIG5vdCBkZWZpbmVkAHN1bSBvZiB3dHMgc2hvdWxkIGJlIDEuMABjcm9wcGluZyBmYWlsdXJlAHNlbF9jb21iXyVkaAAvdG1wL2xlcHQvc2VsL3hzZWwyLnBuZwAgICAgUFJPQ05BTUUoImxfYXV0b2RlY29kZV8lZCIpOwBzdHJlYW0gb3V0IG5vdCBkZWZpbmVkAGZpbGUgc3RyZWFtIG5vdCBvcGVuZWQAe2N1cnJlbnRmaWxlIGJwbCByZWFkaGV4c3RyaW5nIHBvcH0gYmluZCBpbWFnZQB1bmtub3duIGZvcm1hdABTdXNwZW5zaW9uIG5vdCBhbGxvd2VkIGhlcmUATU5HIGZlYXR1cmVzIGFyZSBub3QgYWxsb3dlZCBpbiBhIFBORyBkYXRhc3RyZWFtAER1cGxpY2F0ZSBnQU1BIGNodW5rAGV4dHJhIGludGVyaW9yIHNwYWNlcyByZW1vdmVkIGZyb20ga2V5d29yZABJZ25vcmluZyBhdHRlbXB0IHRvIHdyaXRlIDE2LWJpdCB0Uk5TIGNodW5rIHdoZW4gYml0X2RlcHRoIGlzIDgAQ2VsbFdpZHRoACVzOiBjYW5ub3QgaGFuZGxlIHplcm8gdGlsZSBzaXplACsATm8gc3BhY2UgZm9yIHRpbGUgYnVmZmVyAENhbm5vdCBob25vdXIgSlBFRyBzYW1wbGluZyBmYWN0b3JzIHRoYXQgZXhjZWVkIHRob3NlIHNwZWNpZmllZC4AVW5rbm93biBkYXRhIGZvcm1hdCAlZCBmb3IgTG9nTHV2IGNvbXByZXNzaW9uACh1aW50MTYpbjw9c3AtPmluX2J1ZmZlcl9maWxlX3RvZ28AY29tcGxleCBzaWduZWQgaW50ZWdlcgoAJXM6IFJlYWQgZXJyb3IgYXQgcm93ICVsZCwgY29sICVsZCwgdGlsZSAlbGQ7IGdvdCAlbHUgYnl0ZXMsIGV4cGVjdGVkICVsdQBCbG9iIG1hdGNoOiBibG9iOgBUcnlpbmcgd29yZCB1c2luZyBsYW5nICVzLCBvZW0gJWQKAEFzc2VydCBmYWlsZWQALgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3QvcmVqY3RtYXAuaABjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAFBlcmZvcm0gdHJhaW5pbmcgZm9yIGFtYmlndWl0aWVzAGluIGZpbGUgJXMsIGxpbmUgJWQAYmVzdF9jaG9pY2UtPmxlbmd0aCgpID09IDAgfHwgcmF0aW5ncyAhPSBudWxscHRyAApDAFJfTU1fQUNDRVBUOiAlcwoAYQAlczogJTIuMWYlJShDUCUyLjFmLCBJTSUyLjFmICsgQ04lLjJmKCVkKSArIE1QJTIuMWYgKyBWUCUyLjFmKQoARW5hYmxlIG1hdGNoIGRlYnVnZ2VyAHVuaWZvcm0Ad3JpdGVfc3F1aXNoZWRfZGF3ZwoAU2NvcmUgbXVsdGlwbGllciBmb3Igd29yZCBtYXRjaGVzIHdoaWNoIGhhdmUgZ29vZCBjYXNlIGFuZCBhcmUgZnJlcXVlbnQgaW4gdGhlIGdpdmVuIGxhbmd1YWdlIChsb3dlciBpcyBiZXR0ZXIpLgBOb24tc3RhcnRpbmcgZnJhZ21lbnQgcGllY2Ugd2l0aCBubyBwcmV2X2ZyYWdtZW50CgBjaG9pY2VzICE9IG51bGxwdHIAQWZ0ZXIgcmVkdWN0aW9uOgBMRQAgd3JvdGUgY2hlY2twb2ludC4AU29mdG1heABNYXhwb29sAE9ubHlEdXAAQ29uZmlybWluZyB0YWIgdmVjdG9yIG9mICVkIHB0cyBzdGFydGluZyBhdCAlZCwlZAoARW1wdHkgcGFnZSEhCgBSZWNvbXB1dGVkIGJveCBmb3IgcGFydGl0aW9uICVwCgBSZXN1bHQgaW4gZGlyICVkID0gJWQgYXQgZGlzdCAlZAoATmV3IEJsb2JzIGZvdW5kOiAlZAoAQ29uc2lkZXJpbmcgbWVyZ2Ugd2l0aCBwYXJ0OgBPdmVybGFwcyB3cm9uZyB3YXkKAEJlZ2lubmluZyByZWFsIHRhYiBzZWFyY2ggd2l0aCB2ZXJ0aWNhbCA9ICVkLCVkLi4uCgBUYWJsZSBTdHJ1Y3R1cmUAQmFkIEJveCAoJWQsJWQpLT4oJWQsJWQpIHdpdGggZ3V0dGVyICVkLCBuZGlzdCAlZAoAdG9zcF9zdGF0c191c2VfeGh0X2dhcHMAdGV4dG9yZF9kb3RtYXRyaXhfZ2FwAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL3dvcmRzZWcuY3BwAGxhbmd1YWdlX21vZGVsX3BlbmFsdHlfbm9uX2RpY3Rfd29yZABQVFJBSU5fU0hBUEVfQ09TVF9QRVJfQ0hBUgBjaG9wX2luc2lkZV9hbmdsZQBFcnJvciwgY2Fubm90IHJlYWQgaW5wdXQgZmlsZSAlczogJXMKAAkJCQkJPC9UZXh0QmxvY2s+CgAKICAgICAgPHNwYW4gY2xhc3M9J29jcnhfd29yZCcAZW5kc3RyZWFtCmVuZG9iagoAY2hhcnMtNC50aWYAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTCEKAGJveGQgaGFzIDAgYXJlYQBpbnZhbGlkIGNvcHlmbGFnAFdhcm5pbmcgaW4gJXM6IGludmFsaWQgc3ViZmxhZzsgcmV0dXJuaW5nIGNvcHkKAHBpeG1zIHVuZGVmaW5lZCBvciBub3QgMzIgYnBwAGZwaXggbm90IGZvdW5kIQAmZmx2YWwsICZmYXZhbCwgJmZidmFsIG5vdCBhbGwgZGVmaW5lZABwaXhzIG5vdCA4IGJwcCBvciBoYXMgY21hcABib3hhMSBhbmQgYm94YTIgbm90IGJvdGggZGVmaW5lZABkMy4zAEVycm9yIGluICVzOiBvY3RhcnJheSBvciBjb2xvcmFycmF5IG5vdCBtYWRlCgAmYmxhY2t3aGl0ZSBub3QgZGVmaW5lZABwaXgxIG5vdCBtYWRlAHF1YWRzIG5vdCBpbiB7MCwxLDIsM30AaW52YWxpZCBwbG90c3R5bGUAZGVwdGggbm90IDMyIGJwcAAmcGl4bSBub3QgZGVmaW5lZABubGV2ZWxzIG5vdCBpbiBbMiwuLi4sMjU2XQB3YgBpbnZhbGlkIHBsb3R0eXBlAFdhcm5pbmcgaW4gJXM6IG5vIG1hdGNoZWQgcGF0dGVybnMKACUlJWQuJWRmAG5vIGVsZW1lbnRzIGluIHJhbmdlAG51bWEgaXMgZW1wdHkAbmFhIG5vdCBtYWRlAHBpeGEgdW5kZWZpbmVkIG9yIG5vdCAxIGJwcABFcnJvciBpbiAlczogcGl4WyVkXSBub3QgcmV0cmlldmVkCgBpbnZhbGlkIG51bWJlciBvZiBudW1iZXJzAEVycm9yIGluICVzOiB1bmtub3duIHBpeCB0eXBlIHdpdGggZCA9ICVkIGFuZCBubyBjbWFwCgBFcnJvciBpbiAlczogaW52YWxpZCBwbmc6IGkgPSAlZCwgbiA9ICVkLCBuYnl0ZXMgPSAlbHUKAGxpbmVzIG5vdCBtYWRlAGlucGxhY2UgYW5kIG5vdCA4IG9yIDMyIGJwcABkaXN0IG11c3QgYmUgPiAwAHBpeHMgbm90IGRlZmluZWQgb3Igbm90IDMyIGJwcABubyBwaXhlbHMgc2FtcGxlZABpbnZhbGlkIHJlbGF0aXZlIHNpemVzAHBpeGEgbm90IGFsbCBzYW1lIGRlcHRoAG5haW5kZXggbm90IG1hZGUAV2FybmluZyBpbiAlczogdmVyeSBzbWFsbCB3aWR0aDogJWQKAHBpeHMyIG5vdCBjbWFwcGVkIG9yIHJnYgBuIG11c3QgYmUgPiAwAHBpeHMgbm90IDggYnBwIG9yIGNtYXBwZWQAc2l6ZSA8IDQwAGludmFsaWQgcHRhIHZlcnNpb24AbGVzcyB0aGFuIDIgcHRzIGZvdW5kAEVycm9yIGluICVzOiBuIG5vdCBkZWZpbmVkCgBpbWFnZSBkYXRhIGlzIHRvbyBsYXJnZQBUVVBMVFlQRQBwbmc6IG5vIGhlYWRlciBpbmZvIHJldHVybmVkAHRhYiBub3QgbWFkZQBzdGFydCA+IGVuZABwaXggbm90IDIsIDQsIDggb3IgMzIgYnBwAG9wZXJhdGlvbiBub3QgaW5wbGFjZQBzZWxfY29tYl8lZHYAaGxzaXplbCBub3QgPiAxAGZpbGVzdHIgZnJvbSBzYTMgbm90IG1hZGUAcmIAJm5ieXRlcyBub3QgZGVmaW5lZAB7Y3VycmVudGZpbGUgYnBsIHJlYWRoZXhzdHJpbmcgcG9wfSBiaW5kIGZhbHNlIDMgY29sb3JpbWFnZQBXYXJuaW5nIGluICVzOiBpbnZhbGlkIHByb2dyZXNzaXZlOyBzZXR0aW5nIHRvIGJhc2VsaW5lCgBDQ0lSNjAxIHNhbXBsaW5nIG5vdCBpbXBsZW1lbnRlZCB5ZXQAVW5rbm93biBmaWx0ZXIgbWV0aG9kIGluIElIRFIASW5jb3JyZWN0IGdBTUEgY2h1bmsgbGVuZ3RoAFplcm8gbGVuZ3RoIGtleXdvcmQAQ2FuJ3Qgd3JpdGUgdFJOUyB3aXRoIGFuIGFscGhhIGNoYW5uZWwAQ2VsbExlbmd0aAAlczogY2Fubm90IGhhbmRsZSB6ZXJvIHN0cmlwIHNpemUAJXNFT0wgcGFkZGluZwBObyBzcGFjZSBmb3Igc3RyaXAgYnVmZmVyAERlY29tcHJlc3NvciB3aWxsIHRyeSByZWFkaW5nIHdpdGggc2FtcGxpbmcgJWQsJWQuAFVua25vd24gZW5jb2RpbmcgJWQgZm9yIExvZ0x1diBjb21wcmVzc2lvbgBTdHJpcCBvZmZzZXRzIGFyZSBtaXNzaW5nAGNvbXBsZXggSUVFRSBmbG9hdGluZyBwb2ludAoARmlsZSBub3Qgb3BlbiBmb3IgcmVhZGluZwBBUFBMWV9CT1g6IEZBSUxVUkU6IGNhbid0IGZpbmQgY2xhc3NfaWQgZm9yICclcycKAExhbmcgcmVzdWx0AGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkA44CIAEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgBpbiBmaWxlICVzLCBsaW5lICVkAEFzc2VydCBmYWlsZWQAcGFnZXNlZ19kZXZhbmFnYXJpX3NwbGl0X3N0cmF0ZWd5AC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3N0cnVjdC9ibGFtZXIuY3BwACIACSUuM2YAUl9RVUFMSVRZX0FDQ0VQVDogJXMKAEEAQkwgTWF0Y2hlcyA9ICAAY2xhc3NpZnlfbm9ubGluZWFyX25vcm0AcmFuZG9tAGNsYXNzaWZ5X2NwX3NpZGVfcGFkX2xvb3NlACVkIG5vZGVzIGluIERBV0cKAHNlZ21lbnRfcGVuYWx0eV9kaWN0X2Nhc2Vfb2sAV29yZCBjYW4gbm90IGVuZCB3aXRoIGEgZnJhZ21lbnQKAGluIGZpbGUgJXMsIGxpbmUgJWQAbm9kZV9yZWYgPCBub2Rlc18uc2l6ZSgpACF2X2lvLmludF9tb2RlXwAKAFNvZnRtYXhOb0NUQwBJbnZhbGlkIGRpbWVuc2lvbiAoeHx5KSBpbiBMIFNwZWMhOiVzCgBOb0R1cABCb3ggd2FzICVkLCAlZAoASW5pdGlhbFBhcnRpdGlvbnMAISJVbmRlZmluZWQgZmxvdyB0eXBlIGZvciBpbWFnZSEiAE1vZGlmaWVkIHBhcnQ6AEFmdGVyIHJlZnJlc2hpbmcgYmxvYnM6CgBlZGdlc19taW5fbm9uaG9sZQBGdWxseSBjb250YWluZWQKAHRleHRvcmRfcGFyYWxsZWxfYmFzZWxpbmVzAG9sZGJsX3hoZml4AERvZXNuJ3Qgb3ZlcmxhcCBlbm91Z2gKAFZlcnRpY2FsIHNrZXcgdmVjdG9yPSglZCwlZCkKAGRlYnVnAEV2YWx1YXRpbmc6AFVzZSB3aXRoaW4geGh0IGdhcCBmb3Igd2QgYnJlYWtzAHRleHRvcmRfcGl0Y2hfY2hlYXQATWF4IHBpeGVsIGdhcCBmb3IgYnJva2VuIHBpeGVkIHBpdGNoAGRlYnVnAFBlbmFsdHkgZm9yIG5vbi1kaWN0aW9uYXJ5IHdvcmRzAFBUUkFJTl9OR1JBTV9DT1NUX1BFUl9DSEFSAE1pbiBJbnNpZGUgQW5nbGUgQmVuZAB0ZXNzaW5wdXQudGlmAAkJCQk8L0NvbXBvc2VkQmxvY2s+CgB3b3JkXwA2IDAgb2JqCjw8IC9MZW5ndGggAGNoYXJzLTYudGlmAGJhYSBub3QgZGVmaW5lZABub3QgaW4tcGxhY2UARXJyb3IgaW4gJXM6IGluY29uc2lzdGVudCBhbGlnbm1lbnQ6IG51bSBkb2Vzbid0IGRpdmlkZSBuCgBXYXJuaW5nIGluICVzOiBuZWVkIGF0IGxlYXN0IDQgYm94ZXM7IHJldHVybmluZyBjb3B5CgBwaXhtIGFuZCBwaXhtcyBzaXplcyBkaWZmZXIAaW52YWxpZCBpbmRleABwaXhjIG5vdCBtYWRlACZuc2FtZSBub3QgZGVmaW5lZABkNy43AHBpeHMgdW5kZWZpbmVkIG9yIG5vdCAzMiBicHAAJm5ncmF5IG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiB4MnMgPT0geDEhCgBpbnZhbGlkIGRpcmVjdGlvbgBuYXggYW5kIG5heSBzaXplcyBkaWZmZXIAV2FybmluZyBpbiAlczogZnJhY3QgbXVzdCBiZSBpbiBbMC4wLCAxLjBdOyBzZXR0aW5nIHRvIDAuNQoAcGl4IG5vdCBkZWZpbmVkIG9yIG5vdCA4IGJwcABlZGdldmFscyBub3QgZGVmaW5lZAAlMTUuNGYAaW50cmluc2ljIGRlcHRocyBhcmUgbm90IGVxdWFsAFdhcm5pbmcgaW4gJXM6IHNjYWxlID4gMS4wIG9yIDwgMC4wOyBzZXR0aW5nIHRvIDEuMAoAc2Egbm90IG1hZGUAbmFkIG5vdCBtYWRlAG5haGlzdG8gbm90IGRlZmluZWQAbmEgbm90IG1hZGUAU3BsaXR0aW5nOiB4bWluID0gJWQsIHcgPSAlZDsgbmwgPSAlZCwgbm1pbiA9ICVkLCBuciA9ICVkCgBFcnJvciBpbiAlczogZW5jb2RpbmcgdHlwZSBzZWxlY3Rpb24gZmFpbGVkIGZvciBwaXhbJWRdCgAgIFslZF0gPSAlbGYKAHBpeCBub3QgbWFkZQBJREFUAGZwIG5vdCBkZWZpbmVkAGJhZCEgLS0gaW52YWxpZCBkZXB0aCBjb21ibyEAcmluZyBkb2Vzbid0IGV4aXN0AFdhcm5pbmcgaW4gJXM6IG5vIGFscGhhIGNoYW5uZWw7IHJldHVybmluZyBhIGNvcHkKAG5vIGRhdGEgcmVxdWVzdGVkAHBpeDEgbm90IGRlZmluZWQgb3Igbm90IDEgYnBwAGxpbmVzZXQgbm90IG1hZGUAcGl4YWQgbm90IG1hZGUAcGFhIG5vdCBkZWZpbmVkAHBpeHMxIGFuZCBwaXhzMiBtdXN0IGRpZmZlcgBXYXJuaW5nIGluICVzOiBvZmZzZXQgPCAwOyBzZXR0aW5nIHRvIDAKAFdhcm5pbmcgaW4gJXM6IHBpeHMgaGFzIGFscGhhOyByZW1vdmluZwoAbm90IGEgdmFsaWQgcG5nIGZpbGUAIE51bWJlciBvZiBwdHMgPSAlZDsgZm9ybWF0ID0gJXMKAG5vIHNvbHV0aW9uIGZvdW5kAG1heGltdW1fbm9kZQBmYWlsZWQgcmVhZGluZyB0dXBsZSB0eXBlAHRpZmY6IG5vIGhlYWRlciBpbmZvIHJldHVybmVkAGJvdGggc2ExIGFuZCBzYTIgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogc2NhbGluZyBmYWN0b3JzIG5vdCA8IDAuNzsgZG8gcmVndWxhciBzY2FsaW5nCgBwaXhtIG5vdCBkZWZpbmVkIG9yIG5vdCAxIGJwcAB2YWxpZCBzaXplIHJhbmdlIGlzIHsyIC4uLiA2M30AL3RtcC9sZXB0L3NlbC90c2VsMS5wbmcAJXMvYXV0b2dlbi4lZC5jAHRpZiBub3Qgb3BlbiBmb3IgcmVhZABmcCBub3QgZGVmaW5lZAAKc2hvd3BhZ2UAJmZvcm1hdCBub3QgZGVmaW5lZABUb28gbWFueSBjb2xvciBjb21wb25lbnRzOiAlZCwgbWF4ICVkAEludmFsaWQgZmlsdGVyIG1ldGhvZCBpbiBJSERSAElnbm9yaW5nIGdBTUEgY2h1bmsgd2l0aCBnYW1tYT0wAGtleXdvcmQgbGVuZ3RoIG11c3QgYmUgMSAtIDc5IGNoYXJhY3RlcnMASW52YWxpZCBiYWNrZ3JvdW5kIHBhbGV0dGUgaW5kZXgARmlsbE9yZGVyACVzOiBGYWlsZWQgdG8gcmVhZCBjdXN0b20gZGlyZWN0b3J5IGF0IG9mZnNldCAldQAgKCVsdSA9IDB4JWx4KQoAQXNzdW1pbmcgOC1iaXQgY29sb3JtYXAASW1wcm9wZXIgSlBFRyBzYW1wbGluZyBmYWN0b3JzAHNwLT5pbl9idWZmZXJfdG9nbz09MAAldSAoMHgleCkKAENhbiBub3QgcmVhZCB0aWxlcyBmcm9tIGEgc3RyaXBwZWQgaW1hZ2UAQVBQTFlfQk9YOiBGQUlMVVJFOiBjYW4ndCBmaW5kIHNlZ21lbnRhdGlvbiBmb3IgJyVzJwoAVXNlZCAlZC8lZCBvdmVybGFwcGVkICVkLyVkIG5vbi1vdmVybGFwZWQgZGlhY3JpdGljcyBvbiB3b3JkOgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaADjgIkAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgAV2hldGhlciB0byB1c2UgdGhlIHRvcC1saW5lIHNwbGl0dGluZyBwcm9jZXNzIGZvciBEZXZhbmFnYXJpIGRvY3VtZW50cyB3aGlsZSBwZXJmb3JtaW5nIHBhZ2Utc2VnbWVudGF0aW9uLgBmaXJzdF9jaG9pY2UgIT0gbnVsbHB0cgAtAAoAUl9NSU5JTUFMX1JFSl9BQ0NFUFQ6ICVzCgB4AD09PT09PT09PT09PT09PT09PT09PT0KTG9va3NMaWtlR2FyYmFnZSgpIGdvdCAATm9uLWxpbmVhciBzdHJva2UtZGVuc2l0eSBub3JtYWxpemF0aW9uACEiRGlzdHJpYnV0aW9uIGNvdW50IG5vdCBhbGxvd2VkISIAQ2xhc3MgUHJ1bmVyIFNpZGUgUGFkIExvb3NlACVkIGVkZ2VzIGluIERBV0cKAFNjb3JlIG11bHRpcGxpZXIgZm9yIHdvcmQgbWF0Y2hlcyB0aGF0IGhhdmUgZ29vZCBjYXNlIChsb3dlciBpcyBiZXR0ZXIpLgBjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9kaWN0L3N0b3BwZXIuY3BwAApDb2xsYXBzaW5nIG5vZGUgJWxsaToKAEF0AExTVE1Tb2Z0bWF4AEludmFsaWQgZGlyZWN0aW9uIChmfHJ8YikgaW4gTCBTcGVjITolcwoAcm93ID49IGNvbHVtbgBBZnRlciBmaXR0aW5nAEZvdW5kICVkIGJsb2NrcywgJWQgdG9fYmxvY2tzCgAhIlVuZGVmaW5lZCBmbG93IHR5cGUgZm9yIHRleHQhIgBUb3RhbHM6IGh0ZXh0PSVkKyVkLCB2dGV4dD0lZCslZCwgaW1hZ2U9JWQrJWQsIGF0IGRpc3Q9JWQKAGRlYnVnAE1pbiBwaXhlbHMgZm9yIHBvdGVudGlhbCBjaGFyIGluIGJveABOb3Qgd2l0aGluIHRleHQgYm94CgBGb3JjZSBwYXJhbGxlbCBiYXNlbGluZXMARml4IGJ1ZyBpbiBtb2RlcyB0aHJlc2hvbGQgZm9yIHhoZWlnaHRzAGdvb2RuZXNzID0gJWcgdnMgYmVzdCBvZiAlZywgZ29vZD0lZCwgb3ZlcmxhcD0lZCwgZ2FwPSVkCgBUb28gZmV3IGJveGVzAGRpc3BsYXkAQmFkIEJveCAoJWQsJWQpLT4oJWQsJWQpIHdpdGggZ3V0dGVyICVkLCBtZWFuIGd1dHRlciAlZAoAdG9zcF91c2VfeGh0X2dhcHMAVXNlIGNvcnJlY3QgYW5zd2VyIGZvciBmaXhlZC9wcm9wAGRpc3BsYXkAbGFuZ3VhZ2VfbW9kZWxfcGVuYWx0eV9wdW5jAFBUUkFJTl9OVU1fQkFEX1BVTkMAY2hvcF9taW5fb3V0bGluZV9hcmVhAHdiAAkJCTwvUHJpbnRTcGFjZT4KACB0aXRsZT0nYmJveCAAID4+CnN0cmVhbQoAY2hhcnMtOC50aWYAYmEgbm90IGRlZmluZWQAaW52YWxpZCBzaWRlAGJhYXMgbm90IGRlZmluZWQAc21vb3RoAGRwaXggbm90IG1hZGUAaW52YWxpZCBpbmRleCBpbnRvIGZwaXhhAGhhbGZ3aWR0aCBtdXN0IGJlIDEgb3IgMgAmZGlmZmFyZWEgbm90IGRlZmluZWQAanVua3BpeDgucG5nAHRvbyBtYW55IGNvbG9ycwByYW5rdmFsIG5vdCBpbiBbMC4wIC4uLiAxLjBdAEVycm9yIGluICVzOiB4MnNwID09IHgxcCEKAGJ1ZmZlciBub3QgbWFkZQAlcy5kYXRhLiVkAFdhcm5pbmcgaW4gJXM6IHdpZHRoIG11c3QgYmUgPiAwOyBzZXR0aW5nIHRvIDEKAHBpeCBpcyBjb2xvcm1hcHBlZABpbnZhbGlkIG91dGRlcHRoAGhlaWdodCBtdXN0IGJlID4gMABkZXB0aHMgdW5lcXVhbCBvciBub3QgOCBvciAxNiBicHAAcGl4YXMgdW5kZWZpbmVkAGZpbGVuYW1lIG5vdCBkZWZpbmVkAG5zYW1wIG11c3QgYmUgPiAwAG5vdGhpbmcgdG8gY29tcHV0ZQBjb29yZHR5cGUgbm90IHZhbGlkAEluZm8gaW4gJXM6IG5vIGZnIHBpeGVscyBpbiBpbnB1dCBpbWFnZQoARXJyb3IgaW4gJXM6IHBkZiBlbmNvZGluZyBmYWlsZWQgZm9yIHBpeFslZF0KAGJhZCBpbnB1dCBkYXRhAFdhcm5pbmcgaW4gJXM6IHRleHQgaXMgJWx1IGJ5dGVzOyBjbGlwcGluZyB0byA2NTQzMwoAUExURQAgIFBpeCBJbmZvIGZvciAlczoKAG5vIGNvbG9ybWFwIGluIHBpeHMAaW52YWxpZCBwaXhlbCB2YWx1ZQBwaXhzIHVuZGVmaW5lZCBvciBub3QgMSBicHAAc3ggYW5kIHN5IG5vdCBib3RoID4gMQBwaXgyIG5vdCBkZWZpbmVkIG9yIG5vdCAxIGJwcABzdHJlYW0gbm90IGRlZmluZWQAYm94YSBub3QgZm91bmQAZGVwdGhzIGRpZmZlcjsgbWF4IDwgOABpbnZhbGlkIHR5cGUAcGl4YSBub3QgZGVmaW5lZABJbmZvIGluICVzOiBNb3JlIHRoYW4gMjU2IGNvbG9yczsgdXNpbmcgb2N0cmVlIHF1YW50IHdpdGggZGl0aGVyaW5nCgBJbmZvIGluICVzOiBncmF5ICsgYWxwaGE6IHdpbGwgZXh0cmFjdCBhcyBSR0JBIChzcHAgPSA0KQoAZmxvYXQAbGVzcyB0aGFuIDMgcHRzIGZvdW5kAEVycm9yIGluICVzOiByaWdodCBzaWJsaW5nIGlzIG5vdCBSRUQARU5ESERSAHBubTogbm8gaGVhZGVyIGluZm8gcmV0dXJuZWQAc3RyIG5vdCBkZWZpbmVkAHBpeHMgbXVzdCBiZSAxIGJwcABubyBzZWxzIGluIHNlbGEAL3RtcC9sZXB0L3NlbC90c2VsMi5wbmcAdwAmbiBub3QgZGVmaW5lZABFcnJvciBpbiAlczogY2FsbG9jIGZhaWwgZm9yIGRhdGEKAApncmVzdG9yZQAmZGF0YSBub3QgZGVmaW5lZABVbnN1cHBvcnRlZCBjb2xvciBjb252ZXJzaW9uIHJlcXVlc3QASW52YWxpZCBJSERSIGRhdGEASWdub3JpbmcgaW5jb3JyZWN0IGdBTUEgdmFsdWUgd2hlbiBzUkdCIGlzIGFsc28gcHJlc2VudABJZ25vcmluZyBhdHRlbXB0IHRvIHdyaXRlIDE2LWJpdCBiS0dEIGNodW5rIHdoZW4gYml0X2RlcHRoIGlzIDgARG9jdW1lbnROYW1lAGZvciAiU3RyaXBCeXRlQ291bnRzIiBhcnJheQAgIEZheCBEYXRhOgBObyBzcGFjZSBmb3IgcGhvdG9tZXRyaWMgY29udmVyc2lvbiB0YWJsZQBmcmFjdGlvbmFsIHNjYW5saW5lIG5vdCByZWFkAENvcnJ1cHQgRFJJIG1hcmtlciBpbiBKUEVHIGRhdGEAICBDb21wcmVzc2lvbiBTY2hlbWU6IABDYW4gbm90IHJlYWQgc2NhbmxpbmVzIGZyb20gYSB0aWxlZCBpbWFnZQBBcHBseWJveAAlZCBub2lzZSBvdXRsaW5lcyBvdmVybGFwIGJsb2IgYXQ6AOOAigBBc3NlcnQgZmFpbGVkAG9jcl9kZXZhbmFnYXJpX3NwbGl0X3N0cmF0ZWd5AEJlc3QgY2hvaWNlIGlzOiBpbmNvcnJlY3QsIHRvcCBjaG9pY2UsIGRpY3Rpb25hcnkgd29yZAAgACAlZABwb3MgPj0gMAAwAENhbm5vdCBtYWtlIG5ldyB0ZW1wb3JhcnkgY29uZmlnOiBtYXhpbXVtIG51bWJlciBleGNlZWRlZC4KAG1hdGNoZXJfZGVidWdfbGV2ZWwACgkAQXNzZXJ0IGZhaWxlZABzZWdtZW50X3BlbmFsdHlfZGljdF9jYXNlX2JhZAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaABvbGRfY2hvaWNlICE9IG51bGxwdHIAQ2FuZGlkYXRlIGVkZ2VzOiAALCBNZWFuIHJtcz0ATFNUTUJpbmFyeVNvZnRtYXgASW52YWxpZCBudW1iZXIgb2Ygc3RhdGVzIGluIEwgU3BlYyE6JXMKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3N0cnVjdC9tYXRyaXguaABSYWdnZWQgdGFiIHVzZWQgdG9vIG1hbnkgdXNlZCBwb2ludHM6ICVkIG91dCBvZiAlZAoAcGFydF9ncmlkXy5ncmlkaGVpZ2h0KCkgPT0gZ3JpZGhlaWdodF8AISJTaG91bGQgbmV2ZXIgZ2V0IGhlcmUhIgBQYXJ0IGhhcyB4LWdhcD0lZCwgeT0lZCwgZGlzdD0lZCBhdDoAZGlzcGxheQBUb28gc3Ryb25nIHRleHQKAFNldE5laWdoYm91ckZsb3dzIChjdXJyZW50IGZsb3c9JWQsIHR5cGU9JWQpIG9uOgBFdmFsdWF0ZWQgdGFiAENsaWNrIGF0ICglZCwgJWQpCgBSZWplY3RpbmcgYmFkIHRhYiBWZWN0b3Igd2l0aCAlZCBndXR0ZXIgdnMgJWcgbWluCgB0b3NwX29ubHlfdXNlX3hodF9nYXBzAEFzc2VydCBmYWlsZWQAUGVuYWx0eSBmb3IgaW5jb25zaXN0ZW50IHB1bmN0dWF0aW9uAFBUUkFJTl9OVU1fQkFEX0NBU0UATWluIE91dGxpbmUgQXJlYQBFcnJvciwgZmFpbGVkIHRvIG9wZW4gZmlsZSAiJXMiCgAJCTwvUGFnZT4KADsgeF93Y29uZiAANyAwIG9iago8PAogIC9Bc2NlbnQgMTAwMAogIC9DYXBIZWlnaHQgMTAwMAogIC9EZXNjZW50IC0xCiAgL0ZsYWdzIDUKICAvRm9udEJCb3ggIFsgMCAwIABjaGFycy0xMC50aWYAYm94YSBub3QgcmV0cmlldmVkAHZhbCA8IDAAYmFhcyBlbXB0eQAvdG1wL3Ntb290aC9ib3hhZS5iYQBwaXhzIG5vdCAxIGJwcABMRVBUX0NBTExPQyBmYWlsIGZvciBkcGl4AGludmFsaWQgZGlyZWN0aW9uAGludmFsaWQgdmFsdWUgZm9yIGFyZWFzbG9wAGp1bmtwaXgzMi5wbmcAbGV2ZWwgbm90IGluIHsxLC4uLjZ9AGN0YSBub3QgZGVmaW5lZCghKQBFcnJvciBpbiAlczogcGl4MiBub3QgbWFkZQoAcHRhcyBub3QgZGVmaW5lZAAlZiAlZgoAcGl4bSBub3QgZGVmaW5lZCBvciBub3QgMSBicHAAV2FybmluZyBpbiAlczogbm8gYmcgZm91bmQ7IG5vIGRhdGEgaW4gYW55IGNvbHVtbgoAIAkKLAB3aWR0aCBtdXN0IGJlID4gMABwaXgxIGFuZC9vciBwaXgyIGFyZSBjb2xvcm1hcHBlZABJbmZvIGluICVzOiBuaXRlcnMgPSAlZDsgbm90aGluZyB0byBkbwoAc3RyZWFtIG5vdCBvcGVuZWQAbmFkIGRlZmluZWQgYnV0ICE9IG5hcwBpZmlyc3QgaXMgdG9vIGxhcmdlAHN0ZXAgbnVtYWEgbm90IGZvdW5kAEluZm8gaW4gJXM6IFJlc29sdXRpb24gaXMgbm90IHNldDogc2V0dGluZyB0byAzMDAgcHBpCgBmaWxlaW4gbm90IGRlZmluZWQAc3RhcnR4ID0gJWxmLCBkZWx4ID0gJWxmCgBjYWxsb2MgZmFpbCBmb3Igcm93YnVmZmVyAEVycm9yIGluICVzOiBpbnZhbGlkIHBuZzogaSA9ICVkLCBuID0gJWQsIGNtYXBzaXplID0gJWQKACAgICB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZCwgZGVwdGggPSAlZCwgc3BwID0gJWQKAG5vIGNvbG9ybWFwIGluIHBpeGIAV2FybmluZyBpbiAlczogc2FtZTogbm90aGluZyB0byBkbwoAZGlzdCBtdXN0IGJlID49IDAAcGl4cyBub3QgOCBicHAgb3IgY21hcHBlZABJbmZvIGluICVzOiBzaXplcyB1bmVxdWFsOiAodzEsdzIpID0gKCVkLCVkKSwgKGgxLGgyKSA9ICglZCwlZCkKACVkOiBubyBwaXggYXQgdGhpcyBpbmRleAoAbmFpbmRleCBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBtYXh3aWR0aCA+IG1heHc7IHVzaW5nIG1heHdpZHRoCgBkZXB0aHMgdW5lcXVhbABpbnZhbGlkIGFjY2Vzc3R5cGUASW5mbyBpbiAlczogTW9yZSB0aGFuIDI1NiBjb2xvcnM7IHVzaW5nIG9jdHJlZSBxdWFudDsgbm8gZGl0aGVyaW5nCgBzdHJlYW0gbm90IG9wZW5lZAAgICAoJWYsICVmKQoAcXVhZHJhdGljIHNvbHV0aW9uIGZhaWxlZABkZWxldGVfY2FzZTYAbWlzc2luZyBMRiBhZnRlciBFTkRIRFIAZ2lmOiBwaXggbm90IHJlYWQAc2VwYXJhdG9ycyBub3QgZGVmaW5lZABwaXhzIG5vdCAxIGJwcABzYSBub3QgbWFkZQBzZWxfNF8xAHN0cmluZ3RlbXBsYXRlMi50eHQAV2FybmluZyBpbiAlczogYmlnIGZpbGU6IG1vcmUgdGhhbiAlZCBwYWdlcwoAcG5yZWFkIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IHJlcyAlZCBvdXQgb2YgYm91bmRzOyB1c2luZyBkZWZhdWx0IHJlczsgbm8gc2NhbGluZwoAJnNpemUgbm90IGRlZmluZWQAQm9ndXMgREFDIGluZGV4ICVkAE1pc3NpbmcgSUhEUiBiZWZvcmUgc0JJVABJZ25vcmluZyBhdHRlbXB0IHRvIHdyaXRlIGJLR0QgY2h1bmsgb3V0LW9mLXJhbmdlIGZvciBiaXRfZGVwdGgASW1hZ2VEZXNjcmlwdGlvbgAlczogQ2Fubm90IGRldGVybWluZSBzaXplIG9mIHVua25vd24gdGFnIHR5cGUgJWQAIGNsZWFuAE5vIHNwYWNlIGZvciBCJlcgbWFwcGluZyB0YWJsZQAhc3AtPmNpbmZvLmNvbW0uaXNfZGVjb21wcmVzc29yAENvcnJ1cHQgRFFUIG1hcmtlciBpbiBKUEVHIGRhdGEAJXMKACVkKyVkOgBOdW0gYmxvYmxlc3Mgb3V0bGluZXMgPSAlZAoA44CLACciKHtbAFdoZXRoZXIgdG8gdXNlIHRoZSB0b3AtbGluZSBzcGxpdHRpbmcgcHJvY2VzcyBmb3IgRGV2YW5hZ2FyaSBkb2N1bWVudHMgd2hpbGUgcGVyZm9ybWluZyBvY3IuACB3aXRoIHBlcm11dGVyIAByZWplY3RfbWFwLmxlbmd0aCgpID09IGxlbgAlczo8bm9uZT4KAGluIGZpbGUgJXMsIGxpbmUgJWQAcABDYW5ub3QgbWFrZSBuZXcgdGVtcCBwcm90b3M6IG1heGltdW0gbnVtYmVyIGV4Y2VlZGVkLgoATWF0Y2hlciBEZWJ1ZyBMZXZlbABBc3NlcnQgZmFpbGVkAERlZmF1bHQgc2NvcmUgbXVsdGlwbGllciBmb3Igd29yZCBtYXRjaGVzLCB3aGljaCBtYXkgaGF2ZSBjYXNlIGlzc3VlcyAobG93ZXIgaXMgYmV0dGVyKS4AQXNzZXJ0IGZhaWxlZABSZXBsYWNlQW1iaWcoKSAALCAAJSwgZGVsdGE9AFRlbnNvckZsb3cAUmV2TFNUTQByb3cgLSBjb2x1bW4gPCB0aGlzLT5kaW0yXwBUYWIgdmVjdG9yIGZhaWxlZCBiYXNpYyB0ZXN0czogcHQgY291bnQgJWQgdnMgbWluICVkLCBsZW5ndGggJWQgdnMgbWluICVkLCBtaW4gZ3JhZCAlZwoAQ29sdW1uIGNhbmRpZGF0ZXMAZ2FwIGlxciA9ICVnLCBibG9iX2NvdW50PSVkLCBsaW1pdHM9JWcsJWcKACVzICVkCgBBc3NlcnQgZmFpbGVkAFJlYWwgY2FuZGlkYXRlCgBTZXRGbG93czogaF9jb3VudD0lZCwgdl9jb3VudD0lZAoAQ29sdW1uIG9mIHdpZHRoICVkIGhhcyAlZCA9ICUuMmYlJSBsaW5lcwoAQXNzZXJ0IGZhaWxlZABGaW5hbCBndXR0ZXIgJWQsIHZzIGxpbWl0IG9mICVnLCByZXF1aXJlZCBzaGlmdCA9ICVkCgBPbmx5IHVzZSB3aXRoaW4geGh0IGdhcCBmb3Igd2QgYnJlYWtzAHRleHRvcmRfZGVidWdfYmxvY2sAbGFuZ3VhZ2VfbW9kZWxfcGVuYWx0eV9jYXNlAFBUUkFJTl9YSEVJR0hUX0NPTlNJU1RFTkNZAGNob3Bfc3BsaXRfZGlzdF9rbm9iADEJACBIUE9TPSIAOyB4X2ZvbnQgACAxMDAwIF0KICAvRm9udEZpbGUyIDggMCBSCiAgL0ZvbnROYW1lIC9HbHlwaExlc3NGb250CiAgL0l0YWxpY0FuZ2xlIDAKICAvU3RlbVYgODAKICAvVHlwZSAvRm9udERlc2NyaXB0b3IKPj4KZW5kb2JqCgBjaGFycy0xMi50aWYARXJyb3IgaW4gJXM6IGJveCBub3QgcmV0cmlldmVkCgBpbnZhbGlkIHNpZGVzAGJhYXMgaXMgbWlzc2luZyBhIGJveGEAL3RtcC9zbW9vdGgvYm94YW8uYmEAcmFuayBtdXN0IGJlIGluIFswLjAsIDEuMF0AZHBpeHMgbm90IGRlZmluZWQAcGl4cyBjb2xvcm1hcHBlZABib3hhcyBub3QgZGVmaW5lZABkIG5vdCBpbiB7MiwgNCwgOCwgMzJ9AHRhYmxlcyBub3QgbWFkZQB2YWwgbm90IGluIFswIC4uLiAyNTVdAEVycm9yIGluICVzOiBwaXhkIG5vdCBtYWRlCgBwdGFkIG5vdCBkZWZpbmVkAGludmFsaWQgZ3Bsb3Qgc2NhbGluZwBueCwgbnkgbXVzdCBiZSA+IDAAcGl4cyB1bmRlZmluZWQgb3Igbm90IDggYnBwAG1vcmUgdGhhbiAyNTYgbGV2ZWxzAGN5IGludmFsaWQAbGVwdC9jb21wAHNvbWUgcGl4IGhhdmUgYnBwID4gMQBuYSBub3QgcmVhZABpbnZhbGlkIHRocmVzaABJbmZvIGluICVzOiBzdW0gaXMgMAoAYm94YSBub3QgZm91bmQAYyVkLjEgKyBvJWQuMQBpbnZhbGlkIGNvbnZlcnNpb24gdHlwZQB3AGRhdGEgbm90IGRlZmluZWQAaW52YWxpZCBQTkcgZmlsZQAgICAgd3BsID0gJWQsIGRhdGEgPSAlcCwgcmVmY291bnQgPSAlZAoAZGVwdGggbm90IGluIHsyLDQsOH0AcGl4cyBhbmQgcGl4ZCBzaXplcyBkaWZmZXIAV2FybmluZyBpbiAlczogbm8gT04gcGl4ZWxzIGluIG1hc2sKAHdkIG9yIGhkID09IDAAJmNhbmNsaXAgbm90IGRlZmluZWQAUGl4ICVkOiB3ID0gJWQsIGggPSAlZCwgZCA9ICVkLCBzcHAgPSAlZABpbnZhbGlkIGNvcHlmbGFnAGxhc3QgPCBmaXJzdCEAZGVwdGggbm90IDgsIDE2IG9yIDMyIGJwcABkaXJuYW1lIG5vdCBkZWZpbmVkAG5vIGNvbG9ybWFwACZ4cmVzIGFuZCAmeXJlcyBub3QgYm90aCBkZWZpbmVkAGVycm9yIHJlYWRpbmcgZmxvYXRzAGxlc3MgdGhhbiA0IHB0cyBmb3VuZABFcnJvciBpbiAlczogbGVmdCBzaWJsaW5nIGlzIG5vdCBSRUQASW5mbyBpbiAlczogaW52YWxpZCBzaXplOiB3ID0gJWQsIGggPSAlZAoAd2VicDogbm8gaGVhZGVyIGluZm8gcmV0dXJuZWQAc2FpbiBub3QgZGVmaW5lZABzY2FsZWZhY3RvciA8PSAwLjAAJnhwIChldGMpIGRlZmluZWQAc2VsXzRfMgBzYTIgbm90IG1hZGUAJnhyZXMgYW5kICZ5cmVzIG5vdCBib3RoIGRlZmluZWQAJm5yZWFkIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGxlZnQgZWRnZSA8IDAuMCBpbmNoCgAmcGl4IG5vdCBkZWZpbmVkAEJvZ3VzIERBQyB2YWx1ZSAweCV4AEludmFsaWQgc0JJVCBhZnRlciBJREFUAEludmFsaWQgbnVtYmVyIG9mIGhpc3RvZ3JhbSBlbnRyaWVzIHNwZWNpZmllZABNYWtlACVzOiBUSUZGIGRpcmVjdG9yeSBpcyBtaXNzaW5nIHJlcXVpcmVkICIlcyIgZmllbGQAIHJlY2VpdmVyIHJlZ2VuZXJhdGVkAE5vIHNwYWNlIGZvciBQYWxldHRlIG1hcHBpbmcgdGFibGUAUGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbiAlZCBub3QgYWxsb3dlZCBmb3IgSlBFRwBPdXQgb2YgbWVtb3J5ACAgUGhvdG9tZXRyaWMgSW50ZXJwcmV0YXRpb246IABTZWdtZW50OgBBZGRlZCB0byBsZWZ0IGJsb2IKAOOAjQA6JyIuPyFdfSkAdGVzc2VkaXRfd3JpdGVfcGFyYW1zX3RvX2ZpbGUAQ2xhc3NpZmllci9PbGQgTE0gdHJhZGVvZmYgaXMgdG8gYmxhbWUAYm94X3dvcmQtPmxlbmd0aCgpID09IGxlbgAlcwoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L3JlamN0bWFwLmNwcABVdGY4IGJ1ZmZlciB0b28gYmlnLCBzaXplPiVkIGZvciAlcwoATWFraW5nIG5ldyB0ZW1wIGNvbmZpZyAlZCBmb250aW5mbyBpZCAlZCB1c2luZyAlZCBvbGQgYW5kICVkIG5ldyBwcm90b3MuCgBtYXRjaGVyX2RlYnVnX2ZsYWdzAEhpdCBFT0YgaW4gUmVhZE5GbG9hdHMhCgBjbGFzc2lmeV9jcF9zaWRlX3BhZF9tZWRpdW0Ac2VnbWVudF9wZW5hbHR5X2RpY3Rfbm9ud29yZABNb2RpZmllZCBibG9iX2Nob2ljZXM6IAAKCgAlLCBjaGFyIHRyYWluPQBJbnZhbGlkIG5ldHdvcmsgbGF5ZXIgdHlwZTolcwoATFRSAHNyYy5kYXdncyA9PSBudWxscHRyAFN0YXJ0aW5nIGFsaWdubWVudCBydW4gYXQgYmxvYjoASW1wcm92ZWQgY29sdW1ucwBObyBwYXRoCgBIdGV4dABlZGdlc19wYXRoYXJlYV9yYXRpbwBNZXJnaW5nIGltYWdlIHBhcnQ6AHRleHRvcmRfc3RyYWlnaHRfYmFzZWxpbmVzAHRleHRvcmRfb2Nyb3B1c19tb2RlAHB1cmVfaD0lZCwgcHVyZV92PSVkCgBDaGVja2luZyBmb3IgdmVydGljYWwgbGluZXMKAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUARXZhbHVhdGlvbiBjb21wbGV0ZToAdG9zcF9ydWxlXzlfdGVzdF9wdW5jdAB0ZXh0b3JkX2Jsb2NrbmRvY19maXhlZABCbG9jayB0byBkbyBkZWJ1ZyBvbgBQZW5hbHR5IGZvciBpbmNvbnNpc3RlbnQgY2FzZQBQVFJBSU5fTlVNX0JBRF9DSEFSX1RZUEUAU3BsaXQgbGVuZ3RoIGFkanVzdG1lbnQACQAgVlBPUz0iADsgeF9mc2l6ZSAAL3BkZi50dGYAY2hhcnMtMTQudGlmAGRpcm5hbWUgbm90IGRlZmluZWQAdGFyZ2V0IDwgMQBib3hhIGFyZSBub3QgYWxsIHRoZSBzYW1lIHNpemUAL3RtcC9zbW9vdGgvYm94YWxmZS5iYQBwaXhhY2Mgbm90IDMyIGJwcABkcGl4IG5vdCBkZWZpbmVkAHBpeHMgbm90IDMyIGJwcABubyBib3hlcyBpbiBib3hhcwBXYXJuaW5nIGluICVzOiBjb2xvcm1hcCBzaXplICVkIGRpZmZlcnMgZnJvbSBhY3R1YWwgY29sb3JzCgBpbnZhbGlkIG1pbmRlcHRoACZkaXN0IG5vdCBkZWZpbmVkAHZjIG5vdCBkZWZpbmVkAGdudXBsb3QgJXMAcHRhYSBub3QgZGVmaW5lZABwaXhzIGhhcyBjb2xvcm1hcABXYXJuaW5nIGluICVzOiBvdXRkZXB0aCB0b28gc21hbGw7IHNldHRpbmcgdG8gOCBicHAKAGN4IGludmFsaWQASW5mbyBpbiAlczogSW1hZ2VzIGFyZSBwaXhlbC13aXNlIGlkZW50aWNhbAoAbmFzYyB1bmRlZmluZWQgb3IgZW1wdHkAc3RyZWFtIG5vdCBkZWZpbmVkAGludmFsaWQgdGhyZXNob2xkcwAmbmF5IG5vdCBkZWZpbmVkAHN0YXJ0IHB0YSBub3QgZm91bmQAYyVkLjEAcGRmIGRhdGEgbm90IHdyaXR0ZW4gdG8gZmlsZQBkYSBub3Qgd3JpdHRlbiB0byBzdHJlYW0ARXJyb3IgaW4gJXM6IHBpeCBub3QgcmVhZAoAY21hcGRhdGEgbm90IG1hZGUAICAgIHhyZXMgPSAlZCwgeXJlcyA9ICVkCgBub3QgZW5vdWdoIHJvb20gaW4gY21hcHMAcGl4ZCBub3QgbWFkZQAmcHZhbCBub3QgZGVmaW5lZABwaXhzIHVuZGVmaW5lZCBvciBub3QgOCBicHAAYm94IG5vdCB3aXRoaW4gaW1hZ2UALCBjbWFwKCVkIGNvbG9ycykAZWxlbWVudCBjb3VudCBtaXNtYXRjaABubWF4IDwgMSEAcGl4cyBub3QgaW4gezQsOCwxNiwzMn0gYnBwAHNhIG5vdCBtYWRlAGNhbGxvYyBmYWlsIGZvciBsdXQAJmludGVybGFjZWQgbm90IGRlZmluZWQAICAgKCVkLCAlZCkKAGN1YmljIHNvbHV0aW9uIGZhaWxlZABJbmZvIGluICVzOiBpbnZhbGlkIG1heHZhbCA9ICVkCgBQb3N0U2NyaXB0IHJlYWRpbmcgaXMgbm90IHN1cHBvcnRlZAoAV2FybmluZyBpbiAlczogbGFzdCA+IG4gLSAxOyBzZXR0aW5nIHRvIG4gLSAxCgBzY2FsZWZhY3RvciA+PSAxLjAAcXVhZHMgbm90IGluIHswLDEsMiwzLDR9AHNlbF80XzMAICogICBhdXRvZ2VuLiVkLmgAaW5wdXQgcHRyKHMpIG5vdCBhbGwgZGVmaW5lZABzdHJlYW0gbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogcmlnaHQgZWRnZSA+IDguNSBpbmNoCgBpbnZhbGlkIHNjYWxlIGZhY3RvcgBCb2d1cyBESFQgaW5kZXggJWQAT3V0IG9mIHBsYWNlIHNCSVQgY2h1bmsARW1wdHkgbGFuZ3VhZ2UgZmllbGQgaW4gaVRYdCBjaHVuawBNb2RlbABmb3IgSUZEIGxpc3QAIHVuY29ycmVjdGVkIGVycm9ycwBObyBzcGFjZSBmb3IgWUNiQ3ItPlJHQiBjb252ZXJzaW9uIHN0YXRlAEJpdHNQZXJTYW1wbGUgJWQgbm90IGFsbG93ZWQgZm9yIEpQRUcAQ0lFIExvZzIoTCkKAENvbXBsZXRlIG1hdGNoLCByYXRpbmcgPSAlZywgYmVzdD0lZywgc2VnbGVuZ3RoPSVkLCBiZXN0PSVkCgBBZGRlZCB0byByaWdodCBibG9iCgDjgIwAJWQAV3JpdGUgYWxsIHBhcmFtZXRlcnMgdG8gdGhlIGdpdmVuIGZpbGUuAEJsYW1lciBjb21wdXRpbmcgY29ycmVjdF9zZWdtZW50YXRpb25fY29scwoAcGFnZV9yZXMgPT0gb3RoZXIucGFnZV9yZXMAQXNzZXJ0IGZhaWxlZABwb3MgPCBsZW4AJWQKAE1ha2luZyBjb25maWcgJWQgZm9yICVzIChDbGFzc0lkICVkKSBwZXJtYW5lbnQ6IGZvbnRpbmZvIGlkICVkLCBhbWJpZ3VpdGllcyAnAE1hdGNoZXIgRGVidWcgRmxhZ3MAUmVhZCBvZiAldSBmbG9hdHMgZmFpbGVkIQoAQ2xhc3MgUHJ1bmVyIFNpZGUgUGFkIE1lZGl1bQBTY29yZSBtdWx0aXBsaWVyIGZvciBnbHlwaCBmcmFnbWVudCBzZWdtZW50YXRpb25zIHdoaWNoIGRvIG5vdCBtYXRjaCBhIGRpY3Rpb25hcnkgd29yZCAobG93ZXIgaXMgYmV0dGVyKS4AU3RvcHBlcjogTm9uLXVuaWZvcm0gY2VydGFpbnR5ID0gJTQuMWYgKG09JTQuMWYsIHM9JTQuMWYsIHQ9JTQuMWYpCgBlZGdlX2NoYXJfb2YoY3Vycl9uZXh0X25vZGUsIG5leHRfbm9kZTIsIEZPUldBUkRfRURHRSwgY3Vycl93b3JkX2VuZCwgY3Vycl91bmljaGFyX2lkLCAmZWRnZV9wdHIsICZlZGdlX2luZGV4KQAlLCB3b3JkIHRyYWluPQBBc3NlcnQgZmFpbGVkAEJpZGlMU1RNAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9sc3RtL3JlY29kZWJlYW0uaABBbGlnbm1lbnQgcnVuIGVuZGVkIHdpdGggJWQgcHRzIGF0IGJsb2I6AEZpbmFsIENvbHVtbnMAVG90YWwgY29zdCA9ICVkIHZzIGFsbG93ZWQgJWQKAFZ0ZXh0AE1heCBsZW5zcS9hcmVhIGZvciBhY2NlcHRhYmxlIGNoaWxkIG91dGxpbmUAd2l0aCBwYXJ0OgBGb3JjZSBzdHJhaWdodCBiYXNlbGluZXMATWFrZSBiYXNlbGluZXMgZm9yIG9jcm9wdXMAQ2xlYW4gb24gcGFzcyAzIQoAVGFiR3V0dGVyIHRvdGFsICVkICBtZWRpYW5fZ2FwICUuMmYgIG1lZGlhbl9oZ3QgJS4yZgoAVGVzdGluZyBmb3IgdmVydGljYWwgdGV4dABEb24ndCBjaG5nIGtuIHRvIHNwYWNlIG5leHQgdG8gcHVuY3QAQXR0ZW1wdCB3aG9sZSBkb2MvYmxvY2sgZml4ZWQgcGl0Y2gAbGFuZ3VhZ2VfbW9kZWxfcGVuYWx0eV9zY3JpcHQAUFRSQUlOX05VTV9CQURfU1BBQ0lORwBjaG9wX292ZXJsYXBfa25vYgAJLTEJCgAgV0M9IjAuACBkaXI9J2x0cicAcmIAY2hhcnMtMTYudGlmAG5vIHBpeGEgZmlsZXMgZm91bmQAJnNhbWUgbm90IGRlZmluZWQAJmluZGV4IG5vdCBkZWZpbmVkAC90bXAvc21vb3RoL2JveGFsZm8uYmEAaGFsZnNpemUgbXVzdCBiZSA+PSAxAGRwaXhkIG5vdCBtYWRlAGZyYWN0IG5vdCBpbiBbLTEuMCAuLi4gMS4wXQBib3hzIG5vdCBkZWZpbmVkAHNpZ2JpdHMgbm90IGluIFsyIC4uLiA2XQBkIG5vdCA4IG9yIDMyIGJwcABpbnZhbGlkIGluZGV4ACZ2YWwgbm90IGRlZmluZWQAc2V0IHRpdGxlICclcycAcHRhMSBub3QgbWFkZQBJbmZvIGluICVzOiBwaXhtIG5vdCBkZWZpbmVkCgBjYWxsb2MgZmFpbCBmb3IgdGFiACAJCgBJbmZvIGluICVzOiBJbWFnZXMgZGlmZmVyOiBvdXRwdXQgcGxvdHMgd2lsbCBiZSBnZW5lcmF0ZWQKAEVycm9yIGluICVzOiBwaXhhZCBub3QgbWFkZTogbiA9ICVkLCBuc2MgPSAlZAoACk51bWEgVmVyc2lvbiAlZAoAdGhyZXNoMiA8IHRocmVzaDEAbmFzeSBub3QgZGVmaW5lZABib3VuZGluZyByZWN0YW5nbGUgbm90IGZvdW5kAEluZm8gaW4gJXM6IHBpeCBjbGVhbmluZyBmYWlsZWQKAGltYWdlIGRhdGEgbm90IGRlZmluZWQAICBbJWRdID0gJWYKACZkYXRhIG5vdCBkZWZpbmVkAGRhdGFjb21wIG5vdCBleHRyYWN0ZWQAICAgIG5vIGNvbG9ybWFwCgBwaXhzMSBvciBwaXhzMiBpcyAxIGJwcABuZWdhdGl2ZSBib3JkZXIgYWRkZWQhAHBpeG0gdW5kZWZpbmVkIG9yIG5vdCAxIGJwcABpbnZhbGlkIGNsaXBwaW5nIGJveAAmbG9jIG5vdCBkZWZpbmVkACwgdGV4dCA9ICVzAGludmFsaWQgZmlyc3QAV2FybmluZyBpbiAlczogaW52YWxpZCBjb21wcmVzc2lvbiB0eXBlOyB1c2luZyBkZWZhdWx0CgBwaXhzIHVuZGVmaW5lZCBvciBub3QgMzIgYnBwAHNhcnJheSBub3QgZGVmaW5lZABJbmZvIGluICVzOiBtaW5mcmFjdCA9ICU1LjNmOyBpbnZlcnRpbmcKAGRhdGEgbm90IHJlYWQAZXJyb3IgcmVhZGluZyBpbnRzAGxlc3MgdGhhbiA1IHB0cyBmb3VuZABJbmZvIGluICVzOiBpbnZhbGlkIGRlcHRoID0gJWQKAFBkZiByZWFkaW5nIGlzIG5vdCBzdXBwb3J0ZWQKAGZpcnN0IG11c3QgYmUgPj0gbGFzdABzY2FsZWZhY3RvciB0b28gc21hbGwAZm5hbWUgbm90IGRlZmluZWQAc2VsXzRfNAAjaWZuZGVmICBMRVBUT05JQ0FfQVVUT0dFTl8lZF9ICiNkZWZpbmUgIExFUFRPTklDQV9BVVRPR0VOXyVkX0gAaW1hZ2UgaW5kZXggbXVzdCBiZSA+PSAwAEVycm9yIGluICVzOiBzdGFydCA9ICVsdSBidXQgZmlsZWJ5dGVzID0gJWx1CgBXYXJuaW5nIGluICVzOiBib3R0b20gZWRnZSA8IDAuMCBpbmNoCgBwaXhzIG5vdCByZWFkAEJvZ3VzIERRVCBpbmRleCAlZABEdXBsaWNhdGUgc0JJVCBjaHVuawBVbnJlY29nbml6ZWQgdW5pdCB0eXBlIGZvciBvRkZzIGNodW5rAFN0cmlwT2Zmc2V0cwBpbmNvcnJlY3QgY291bnQgZm9yIGZpZWxkICIlcyIgKCV1LCBleHBlY3RpbmcgJXUpOyB0YWcgaWdub3JlZAAgKCV1ID0gMHgleCkKAE5vIHNwYWNlIGZvciBDSUUgTCphKmIqLT5SR0IgY29udmVyc2lvbiBzdGF0ZS4ASlBFRyB0aWxlIGhlaWdodCBtdXN0IGJlIG11bHRpcGxlIG9mICVkAENvcnJ1cHQgREhUIG1hcmtlciBpbiBKUEVHIGRhdGEAQ0lFIExvZzIoTCkgKHUnLHYnKQoATWF0Y2ggZm91bmQgZm9yICVkPSVzOiVzLCBhdCAlZCslZCwgcmVjdXJzaW5nLi4uCgBGaXR0ZWQgYmV0d2VlbiBibG9icwoAAEludmFsaWQgYXJndW1lbnRzIHJvd3NbJWQsICVkKSB3aGlsZSByb3dzIGlzIG9mIHNpemUgJWQuCgB0ZXNzZWRpdF9hZGFwdGlvbl9kZWJ1ZwBCb3ggeCBjb29yZCB2cy4gdHJ1dGg6IABvdGhlci53b3JkX3JlcyAhPSBudWxscHRyICYmIHdvcmRfcmVzICE9IG51bGxwdHIAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQBsZW4gPiAwACVzICV4ICVzICVkCgAlcwBjbGFzc2lmeV9sZWFybmluZ19kZWJ1Z19sZXZlbABzcGhlcmljYWwAc2VnbWVudF9wZW5hbHR5X2dhcmJhZ2UAIAByZW1vdmVkICVkIGVkZ2VzIGZyb20gbm9kZSAlbGxkCgAlLCBza2lwIHJhdGlvPQA/AFhZVHJhbnNMU1RNAEFzc2VydCBmYWlsZWQAQ29sdW1uIGVkZ2VzIGZvciBibG9iIGF0ICglZCwlZCktPiglZCwlZCkgYXJlIFslZCwgJWRdCgBjb2x1bW5fY2FuZGlkYXRlICE9IG51bGxwdHIAUmVnaW9uRmxvd1R5cGVzRnJvbVByb2plY3Rpb25WYWx1ZSBjb3VudD0lZCwgbm9pc3k9JWQsIHNjb3JlPSVkLABXZWFrICVkCgBCb3VuZGluZyBib3g9KCVkLCVkKS0+KCVkLCVkKQoASW5pdGlhbCB0ZXh0IGNoYWlucwBBZGphY2VudCBibG9iOiBjb25zaWRlcmluZyBib3g6ACAgICAgICAgICAgcGFydG5lcgB0b3NwX2ZsaXBfZnV6el9rbl90b19zcABQZW5hbHR5IGZvciBpbmNvbnNpc3RlbnQgc2NyaXB0AFBUUkFJTl9OVU1fQkFEX0ZPTlQAU3BsaXQgb3ZlcmxhcCBhZGp1c3RtZW50ADIJAD4APgBDYW5ub3Qgb3BlbiBmaWxlICIlcyIhCgBjaGFycy0xOC50aWYARXJyb3IgaW4gJXM6IGJveGEgbm90IHJlYWQgZm9yICVkLXRoIGZpbGUAYm94YTEgYW5kIGJveGEyIG5vdCBib3RoIGRlZmluZWQAV2FybmluZyBpbiAlczogbm8gYm94ZXMgaW4gYm94YQoAL3RtcC9zbW9vdGgvYm94YW1lLmJhAHBpeGF2IG5vdCBtYWRlAGRwaXhkIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IG5vIGNoYW5nZSByZXF1ZXN0ZWQgaW4gaHVlCgBib3hhdCBub3QgZGVmaW5lZABmYWN0b3IgPCAxIG9yIG5jb2xvcnMgPCAxAGNtYXAgbm90IGRlZmluZWQAbm8gcmVzdWx0IHJlcXVlc3RlZABkYXRhcyBub3QgZGVmaW5lZABzZXQgeGxhYmVsICclcycAcGl4cyB1bmRlZmluZWQgb3Igbm90IDEgYnBwAHBpeG0gbm90IDEgYnBwACZ0YWIgbm90IGRlZmluZWQAdyA9ICVkLCBoID0gJWQsIG51bSBpbnRzID0gJWQKAC90bXAvbGVwdC9jb21wL2NvbXBhcmVfZ3JheSVkAG1hc2sgcGl4IG5vdCBkZWZpbmVkAG5vdCBhIG51bWEgZmlsZQBuIGlzIG5vdCBvZGQAcHJhbmsgbm90IGRlZmluZWQAcHRhYW4gbm90IG1hZGUASW5mbyBpbiAlczogcGl4IGlzIGVtcHR5CgBwaXggbm90IHJlYWQACgAmc2l6ZSBub3QgZGVmaW5lZABkYXRhODUgbm90IG1hZGUAICAgIGlucHV0IGZvcm1hdDogJWQgKCVzKQoAcGl4ZyBub3QgOCBicHAAbmVnYXRpdmUgYm9yZGVyIHJlbW92ZWQhAGJveCBub3QgZGVmaW5lZABubyByZXN1bHQgcmVxdWVzdGVkAGludmFsaWQgYm94AAoAZmlyc3QgPiBsYXN0AGZpbGVvdXQgbm90IGRlZmluZWQAdGFiIG5vdCBtYWRlAEVycm9yIGluICVzOiBwaXhjIG5vdCByZWFkIGZyb20gZmlsZTogJXMKACZwaXhkIG5vdCBkZWZpbmVkAG5vIG91dHB1dCBkZWZpbmVkAGRhdGEgbm90IGRlZmluZWQAcXVhcnRpYyBzb2x1dGlvbiBmYWlsZWQAJWQgJWQKAHNwaXg6IG5vIGhlYWRlciBpbmZvIHJldHVybmVkAG5vdCBhbGwgcmFuZ2UgYWRkcmVzc2VzIGRlZmluZWQAcGl4czEgdW5kZXJkZWZpbmVkLCBub3QgOCBicHAsIG9yIGNtYXBwZWQAc3RyZWFtIG5vdCBvcGVuZWQAc2VsXzRfNQB2b2lkICpsX2F1dG9kZWNvZGVfJWQobF9pbnQzMiBpbmRleCk7AGZpbGUgbm90IHRpZmYgZm9ybWF0AGNhbGxvYyBmYWlsIGZvciBkYXRhAFdhcm5pbmcgaW4gJXM6IHRvcCBlZGdlID4gMTEuMCBpbmNoCgBwaXhzIG5vdCBkZWZpbmVkAEVtcHR5IEpQRUcgaW1hZ2UgKEROTCBub3Qgc3VwcG9ydGVkKQBJbmNvcnJlY3Qgc0JJVCBjaHVuayBsZW5ndGgAVW5yZWNvZ25pemVkIGVxdWF0aW9uIHR5cGUgZm9yIHBDQUwgY2h1bmsAT3JpZW50YXRpb24AaW5jb3JyZWN0IGNvdW50IGZvciBmaWVsZCAiJXMiICgldSwgZXhwZWN0aW5nICV1KTsgdGFnIHRyaW1tZWQAICBCYWQgRmF4IExpbmVzOiAlbHUKAEZhaWxlZCB0byBpbml0aWFsaXplIENJRSBMKmEqYiotPlJHQiBjb252ZXJzaW9uIHN0YXRlLgBKUEVHIHRpbGUgd2lkdGggbXVzdCBiZSBtdWx0aXBsZSBvZiAlZABDb3JydXB0IFNPRiBtYXJrZXIgaW4gSlBFRyBkYXRhACAgRXh0cmEgU2FtcGxlczogJXU8AE1hdGNoAE5vIE5vaXNlIGJsb2IgY2xhc3NpZmllZCBhcyAlcz0lZyglZykgYXQ6ACMgVG9vIGZldyByb3dzWyVkLCAlZCkgZm9yICVzLgoAR2VuZXJhdGUgYW5kIHByaW50IGRlYnVnIGluZm9ybWF0aW9uIGZvciBhZGFwdGlvbgAgACJFcnJvcjogSW5jb21wYXJhYmxlIFBBR0VfUkVTX0lUcyIgPT0gbnVsbHB0cgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaAAiJXMiAAkjIAAnLgoATGVhcm5pbmcgRGVidWcgTGV2ZWw6IABlbGxpcHRpY2FsAFNjb3JlIG11bHRpcGxpZXIgZm9yIHBvb3JseSBjYXNlZCBzdHJpbmdzIHRoYXQgYXJlIG5vdCBpbiB0aGUgZGljdGlvbmFyeSBhbmQgZ2VuZXJhbGx5IGxvb2sgbGlrZSBnYXJiYWdlIChsb3dlciBpcyBiZXR0ZXIpLgBbRW1wdHldAHJlZHVjZV9sZXR0ZXJlZF9lZGdlcyhlZGdlPSVsbGQpCgAlLCAAMkRMU1RNUXVhZABhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAFN0YXJ0aW5nICVzICVzIHNlYXJjaCBhdCAlZC0lZCwlZCwgc2VhcmNoX3NpemU9JWQsIGd1dHRlcj0lZAoARm91bmQgJWQgJXM6CgAgUHJvamVjdGlvbiB2YWx1ZT0lZCwgZmxvdz0lZCwgYmxvYl90eXBlPSVkCgBJbWFnZSAlZAoAR29vZFRleHRsaW5lIGJsb2JzAEdpdmluZyB1cCBkdWUgdG8gYmlnIGdhcCA9ICVkIHZzICVkCgBnYXBzPSVkLCBtYXRjaGVkPSVkLCB1bm1hdGNoZWQ9JWQsIG1pbl9tYXRjaD0lZCBtZWRpYW4gZ2FwPSUuMmYsIHdpZHRoPSUuMmYgbWF4X2dhcD0lLjJmIFZlcnRpY2FsPSVzCgBEZWZhdWx0IGZsaXAAdGV4dG9yZF9waXRjaF9yYW5nZQBsYW5ndWFnZV9tb2RlbF9wZW5hbHR5X2NoYXJ0eXBlAFBUUkFJTl9SQVRJTkdfUEVSX0NIQVIAY2hvcF9jZW50ZXJfa25vYgAzCQBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplADxzdHJvbmc+ADggMCBvYmoKPDwKICAvTGVuZ3RoIABjaGFycy0yMC50aWYAZmlsZW5hbWUgbm90IGRlZmluZWQAJnNpbWlsYXIgbm90IGRlZmluZWQAL3RtcC9zbW9vdGgvYm94YW1vLmJhAHBpeHMgaGFzIGNvbG9ybWFwAGRwaXhzIGFuZCBkcGl4ZCBub3QgYm90aCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IG5vIGNoYW5nZSByZXF1ZXN0ZWQgaW4gc2F0dXJhdGlvbgoAbmFzY29yZSBub3QgZGVmaW5lZABuYWhpc3RvIG5vdCBtYWRlAGxldmVsIG5vdCBpbiB7MS4uLjZ9AGludmFsaWQgc2VsZWN0aW9uAHBpeCB1bmRlZmluZWQgb3Igbm90IDMyIGJwcABzZXQgeWxhYmVsICclcycAV2FybmluZyBpbiAlczogbm90aGluZyBmb3VuZCB0byBmaWxsCgBJbmZvIGluICVzOiBwaXhtIGhhcyBubyBmZyBwaXhlbHM7IG5vdGhpbmcgdG8gZG8KACZjbWFwIG5vdCBkZWZpbmVkAGludmFsaWQgaW50ZWdlciBkYXRhAFBpeGVsIERpZmZlcmVuY2UgSGlzdG9ncmFtAGNvbm5lY3Rpdml0eSBub3QgaW4gezQsOH0AaW52YWxpZCBudW1hIHZlcnNpb24AaW52YWxpZCBzcGFuAHBydmFsIG5vdCBkZWZpbmVkAHB0YW4gbm90IG1hZGUAV2FybmluZyBpbiAlczogUmVzb2x1dGlvbiBpcyBub3Qgc2V0OiB1c2luZyAzMDAgcHBpCgBwaXggbm90IG1hZGUAc3RhcnR4ID0gJWYsIGRlbHggPSAlZgoAJnBpeCBub3QgZGVmaW5lZABpbnZhbGlkIGNvbnZlcnNpb24gdHlwZQAgICAgdGV4dDogJXMKAG5vIGFscGhhOyBwaXhzMiBub3QgcmdiYQB3aWR0aCBtdXN0IGJlID4gMABkJWQuJWQAcGl4cyBub3QgOCBvciAzMiBicHAAaW52YWxpZCBzY2FuZmxhZwBib3hhIGluZGV4IG5vdCB2YWxpZABwYWFzIG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiBmaXJzdCA9ICVkID4gbGFzdCA9ICVkCgBsb2d0YWIgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTCEKAFdhcm5pbmcgaW4gJXM6IG1heGNvbG9ycyA+IDUwOyB2ZXJ5IGxhcmdlIQoARXJyb3IgaW4gJXM6IHRyYW5zcGFyZW5jeSBhcnJheSBub3QgcmV0dXJuZWQKAEVycm9yIGluICVzOiBwdGEgbm90IHJlYWQKAGZhY3RvciBtdXN0IGJlID4gMC4wAGludmFsaWQgcmVhZCBmb3IgdyxoAEVycm9yIGluICVzOiB1bmtub3duIGZvcm1hdCBpbiBmaWxlICVzCgBzdWJzdHIgbm90IGRlZmluZWQAcGl4czIgdW5kZXJkZWZpbmVkLCBub3QgOCBicHAsIG9yIGNtYXBwZWQAc2VsYSBub3QgcmV0dXJuZWQAc2VsXzRfNgAjZW5kaWYgIC8qIExFUFRPTklDQV9BVVRPR0VOXyVkX0ggKi8AaW1hZ2UgbiBub3QgZm91bmQgaW4gZmlsZQBJbmZvIGluICVzOiAlbHUgYnl0ZXMgcmVxdWVzdGVkOyAlbHUgYnl0ZXMgcmVhZAoAanBlZyBkYXRhIG5vdCBtYWRlAG5vIHByb2dyYW0gY2hvc2VuIGZvciBkaXNwbGF5AFJlYWQgZnJvbSBFTVMgZmFpbGVkAE1pc3NpbmcgSUhEUiBiZWZvcmUgY0hSTQBDYW4ndCB3cml0ZSBzQ0FMIChidWZmZXIgdG9vIHNtYWxsKQBTYW1wbGVzUGVyUGl4ZWwAcGRpcgAgIENvbnNlY3V0aXZlIEJhZCBGYXggTGluZXM6ICVsdQoAUm93c1BlclN0cmlwIG11c3QgYmUgbXVsdGlwbGUgb2YgJWQgZm9yIEpQRUcASlBFRyBjb21wcmVzc2VkIGRhdGEgaW5kaWNhdGVzIHVuZXhwZWN0ZWQgbnVtYmVyIG9mIHNhbXBsZXMAAEFtYmlnAEFsbCBOb2lzZSBibG9iIGNsYXNzaWZpZWQgYXMgJXM9JWcsIGRlbHRhPSVnIGF0OgB8ACMgJXMKAGJpZGlfZGVidWcAY29sPQAhd3JfaXQuY3ljbGVkX2xpc3QoKQByJS4yZiBjJS4yZiB4WyVnLCVnXTogJWQgJXMAJWQAJXMgIABtYXRjaGVyX2dvb2RfdGhyZXNob2xkAG1peGVkAGNsYXNzaWZ5X2NwX3NpZGVfcGFkX3RpZ2h0AG91dHB1dF9hbWJpZ193b3Jkc19maWxlACVzIAByZWR1Y2Vfbm9kZV9pbnB1dChub2RlPSVsbGQpCgAgaXRlcmF0aW9uIABMMkRMVFJEb3duAFJhZ2dlZABzZXRfY291bnQgPT0gZ3JpZGhlaWdodCgpAGJsb2ItPm93bmVyKCkgPT0gbnVsbHB0ciB8fCBibG9iLT5vd25lcigpID09IHRoaXMAQm91bmRpbmcgYm94PSglZCwlZCktPiglZCwlZCkKAGVkZ2VzX2NoaWxkYXJlYQB0ZXh0b3JkX29sZF9iYXNlbGluZXMAb2xkYmxfeGhmcmFjdABDb2xsaXNpb24gd2l0aCBsaWtlIHRhYiBvZiB0eXBlICVkIGF0ICVkLCVkCgBZZXMAdG9zcF9mbGlwX2Z1enpfc3BfdG9fa24AdGV4dG9yZF9wcm9qZWN0aW9uX3NjYWxlAE1heCByYW5nZSB0ZXN0IG9uIHBpdGNoAFBlbmFsdHkgZm9yIGluY29uc2lzdGVudCBjaGFyYWN0ZXIgdHlwZQBTcGxpdCBjZW50ZXIgYWRqdXN0bWVudAA0CQA8ZW0+AAogIC9MZW5ndGgxIABwaXhzIG5vdCBkZWZpbmVkAHN0cmVhbSBub3Qgb3BlbmVkAEVycm9yIGluICVzOiBib3hhIGNvdW50cyBkaWZmZXI6ICVkIHZzICVkCgBXYXJuaW5nIGluICVzOiBoYWxmd2luIG11c3QgYmUgPiAwOyByZXR1cm5pbmcgY29weQoAcGl4cyBub3QgOCwgMTYsIG9yIDMyIGJwcABmaWxlbmFtZSBub3QgZGVmaW5lZABzdWJzYW1wbGluZyBmYWN0b3IgPCAxAG5haW5kZXggbm90IG1hZGUAaW52YWxpZCBtZXRyaWMAd2VpZ2h0cyBub3QgYWxsID49IDAuMABzZXQgdGVybWluYWwgcG5nOyBzZXQgb3V0cHV0ICclcycAcGl4cyBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBtaXNzaW5nIHBpeG1jIQoAbmEgbm90IGRlZmluZWQAZmlsZW5hbWUgbm90IGRlZmluZWQAZGlmZiB2YWwAcGl4IHNpemVzIHVuZXF1YWwATnVtYmVyIG9mIG51bWJlcnMgPSAlZAoAbiAlIDMgaXMgbm90IDEAV2FybmluZyBpbiAlczogcmFuayA8IDA7IHNldHRpbmcgdG8gMC4wCgBubyBjY2IAYzMwLjEgKyBvMTUuMSArIGM2MC4xICsgbzIuMgBzdHJlYW0gbm90IG9wZW5lZABkYWEgbm90IG1hZGUAaW52YWxpZCBhc2NpaTg1AGRlcHRocyBub3QgcmVndWxhcml6ZWQhIGJhZCEAaGVpZ2h0IG11c3QgYmUgPiAwAFdhcm5pbmcgaW4gJXM6IG5vIHBpeGVscyBmb3VuZAoAaW52YWxpZCBjb2xvcgBpbnZhbGlkIHRocmVzaG9sZHMAaW5kZXggbm90IGluIHswLi4ubn0AbmVpdGhlciB3ZCBub3IgaGQgPiAwAGludmFsaWQgdGlsaW5nIGZhY3RvcihzKQBwaXhhYyBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBtaW5ncmF5Y29sb3JzID4gMzA7IHZlcnkgbGFyZ2UhCgBwaXggbm90IGRlZmluZWQAdwBlcnJvciBpbiBsaW5lYXIgTFNGAGludmFsaWQgcmVhZCBmb3IgbWF4dmFsICgyLDUpACZmb3JtYXQgbm90IGRlZmluZWQAZmlsZW5hbWUgbm90IGRlZmluZWQAc2NhbGUgbm90IGluIFswLjUsIDEuMF0Ac3RyZWFtIG5vdCBkZWZpbmVkAHNlbF80XzcAJXMvYXV0b2dlbi4lZC5oAGNkYXRhIG5vdCBkZWZpbmVkAG9wZXJhdGlvbiBub3QgZGVmaW5lZAB3AHBpeDEgbm90IG1hZGUAV3JpdGUgdG8gRU1TIGZhaWxlZABJbnZhbGlkIGNIUk0gYWZ0ZXIgSURBVABVbnJlY29nbml6ZWQgdW5pdCB0eXBlIGZvciBwSFlzIGNodW5rAFJvd3NQZXJTdHJpcAB0aWZfZGlycmVhZC5jACAgRmF4IFJlY2VpdmUgUGFyYW1ldGVyczogJTA4bHgKAEGg7wkLscAGSlBFRyBjb21wcmVzc2VkIGRhdGEgaW5kaWNhdGVzIHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZQAlc3Vuc3BlY2lmaWVkAEVuZCByZWN1cnNpb24gZm9yICVkPSVzCgAlZAAjcm93AERlYnVnIGxldmVsIGZvciBCaURpACByb3c9ACF3X2l0LmN5Y2xlZF9saXN0KCkAQXNzZXJ0IGZhaWxlZAAlczoldSBmYWlsZWQKAGkgdiB4IEkgViBYAEdvb2QgTWF0Y2ggKDAtMSkAYXV0b21hdGljAENsYXNzIFBydW5lciBTaWRlIFBhZCBUaWdodABPdXRwdXQgZmlsZSBmb3IgYW1iaWd1aXRpZXMgZm91bmQgaW4gdGhlIGRpY3Rpb25hcnkAKCAATm9kZSAlbGxkIGFmdGVyIHJlZHVjdGlvbjoKAC8ATDJETFRSWFJldgBBbGlnbmVkAFNldCBpZCAlZCBkaWQgbm90IG1hdGNoIGF0IHk9JWQsIGxpbmVzZXQgPSVwCgBQYXJ0aXRpb24gd2l0aCBwYXJ0bmVyIGhhcyBubyB3b3JraW5nIHNldCE6AG1lcmdlMSAhPSBudWxscHRyICYmIG1lcmdlMiAhPSBudWxscHRyAE1pbiBhcmVhIGZyYWN0aW9uIG9mIGNoaWxkIG91dGxpbmUAVXNlIG9sZCBiYXNlbGluZSBhbGdvcml0aG0ARnJhY3Rpb24gb2YgZXN0IGFsbG93ZWQgaW4gY2FsYwBTbW9vdGhlZCBibG9icwBHb29kIHJlc3VsdAoATm8AdG9zcF9pbXByb3ZlX3RocmVzaABEaW5nIHJhdGUgZm9yIG1pZC1jdXRzAGxhbmd1YWdlX21vZGVsX3BlbmFsdHlfZm9udABjaG9wX2NlbnRlcmVkX21heHdpZHRoADUJAAogICAgICAgPHNwYW4gY2xhc3M9J29jcnhfY2luZm8nIHRpdGxlPSd4X2Jib3hlcyAACj4+CnN0cmVhbQoASW5mbyBpbiAlczogbnJvd3MgPSAlZDsgc2tpcHBpbmcgZm9udHNpemUgJWQKAGJveGFhIG5vdCByZWFkAEluZm8gaW4gJXM6IGJveCAlZCBub3Qgc2ltaWxhcgoAV2FybmluZyBpbiAlczogbmVlZCBhdCBsZWFzdCA2IGJveGVzOyByZXR1cm5pbmcgY29weQoAa2VsIG5vdCBkZWZpbmVkAHN0cmVhbSBub3Qgb3BlbmVkAFdhcm5pbmcgaW4gJXM6IG5vIGNoYW5nZSByZXF1ZXN0ZWQgaW4gYnJpZ2h0bmVzcwoAc2lnYml0cyBub3QgaW4gezIsMyw0fQBFcnJvciBpbiAlczogbmEgbm90IG1hZGUKAFdhcm5pbmcgaW4gJXM6IGFsbCB3ZWlnaHRzIHplcm87IHNldHRpbmcgZXF1YWwgdG8gMS8zCgBzZXQgdGVybWluYWwgcG9zdHNjcmlwdDsgc2V0IG91dHB1dCAnJXMnAHBpeHMgaGFzIGNvbG9ybWFwAHcgYW5kIGggbXVzdCBiZSA+PSA1AG1vcmUgYmlucyB0aGFuIGNtYXAgbGV2ZWxzAGZpbGUgbm90IGZvdW5kAG51bWJlciBvZiBwaXhlbHMAc2VsXzMgbm90IG1hZGUAaW52YWxpZCBudW1iZXIgb2YgbnVtYmVycwBpbnZhbGlkIGVkZ2UAV2FybmluZyBpbiAlczogcmFuayA+IDEuMDsgc2V0dGluZyB0byAxLjAKAFdhcm5pbmcgaW4gJXM6IGxvY2FsIHBpeGVsIGxvYyBhcnJheSBub3QgZm91bmQKAGluaXRpYWwgOCBicHAAZmFpbHVyZSB3cml0aW5nIHBkZiBkYXRhIHRvIHN0cmVhbQBsX2RuYSBwdHIgYXJyYXkgbm90IG1hZGUAV2FybmluZyBpbiAlczogcGl4cyBoYXMgY21hcDsgdXNpbmcgZmxhdGUgZW5jb2RpbmcKAHBpeHMgbm90IDMyIGJwcABib3JkZXIgdG9vIGxhcmdlAG1hc2tuZWFyAGludmFsaWQgdHlwZQBub3QgYWxsIGVkZ2VzIGZvdW5kAGluZGV4IG5vdCBpbiB7MC4uLm4gLSAxfQAhbmF3ZCAmJiAhbmFoZABwaXhhcyBpcyBlbXB0eQBpbnZhbGlkIGZvcm1hdABXYXJuaW5nIGluICVzOiBpbnZhbGlkIG9jdGxldmVsOyBzZXR0aW5nIHRvIDMKAHdiKwBwdGEgbm90IHdyaXR0ZW4gdG8gc3RyZWFtAGVycm9yIGluIHF1YWRyYXRpYyBMU0YAbWF4dmFsID0gJWQKAHRydW5jYXRlZCBmaWxlAHN0cmVhbSBub3Qgb3BlbmVkAGludmFsaWQgd2lkdGggcmF0aW8AClNlbGEgVmVyc2lvbiAlZAoAc2VsXzRfOAAmc3RyIG5vdCBkZWZpbmVkAHRpZmZlcnJvcgBkYXRhIG5vdCBkZWZpbmVkAHBzIHN0cmluZyBub3Qgd3JpdHRlbiB0byBmaWxlAGxlcHQvZGlzcABEaWRuJ3QgZXhwZWN0IG1vcmUgdGhhbiBvbmUgc2NhbgBNaXNzaW5nIFBMVEUgYmVmb3JlIGNIUk0ASW52YWxpZCB0aW1lIHNwZWNpZmllZCBmb3IgdElNRSBjaHVuawBTdHJpcEJ5dGVDb3VudHMAJXM6IFNlZWsgZXJyb3IgYWNjZXNzaW5nIFRJRkYgZGlyZWN0b3J5ACAgRmF4IFN1YkFkZHJlc3M6ICVzCgBUSUZGanBlZ190YWJsZXNfZGVzdABKUEVHIGNvbXByZXNzZWQgZGF0YSBpbmRpY2F0ZXMgdW5leHBlY3RlZCBoZWlnaHQAJXNhc3NvYy1hbHBoYQBBUFBMWV9CT1hFUzogVW5sYWJlbGxlZCB3b3JkIGF0IDoAIGJsb2IgY2xhc3NpZmllZCBhcyAlcz0lZywgZGVsdGE9JWcpIGF0OgBfc3B0AHNwYWNlAGFwcGx5Ym94X2RlYnVnAEJsYW1lciBmYWlsZWQgdG8gZmluZCBjb3JyZWN0IHNlZ21lbnRhdGlvbiAodG9sZXJhbmNlPQAhd29yZF9yZXMtPnBhcnRfb2ZfY29tYm8AbnVsbF9zaWRfID09IDAAMQBtYXRjaGVyX3JlbGlhYmxlX2FkYXB0aXZlX3Jlc3VsdAAgJTkuNmYAZGF3Z19kZWJ1Z19sZXZlbAAlZCAAJWxsZCAoJWQgJWQpOiAAV2FybmluZzogTFNUTVRyYWluZXIgZGVzZXJpYWxpemVkIGFuIExTVE1SZWNvZ25pemVyIQoATDJEUlRMRG93bgBSaWdodABCaWdnZXN0IHVuYXNzaWduZWQgcmFuZ2UgPSAlZC0gJWQKAE1hdGNoIGlzICVzIGZvcjoATkMgb3ZlcmxhcCBmYWlsZWQ6Q2FuZGlkYXRlOgBOb2lzZSBBcmVhcwBXcm9uZyB3YXkKAGRlYnVnAEVuYWJsZSBpbXByb3ZlbWVudCBoZXVyaXN0aWMAUGVuYWx0eSBmb3IgaW5jb25zaXN0ZW50IGZvbnQAV2lkdGggb2YgKHNtYWxsZXIpIGNob3BwZWQgYmxvYnMgYWJvdmUgd2hpY2ggd2UgZG9uJ3QgY2FyZSB0aGF0IGEgY2hvcCBpcyBub3QgbmVhciB0aGUgY2VudGVyLgAKADsgeF9jb25mIAAvRmxhdGVEZWNvZGUAMyByb3dzIG5vdCBnZW5lcmF0ZWQAc3RyZWFtIG5vdCBkZWZpbmVkAGJveGFkIG5vdCBkZWZpbmVkAC90bXAvc21vb3RoL2JveGFtZWRlLmJhAEVycm9yIGluICVzOiBwaXh0IG5vdCBtYWRlCgBmcGl4IG5vdCByZWFkAHJmcmFjdCBub3QgaW4gWy0xLjAsLi4uLDEuMF0AZmFjdG9yIDwgMQB0YWIgbm90IGFsbG9jYXRlZABXYXJuaW5nIGluICVzOiB3ZWlnaHRzIGRvbid0IHN1bSB0byAxOyBtYWludGFpbmluZyByYXRpb3MKAHNldCB0ZXJtaW5hbCBwb3N0c2NyaXB0IGVwczsgc2V0IG91dHB1dCAnJXMnAHBpeHMgbm90IDggb3IgMTYgYnBwAFdhcm5pbmcgaW4gJXM6IHNtb290aGVkIGJnIGhhcyAwIHBpeGVsIQoAY21hcCBub3QgbWFkZQBmaWxlIGlzIGVtcHR5AGdyYXkAIE51bSBpdGVycyBpbiBiaW5hcnkgcmVjb25zdHJ1Y3Rpb24gPSAlZAoAICBbJWRdID0gJWYKACZ5dmFsIG5vdCBkZWZpbmVkAG5vIG91dHB1dCByZXF1ZXN0ZWQAcHRhcyBub3QgbWFkZQB3aXRoIGJhY2tncm91bmQgY2xlYW5pbmcAJmRhdGEgb3IgJm5ieXRlcyBub3QgZGVmaW5lZABkYWEgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogcGl4cyBoYXMgPCA4IGJwcDsgdXNpbmcgZmxhdGUgZW5jb2RpbmcKAHBpeGQgbmVpdGhlciBudWxsIG5vciBwaXhzAHBpeHMgYW5kIHBpeGQgbm90IGJvdGggZGVmaW5lZAAvdG1wL21hc2tuZWFyL2lucHV0LnBuZwBjYW4ndCByZXR1cm4gcmVzdWx0IGluIGdyYXl2YWwAJnBsb2Mgbm90IGRlZmluZWQAcGl4YWQgbm90IGRlZmluZWQAbmF3ZCB3cm9uZyBzaXplAG5zcGxpdCBtdXN0IGJlID49IDIAYXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kcwB0b28gbWFueSBjb2xvcnMAcGl4IG5vdCB3cml0dGVuIHRvIHN0cmVhbQAgTnVtYmVyIG9mIHB0cyA9ICVkOyBmb3JtYXQgPSBmbG9hdAoAJnkgbm90IGRlZmluZWQAaW52YWxpZCBtYXh2YWwAZmFpbGVkIHRvIHJlYWQgZmlyc3QgMTIgYnl0ZXMgb2YgZmlsZQBzYSBub3QgcmVhZABpbnZhbGlkIGhlaWdodCByYXRpbwBub3QgYSBzZWxhIGZpbGUAc2VsXzRfOQBmaWxlbmFtZSBub3QgZGVmaW5lZAB0aWZmIHN0cmVhbSBub3Qgb3BlbmVkAG5ieXRlcyBtdXN0IGJlID4gMABhAC90bXAvbGVwdC9kaXNwL3dyaXRlLiUwM2QucG5nAElucHV0IGZpbGUgcmVhZCBlcnJvcgBEdXBsaWNhdGUgY0hSTSBjaHVuawB6bGliIGVycm9yAE1pblNhbXBsZVZhbHVlACVzOiBDYW4gbm90IHJlYWQgVElGRiBkaXJlY3RvcnkgY291bnQAICBGYXggUmVjZWl2ZSBUaW1lOiAlbHUgc2VjcwoATm8gc3BhY2UgZm9yIEpQRUdUYWJsZXMASlBFRyBjb21wcmVzc2VkIGRhdGEgaW5kaWNhdGVzIHVuZXhwZWN0ZWQgd2lkdGgAJXN1bmFzc29jLWFscGhhACAgIEZvdW5kICVkIGdvb2QgYmxvYnMuCgAlcyBub2lzZSBjb21iaW5hdGlvbiAAcGFydAAuLgBEZWJ1ZyBsZXZlbAAgYmxvYiA9PSBudWxscHRyAHdyX2l0LmRhdGEoKS0+cGFydF9vZl9jb21ibwBDb21tb24AMABHcmVhdCBNYXRjaCAoMC0xKQBTZXQgdG8gMSBmb3IgZ2VuZXJhbCBkZWJ1ZyBpbmZvLCB0byAyIGZvciBtb3JlIGRldGFpbHMsIHRvIDMgdG8gc2VlIGFsbCB0aGUgZGVidWcgbWVzc2FnZXMAKQoACQAgRmFpbGVkIHRvIHJldmVydCB0byBwcmV2aW91cyBiZXN0IGZvciB0cmlhbCEATDJEUlRMWVJldgBMZWZ0AFJhbmdlIG1vZGFsIGNvbHVtbiBpZCA9ICVkCgBSZWFsAGZhaWxzIHRvIGJlIGEgZ29vZCBtZXJnZSB3aXRoOgBCbG9iIG5vdCBhdmFpbGFibGUgdG8gYmUgYSBkaWFjcml0aWMgYXQ6AEluc3VmZmljaWVudCBvdmVybGFwCgBkaXNwbGF5AHRvc3BfZGVidWdfbGV2ZWwAdGV4dG9yZF93b3Jkc3RhdHNfc21vb3RoX2ZhY3RvcgBsYW5ndWFnZV9tb2RlbF9wZW5hbHR5X3NwYWNpbmcAY2hvcF9zaGFycG5lc3Nfa25vYgAlcyAlZCAlZCAlZCAlZCAlZAoAJz4AL0RDVERlY29kZQA5NSBjaGFycyBub3QgZ2VuZXJhdGVkAApCb3hhYSBWZXJzaW9uICVkCgBpc3RhcnQgPiBpZW5kOyBub3RoaW5nIHRvIGFkZAAvdG1wL3Ntb290aC9ib3hhbWVkby5iYQBrZWx4IG5vdCBkZWZpbmVkAHN0cmVhbSBub3QgZGVmaW5lZABnZnJhY3Qgbm90IGluIFstMS4wLC4uLiwxLjBdAFdhcm5pbmcgaW4gJXM6IG9ubHkgc2FtcGxpbmcgJWQgcGl4ZWxzCgBkIG5vdCBpbiB7MiwgNCwgOH0AY21hcHMgbm90IGZvciAyIGJwcCBwaXgAc2V0IHRlcm1pbmFsIGxhdGV4OyBzZXQgb3V0cHV0ICclcycAV2FybmluZyBpbiAlczogaW52YWxpZCBvdXRkZXB0aDsgc2V0dGluZyB0byAxCgBwaXhtIHVuZGVmaW5lZCBvciBub3QgMTYgYnBwAHRhYiBub3QgZGVmaW5lZAAlZCAlZAAvdG1wL2xlcHQvY29tcC9jb21wYXJlX2dyYXklZC5wbmcAc2VlZCBwaXggbm90IGRlZmluZWQAYmFkIGlucHV0IGRhdGEAbmF5IG5vdCBkZWZpbmVkAG5iaW5zIG11c3QgYmUgPiAxAHB0YWFwIG5vdCBtYWRlAHRocmVzaG9sZCB0byBiaW5hcnkAAFdhcm5pbmcgaW4gJXM6IHB0ciBhZGRyZXNzIGlzIE5VTEwhCgBXYXJuaW5nIGluICVzOiBwaXhzIGhhcyA+IDEgYnBwOyB1c2luZyBmbGF0ZSBlbmNvZGluZwoAV2FybmluZyBpbiAlczogbm8gYWxwaGEgY2hhbm5lbDsgcmV0dXJuaW5nIGNsb25lCgBwaXhzIG5vdCAzMiBicHAgYW5kIDQgc3BwAC90bXAvbWFza25lYXIvYWRqdXN0ZWQucG5nAGNhbid0IHJldHVybiByZXN1bHQgaW4gci9nL2ItdmFsAGQgbm90IDEgb3IgOCBicHAAaXN0YXJ0ID4gaWVuZDsgbm90aGluZyB0byBhZGQAbmFoZCB3cm9uZyBzaXplAG5vIG91dHB1dCBpcyByZXF1ZXN0ZWQAYm94IG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IHF1YW50aXplZCBhdCBsZXZlbCAyOyBsb3cgcXVhbGl0eQoAc3RyZWFtIG5vdCBvcGVuACBOdW1iZXIgb2YgcHRzID0gJWQ7IGZvcm1hdCA9IGludGVnZXIKAGxlcHQvcGxvdABpbnZhbGlkIHJlYWQgZm9yIG1heHZhbCAoMyw2KQBieXRlIGJ1ZmZlciBub3QgZGVmaW5lZABzdHJlYW0gbm90IGRlZmluZWQAZGVwdGggbm90IGluIHsxLDIsNCw4LDE2LDMyfQBpbnZhbGlkIHNlbCB2ZXJzaW9uAHNlbF84XzEAaW52YWxpZCBmaWVsZAAmY29tcHR5cGUgbm90IGRlZmluZWQAdwBvcGVyYXRpb24gbXVzdCBiZSAidyIgb3IgImEiAC90bXAvbGVwdC9kaXNwL3dyaXRlLiUwM2QuanBnAE91dHB1dCBmaWxlIHdyaXRlIGVycm9yIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8ASW5jb3JyZWN0IGNIUk0gY2h1bmsgbGVuZ3RoAFVua25vd24gY29tcHJlc3Npb24gdHlwZQBNYXhTYW1wbGVWYWx1ZQB0byByZWFkIFRJRkYgZGlyZWN0b3J5ACAgRmF4IERDUzogJXMKAFN0cmlwL3RpbGUgdG9vIGxhcmdlIGZvciBKUEVHAEpQRUcgY29tcHJlc3NlZCBkYXRhIGluZGljYXRlcyB1bmV4cGVjdGVkIHN1YnNhbXBsaW5nIHZhbHVlcwAlcyV1ICgweCV4KQAgICBMZWF2aW5nICVkIHVubGFiZWxsZWQgYmxvYnMgaW4gJWQgd29yZHMuCgBBZGRpbmcAIWJsb2JfaXQuZGF0YSgpLT5qb2luZWRfdG9fcHJldigpAGx3b3JkW3dpZHRoU0VMXQBhcHBseWJveF9wYWdlACkKACFyZWFsX3dvcmQtPmZsYWcoV19GVVpaWV9TUCkgJiYgIXJlYWxfd29yZC0+ZmxhZyhXX0ZVWlpZX05PTikATGF0aW4AbABtYXRjaGVyX3BlcmZlY3RfdGhyZXNob2xkAGNsYXNzaWZ5X3BwX2FuZ2xlX3BhZABoeXBoZW5fZGVidWdfbGV2ZWwAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQAgACBUcmlhbCBzdWJfdHJhaW5lcl8gZnJvbSBpdGVyYXRpb24gAEwyRFJUTFVwAE5laWdoYm91ciB0b28gZmFyIGF0ICglZCwlZCktPiglZCwlZCkKAFNocnVuayByYW5nZSA9ICVkLSAlZAoAQmV0d2VlbgBBc3NlcnQgZmFpbGVkAGVkZ2VzX2JveGFyZWEAdGV4dG9yZF9vbGRfeGhlaWdodABvbGRibF9ob2xlZF9sb3NzY291bnQARm91bmQgJWQgc21hbGwgZGlhY3JpdGljcywgJWQgbWVkaXVtCgBHaXZpbmcgdXAgZHVlIHRvIGVuZCBvZiBzZWFyY2gKAExlZnQgQWxpZ25lZABEZWJ1ZyBkYXRhAHRleHRvcmRfYmFsYW5jZV9mYWN0b3IAU21vb3RoaW5nIGdhcCBzdGF0cwBQZW5hbHR5IGZvciBpbmNvbnNpc3RlbnQgc3BhY2luZwBTcGxpdCBzaGFycG5lc3MgYWRqdXN0bWVudABQYWdlIG51bWJlcjogADwvc3Bhbj4AL0NDSVRURmF4RGVjb2RlACZ5IG5vdCBkZWZpbmVkAG5vdCBhIGJveGFhIGZpbGUAYmFhZCBub3QgZGVmaW5lZABuZWVkIGF0IGxlYXN0IDIgYm94ZXMAa2VseSBub3QgZGVmaW5lZAAKRlBpeCBWZXJzaW9uICVkCgBiZnJhY3Qgbm90IGluIFstMS4wLC4uLiwxLjBdAG5vdCBhbGwgdGFibGUgcHRycyBkZWZpbmVkAGhpc3RvIG5vdCBtYWRlAGNtYXBzIG5vdCAyIG9yIDQgYnBwAHNldCBsb2dzY2FsZSB4AHN0YXJ0dmFsIG5vdCBpbiBbMCAuLi4gbWF4dmFsXQBpbnZhbGlkIHN4IGFuZC9vciBzeQBjYWxsb2MgZmFpbCBmb3IgYmluY291bnQAZXJyb3IgcmVhZGluZyBoLHcAcGl4MSBub3QgZGVmaW5lZCBvciBub3QgMzIgYnBwAGludmFsaWQgcnVuIHR5cGUAc3RhcnR4ID0gJWYsIGRlbHggPSAlZgoAZGVsdGF4IG5vdCA+IDAAbmFyIG5vdCBtYWRlAHB0YWYgbm90IG1hZGUAaGl0LW1pc3MgZm9yIHZlcnRpY2FsIGxpbmUAV2FybmluZyBpbiAlczogaW52YWxpZCBpbWFnZSBvbiBwYWdlICVkCgBpbnZhbGlkIGluZGV4IGludG8gZGFhAHBpeCBub3QgcmV0dXJuZWQAaW52YWxpZCBmcmFjdABwaXhkIG5vdCAzMiBicHAAL3RtcC9tYXNrbmVhci9vdXRlcmZpdmUucG5nAHBpeHMgaGFzIGNvbG9ybWFwAHBpeHMgaGFzIGEgY29sb3JtYXAAcGl4YTEgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogcmVsYXRpdmUgc2NhbGUgdG8gc2l6ZSBmYWlsZWQ7IHVzZSBhIGNvcHkKAGxlcHQvc3BsaXQAYXJyYXkgaW5kZXggbm90IHZhbGlkAHBpeHMgbm90IDE2IGJwcABwaXgxIG5vdCBtYWRlACZkYXRhIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IG91dGZvcm1hdCBpbnZhbGlkOyB1c2luZyBHUExPVF9QTkcKAFdhcm5pbmcgaW4gJXM6IHVuZXhwZWN0ZWQgbWF4dmFsID0gJWQKAGRhdGEgbm90IGRlZmluZWQAClNhcnJheSBWZXJzaW9uICVkCgBmYWN0b3IgPD0gMDsgaW52YWxpZABOdW1iZXIgb2YgU2VscyA9ICVkCgoAc2VsXzhfMgBpbmRleCBub3QgcmV0cmlldmVkACZkYXRhIG5vdCBkZWZpbmVkAGEAcHMgc3RyaW5nIG5vdCBtYWRlAHh6Z3YgLS1nZW9tZXRyeSAlZHglZCslZCslZCAlcyAmAEZyYWN0aW9uYWwgc2FtcGxpbmcgbm90IGltcGxlbWVudGVkIHlldABJZ25vcmluZyBpbmNvcnJlY3QgY0hSTSB2YWx1ZSB3aGVuIHNSR0IgaXMgYWxzbyBwcmVzZW50AFhSZXNvbHV0aW9uACUuMTAwczogQ2FuIG5vdCByZWFkIFRJRkYgZGlyZWN0b3J5AEJpdHMvc2FtcGxlIG11c3QgYmUgMSBmb3IgR3JvdXAgMy80IGVuY29kaW5nL2RlY29kaW5nAGZyYWN0aW9uYWwgc2NhbmxpbmUgZGlzY2FyZGVkAHNwLT5zdWJzYW1wbGluZ2NvcnJlY3Q9PTAALCAAICAgJWQgcmVtYWluaW5nIHVubGFiZWxsZWQgd29yZHMgZGVsZXRlZC4KAE5ldwBXYXJuaW5nOiBsYW5nX3Rlc3NlcmFjdF8gaXMgbnVsbHB0ciEKAHJ3b3JkW3dpZHRoU0VMXQBQYWdlIG51bWJlciB0byBhcHBseSBib3hlcyBmcm9tACBwYXRoIGxlbmd0aCAAIXdvcmRfcmVzX2l0LmN5Y2xlZF9saXN0KCkAQ3lyaWxsaWMATwBQZXJmZWN0IE1hdGNoICgwLTEpAFByb3RvIFBydW5lciBBbmdsZSBQYWQARGVidWcgbGV2ZWwgZm9yIGh5cGhlbmF0ZWQgd29yZHMuAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAC4uLgAgc3ViX3RyYWluZXI9AEwyRFhSZXZVAG5laWdoYm91ciBhdCAoJWQsJWQpLT4oJWQsJWQpLCBuX3g9JWQsIG5feT0lZCwgeGF0bj0lZAoAQ29sdW1uIGlkICVkIGFwcGxpZXMgdG8gcmFuZ2UgPSAlZCAtICVkCgBUYXJnZXQgY29sdW1uPSVkLCBvbmx5IGhhZCAlZAoARXhhbWluaW5nIG1lcmdlIGNhbmRpZGF0ZToATWluIGFyZWEgZnJhY3Rpb24gb2YgZ3JhbmRjaGlsZCBmb3IgYm94AFVzZSBvbGQgeGhlaWdodCBhbGdvcml0aG0ATWF4IGxvc3QgYmVmb3JlIGZhbGxiYWNrIGxpbmUgdXNlZABUZXN0aW5nIGJsb2IgZm9yIGRpYWNyaXRpY25lc3MgYXQ6AEJveCBlZGdlICglZCwlZC0lZCkATGVmdCBSYWdnZWQAdG9zcF9lbm91Z2hfc3BhY2Vfc2FtcGxlc19mb3JfbWVkaWFuAERpbmcgcmF0ZSBmb3IgdW5iYWxhbmNlZCBjaGFyIGNlbGxzAGxhbmd1YWdlX21vZGVsX3BlbmFsdHlfaW5jcmVtZW50AGNob3Bfd2lkdGhfY2hhbmdlX2tub2IAT3JpZW50YXRpb24gaW4gZGVncmVlczogADwvZW0+ACAgICAvSyAtMQoAaW52YWxpZCBmb250IHNpemUAaW52YWxpZCBib3hhIHZlcnNpb24AJmJveGFlIGFuZCAmYm94YW8gbm90IGJvdGggZGVmaW5lZABtZWR3ID0gJTcuM2YsIG1lZHZhcncgPSAlNy4zZgoAcGl4cyBpcyBub3QgMzIgYnBwAG5vdCBhIGZwaXggZmlsZQBwaXhzIG5vdCBjbWFwcGVkIG9yIDMyIGJwcABFcnJvciBpbiAlczogSWxsZWdhbCBzaWdiaXRzID0gJWQKAHN3aXRjaCByYW4gb2ZmIGVuZCEAZmlsZW5hbWUgbm90IGRlZmluZWQAc2V0IGxvZ3NjYWxlIHkAaW5jciA8IDEAcGl4IG1hcHMgbm90IGFsbCBkZWZpbmVkAGNhbGxvYyBmYWlsIGZvciBiaW5hdmUAZXJyb3IgcmVhZGluZyBjeSxjeABwaXgyIG5vdCBkZWZpbmVkIG9yIG5vdCBldyBicHAAZGlyZWN0aW9uIG5vdCBpbiB7TF9IT1JJWiwgTF9WRVJUfQBkYXRhIG5vdCBkZWZpbmVkAGludmFsaWQgaW50ZXJwIHR5cGUAbnVtYSBub3QgbWFkZQBwdGFsIG5vdCBtYWRlAHJlc3RyaWN0ZWQgc2VlZC1maWxsAFdhcm5pbmcgaW4gJXM6IHNldHRpbmcgc2NhbGVmYWN0b3IgdG8gMS4wCgBpbnZhbGlkIGFjY2Vzc2ZsYWcAanBlZyBkYXRhIG5vdCBtYWRlAHBpeHMgbm90IDMyIGJwcCBvciBjbWFwcGVkAHBpeHMgbm90IGNtYXAgYW5kIG5vdCAzMiBicHAgcmdiYQBJbnB1dCBib3g7IHdpdGggYWRqdXN0ZWQgc2lkZXM7IGNsaXBwZWQKAHBpeHMgbm90IDgsIDE2IG9yIDMyIGJwcABXYXJuaW5nIGluICVzOiBmYWN0b3IgbXVzdCBiZSA+PSAxOyBzZXR0aW5nIHRvIDEKAHBpeGEyIG5vdCBkZWZpbmVkAGludmFsaWQgc2NhbGluZyBwYXJhbWV0ZXJzAG50ID0gJWQsIG4gPSAlZCwgbnNwbGl0ID0gJWQKAHBpeGMgbm90IGZvdW5kIQBwaXhzIG5vdCA4IG9yIDE2IGJwcABFcnJvciBpbiAlczogSW52YWxpZCB6bGliIGNvbXAgdmFsOyB1c2luZyBkZWZhdWx0CgAmc2l6ZSBub3QgZGVmaW5lZAAvdG1wL2xlcHQvcGxvdC8lMDNkAHBpeCBub3QgZGVmaW5lZABzaXplIDwgMTIAbm90IGFuIHNhcnJheSBmaWxlAGludmFsaWQgZGVwdGgKAHNlbCBub3QgcmVhZABzZWxfOF8zAFdhcm5pbmcgaW4gJXM6IHB0ciBhZGRyZXNzIGlzIG51bGwhCgAmbmJ5dGVzIG5vdCBkZWZpbmVkAG9wZXJhdGlvbiBub3Qgb25lIG9mIHsndycsJ2EnfQAmb3V0c3RyIG5vdCBkZWZpbmVkAHhsaSAtZGlzcGdhbW1hIDEuMCAtcXVpZXQgLWdlb21ldHJ5ICslZCslZCAtdGl0bGUgIiVzIiAlcyAmAEh1ZmZtYW4gY29kZSBzaXplIHRhYmxlIG92ZXJmbG93AE1pc3NpbmcgSUhEUiBiZWZvcmUgc1JHQgBZUmVzb2x1dGlvbgAlczogQ2FuIG5vdCByZWFkIFRJRkYgZGlyZWN0b3J5AFJvdyBwaXhlbHMgaW50ZWdlciBvdmVyZmxvdyAocm93cGl4ZWxzICV1KQBzcCAhPSAwAENvcnJ1cHQgU09TIG1hcmtlciBpbiBKUEVHIGRhdGEAPgoAQVBQTFlfQk9YRVM6IGJveGZpbGUgbGluZSAlZC8lcyAoKCVkLCVkKSwoJWQsJWQpKTogJXMKACB5aWVsZHMgY2VydGFpbnR5ICVnLCBiZWF0aW5nIHRhcmdldCBvZiAlZwoAcGFydF9ncmlkL2Jlc3RfY29sdW1ucyBpcyBudWxscHRyISEKAHRleHQALmV4cAAgdnMuIHRydXRoIABBc3NlcnQgZmFpbGVkAEdyZWVrAGludF9yZXN1bHRfY29uZmlnID49IDAgJiYgaW50X3Jlc3VsdF9jb25maWcgPCBmcy5zaXplAG1hdGNoZXJfYmFkX21hdGNoX3BhZAB1c2Vfb25seV9maXJzdF91ZnQ4X3N0ZXAAQXNzZXJ0IGZhaWxlZAB8JWxsZHwlcyVzJXN8JWR8ACBtYXJnaW49AEwyRFhSZXZZAGd1dHRlcgoAY29sdW1uX3N0YXRzLmdldF90b3RhbCgpID4gMAAhaXQuY3ljbGVkX2xpc3QoKQBUb28gZmFyIGF3YXk6IGhfZGlzdCA9ICVkCgBOZWlnaGJvdXIgbm90IHN0cm9uZyBlbm91Z2g6ACBsb29raW5nIGZvciBpbXByb3ZlbWVudCBmb3IAQ2VudGVyAG9yIHNob3VsZCB3ZSB1c2UgbWVhbgBQZW5hbHR5IGluY3JlbWVudABXaWR0aCBjaGFuZ2UgYWRqdXN0bWVudABSb3RhdGU6IAA8L3N0cm9uZz4AL0pQWERlY29kZQBkYXRhIG5vdCBtYWRlAE51bWJlciBvZiBib3hhID0gJWQKAGJveGFlIGFuZCBib3hhbyBub3QgZGVmaW5lZABtZWRoID0gJTcuM2YsIG1lZHZhcmggPSAlNy4zZgoAa2VseCwga2VseSBub3QgYm90aCBkZWZpbmVkAGludmFsaWQgZnBpeCB2ZXJzaW9uAHBpeGQgbm90IG1hZGUAbm90IGFsbCBjb21wb25lbnQgcHRycyBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGNtYXAgaW5kZXggb3V0IG9mIGJvdW5kcyEKAHN0cmVhbSBub3Qgb3BlbmVkAHBsb3QgJyVzJyB0aXRsZSAnJXMnICVzAGZwaXggbm90IGRlZmluZWQAcGl4IG1hcHMgbm90IGFsbCAxNiBicHAAY2FsbG9jIGZhaWwgZm9yIGJpbnN0YXJ0AHBpeCBub3QgZGVmaW5lZAAvdG1wL2xlcHQvY29tcC9jb21wYXJlX3JnYiVkAHBpeHMgbXVzdCBiZSBiaW5hcnkARXJyb3IgaW4gJXM6IG51bWEgbm90IHJlYWQKAG5vdCBlbm91Z2ggcG9pbnRzAFdhcm5pbmcgaW4gJXM6IGZvdW5kIGRhdGEgZm9yICVkIGJpbnM7IHNob3VsZCBiZSAlZAoAcHRhcnAgbm90IG1hZGUAcmVtb3ZlIHVzaW5nIHhvcgBwaXhzIG5vdCBtYWRlAGludmFsaWQgaW5kZXggaW50byBkYQBnNCBkYXRhIG5vdCBtYWRlAHBpeHMgd2lkdGggMCAhIQBwaXhkIG5vdCBtYWRlAGludmFsaWQgZm9udHNpemUAeDEgPiB4MiBvciB5MSA+IHkyAGF0IGxlYXN0IG9uZSBpbnB1dCBwaXhhIGlzIGVtcHR5AG5lZ2F0aXZlIGJvcmRlciBhZGRlZCEAL3RtcC9sZXB0L3NwbGl0L3NwbGl0JWQucGEAYm94YSBub3QgZGVmaW5lZABwaXhzIG5vdCAxIGJwcABmaWxlZGF0YSBub3QgZGVmaW5lZABJbmZvIGluICVzOiB3b3JrLWFyb3VuZDogd3JpdGluZyB0byBhIHRlbXAgZmlsZQoAUmVkOiAAZCBub3QgaW4gezEsMiw0LDgsMTYsMjQsMzJ9AGpwMms6IG5vIHBpeCByZXR1cm5lZABpbnZhbGlkIHNhcnJheSB2ZXJzaW9uAHBpeHMgdW5kZWZpbmVkLCBub3QgOCBicHAsIG9yIGNtYXBwZWQAICBTZWwgVmVyc2lvbiAlZAoAc2VsXzhfNAAmaW5kZXggbm90IGRlZmluZWQAbm8gb3V0cHV0IGRhdGEgcmVxdWVzdGVkAGIAJm5ieXRlcyBub3QgZGVmaW5lZAB4bGkgLWRpc3BnYW1tYSAxLjAgLXF1aWV0IC1nZW9tZXRyeSArJWQrJWQgJXMgJgBNaXNzaW5nIEh1ZmZtYW4gY29kZSB0YWJsZSBlbnRyeQBJbnZhbGlkIHNSR0IgYWZ0ZXIgSURBVABQbGFuYXJDb25maWd1cmF0aW9uAEVycm9yIGZldGNoaW5nIGRhdGEgZm9yIGZpZWxkICIlcyIAZm9yIEdyb3VwIDMvNCBydW4gYXJyYXlzAE1pc3NpbmcgSlBFRyB0YWJsZXMAICBJbmsgTmFtZXM6IABHZW5lcmF0ZWQgdHJhaW5pbmcgZGF0YSBmb3IgJWQgd29yZHMKAGl0LndvcmQoKSA9PSB3b3JkX3JlcwBfYmkAIABhcHBseWJveF9leHBvc3VyZV9wYXR0ZXJuAHNlZ3NlYXJjaCBzdGFydGluZyB0byBsb29rIGZvciBibGFtZQoAcm93ID49IGNvbHVtbgBIYW4AZm9udF9zZXRfaWQgPj0gMABCYWQgTWF0Y2ggUGFkICgwLTEpAFVzZSBvbmx5IHRoZSBmaXJzdCBVVEY4IHN0ZXAgb2YgdGhlIGdpdmVuIHN0cmluZyB3aGVuIGNvbXB1dGluZyBsb2cgcHJvYmFiaWxpdGllcy4AUiwAU3ViOgBJbnZhbGlkIG5vbmxpbmVhcml0eSBvbiBGLXNwZWMhOiAlcwoAYWxpZ25lZCwgc2Vla2luZyVkLCBsPSVkLCByPSVkCgBTdGFydGluZyBleHBhbnNpb24gYXQgJWQsIHN0ZXA9JWQsIGxpbWl0PSVkCgAhcGFydC0+Ym94ZXMoKS0+ZW1wdHkoKQBUb28gZmFyIGF3YXk6IHZfZGlzdCA9ICVkCgBEaXNjYXJkIG91dGxpbmUgb24gY2hpbGRfY291bnQ9JWQgPiBtYXhfY2hpbGRyZW5fcGVyX291dGxpbmU9JWQKAE5laWdoYm91ciBub3QgYmlnIGVub3VnaDoARXh0ZW5kZWQgdmVjdG9yAFJpZ2h0IEFsaWduZWQAdG9zcF9yZWRvX2tlcm5fbGltaXQAV2FybmluZzpyb3cgJWQgb2YgYmxvY2sgJWQgc2V0IHByb3Agd2l0aCBubyBsaWtlIHJvd3MgYWdhaW5zdCB0cmVuZAoAdGV4dG9yZF93aWR0aF9zbW9vdGhfZmFjdG9yAHdvcmRyZWNfZGlzcGxheV9zZWdtZW50YXRpb25zAGNob3Bfb2tfc3BsaXQAT3JpZW50YXRpb24gY29uZmlkZW5jZTogAAogICAgICAgPHNwYW4gY2xhc3M9J29jcnhfY2luZm8nACAgL0NvbG9yU3BhY2UgWyAvSW5kZXhlZCAvRGV2aWNlUkdCIABwaXggbm90IG1hZGUAYm94YWEgbm90IG1hZGUAYm94YSBzaXplcyBpbnZhbGlkAG5lZWQgYXQgbGVhc3QgMiB2YWxpZCBib3hlcwBmcGl4cyBub3QgZGVmaW5lZAB3ID0gJWQsIGggPSAlZCwgbmJ5dGVzID0gJWQKAGtlbCBub3QgZGVmaW5lZAAmaGFzcmVkIG5vdCBkZWZpbmVkAG1hcDEgbm90IG1hZGUAY21hcCBub3QgcmVhZABwbG90ICclcycgdGl0bGUgJyVzJyAlcywgXABuY29udG91cnMgPCAyIG9yID4gNTAwAHBpeGcgbm90IGRlZmluZWQAbm90IDMyIGJwcABwaXggbm90IDggYnBwAHJlZABzZWxfMmEgbm90IG1hZGUAdwBXYXJuaW5nIGluICVzOiBvbmx5IDIgcG9pbnRzOyB1c2luZyBsaW5lYXIgaW50ZXJwCgBXYXJuaW5nIGluICVzOiBzY2FsZSBjaGFuZ2U6IGRlbHggPSAlNi4yZgoAV2FybmluZyBpbiAlczogKioqKiogJWQgbG9zdCBob2xlcyAqKioqKgoAbWFrZSBsb25nIGhvcml6IGNvbXBvbmVudHMAcGl4cyBub3QgZGVmaW5lZABpbnZhbGlkIGluZGV4IGluIGRhYQBmbGF0ZSBkYXRhIG5vdCBtYWRlAHBpeHIgbm90IGRlZmluZWQAcGl4czEgbm90IGRlZmluZWQASW5mbyBpbiAlczogY1slZF0gPSAleAoAbGluZSBuZWl0aGVyIGhvcml6IG5vciB2ZXJ0AFdhcm5pbmcgaW4gJXM6IGNvdW50cyBkaWZmZXI6ICVkICE9ICVkCgBwaXhhZCBkZWZpbmVkIGJ1dCAhPSBwaXhhcwAvdG1wL2xlcHQvc3BsaXQvc3BsaXQlZC50aWYAYm94IG5vdCBmb3VuZCEAZGVwdGggbm90IDIsIDQsIDgsIDE2IG9yIDMyIGJwcABpbnZhbGlkIGZpbGVzaXplAHRtcGZpbGUgc3RyZWFtIG5vdCBvcGVuZWQAR3JlZW46IABQNAojIFJhdyBQQk0gZmlsZSB3cml0dGVuIGJ5IGxlcHRvbmljYSAod3d3LmxlcHRvbmljYS5jb20pCiVkICVkCgBzaXplIDwgOABOdW1iZXIgb2Ygc3RyaW5ncyA9ICVkCgB0aHJlc2ggbXVzdCBiZSBpbiBbMCwgLi4uIDI1Nl0Abm90IGEgc2VsIGZpbGUAc2VsXzhfNQB0eXBlIHN0cmluZyBub3QgZGVmaW5lZABzdHJlYW0gbm90IG9wZW5lZCB0byBmaWxlAHN0cmVhbSBub3Qgb3BlbmVkAGpwZWcgZGF0YSBub3QgZGVmaW5lZAB4diAtcXVpdCAtZ2VvbWV0cnkgKyVkKyVkIC1uYW1lICIlcyIgJXMgJgBNYXhpbXVtIHN1cHBvcnRlZCBpbWFnZSBkaW1lbnNpb24gaXMgJXUgcGl4ZWxzAE91dCBvZiBwbGFjZSBzUkdCIGNodW5rAFBhZ2VOYW1lAHVuZXhwZWN0ZWQgY291bnQgZm9yIGZpZWxkICIlcyIsICV1LCBleHBlY3RlZCAyOyBpZ25vcmVkAEZheDNTZXR1cFN0YXRlAENvcnJ1cHQgSnBlZ1FUYWJsZXMgdGFnIHZhbHVlACAgVGhyZXNob2xkaW5nOiAAAHdvcmQgeGhlaWdodD0lZywgcm93PSVnLCByYW5nZT1bJWcsJWddCgBfc2VlZABbAEV4cG9zdXJlIHZhbHVlIGZvbGxvd3MgdGhpcyBwYXR0ZXJuIGluIHRoZSBpbWFnZSBmaWxlbmFtZS4gVGhlIG5hbWUgb2YgdGhlIGltYWdlIGZpbGVzIGFyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgZm9ybSBbbGFuZ10uW2ZvbnRuYW1lXS5leHBbbnVtXS50aWYAQ29ycmVjdCBzZWdtZW50YXRpb246CgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NzdHJ1Y3QvbWF0cml4LmgASGlyYWdhbmEAU2hhcGUgJWQgbm90IGZvdW5kCgBtYXRjaGVyX3JhdGluZ19tYXJnaW4AY2xhc3NpZnlfcHBfZW5kX3BhZABjZXJ0YWludHlfc2NhbGUAAFVwZGF0ZVN1YnRyYWluZXI6JXMASW52YWxpZCBGIHNwZWMhOiVzCgBCYWNrdXAKAEF0ICVkLCBCYXJyaWVyIHNpemU9JWQKAHNpZGUgc3RlcCA9ICUuMmYsIHRvcCBzcGFjaW5nID0gJWQsIGJvdHRvbSBzcGFjaW5nPSVkCgBDYW5kaWRhdGUgZmFpbHMgb3ZlcmxhcCBhbmQgZGlhY3JpdGljIHRlc3RzIQoARGlzZ2FyZCBvdXRsaW5lIG9uIGNoaWxkX2NvdW50PSVkICsgZ3JhbmRjaGlsZF9jb3VudD0lZCA+IG1heF9jb3VudD0lZAoAdGV4dG9yZF9maXhfeGhlaWdodF9idWcAb2xkYmxfZG90X2Vycm9yX3NpemUAeGdhcD0lZCwgeT0lZCwgdG90YWwgZGlzdD0lZAoAQ3JlYXRlZCBuZXcgdmVjdG9yAFJpZ2h0IFJhZ2dlZABOby5zYW1wbGVzIHJlcWQgdG8gcmVlc3RpbWF0ZSBmb3Igcm93ADpiX3ZvdGVzPSVkOmxfdm90ZXM9JWQ6b192b3Rlcz0lZABTbW9vdGhpbmcgd2lkdGggc3RhdHMARGlzcGxheSBTZWdtZW50YXRpb25zAE9LIHNwbGl0IGxpbWl0AFNjcmlwdDogAHRpbWVzdGVwXwAgXQoAZm9udHRhYiBub3QgbWFkZQAKQm94YVslZF0gZXh0ZW50OiB4ID0gJWQsIHkgPSAlZCwgdyA9ICVkLCBoID0gJWQASW5mbyBpbiAlczogIyBsciByZWplY3QgPSAlZCwgIyB0YiByZWplY3QgPSAlZAoARXJyb3IgaW4gJXM6IGZwaXh0IG5vdCBtYWRlCgByZWFkIGZhaWwgZm9yIGRhdGEgc2l6ZQBtYXRyaXggbm90IDN4MwBXYXJuaW5nIGluICVzOiBmdGhyZXNoID0gJWYgaXMgb3V0IG9mIG5vcm1hbCBib3VuZHMKAG1hcDIgbm90IG1hZGUAc3RyZWFtIG5vdCBkZWZpbmVkACAnJXMnIHRpdGxlICclcycgJXMsIFwAYWxsIHZhbHVlcyBpbiBmcGl4IGFyZSBlcXVhbABwaXggc2l6ZXMgbm90IGVxdWFsAGRlbG0gYW5kIGRlbHAgbXVzdCBiZSA+PSAwAChjeSwgY3gpIGludmFsaWQAZ3JlZW4AcGl4MSBub3QgbWFkZQAKAHh2YWwgaXMgb3V0IG9mIGJvdW5kcwBuID0gMSBpbiBoaXN0b2dyYW0AcGl4IG5vdCBkZWZpbmVkAHNob3cgY29ubmVjdGVkIGNvbXBvbmVudHMAcGRmIGdlbmVyYXRpb24gZmFpbHVyZQBkYWEgbm90IHJlYWQAcGl4cyBub3QgZGVmaW5lZABwaXhnIG5vdCBkZWZpbmVkAHBpeHMyIG5vdCBkZWZpbmVkACZjYXJyYXkgbm90IGRlZmluZWQAZnJhY3QgPCAwLjAgb3IgPiAxLjAAcGl4YWFkIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGJveCAlZCBub3QgZm91bmQKAC90bXAvbGVwdC9zcGxpdC9zcGxpdCVkLnBkZgBwaXhhIG5vdCBtYWRlAHBpeCBzaXplcyB1bmVxdWFsACZmaWxlZGF0YSBub3QgZGVmaW5lZABwdGFhIG5vdCBtYWRlAEJsdWU6IABQNQojIFJhdyBQR00gZmlsZSB3cml0dGVuIGJ5IGxlcHRvbmljYSAod3d3LmxlcHRvbmljYS5jb20pCiVkICVkCiVkCgB1bmtub3duIGZvcm1hdDsgbm8gZGF0YSByZXR1cm5lZABlcnJvciBvbiAjIHN0cmluZ3MAbGluZWIgbm90IG1hZGUAZXJyb3IgcmVhZGluZyBpbnRvIGxpbmVidWYAc2VsXzhfNgBzdHJlYW0gbm90IG9wZW5lZABmaWxlaW4gbm90IHRpZmYAc3RyZWFtIG5vdCBvcGVuACUhUFMtQWRvYmUtMy4wAHh2IC1xdWl0IC1nZW9tZXRyeSArJWQrJWQgJXMgJgBFbXB0eSBpbnB1dCBmaWxlAER1cGxpY2F0ZSBzUkdCIGNodW5rAFhQb3NpdGlvbgB0byBmZXRjaCBhcnJheSBvZiByYXRpb25hbHMAJXM6IE5vIHNwYWNlIGZvciBHcm91cCAzLzQgcmVmZXJlbmNlIGxpbmUAQ29ycnVwdCBKcGVnRGNUYWJsZXMgdGFnIHZhbHVlAGJpbGV2ZWwgYXJ0IHNjYW4KAEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgBHb3Qgd29yZCB3aXRoIG51bGwgcmF3IGNob2ljZSB4aGVpZ2h0PSVnLCByb3c9JWcKAF9tZXJnZWQAUwBhcHBseWJveF9sZWFybl9jaGFyc19hbmRfY2hhcl9mcmFnc19tb2RlAApGYWlsZWQgdG8gaW5zZXJ0IHBhaW4gcG9pbnQKAHJvdyAtIGNvbHVtbiA8IHRoaXMtPmRpbTJfAEthdGFrYW5hAE51bVRpbWVzU2VlbiBmb3IgY29uZmlnIG9mICVzIGlzICVkCgBOZXcgdGVtcGxhdGUgbWFyZ2luICgwLTEpAFByb3RvIFBydW5lIEVuZCBQYWQAQ2VydGFpbnR5IHNjYWxpbmcgZmFjdG9yAEYAIFN1YiB0cmFpbmVyIHdpbnMgYXQgaXRlcmF0aW9uIABJbnZhbGlkIGRpbXMgKDJ8MXwwKSBpbiBvdXRwdXQgc3BlYyE6JXMKAEJldHRlciBiYWNrdXAKAEF0ICVkLCBnb29kIHNpemUgPSAlZAoAU3BhY2luZ3MgdW5lcXVhbDogdXBwZXI6JWQvJWQsIGxvd2VyOiVkLyVkLCBzaXplcyAlZCAlZCAlZAoAZmFsc2UARGlzY2FyZGluZyBwYXJlbnQgd2l0aCBjaGlsZCBjb3VudD0lZCwgZ2M9JWQKAFVzZSBzcGxpbmUgYmFzZWxpbmUATWF4IGFzcGVjdCByYXRpbyBvZiBhIGRvdABOZWlnaGJvdXIgd2l0aCBtZWRpYW4gc2l6ZSAlZCB0b28gZmFyIGF3YXk6AGRlYnVnAFNlcGFyYXRvcgB0b3NwX2Zld19zYW1wbGVzAHg9JWc6YXNjPSVnCgBsYW5ndWFnZV9tb2RlbF91c2Vfc2lnbW9pZGFsX2NlcnRhaW50eQBjaG9wX2dvb2Rfc3BsaXQAU2NyaXB0IGNvbmZpZGVuY2U6IAA8c3BhbiBjbGFzcz0nb2NyX2dseXBoJwAgIC9Db2xvclNwYWNlIC9EZXZpY2VHcmF5CiAgL0RlY29kZSBbMSAwXQoAYmFzZWxpbmV0YWIgbm90IG1hZGUAYm94YSBkZXNjciBub3QgdmFsaWQAbGluZml0ACZiaWFzIG5vdCBkZWZpbmVkAGZnZXRzIHJlYWQgZmFpbABzbTIgPSBzbTEASW5mbyBpbiAlczogY291bnQgPSAlZCwgdGhyZXNoID0gJWQKACZuY29sb3JzIG5vdCBkZWZpbmVkAApQaXhjbWFwOiBkZXB0aCA9ICVkIGJwcDsgJWQgY29sb3JzCgAgJyVzJyB0aXRsZSAnJXMnICVzAGZwaXhzIG5vdCBkZWZpbmVkAGRlcHRoIG5vdCA4IGJwcABmcmFjdG0gYW5kL29yIGZyYWN0cCBpbnZhbGlkAGtlcm5lbCBlbGVtZW50cyBhbGwgMC4wAGJsdWUAcGl4cyBub3QgOCBicHAAJmRhdGEgbm90IGRlZmluZWQAbmF4IG5vdCBkZWZpbmVkAHN1bSA8PSAwLjAAcHRhIG5vdCBkZWZpbmVkAEluZm8gaW4gJXM6IFRoaXMgaXMgdGV4dDogCiAgbjEgPSAlZCwgbjIgPSAlZCwgbjMgPSAlZCwgbWlubGluZXMgPSAlZAogIG1heHcgPSAlZCwgcmF0aW8xID0gJTQuMmYsIGggPSAlZCwgYmlnX2NvbXAgPSAlZAoAcGEgbm90IGRlZmluZWQACkxfRG5hYSBWZXJzaW9uICVkCgBwaXhzIG5vdCBtYWRlAHBpeGIgbm90IGRlZmluZWQAY2Fubm90IGhhdmUgcGl4czIgPT0gcGl4ZABuYmlucyBtdXN0IGJlIGF0IGxlYXN0IDIAaW52YWxpZCBkaXJlY3Rpb24AcGFhIG5vdCBtYWRlAHBhYSBub3QgZGVmaW5lZABkaXIgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogcGl4ICVkIG5vdCBtYWRlCgBwaXhkIG5vdCAxNiBicHAAJmZpbGVzaXplIG5vdCBkZWZpbmVkAHB0YSBwdHJzIG5vdCBtYWRlAHBpeHMgdW5kZWZpbmVkIG9yIG5vdCAxIGJwcABQNgojIFJhdyBQUE0gZmlsZSB3cml0dGVuIGJ5IGxlcHRvbmljYSAod3d3LmxlcHRvbmljYS5jb20pCiVkICVkCjI1NQoARXJyb3IgaW4gJXM6IGZhaWx1cmUgdG8gcmVhZCBoZWFkZXIgb2YgJXMKAG1vcmUgdGhhbiAyXjI0IHN0cmluZ3MhAGJ1ZnMgbm90IG1hZGUAICAtLS0tLS0gICVzICAtLS0tLS0Ac2VsXzhfNwBmZ2V0cyByZWFkIGZhaWwAaW5hcnJheSBub3QgbWFkZQBkYXRhcyBub3QgZGVmaW5lZAAlJUNyZWF0b3I6IGxlcHRvbmljYQBvcGVuICVzICYAUHJlbWF0dXJlIGVuZCBvZiBpbnB1dCBmaWxlAEluY29ycmVjdCBzUkdCIGNodW5rIGxlbmd0aABZUG9zaXRpb24AJXM6IFJhdGlvbmFsIHdpdGggemVybyBkZW5vbWluYXRvciAobnVtID0gJXUpACVzOiBCYWQgY29kZSB3b3JkIGF0IGxpbmUgJXUgb2YgJXMgJXUgKHggJXUpAENvcnJ1cHQgSnBlZ0FjVGFibGVzIHRhZyB2YWx1ZQBoYWxmdG9uZSBvciBkaXRoZXJlZCBzY2FuCgBBc3NlcnQgZmFpbGVkAABwYXJ0c190b19tZXJnZVtpXSAhPSBudWxscHRyICYmIHBhcnRzX3RvX21lcmdlW2ldICE9IHBhcnQAcwBMZWFybiBib3RoIGNoYXJhY3RlciBmcmFnbWVudHMgKGFzIGlzIGRvbmUgaW4gdGhlIHNwZWNpYWwgbG93IGV4cG9zdXJlIG1vZGUpIGFzIHdlbGwgYXMgdW5mcmFnbWVudGVkIGNoYXJhY3RlcnMuAENvcnJlY3Qgc2VnbWVudGF0aW9uIHN0YXRlIHdhcyBub3QgZXhwbG9yZWQAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQBUaGFpAEFtYmlnICVzIGhhcyBub3QgYmVlbiBzZWVuIGVub3VnaCB0aW1lcywgbm90IG1ha2luZyBjb25maWcgZm9yICVzIHBlcm1hbmVudAoAbWF0Y2hlcl9hdmdfbm9pc2Vfc2l6ZQBzdG9wcGVyX25vbmRpY3RfY2VydGFpbnR5X2Jhc2UAQgAKUmVkdWNlZCBsZWFybmluZyByYXRlIG9uIGxheWVyczogAEludmFsaWQgb3V0cHV0IHR5cGUgKGx8c3xjKSBpbiBvdXRwdXQgc3BlYyE6JXMKAGRlYnVnAGJlc3RfY29sdW1uc19baV0gIT0gbnVsbHB0cgBBZGRlZCBsaW5lIHRvIGN1cnJlbnQgYmxvY2suCgBDbGljayBhdCAoJWQsICVkKQoARGlzY2FyZGluZyBwYXJlbnQgb2YgYXJlYSAlZCwgY2hpbGQgYXJlYT0lZCwgbWF4JWcgd2l0aCBnYz0lZAoAQ29tcHV0aW5nIHJlZHVjZWQgYm94IGZvciA6AGRpc3BsYXkAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQBOby5nYXBzIHJlcWQgd2l0aCAxIGxhcmdlIGdhcCB0byB0cmVhdCBhcyBhIHRhYmxlAFdhcm5pbmc6Z3Vlc3NpbmcgcGl0Y2ggYXMgeGhlaWdodCBvbiByb3cgJWQsIGJsb2NrICVkCgBVc2Ugc2lnbW9pZGFsIHNjb3JlIGZvciBjZXJ0YWludHkAR29vZCBzcGxpdCBsaW1pdABhcHBseWJveF9kZWJ1ZwBjaG9pY2VfACAgL0NvbG9yU3BhY2UgL0RldmljZUdyYXkKAHdpZHRodGFiIG5vdCBtYWRlAGRhdGEgbm90IGRlZmluZWQAL3RtcC9saW5maXQvYm94YWxyLmJhAGtlbDEgbm90IGRlZmluZWQAeHJlcyA9ICVkLCB5cmVzID0gJWQKAHBpeGFjYyBub3QgbWFkZQBwaXggbm90IGRlZmluZWQAaW52YWxpZCBjbWFwIHNpemUAdwBpbmNyIDw9IDAuMABsdXQgbm90IG1hZGUARXJyb3IgaW4gJXM6IGJhZCBpbnB1dDogZWl0aGVyIChkZWxtLCBkZWxwKSBvciAoZnJhY3RtLCBmcmFjdHApIG11c3QgYmUgMAoAV2FybmluZyBpbiAlczogc2l6ZSA8IDE3OyBzZXR0aW5nIHRvIDE3CgAvdG1wL2xlcHQvY29tcC9jb21wYXJlX3JnYiVkLnBuZwBoc2l6ZSBvciB2c2l6ZSA8IDEAJnNpemUgbm90IGRlZmluZWQAbmF4IGFuZCBuYXkgbm90IHNhbWUgc2l6ZSBhcnJheXMAbmFzY29yZSBub3QgbWFkZQBib3hpbm5lciBub3QgZGVmaW5lZABJbmZvIGluICVzOiBUaGlzIGlzIG5vdCB0ZXh0OiAKICBuMSA9ICVkLCBuMiA9ICVkLCBuMyA9ICVkLCBtaW5saW5lcyA9ICVkCiAgbWF4dyA9ICVkLCByYXRpbzEgPSAlNC4yZiwgaCA9ICVkLCBiaWdfY29tcCA9ICVkCgBubyBmaWxlbmFtZXMgZm91bmQAaW52YWxpZCBsX2RuYWEgdmVyc2lvbgAmZGF0YSBhbmQgJm5ieXRlcyBub3QgYm90aCBkZWZpbmVkAGlucHV0IHBpeCBub3QgYWxsIDggYnBwAGRlcHRocyBvZiBwaXhzKiB1bmVxdWFsAHBpeHMgbmVpdGhlciAzMiBicHAgbm9yIGNtYXBwZWQAbGFzdCBtdXN0IGJlID49IGZpcnN0AHBpeGEgcHRycyBub3QgbWFkZQBubyBkYXRhIGNhbiBiZSByZXR1cm5lZABpbnZhbGlkIHRpbGluZyBOLWZhY3RvcgBwaXhhY2Qgbm90IGRlZmluZWQAcGl4ZCBub3QgMzIgYnBwAHB0YWEgbm90IGRlZmluZWQAcGl4IG5vdCBtYWRlAGltYWdlIHdyaXRlIGZhaWwAPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmVhZGluZyB0aGUgaGVhZGVyOgoAJWRbJWRdOgBFcnJvciBpbiAlczogbGluZWIgbm90IG1hZGUKACAgc3kgPSAlZCwgc3ggPSAlZCwgY3kgPSAlZCwgY3ggPSAlZAoAc2VsXzhfOABQaXgAZmlsZWluIGlzIG5vdCBnNCBjb21wcmVzc2VkAGRhdGFkIG5vdCBtYWRlACUlJSVUaXRsZTogJXMAV2FybmluZyBpbiAlczogZHAgbm90IDggb3IgMzIgYnBwOyB1c2luZyAzMgoAQ2Fubm90IHRyYW5zY29kZSBkdWUgdG8gbXVsdGlwbGUgdXNlIG9mIHF1YW50aXphdGlvbiB0YWJsZSAlZABVbmtub3duIHNSR0IgaW50ZW50AEZyZWVPZmZzZXRzAHRvIGZldGNoIHBlci1zYW1wbGUgdmFsdWVzAHRpbGUASnBlZ1FUYWJsZXMgdGFnIGhhcyBpbmNvcnJlY3QgY291bnQAZXJyb3IgZGlmZnVzZWQKAGEgIT0gMCAmJiBiICE9IDAAJXMgd29yZCB3aXRoIGxhbmcgJXMgYXQ6AHNlZWQgIT0gbnVsbHB0ciAmJiBwYXJ0c19vdmVybGFwICE9IG51bGxwdHIARQBhcHBseWJveF9sZWFybl9uZ3JhbXNfbW9kZQBDb3JyZWN0IHNlZ21lbnRhdGlvbiBwYXRocyB3ZXJlIHBydW5lZCBieSBMTQoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgASGFuZ3VsAFJ1bm5pbmcgVXBkYXRlQW1iaWdzR3JvdXAgZm9yICVzIGNsYXNzX2lkPSVkCgBBdmcuIG5vaXNlIGJsb2IgbGVuZ3RoAENlcnRhaW50eSB0aHJlc2hvbGQgZm9yIG5vbi1kaWN0IHdvcmRzACxFAApSZWR1Y2VkIGxlYXJuaW5nIHJhdGUgdG8gOgBXYXJuaW5nOiBnaXZlbiBvdXRwdXRzICVkIG5vdCBlcXVhbCB0byB1bmljaGFyc2V0IG9mICVkLgoAZGlzcGxheQBDb25zaWRlcmluZyBwYXJ0aXRpb24gZm9yIEdyaWRTcGxpdDoAU3BhY2luZ3MgZXF1YWw6IHVwcGVyOiVkLyVkLCBsb3dlcjolZC8lZCwgbWVkaWFuOiVkLyVkCgBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAERpc2NhcmRpbmcgcGFyZW50IG9mIGFyZWEgJWQsIGNoaWxkIGFyZWE9JWQsIG1heCVnIHdpdGggY2hpbGQgbGVuZ3RoPSVkCgBOZXcgYmVzdDoAQm91bmRpbmcgYm94PSglZCwlZCktPiglZCwlZCkKAHRvc3Bfc2hvcnRfcm93AEJsb2NrICVkIGF0ICglZCwlZCktPiglZCwlZCkKAHRleHRvcmRfd29yZHNfd2lkdGhfaWxlAGRpY3RfICE9IG51bGxwdHIAY2hvcF94X3lfd2VpZ2h0AGNsYXNzaWZ5X2VuYWJsZV9sZWFybmluZwAgdGl0bGU9J3hfY29uZnMgACAgL0NvbG9yU3BhY2UgL0RldmljZVJHQgoARXJyb3IgaW4gJXM6IGJhYSBub3QgcmVhZAoAL3RtcC9saW5maXQvYm94YXRiLmJhAEVycm9yIGluICVzOiB3YyA+PSB3IHx8IGhjID49aAoAcmVhZCBmYWlsIGZvciB4cmVzLCB5cmVzAHBpeGMxIG5vdCBtYWRlAHBpeCBub3QgMzIgYnBwAENvbG9yICAgIFItdmFsICAgIEctdmFsICAgIEItdmFsICAgQWxwaGEKAGNtZCBzdHJlYW0gbm90IG9wZW5lZABwaXhkIG5vdCBtYWRlAHBpeHMgbm90IGNtYXBwZWQgb3IgMzIgYnBwAGludmFsaWQgZGlzdGZsYWcAV2FybmluZyBpbiAlczogZ3JpZCB0aGlja25lc3MgPCAyOyBzZXR0aW5nIHRvIDIKACZwaXhkaWZmIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGhvcml6IHNlbCBzaXplIG11c3QgYmUgb2RkOyBpbmNyZWFzaW5nIGJ5IDEKAEluZm8gaW4gJXM6IHdvcmstYXJvdW5kOiB3cml0aW5nIHRvIGEgdGVtcCBmaWxlCgAmbmF5IG5vdCBkZWZpbmVkAG1pbnJhbmdlID0gJWQsIG1heHJhbmdlID0gJWQKAHB0YWMgbm90IG1hZGUAbm90aGluZyB0byBkZXRlcm1pbmUATnVtYmVyIG9mIExfRG5hID0gJWQKCgBjaWQgbm90IGRlZmluZWQAd2lkdGhzIG5vdCB0aGUgc2FtZQAmZW1wdHkgbm90IGRlZmluZWQAbGVwdC9yZWdvdXQAV2FybmluZyBpbiAlczogZmFjdG9yMSBtdXN0IGJlID49IDE7IHNldHRpbmcgdG8gMQoAbm8gcGl4IGluIHBpeGEAbm8gb3V0cHV0IHJlcXVlc3RlZABpbnZhbGlkIGZvbnRzaXplAGlzdGFydCA+IGllbmQ7IG5vdGhpbmcgdG8gYWRkAHBpeGQgbm90IDIgYnBwAHB0YWMgbm90IG1hZGUAZTMuMwBkIG5vdCBpbiB7MSwyLDQsOCwxNiwzMn0AICBpbnB1dCBpbWFnZSBmb3JtYXQgdHlwZTogJXMKAEVycm9yIGluICVzOiBlcnJvciBvbiBzdHJpbmcgc2l6ZQoARXJyb3IgaW4gJXM6IGxpbmVicCBub3QgbWFkZQoAZGltZW5zaW9ucyBub3QgcmVhZABzZWxfOF85AG5vIGZpbGUgdHlwZSBpZGVudGlmaWVkAFdhcm5pbmcgaW4gJXM6IG1vcmUgdGhhbiAxIHN0cmlwCgBzcmNmaWxlIG5vdCBkZWZpbmVkACUlJSVUaXRsZTogSnBlZyBjb21wcmVzc2VkIFBTAEVycm9yIGluICVzOiBpbnZhbGlkIGRpc3BsYXkgcHJvZ3JhbQoAU2NhbiBzY3JpcHQgZG9lcyBub3QgdHJhbnNtaXQgYWxsIGRhdGEATWlzc2luZyBJSERSIGJlZm9yZSBpQ0NQAEZyZWVCeXRlQ291bnRzAENhbm5vdCBoYW5kbGUgZGlmZmVyZW50IHBlci1zYW1wbGUgdmFsdWVzIGZvciBmaWVsZCAiJXMiAHN0cmlwAEpwZWdEY1RhYmxlcyB0YWcgaGFzIGluY29ycmVjdCBjb3VudAAgIEZpbGxPcmRlcjogAGkAQWxyZWFkeSBkb25lAHBhcnQgJiYgcGFydHNfc3BsaXR0ZWQAZQBFYWNoIGJvdW5kaW5nIGJveCBpcyBhc3N1bWVkIHRvIGNvbnRhaW4gbmdyYW1zLiBPbmx5IGxlYXJuIHRoZSBuZ3JhbXMgd2hvc2Ugb3V0bGluZXMgb3ZlcmxhcCBob3Jpem9udGFsbHkuAEJlc3QgY29ycmVjdCBzZWdtZW50YXRpb24gcmF0aW5nIAAlYyVkJWMlZABNYWtpbmcgY29uZmlnICVkIG9mICVzIHBlcm1hbmVudAoAbWF0Y2hlcl9wZXJtYW5lbnRfY2xhc3Nlc19taW4AY2xhc3NpZnlfcHBfc2lkZV9wYWQAc3RvcHBlcl9waGFzZTJfY2VydGFpbnR5X3JlamVjdGlvbl9vZmZzZXQAQXNzZXJ0IGZhaWxlZABMYXllciAlZD0lczogbHIgJWctPiVnJSUsIGxyICVnLT4lZyUlAE91dHB1dABCb3VuZGluZyBib3g9KCVkLCVkKS0+KCVkLCVkKQoAU2VhcmNoaW5nIGJveCAoJWQsJWQpLT4oJWQsJWQpCgBNYWtpbmcgYmxvY2sgYXQgKCVkLCVkKS0+KCVkLCVkKQoARGlzY2FyZGluZyBwYXJlbnQgb2YgYXJlYSAlZCwgY2hpbGQgYXJlYT0lZCwgbWF4JWcgd2l0aCBjaGlsZCByZWN0PSVkCgB0ZXh0b3JkX2ZpeF9tYWtlcm93X2J1ZwB0ZXh0b3JkX29sZGJsX2p1bXBsaW1pdABTaHJ1bmtlbiBib3ggZG9lc24ndCB3aW46AGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUATm8uZ2FwcyByZXFkIHdpdGggZmV3IGNlcnQgc3BhY2VzIHRvIHVzZSBjZXJ0cwBibG9jay0+eGhlaWdodCA+IDAASWxlIG9mIGJsb2Igd2lkdGhzIGZvciBzcGFjZSBlc3QAaW4gZmlsZSAlcywgbGluZSAlZABYIC8gWSAgbGVuZ3RoIHdlaWdodAAwAGxzdG1fY2hvaWNlc18AIDAgb2JqCjw8CiAgL0xlbmd0aCAAdwAvdG1wL2xpbmZpdC9wdGFsLnB0YQBFcnJvciBpbiAlczogZGVwdGggbm90IDEsIDggb3IgMzIgYnBwCgBmcGl4IG5vdCBtYWRlAHBpeGMyIG5vdCBtYWRlAGludmFsaWQgbWluY291bnQvbWluZnJhY3QALS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoAZGF0YWZpbGUgc3RyZWFtIG5vdCBvcGVuZWQAV2FybmluZyBpbiAlczogbWFwdmFsIG11c3QgYmUgPiAwOyBzZXR0aW5nIHRvIDI1NQoAV2FybmluZyBpbiAlczogbWluZnJhY3QgPCAwLjAxOyBzZXR0aW5nIHRvIDAuMDUKAHN0ciBub3QgZGVmaW5lZABkZXB0aHMgbm90IGVxdWFsAFdhcm5pbmcgaW4gJXM6IHZlcnQgc2VsIHNpemUgbXVzdCBiZSBvZGQ7IGluY3JlYXNpbmcgYnkgMQoAdG1wZmlsZSBzdHJlYW0gbm90IG9wZW5lZABuYXN5IG5vdCBkZWZpbmVkAG1pbnZhbCA9ICUxMC4wZgoAV2FybmluZyBpbiAlczogbm8gcGF0aCBmb3VuZAoAJm5jb2xzIG5vdCBkZWZpbmVkAGludmFsaWQgbnVtYmVyIG9mIGxfZG5hAFdhcm5pbmcgaW4gJXM6IHB0ciBhZGRyZXNzIGlzIG51bGwhCgBoZWlnaHRzIG5vdCB0aGUgc2FtZQBwaXggbm90IGRlZmluZWQAL3RtcC9sZXB0L3JlZ291dC9ydG5hbgBXYXJuaW5nIGluICVzOiBmYWN0b3IyIG11c3QgYmUgPj0gMTsgc2V0dGluZyB0byAxCgBpbnZhbGlkIHR5cGUAJmRlcHRoIG5vdCBkZWZpbmVkAG91dGRpciBub3QgZGVmaW5lZABwaXhhYzEgbm90IGRlZmluZWQAcGl4ZCBub3QgNCBicHAAcHRhIGNsb25lIG5vdCBtYWRlAGQzLjMAUDEKIyBBc2NpaSBQQk0gZmlsZSB3cml0dGVuIGJ5IGxlcHRvbmljYSAod3d3LmxlcHRvbmljYS5jb20pCiVkICVkCgAgIHcgPSAlZCwgaCA9ICVkLCBicHMgPSAlZCwgc3BwID0gJWQsIGlzY21hcCA9ICVkCgBFcnJvciBpbiAlczogZXJyb3IgcmVhZGluZyBzdHJpbmcKAGludmFsaWQgdHlwZQAgICAgAHNlbF80OF8xAHNuIHN0cmluZyBub3QgZGVmaW5lZABkYXRhIG5vdCBhbGxvY2F0ZWQAbmV3ZmlsZSBub3QgZGVmaW5lZAAlJURvY3VtZW50RGF0YTogQ2xlYW43Qml0AGxfY2hvb3NlRGlzcGxheVByb2cASW52YWxpZCBjb2xvciBxdWFudGl6YXRpb24gbW9kZSBjaGFuZ2UASW52YWxpZCBpQ0NQIGFmdGVyIElEQVQAR3JheVJlc3BvbnNlVW5pdABjYW5ub3QgcmVhZCBUSUZGX0FOWSB0eXBlICVkIGZvciBmaWVsZCAiJXMiACVzOiBQcmVtYXR1cmUgRU9GIGF0IGxpbmUgJXUgb2YgJXMgJXUgKHggJXUpAEpwZWdBY1RhYmxlcyB0YWcgaGFzIGluY29ycmVjdCBjb3VudABtc2ItdG8tbHNiCgBQcm9jZXNzaW5nAHBhcnQgJiYgc3BsaXR0ZWRfYm94ZXMATAB0ZXNzZWRpdF9kaXNwbGF5X291dHdvcmRzACB2cy4gYmVzdCBjaG9pY2UgcmF0aW5nIABBc3NlcnQgZmFpbGVkAEFzc2VydCBmYWlsZWQATWluICMgb2YgcGVybWFuZW50IGNsYXNzZXMAUHJvdG8gUHJ1bmVyIFNpZGUgUGFkAFJlamVjdCBjZXJ0YWludHkgb2Zmc2V0AGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAIFJFRFVDRUQKAE91dHB1dDJkAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUAU3BsaXR0aW5nIHBhcnQgYXQgJWQ6AABkZWJ1ZwBQcmV2ZW50IG11bHRpcGxlIGJhc2VsaW5lcwBYIGZyYWN0aW9uIGZvciBuZXcgcGFydGl0aW9uAE5ldyBiZXN0IHkgb3ZlcmxhcDoAQ2xpY2sgYXQgKCVkLCAlZCkKAHRvc3Bfc2FuaXR5X21ldGhvZABpbiBmaWxlICVzLCBsaW5lICVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy93b3JkcmVjL2xhbmd1YWdlX21vZGVsLmNwcABhc3N1bWVfZml4ZWRfcGl0Y2hfY2hhcl9zZWdtZW50AFRyeWluZyB0byBhZGFwdCAiJXMiIHRvICIlcyIKAAogICAgICAACiAgL1N1YnR5cGUgL0ltYWdlCgBiYWEgbm90IHdyaXR0ZW4gdG8gc3RyZWFtAC90bXAvbGluZml0L3B0YXIucHRhAHJlYWQgZXJyb3IgZm9yIG5ieXRlcwBFcnJvciBpbiAlczogY2FycmF5IG5vdCBtYWRlCgAlM2QgICAgICAgJTNkICAgICAgJTNkICAgICAgJTNkICAgICAgJTNkCgBpbnZhbGlkIG91dGZvcm1hdABFcnJvciBpbiAlczogYWxsb2NhdGlvbiBmYWlsdXJlIGluIGFycmF5cwoAV2FybmluZyBpbiAlczogbWF4c2l6ZSA8IDI7IHNldHRpbmcgdG8gMTAKACZrZWx4IGFuZCAma2VseSBub3QgZGVmaW5lZABwaXgxIG5vdCA4IG9yIDMyIGJwcAB0eXBlIG11c3QgYmUgTF9UT1BIQVRfQkxBQ0sgb3IgTF9UT1BIQVRfV0hJVEUAbmFhIG5vdCBtYWRlAFt4MCAuLi4geDFdIGlzIG5vdCB2YWxpZAAvdG1wL2xlcHQvbmFzY29yZQBwaXhkIG5vdCBtYWRlAFdhcm5pbmcgaW4gJXM6IGRlbHRhZnJhY3Qgbm90IGluIFswLjE1IC4uLiAwLjc1XQoATF9EbmFbJWRdOgBkYXRhIG5vdCBleHRyYWN0ZWQAcGl4cyBub3QgMzIgYnBwACZmcmFjdCBub3QgZGVmaW5lZABOb3JtYWxpemVkIEhpc3RvZ3JhbQBXYXJuaW5nIGluICVzOiBsYXN0ID4gaCAtIDE7IGNsaXBwaW5nCgBwYWEgbm90IGRlZmluZWQAJmhhc2NvbG9yIG5vdCBkZWZpbmVkAHBpeGEgbm90IG1hZGUAcGl4YWMyIG5vdCBkZWZpbmVkAHBpeGQgbm90IDggYnBwAGludmFsaWQgY29weWZsYWcAY29ubmVjdGl2aXR5IG5vdCA0IG9yIDgAUDIKIyBBc2NpaSBQR00gZmlsZSB3cml0dGVuIGJ5IGxlcHRvbmljYSAod3d3LmxlcHRvbmljYS5jb20pCiVkICVkCiVkCgByYgBkYXRhIG5vdCBkZWZpbmVkAHhmYWN0IGFuZCB5ZmFjdCBtdXN0IGJlID49IDEAJTFkAHNlbF80OF8yAGJpbmRhdGEgbm90IHJldHVybmVkAGRhdGEgbm90IGRlZmluZWQAZGF0YSBub3QgcmV0dXJuZWQAJSVMYW5ndWFnZUxldmVsOiAyAGxlcHQvZGlzcGxheQBOb3QgaW1wbGVtZW50ZWQgeWV0AE91dCBvZiBwbGFjZSBpQ0NQIGNodW5rAEdyYXlSZXNwb25zZUN1cnZlAGZvciBzdHJpcCBhcnJheQAlczogJXMgYXQgbGluZSAldSBvZiAlcyAldSAoZ290ICV1LCBleHBlY3RlZCAldSkAc3AhPU5VTEwAbHNiLXRvLW1zYgoAd29yZF9kYXRhLT53b3JkLT5ib3hfd29yZCAhPSBudWxscHRyAGNwc19zdXBlcl9iYm94XwBsAERyYXcgb3V0cHV0IHdvcmRzAExhc3RDaGFuY2VCbGFtZQBjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpACAAbWF0Y2hlcl9taW5fZXhhbXBsZXNfZm9yX3Byb3RvdHlwaW5nAHN0b3BwZXJfc21hbGx3b3JkX3NpemUAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgAIFNBTUUKAEZ1bGx5IGNvbm5lY3RlZCByZXF1aXJlcyBmaXhlZCBoZWlnaHQhCgBDbGljayBhdCAoJWQsICVkKQoAU3BsaXQgcmVzdWx0OgBNYWtpbmcgYmxvY2sgYXQ6AGRpc3BsYXkATmV3IHkgb3ZlcmxhcCBib3ggZG9lc24ndCB3aW46AEhvdyB0byBhdm9pZCBiZWluZyBzaWxseQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC90b3BpdGNoLmNwcAAgAGluY2x1ZGUgZml4ZWQtcGl0Y2ggaGV1cmlzdGljcyBpbiBjaGFyIHNlZ21lbnRhdGlvbgBQbGVhc2UgY2FsbCBJbml0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHNldCBhbiBpbWFnZS4KAAogICAgIDwvc3Bhbj4AICAvV2lkdGggAGJveGEgbm90IGZvdW5kAC90bXAvbGluZml0L3B0YXQucHRhAGRhdGEgbm90IGRlZmluZWQAcGl4cyBtdXN0IGJlIDMyIGJwcABpbnZhbGlkIGVudHJ5AG91dHJvb3Qgbm90IHNwZWNpZmllZABzYW1wbGluZyBmYWN0b3IgPCAxAChwaXhkLHBpeG0pIG5vdCBkZWZpbmVkIHRvZ2V0aGVyAHBpeDIgbm90IDggb3IgMzIgYnBwAHBpeHQgbm90IG1hZGUAbnVtYSBwdHIgYXJyYXkgbm90IG1hZGUAbnB0cyA8IDMAU2NvcmUgZm9yIHNwbGl0IGRpc3RyaWJ1dGlvbgBXYXJuaW5nIGluICVzOiBnbG9iYWwgcGl4ZWwgbG9jIGFycmF5IG5vdCBmb3VuZABXYXJuaW5nIGluICVzOiBwZWFrZnJhY3Qgbm90IGluIFswLjI1IC4uLiAwLjldCgBpbnZhbGlkIGxfZG5hIGhlYWRlcgBkYXRhY29tcCBub3QgbWFkZQBpbnZhbGlkIGNvbXAAcGl4IG5vdCBkZWZpbmVkIG9yIG5vdCAxIGJwcAAvdG1wL2xlcHQvcmVnb3V0L3J0bmFyAFdhcm5pbmcgaW4gJXM6IGxhc3QgPiB3IC0gMTsgY2xpcHBpbmcKAHBpeGEgbm90IGZvdW5kACZoYXNjbWFwIG5vdCBkZWZpbmVkAHR3IG11c3QgYmUgPj0gMjAAYXQgbGVhc3Qgb25lIGlucHV0IHBpeGFjIGlzIGVtcHR5AHBpeHMgbm90IDIgYnBwAGluZGV4IG5vdCB2YWxpZABwaXhzIHVuZGVmIG9yIG5vdCAzMiBicHAAJTFkIAAgIHhyZXMgPSAlZCwgeXJlcyA9ICVkCgBFcnJvciBpbiAlczogc2FycmF5IG5vdCByZWFkCgB0b28gc21hbGw6IHdzIDwgMiBvciBocyA8IDIACgAgIHhvQ3ggIHgAc3RhdGljIGNvbnN0IGNoYXIgKmxfc3RyZGF0YV8lZCA9CgBwZGF0YSBub3QgZGVmaW5lZABkZXN0ZmlsZSBub3QgZGVmaW5lZAAlJUVuZENvbW1lbnRzAEluZm8gaW4gJXM6IGludmFsaWQgZm9ybWF0OyB1c2luZyBkZWZhdWx0CgBSZXF1ZXN0ZWQgZmVhdHVyZSB3YXMgb21pdHRlZCBhdCBjb21waWxlIHRpbWUARHVwbGljYXRlIGlDQ1AgY2h1bmsAUmVzb2x1dGlvblVuaXQAdG8gZmV0Y2ggc3RyaXAgdGFnAFByZW1hdHVyZSBFT0wAICBKcGVnSW50ZXJjaGFuZ2VGb3JtYXQ6ICVsdQoAICBZQ2JDciBTdWJzYW1wbGluZzogJXUsICV1CgBubyBiZXN0IHdvcmRzISEKAHBhcnQgIT0gbnVsbHB0cgBdAHRlc3NlZGl0X2R1bXBfY2hvaWNlcwBSZWplY3RlZCB0cnV0aAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaABjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAFJlbGlhYmxlIENvbmZpZyBUaHJlc2hvbGQAUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IGNsYXNzZXMgYXJlIGFkZGVkIHRvIHRlbXBsYXRlcwBTaXplIG9mIGRpY3Qgd29yZCB0byBiZSB0cmVhdGVkIGFzIG5vbi1kaWN0IHdvcmQACl9fX19fX19fX19fX19fX19fX19fX19fX19fCiVzCgBFbXB0eSB0cnV0aCBzdHJpbmchCgBGQ1NlcmllcwBTcGxpdCBoYWQgbm8gZWZmZWN0CgBDb2xQYXJ0OiVjKE0lZC0lYyVkLUIlZC8lZCwlZC8lZCktPiglZEItJWQlYy0lZE0vJWQsJWQvJWQpIHctb2s9JWQsIHYtb2s9JWQsIHR5cGU9JWQlYyVkLCBmYz0lZCwgbGM9JWQsIGJveGVzPSVkIHRzPSVkIGJzPSVkIGxzPSVkIHJzPSVkCgBSb3cgYmFzZWxpbmUgZ2VuZXJhdGlvbiBmYWlsZWQgb24gcm93IGF0ICglZCwlZCkKAE5laWdoYm91ciB3cm9uZyBzaWRlIG9mIGEgdGFiOgB0b3NwX29sZF9zcF9rbl90aF9mYWN0b3IAcm93LT54aGVpZ2h0ID4gMAB0ZXh0b3JkX3dvcmRzX21heHNwYWNlAHN0cl9wdHIgPT0gc3RyX2VuZAB3b3JkcmVjX2RlYnVnX2xldmVsAHBpeCAhPSBudWxscHRyAAogICAgPC9wPgoACiAgL0hlaWdodCAAJmRhdGEgbm90IGRlZmluZWQAL3RtcC9saW5maXQvcHRhYi5wdGEARXJyb3IgaW4gJXM6IGZwaXggbm90IHJlYWQKAGNvbG9ycyBub3QgaW4gWzEyOCwyNTZdAGRhdGEgbm90IGRlZmluZWQAbmF5MSBhbmQgbmF5MiBub3QgYm90aCBkZWZpbmVkAHJhbmsgbm90IGluIFswLjAgLi4uIDEuMF0AcGl4bSBub3QgMSBicHAAc3ggYW5kIHN5IG5vdCBib3RoID4gMQBwaXhkIG5vdCBtYWRlAG5hYSBub3QgZGVmaW5lZABuYXkgbm90IG1hZGUAJm5hZCBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBzcGdsb2JhbCBwaXhlbCBsb2MgYXJyYXkgbm90IGZvdW5kCgBjbGlwZnJhY3Qgbm90IGluIFswLjAgLi4uIDAuNSkKAGRhYSBub3Qgd3JpdHRlbiB0byBzdHJlYW0AcGl4cyBoYXMgY29sb3JtYXAAcGl4ZCBub3QgZGVmaW5lZABwaXhhIG5vdCAxIGJwcABDdW11bGF0aXZlIEhpc3RvZ3JhbQAmbmFkIG5vdCBkZWZpbmVkAG5hIG5vdCBtYWRlAHBpeGEgaXMgZW1wdHkAV2FybmluZyBpbiAlczogcGl4YSBzaXplICVkIG5vdCBlcXVhbCB0byBzYXJyYXkgc2l6ZSAlZAoAV2FybmluZyBpbiAlczogY291bnRzIGRpZmZlcjogJWQgIT0gJWQKAHBpeHMgbm90IDQgYnBwAGludmFsaWQgYWNjZXNzZmxhZwAoeCx5KSBub3QgaW4gcGl4cwAlMmQgACAgY29sb3JtYXAgaGFzIHRyYW5zcGFyZW5jeQoAdwBsZXZlbHMgbXVzdCBub3QgZXhjZWVkIDQAd2IAICB4b0N4IG8gADsKAHRtcGZpbGUgc3RyZWFtIG5vdCBvcGVuZWQAc3RyIG5vdCBkZWZpbmVkACUlJSVQYWdlOiAlZCAlZABmaWxlLiUwM2QucG5nAEFyaXRobWV0aWMgdGFibGUgMHglMDJ4IHdhcyBub3QgZGVmaW5lZABNYWxmb3JtZWQgaUNDUCBjaHVuawBQYWdlTnVtYmVyAGluY29ycmVjdCBjb3VudCBvciB0eXBlIGZvciBTdWJqZWN0RGlzdGFuY2UsIHRhZyBpZ25vcmVkAExpbmUgbGVuZ3RoIG1pc21hdGNoACAgSnBlZ0ludGVyY2hhbmdlRm9ybWF0TGVuZ3RoOiAlbHUKACAgWUNiQ3IgUG9zaXRpb25pbmc6IAAlcyAob2NyIHRvb2sgJS4yZiBzZWMpCgBzZWVkICE9IG51bGxwdHIgJiYgcGFydHNfdG9fbWVyZ2UgIT0gbnVsbHB0cgBBY3RpdmUgUGFyYWdyYXBoIE1vZGVsczoKAER1bXAgY2hhciBjaG9pY2VzAENob2ljZSBpcyBpbmNvcnJlY3QgYWZ0ZXIgcmVjb2duaXRpb24AYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaABtYXRjaGVyX3N1ZmZpY2llbnRfZXhhbXBsZXNfZm9yX3Byb3RvdHlwaW5nACBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIENsYXNzSWRzCgBzdG9wcGVyX2NlcnRhaW50eV9wZXJfY2hhcgBfX19fX19fX19fX19fX19fX19fX19fX19fXwoARW5jb2Rpbmcgb2Ygc3RyaW5nIGZhaWxlZCEgRmFpbHVyZSBieXRlczoARkNSZWNvbmZpZwBQYXJ0IGNhbm5vdCBiZSBzcGxpdDogYmxvYiAoJWQsJWQpLT4oJWQsJWQpIGluIGNvbHVtbiBnYXAKAENvbG9yczooJWQsICVkLCAlZCklZCAtPiAoJWQsICVkLCAlZCkKAHRleHRvcmRfZGVidWdfeGhlaWdodHMACklucHV0IGhlaWdodD0lZywgRXN0aW1hdGUgeC1oZWlnaHQ9JWQgcGl4ZWxzLCBqdW1wbGltaXQ9JS4yZgoARGlhY3JpdGljQmxvYiBPSyEgKHgtb3ZlcmxhcDoARmFjdG9yIGZvciBkZWZpbmluZyBzcGFjZSB0aHJlc2hvbGQgaW4gdGVybXMgb2Ygc3BhY2UgYW5kIGtlcm4gc2l6ZXMAdHJ5X2RvYzpwcm9wcz0lZDpmaXhlZD0lZDpwaXRjaD0lZDpmaW5hbF9waXRjaD0lZzpwaXRjaF9zZD0lZzpzcF9zZD0lZzpzZC90cmM9JWc6c2QvcD0lZzpzZC90cmMvcD0lZwoATXVsdGlwbGUgb2YgeGhlaWdodAAKVXBkYXRlU3RhdGU6IGNvbD0lZCByb3c9JWQgJXMARGVidWcgbGV2ZWwgZm9yIHdvcmRyZWMAaW4gZmlsZSAlcywgbGluZSAlZAAgICA8L2Rpdj4KAAogIC9CaXRzUGVyQ29tcG9uZW50IAAmc2l6ZSBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBsZXNzIHRoYW4gMyBib3hlczsgcmV0dXJuaW5nIGEgY29weQoAd2IAJmNtYXAgbm90IGRlZmluZWQARXJyb3IgaW4gJXM6IGNtYXAgbm90IHJlYWQKAG5hYXkgbm90IGRlZmluZWQAaW52YWxpZCBlc3RpbS4gY29sb3IgdmFsdWVzAHBpeGQgbm90IGNtYXBwZWQAaW52YWxpZCB0eXBlAHNyYyBwaXggbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogcHRyIGFkZHJlc3MgaXMgTlVMTCEKACZuYWR5IG5vdCBkZWZpbmVkAG5hMSBhbmQgbmEyIG5vdCBib3RoIGRlZmluZWQAV2FybmluZyBpbiAlczogbG9jYWwgY2hhaW4gYXJyYXkgbm90IGZvdW5kCgBXYXJuaW5nIGluICVzOiByZXNvbHV0aW9uIHVuZGVmaW5lZDsgc2V0IHRvIDMwMAoAZGEgbm90IGZvdW5kAHBpeHMgbm90IDggb3IgMzIgYnBwAHBpeHMgbm90IDggYnBwAG5hIG5vdCBtYWRlAC90bXAvbGVwdC9yZWdvdXQvcnRuYWkAcGl4cyBub3QgZGVmaW5lZCBvciBub3QgOGJwcABFcnJvciBpbiAlczogbWlzc2luZyBwaXhhWyVkXQoAbm8gY29tcG9uZW50cwBwaXhhMSBhbmQgcGl4YTIgbm90IGJvdGggZGVmaW5lZABzdHJlYW0gbm90IG9wZW5lZABsZWZ0c2hpZnQgbm90IGluIFswIC4uLiA4XQBpbmRleCBpcHRhIG5vdCB2YWxpZABjb25uIG5vdCA0IG9yIDgAJTNkIAAgIGNvbG9ybWFwIGRvZXMgbm90IGhhdmUgdHJhbnNwYXJlbmN5CgBzYSBub3Qgd3JpdHRlbiB0byBzdHJlYW0AV2FybmluZyBpbiAlczogbm8gcmVkdWN0aW9uIGJlY2F1c2UgbGV2ZWwxIG5vdCA+IDAKACAgLS0tLS0tICAlcyAgLS0tLS0tCgAgbyBvQ3ggIHgAICAgIGNhc2UgJWQ6CgAmc2l6ZSBub3QgZGVmaW5lZAAlcwBzYXZlAC90bXAvbGVwdC9kaXNwbGF5AEJhY2tpbmcgc3RvcmUgbm90IHN1cHBvcnRlZABJZ25vcmluZyBub256ZXJvIGNvbXByZXNzaW9uIHR5cGUgaW4gaUNDUCBjaHVuawBDb2xvclJlc3BvbnNlVW5pdABmb3IgY2hvcHBlZCAiU3RyaXBCeXRlQ291bnRzIiBhcnJheQAlczogVW5jb21wcmVzc2VkIGRhdGEgKG5vdCBzdXBwb3J0ZWQpIGF0IGxpbmUgJXUgb2YgJXMgJXUgKHggJXUpACAgSnBlZ1FUYWJsZXM6AGNlbnRlcmVkCgBOZXcgWEhUIE1hdGNoOiVzID0gJXMgAHNlZWQgIT0gbnVsbHB0ciAmJiBwYXJ0c190b19tZXJnZSAhPSBudWxscHRyICYmIGNwc19zdXBlcl9iYm94XyAhPSBudWxscHRyACAlZDogJXMKAHRlc3NlZGl0X3RpbWluZ19kZWJ1ZwBDb3JyZWN0ZWQgJXMKAFVuaWNoYXItaWQ9JWQsIHJhdGluZz0lZywgYWRhcHRlZD0lZCwgY29uZmlnPSVkLCBtaXNzZXM9JWQsICVkIGZvbnRzCgBFbmFibGUgYWRhcHRpb24gZXZlbiBpZiB0aGUgYW1iaWd1aXRpZXMgaGF2ZSBub3QgYmVlbiBzZWVuAEFkZFByb3RvVG9Qcm90b1BydW5lcjphc3NlcnQgZmFpbGVkOiAlZCA8ICVkAENlcnRhaW50eSB0byBhZGQgZm9yIGVhY2ggZGljdCBjaGFyIGFib3ZlIHNtYWxsIHdvcmQgc2l6ZS4AU3F1aXNoZWREYXdnOgAgJXgAQXNzZXJ0IGZhaWxlZABDb25zaWRlcmluZyBwYXJ0IGZvciBtZXJnZSBhdDoAUmVmaW5pbmcgJWQgJXMgcGFydG5lcnMgYnkgdHlwZSBmb3I6CgBUZXN0IHhoZWlnaHQgYWxnb3JpdGhtcwAlZCglZCwlZCksIABEaWFjcml0aWNCbG9iIE9LISAoeS1vdmVybGFwOgB0b3NwX3RocmVzaG9sZF9iaWFzMQBJbml0aWFsbHk6AGp1c3RfY2xhc3NpZmllZAB3b3JkcmVjX21heF9qb2luX2NodW5rcwAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvYXBpL2Jhc2VhcGkuY3BwACAgPC9kaXY+CgAKICAvRmlsdGVyIABJbmZvIGluICVzOiB3b3JrLWFyb3VuZDogd3JpdGluZyB0byBhIHRlbXAgZmlsZQoAZmlsbGVkIGJveGEgbm90IG1hZGUAZnBpeCBub3Qgd3JpdHRlbiB0byBzdHJlYW0AY3FjYWEgbm90IG1hZGUAdwBubyBudW1hIGluIGFycmF5AG5vIG91dHB1dCByZXF1ZXN0ZWQAcGl4cywgcGl4ZCBzaXplcyBkaWZmZXIAbmEgbm90IG1hZGUAaGVpZ2h0IG5vdCA+PSAwAG5hYyBub3QgbWFkZQB4MCA+IHgxAG5hYTEgYW5kIG5hYTIgbnVtYSBjb3VudHMgZGlmZmVyAGIuIGJveCBub3QgZm91bmQAV2FybmluZyBpbiAlczogcmVzb2x1dGlvbiAlZCB2ZXJ5IGxvdwoAcGl4cyBub3QgMSBicHAAV2FybmluZyBpbiAlczogaW1hZ2VzIHNpemVzIG5vdCBlcXVhbAoAJmNvdW50IG5vdCBkZWZpbmVkAEludGVuc2l0eSB2cy4gcmFuayBiaW4Ad2luZG93IHNpemUgbXVzdCBiZSA+IDEAcGl4YSBub3QgZm91bmQgYXQgaW5kZXgAJnNhbWUgbm90IGRlZmluZWQAaW52YWxpZCB0aWxpbmcgZmFjdG9ycwBwaXhhYyBub3QgcmVhZABkZXB0aCBub3QgezEsMiw0LDgsMTYsMzJ9AGluZGV4IGpwdCBub3QgdmFsaWQAbmEgbm90IGRlZmluZWQAJTVkIAA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZWFkaW5nIHRoZSBmdWxsIGltYWdlOgoAICAlZFslZF06ICAlcwoAaW52YWxpZCByYW5rACVkACBvIG9DeCBvIAAgICAgICAgIGRhdGExID0gZGVjb2RlQmFzZTY0KGxfc3RyZGF0YV8lZCwgc3RybGVuKGxfc3RyZGF0YV8lZCksICZzaXplMSk7CgAmcGl4IG5vdCBkZWZpbmVkAHJiAC9SYXdEYXRhIGN1cnJlbnRmaWxlIC9BU0NJSTg1RGVjb2RlIGZpbHRlciBkZWYAZmlsZS4lMDNkLmpwZwBIdWZmbWFuIHRhYmxlIDB4JTAyeCB3YXMgbm90IGRlZmluZWQAUHJvZmlsZSBzaXplIGZpZWxkIG1pc3NpbmcgZnJvbSBpQ0NQIGNodW5rAFRyYW5zZmVyRnVuY3Rpb24AZm9yIGNob3BwZWQgIlN0cmlwT2Zmc2V0cyIgYXJyYXkAc3AgIT0gTlVMTAAgJWx1AGNvc2l0ZWQKACAtPiAlcyA9ICVzIABwYXJ0ICE9IG51bGxwdHIgJiYgbWF0aF9ibG9ja3MgIT0gbnVsbHB0cgAlLQBQcmludCB0aW1pbmcgc3RhdHMAbWlzYWRhcHQgdG8gd29yZCAoAG1hdGNoZXJfY2x1c3RlcmluZ19tYXhfYW5nbGVfZGVsdGEAQ29udmVydGVkIGZmZWF0IHRvIChBPSVkLEI9JWQsQz0lZCxMPSVkKQBzdG9wcGVyX2FsbG93YWJsZV9jaGFyYWN0ZXJfYmFkbmVzcwBOdWxsIHRyYWluaW5nZGF0YS4KAEZ1bGx5IGNvbm5lY3RlZCByZXF1aXJlcyBwb3NpdGl2ZSBoZWlnaHQgYW5kIHdpZHRoLCBoYWQgJWQsJWQKAEluIGRpZmZlcmVudCBjb2x1bW5zCgBVcHBlcgBGaXR0ZWQgbGluZSB5PSVnIHggKyAlZwoARGlhY3JpdGljQmxvYiBmYWlsczoAaG93IGZhciBiZXR3ZWVuIGtlcm4gYW5kIHNwYWNlPwBCbG9jayAlZCBoYXMgKCVkLCVkLCVkKQAATWF4IG51bWJlciBvZiBicm9rZW4gcGllY2VzIHRvIGFzc29jaWF0ZQB1c2VyX2RlZmluZWRfZHBpAGhvY3IACiAgL0RlY29kZVBhcm1zCiAgPDwKICAgIC9QcmVkaWN0b3IgAHRtcGZpbGUgc3RyZWFtIG5vdCBvcGVuZWQAV2FybmluZyBpbiAlczogYm94YW0gbm90IGRlZmluZWQ7IHJldHVybmluZyBjb3B5AAoARXJyb3IgaW4gJXM6IGFzc2lnbmluZyBwaXhlbHMgdG8gd3JvbmcgY29sb3IKAGNtYXAgbm90IHdyaXR0ZW4gdG8gc3RyZWFtAGZpbGVuYW1lIG5vdCBkZWZpbmVkAGludmFsaWQgZmlsdGVyIHR5cGUAbmVzdGltID0gJWQKACZzaW1pbGFyIG5vdCBkZWZpbmVkAHBpeHNkIG5vdCBtYWRlAGludmFsaWQgaW5kZXggaW50byBuYWEAV2FybmluZyBpbiAlczogd2UgYXJlIHNvcnRpbmcgbmF4IGluIGluY3JlYXNpbmcgb3JkZXIKAG5hYTEgYW5kIG5hYTIgbnVtYmVyIGNvdW50cyBkaWZmZXIAcGl4dCBub3QgbWFkZQAvdG1wL2xlcHQvcGxvdABscGQgbm90IGRlZmluZWQAcGl4cyBub3QgY21hcHBlZABwaXggdW5kZWZpbmVkIG9yIG5vdCAxIGJwcAAvdG1wL2xlcHQvcmVnb3V0L3J0bmFyYmluAGludmFsaWQgbGluZSBwb3NpdGlvbgBwaXhhIG5vdCByZXRyaWV2ZWQAcGl4YTEgYW5kIHBpeGEyIG5vdCBib3RoIGRlZmluZWQAaW52YWxpZCB0dzsgdHcgbXVzdCBiZSA+PSAyMABzdHJlYW0gbm90IGRlZmluZWQAZmFjdG9yIG11c3QgYmUgPj0gMQBwdGFhIG5vdCByZWFkAG5heCBhbmQgbmF5IG5vdCBib3RoIGRlZmluZWQAUDMKIyBBc2NpaSBQUE0gZmlsZSB3cml0dGVuIGJ5IGxlcHRvbmljYSAod3d3LmxlcHRvbmljYS5jb20pCiVkICVkCjI1NQoARXJyb3IgaW4gJXM6IGZhaWx1cmUgdG8gcmVhZCBmdWxsIGltYWdlIG9mICVzCgAmZGF0YSBub3QgZGVmaW5lZABwaXhzIGFuZCBwaXhkIG5vdCBib3RoIGRlZmluZWQAaGVpZ2h0IG11c3QgYmUgPiAwACBveG9DeCBvIAAgICAgICAgIGRhdGEyID0gemxpYlVuY29tcHJlc3MoZGF0YTEsIHNpemUxLCAmc2l6ZTIpOwoAdGlmIG5vdCBkZWZpbmVkAGZpbGUgbm90IGZvdW5kAC9EYXRhIFJhd0RhdGEgPDwgPj4gL0RDVERlY29kZSBmaWx0ZXIgZGVmAGludmFsaWQgcmVzAEpQRUcgZGF0YXN0cmVhbSBjb250YWlucyBubyBpbWFnZQBJZ25vcmluZyB0cnVuY2F0ZWQgaUNDUCBwcm9maWxlAFNvZnR3YXJlACAgSGFsZnRvbmUgSGludHM6IGxpZ2h0ICV1IGRhcmsgJXUKACAlcy0+JXMgJXMgJXMKAGltYWdlX25hbWUgJiYgbmFtZQAlcwB0ZXNzZWRpdF9maXhfZnV6enlfc3BhY2VzACk6IABNYXhpbXVtIGFuZ2xlIGRlbHRhIGZvciBwcm90b3R5cGUgY2x1c3RlcmluZwAgAE1heCBjZXJ0YWludGx5IHZhcmlhdGlvbiBhbGxvd2VkIGluIGEgd29yZCAoaW4gc2lnbWEpAENhbid0IGVuY29kZSB0cmFuc2NyaXB0aW9uOiAnJXMnIGluIGxhbmd1YWdlICclcycKAENvbnNpZGVyaW5nIG1lcmdlIHdpdGggbmVpZ2hib3VyIGF0OgBMb3dlcgBEaWZmIG9mIGNvbW1vbiBibG9iIHRvIHN1c3BlY3QgcGFydD0lZyBhdCAoJWcsJWcpCgBCZXN0IHgreSBnYXAgPSAlZCwgeSA9ICVkCgB0b3NwX3RocmVzaG9sZF9iaWFzMgAgKFdyb25nbHkpAHRleHRvcmRfd29yZHNfZGVmYXVsdF9tYXhzcGFjZQAocGFyZW50PSVwKQoAd29yZHJlY19za2lwX25vX3RydXRoX3dvcmRzAFdhcm5pbmc6IFVzZXIgZGVmaW5lZCBpbWFnZSBkcGkgaXMgb3V0c2lkZSBvZiBleHBlY3RlZCByYW5nZSAoJWQgLSAlZCkhCgA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgogICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CiA8aGVhZD4KICA8dGl0bGU+AAogICAgL0NvbG9ycyAAYm94YSBub3QgcmVhZABXYXJuaW5nIGluICVzOiBpbnZhbGlkIHN1YmZsYWc7IHJldHVybmluZyBjb3B5ACZkYXRhIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IHBvc3NpYmx5IGFzc2lnbmVkIHBpeGVscyB0byB3cm9uZyBjb2xvcgoACgBzdHJlYW0gbm90IG9wZW5lZABzeCBhbmQvb3Igc3kgbGVzcyB0aGFuIDMARXJyb3IgaW4gJXM6IEVzdGltYXRlICVkIGNvbG9ycyEKAHBpeCBzaXplcyBub3QgZXF1YWwAc2l6ZSA8IDEAaW52YWxpZCBhY2Nlc3NmbGFnAGluZCBub3QgbWFkZQBuYSBzaXplcyBtdXN0IGJlIDI1NgBwaXhjIG5vdCBtYWRlAC90bXAvbGVwdC9wbG90LnBuZwAlUERGLTEuNQoAYWxwaGEgaW4gY21hcHMgbm90IHN1cHBvcnRlZABpbnZhbGlkIGNsaXBwaW5nIGJveABMVVQ6IHJhbmsgYmluIHZzLiBJbnRlbnNpdHkAcGl4cyBub3QgOCBicHAgb3IgaGFzIGNvbG9ybWFwAEVycm9yIGluICVzOiBwaXggbm90IHJldHJpZXZlZAoAcm90YXRpb24gbm90IGluIHswLDEsMiwzfQBhdCBsZWFzdCBvbmUgcGl4YSBpcyBlbXB0eQAKUGl4YWNvbXAgVmVyc2lvbiAlZAoAc3JjIGRlcHRoIG5vdCAxIG9yIDggYnBwAApQdGFhIFZlcnNpb24gJWQKAFdhcm5pbmcgaW4gJXM6IG54ID0gJWQgZG9lcyBub3QgZXF1YWwgbnkgPSAlZAoAUDcKIyBBcmJpdHJhcnkgUEFNIGZpbGUgd3JpdHRlbiBieSBsZXB0b25pY2EgKHd3dy5sZXB0b25pY2EuY29tKQoAICB3ID0gJWQsIGggPSAlZCwgZCA9ICVkLCBzcHAgPSAlZCwgd3BsID0gJWQKACZzaXplIG5vdCBkZWZpbmVkAHBpeHMgbm90IDMyIGJwcCBhbmQgNCBzcHAAd2lkdGggbXVzdCBiZSA+IDAAIG8gb0N4IG94ACAgICAgICAgcmVzdWx0ID0gKHZvaWQgKiklcyhkYXRhMiwgc2l6ZTIpOwoAV2FybmluZyBpbiAlczogYnBwID0gJWQ7IHN0cmlwcGluZyAxNiBiaXQgcmdiIHNhbXBsZXMgZG93biB0byA4CgBtb2RlIG5vdCBkZWZpbmVkAC9EZXZpY2VHcmF5IHNldGNvbG9yc3BhY2UAaW52YWxpZCBzY2FsZWZhY3RvcgBRdWFudGl6YXRpb24gdGFibGUgMHglMDJ4IHdhcyBub3QgZGVmaW5lZABObyBzcGFjZSBpbiBjaHVuayBjYWNoZSBmb3Igc1BMVABEYXRlVGltZQB0ZS0+cnVubGVuID09IDY0KihzcGFuPj42KQAgIEpwZWdEY1RhYmxlczoAICBPcmllbnRhdGlvbjogAEdVRVNTACUwNGQACgBUcnkgdG8gaW1wcm92ZSBmdXp6eSBzcGFjZXMAJXMKAGNsYXNzaWZ5X21pc2ZpdF9qdW5rX3BlbmFsdHkAV2FybmluZzogbm8gcHJvdG9zL2NvbmZpZ3MgZm9yICVzIGluIENyZWF0ZUludFRlbXBsYXRlcygpCgBzdG9wcGVyX2RlYnVnX2xldmVsAEJsYW5rIHRyYW5zY3JpcHRpb246ICVzCgBSdW5uaW5nIGdyaWQtYmFzZWQgbWVyZ2UgYmV0d2VlbjoKAFJlbW92aW5nIHBhcnRuZXI6AHRleHRvcmRfYmlhc2VkX3NrZXdjYWxjAE1lcmdlZCAlZCBibG9icyBiYWNrIGludG8gcGFydCAlZCBmcm9tICVkIHN0YXJ0aW5nIGF0ICglZCwlZCkKAFhHYXBGaWxsZWQ9JWQsIE5vaXNlQmV0d2Vlbj0lZAoAdG9zcF9uYXJyb3dfZnJhY3Rpb24AIGZpeGVkLCAoJWQsJWQsJWQpAE1heCBiZWxpZXZhYmxlIHRoaXJkIHNwYWNlAAoAT25seSBydW4gT0NSIGZvciB3b3JkcyB0aGF0IGhhZCB0cnV0aCByZWNvcmRlZCBpbiBCbGFtZXJCdW5kbGUAV2FybmluZzogSW52YWxpZCByZXNvbHV0aW9uICVkIGRwaS4gVXNpbmcgJWQgaW5zdGVhZC4KADwvdGl0bGU+CiAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIvPgogIDxtZXRhIG5hbWU9J29jci1zeXN0ZW0nIGNvbnRlbnQ9J3Rlc3NlcmFjdCA0LjEuMS01Ni1nYmU0NScgLz4KICA8bWV0YSBuYW1lPSdvY3ItY2FwYWJpbGl0aWVzJyBjb250ZW50PSdvY3JfcGFnZSBvY3JfY2FyZWEgb2NyX3BhciBvY3JfbGluZSBvY3J4X3dvcmQgb2NycF93Y29uZgAKAApCb3hhIFZlcnNpb24gJWQKAFdhcm5pbmcgaW4gJXM6IGJveGFzIGFuZCBib3hhbSBzaXplcyBkaWZmZXI7IHJldHVybmluZyBjb3B5ACZzaXplIG5vdCBkZWZpbmVkAGNxY2Egbm90IG1hZGUAJmRhdGEgbm90IGRlZmluZWQAR3Bsb3QgVmVyc2lvbiAlZAoAc3ggYW5kL29yIHN5IGV4Y2VlZCAxMABwcm9iYWJseSB0b28gbWFueSBjb2xvcnMAbWluZGlmZiBtdXN0IGJlID4gMABwaXhhIG5vdCBkZWZpbmVkAGludmFsaWQgaW5kZXggaW50byBuYQAmbWF4dmFsIG5vdCBkZWZpbmVkACZkaXN0IG5vdCBkZWZpbmVkAGZpbGVuYW1lIG5vdCBkZWZpbmVkAEluZm8gaW4gJXM6IHZlcnkgbGl0dGxlIGNvbnRlbnQgb24gcGFnZTsgMCB0ZXh0IGNvbHVtbnMKADEgMCBvYmoKPDwKL1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDMgMCBSCj4+CmVuZG9iagoAcGl4ZCBub3QgZGVmaW5lZCBvciBub3QgMzIgYnBwAHJvdyBvdXQgb2YgYm91bmRzAC90bXAvbGVwdC9yZWdvdXQvcnRuYWJiAG5vIG91dHB1dCBmcm9tIHRoaXMgbGluZQAmZnVsbCBub3QgZGVmaW5lZABwaXhzIG5vdCBmb3VuZABXYXJuaW5nIGluICVzOiBzaXplcyAoJWQsICVkKSBkaWZmZXI7IHVzaW5nIHRoZSBtaW5pbXVtIGluIGludGVybGVhdmUKAG5vdCBhIHBpeGFjb21wIGZpbGUAZGVwdGggbm90IDEsIDIsIDQsIDgsIDE2LCAzMiBicHAAbm90IGEgcHRhYSBmaWxlACZuYXggYW5kICZuYXkgbm90IGJvdGggZGVmaW5lZABXSURUSCAlZAoAICB0ZXh0OiAlcwoASW5mbyBpbiAlczogd29yay1hcm91bmQ6IHdyaXRpbmcgdG8gYSB0ZW1wIGZpbGUKAHBpeGQgbm90IDMyIGJwcAB1bmtub3duIGNoYXIAIHh4b0N4IG8gACAgICAgICAgbGVwdF9mcmVlKGRhdGExKTsKAHNwcCBub3QgaW4gc2V0IHsxLDMsNH0AcgAvRGV2aWNlUkdCIHNldGNvbG9yc3BhY2UAZmlsZW91dCBub3QgZGVmaW5lZABOb3QgYSBKUEVHIGZpbGU6IHN0YXJ0cyB3aXRoIDB4JTAyeCAweCUwMngATWlzc2luZyBJSERSIGJlZm9yZSBzUExUAEFydGlzdABHcm91cDNPcHRpb25zACAgSnBlZ0FjVGFibGVzOgAgIFNhbXBsZXMvUGl4ZWw6ICV1CgBDRVJUAC50aWYAIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgB0ZXNzZWRpdF91bnJlal9hbnlfd2QAIHRvIGJsYW1lOiAAUGVuYWx0eSB0byBhcHBseSB3aGVuIGEgbm9uLWFsbnVtIGlzIHZlcnRpY2FsbHkgb3V0IG9mIGl0cyBleHBlY3RlZCB0ZXh0bGluZSBwb3NpdGlvbgBCYWQgcmVhZCBvZiBpbnR0ZW1wIQoAU3RvcHBlciBkZWJ1ZyBsZXZlbABJbWFnZSBub3QgdHJhaW5hYmxlCgBOZWlnaGJvdXIgZmFpbGVkIGhnYXAgdGVzdAoAS2VlcGluZyBwYXJ0bmVyOgBCaWFzIHNrZXcgZXN0aW1hdGVzIHdpdGggbGluZSBsZW5ndGgARGlmZj0lLjJmLCBEZWx0YT0lLjNmLCBEcmlmdD0lLjNmLCAAcDEgIT0gbnVsbHB0ciAmJiBwMiAhPSBudWxscHRyAEZyYWN0IG9mIHhoZWlnaHQgZm9yIG5hcnJvdwAgcHJvcCwgJWQgZHVubm8KAE5vIHBhcmVudHMgZm91bmQgdG8gcHJvY2VzcwoAd29yZHJlY19kZWJ1Z19ibGFtZXIARXN0aW1hdGVkIGludGVybmFsIHJlc29sdXRpb24gJWQgb3V0IG9mIHJhbmdlISBDb3JyZWN0ZWQgdG8gJWQuCgAgb2NycF9sYW5nIG9jcnBfZGlyIG9jcnBfZm9udCBvY3JwX2ZzaXplACAgICAvQ29sdW1ucyAAbm90IGEgYm94YSBmaWxlAEVycm9yIGluICVzOiBtZWRpYW4gdmFscyBub3QgcmV0dXJuZWQASW5mbyBpbiAlczogd29yay1hcm91bmQ6IHdyaXRpbmcgdG8gYSB0ZW1wIGZpbGUKAGNxYyBub3QgbWFkZQAmc2l6ZSBub3QgZGVmaW5lZABub3QgYSBncGxvdCBmaWxlAHNtb290aCBwYXJhbXMgbGVzcyB0aGFuIDEAV2FybmluZyBpbiAlczogbWFzayBhbmQgZGVzdCBzaXplcyBub3QgZXF1YWwKAGRpZmYgc3RhdHMgbm90IGZvdW5kAG5vIHBpeCBpbiBwaXhhAGludmFsaWQgaW5kZXggaW4gbmFhACZtYXhsb2Mgbm90IGRlZmluZWQAbmExIGFuZCBuYTIgaGF2ZSBkaWZmZXJlbnQgc2l6ZQB3YisASW5mbyBpbiAlczogUGVhayhsb2MsdmFsKSA9ICglNS4zZiwlNS4zZikKADIgMCBvYmoKPDwKACZwaXhlbCBub3QgZGVmaW5lZABvcmRlciBvZiBtb21lbnQgbm90IDEgb3IgMgBJbnRlbnNpdHkgb2YgcmlnaHQgZWRnZSB2cy4gcmFuayBiaW4AcGl4cyBub3QgOCBicHAAZmlsZW5hbWUgbm90IGRlZmluZWQASW5mbyBpbiAlczogcGl4YSBjb250YWlucyBubyBwaXgKAHBpeGEzIG5vdCBtYWRlAGludmFsaWQgcGl4YWNvbXAgdmVyc2lvbgBpbnZhbGlkIGNvcHlmbGFnAGludmFsaWQgcHRhYSB2ZXJzaW9uAGludmFsaWQgcGl4ZABIRUlHSFQgJWQKACAgY29sb3JtYXAgZXhpc3RzIGFuZCBoYXMgY29sb3IgdmFsdWVzOgB0bXBmaWxlIHN0cmVhbSBub3Qgb3BlbmVkAHBpeHMgbm90IGNtYXBwZWQgb3IgMzIgYnBwAGNhbGxvYyBmYWlsIGZvciBzdHIAICB4b0N4byB4ACAgICAgICAgbGVwdF9mcmVlKGRhdGEyKTsKAHBpeCBub3QgbWFkZQBzdWJkaXIgbm90IGRlZmluZWQAL0RldmljZUNNWUsgc2V0Y29sb3JzcGFjZQBmaWxlLgBJbnN1ZmZpY2llbnQgbWVtb3J5IChjYXNlICVkKQBJbnZhbGlkIHNQTFQgYWZ0ZXIgSURBVABIb3N0Q29tcHV0ZXIAR3JvdXA0T3B0aW9ucwAgIEpwZWdQcm9jOiAldQoAICBSb3dzL1N0cmlwOiAAU1RJTEwgRE9VQlQAUHJpbnRpbmcgc3BlY2lhbCBibG9icyBkZW5zaXR5IHZhbHVlcyBmb3IgQ29sUGFyaXRpb24gKHQ9JWQsYj0lZCkgACMgU3Ryb25nRXZpZGVuY2VDbGFzc2lmeSggcm93c1slZDolZCkgKQoARG9uJ3QgYm90aGVyIHdpdGggd29yZCBwbGF1c2liaWxpdHkAU2V0QmxhbWUoKTogJXMAcmF0aW5nX3NjYWxlAG51bV9jb25maWdzIDw9IE1heE51bUNvbmZpZ3MAc3RvcHBlcl9ub19hY2NlcHRhYmxlX2Nob2ljZXMAQ29tcHV0ZSBzaW1wbGUgdGFyZ2V0cyBmYWlsZWQhCgBOZWlnaGJvdXIgZmFpbGVkIG92ZXJsYXAgb3IgdHlwZXNtYXRjaCB0ZXN0CgBSZWZpbmluZyAlZCAlcyBwYXJ0bmVycyBieSBtZXJnZSBmb3I6CgBQPSVkCgBpbiBmaWxlICVzLCBsaW5lICVkAHRvc3BfbmFycm93X2FzcGVjdF9yYXRpbwBjbHVzdGVyX2NvdW50PSVkOgBQYXJlbnQgdml0ZXJiaSBsaXN0AFByaW50IGJsYW1lciBkZWJ1ZyBtZXNzYWdlcwBXYXJuaW5nOiBDb3VsZCBub3Qgc2V0IGVxdWF0aW9uIGRldGVjdG9yCgAnLz4KIDwvaGVhZD4KIDxib2R5PgoACiAgICAvQml0c1BlckNvbXBvbmVudCAATnVtYmVyIG9mIGJveGVzID0gJWQKAFdhcm5pbmcgaW4gJXM6IG5vIGFjdGlvbiByZXF1ZXN0ZWQ7IHJldHVybmluZyBjb3B5CgB0bXBmaWxlIHN0cmVhbSBub3Qgb3BlbmVkAGNxY2FhIG5vdCBkZWZpbmVkAEluZm8gaW4gJXM6IHdvcmstYXJvdW5kOiB3cml0aW5nIHRvIGEgdGVtcCBmaWxlCgBpbnZhbGlkIGdwbG90IHZlcnNpb24Ac21vb3RoIHBhcmFtcyBleGNlZWQgMwBFcnJvciBpbiAlczogcmFuIG91dCBvZiBjb2xvcnMgaW4gY21hcCEKACZmcmFjdGRpZmYgbm90IGRlZmluZWQAcHRhIG5vdCBkZWZpbmVkAG5hYSBub3QgcmVhZABuYSBhbmQgbmFsb2Mgb2YgdW5lcXVhbCBzaXplAG5hYSBub3QgZGVmaW5lZABzdHJlYW0gbm90IG9wZW5lZABwaXhzIG5vdCBkZWZpbmVkIG9yIG5vdCA4IGJwcAAvQ3JlYXRpb25EYXRlIChEOiVzKQoAYnVmZmVyIG5vdCBkZWZpbmVkACZhYm92ZSBub3QgZGVmaW5lZABFcnJvciBpbiAlczogY29sb3IgYXJyYXkgbm90IHJldHVybmVkCgBzdHJlYW0gbm90IG9wZW5lZABOdW1iZXIgb2YgcGl4Y29tcCA9ICVkCgBXYXJuaW5nIGluICVzOiBwaXggaGFzIGNvbG9ybWFwOyByZW1vdmluZwoATnVtYmVyIG9mIFB0YSA9ICVkCgBwdGFhIG5vdCBkZWZpbmVkAERFUFRIICVkCgAgIGNvbG9ybWFwIGV4aXN0cyBhbmQgaGFzIG9ubHkgZ3JheSB2YWx1ZXM6AGEAc2NhbGUgZmFjdG9yIDw9IDAuMABmaWxlbmFtZSBub3QgZGVmaW5lZABvIHhvQ3ggIHgAICAgICAgICBicmVhazsKAGNhbGxvYyBmYWlsIGZvciBsaW5lYnVmAHN1YmRpciBub3QgYW4gYWN0dWFsIHN1YmRpcmVjdG9yeQB7IDw8IC9JbWFnZVR5cGUgMQBDYW5ub3QgcXVhbnRpemUgbW9yZSB0aGFuICVkIGNvbG9yIGNvbXBvbmVudHMAbWFsZm9ybWVkIHNQTFQgY2h1bmsAV2hpdGVQb2ludAAgIEpwZWdSZXN0YXJ0SW50ZXJ2YWw6ICV1CgAoaW5maW5pdGUpCgBPSwBibG9icyBjb3VudCA9ICVkLCBkZW5zaXR5ID0gAEluaXRpYWwgc3Ryb25nIHNpZ25hbHMuAHRlc3NlZGl0X2ZpeF9oeXBoZW5zAEFzc2VydCBmYWlsZWQAUmF0aW5nIHNjYWxpbmcgZmFjdG9yAGluIGZpbGUgJXMsIGxpbmUgJWQATWFrZSBBY2NlcHRhYmxlQ2hvaWNlKCkgYWx3YXlzIHJldHVybiBmYWxzZS4gVXNlZnVsIHdoZW4gdGhlcmUgaXMgYSBuZWVkIHRvIGV4cGxvcmUgYWxsIHNlZ21lbnRhdGlvbnMAQ29tcHV0ZSBDVEMgdGFyZ2V0cyBmYWlsZWQhCgBBZGRpbmcgbm9pc2UgYmxvYiB3aXRoIGRpc3RhbmNlICVkLCB0aHI9JWc6Ym94OgBNZXJnaW5nOmhvdmVybGFwPSVkLCB2b3ZlcmxhcD0lZCwgT0xJPSVkCgBGaXJzdCB0dXJuIGlzICVkIGF0ICglZCwlZCkKAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL3N0cm9rZXdpZHRoLmNwcABuYXJyb3cgaWYgdy9oIGxlc3MgdGhhbiB0aGlzACAlZyglZCkAdGV4dG9yZF93b3Jkc19kZWZhdWx0X21pbnNwYWNlAGZpcnN0X3VuaWNoYXIgIT0gbnVsbHB0cgB3b3JkcmVjX3J1bl9ibGFtZXIAb3NkACA8L2JvZHk+CjwvaHRtbD4KAAogID4+Cj4+CnN0cmVhbQoAICBCb3hbJWRdOiB4ID0gJWQsIHkgPSAlZCwgdyA9ICVkLCBoID0gJWQKAFdhcm5pbmcgaW4gJXM6IG5lZWQgYXQgbGVhc3QgNiB2YWxpZCBib3hlczsgcmV0dXJuaW5nIGNvcHkKAGZwaXhkICE9IGZwaXhzAEVycm9yIGluICVzOiBidWZmZXIgbm90IG1hZGUKAHRtcGZpbGUgc3RyZWFtIG5vdCBvcGVuZWQAUm9vdG5hbWU6ICVzCgBwaXhkIG5vdCBudWxsIG9yID09IHBpeHMAV2FybmluZyBpbiAlczogcGl4cyBhbHJlYWR5IGhhcyBhIGNvbG9ybWFwOyByZXR1cm5pbmcgYSBjb3B5CgAmYXZlZGlmZiBub3QgZGVmaW5lZABFcnJvciBpbiAlczogY2VudHJvaWQgZmFpbHVyZSBmb3IgcGl4ICVkCgAKTnVtYWEgVmVyc2lvbiAlZAoAbnB0cyA8IDIARXJyb3IgaW4gJXM6ICVkIG51bWJlcnMgaW4gbnVtYVslZF0KAGNjYmEgbm90IHdyaXR0ZW4gdG8gc3RyZWFtAFdhcm5pbmcgaW4gJXM6IGRhcmt0aHJlc2ggdW51c3VhbGx5IGxhcmdlCgAvUHJvZHVjZXIgKGxlcHRvbmljYTogJXMpCgByb3cgb3V0IG9mIGJvdW5kcwB0YWIgbm90IG1hZGUAYmlubmVkIGNvbG9ycwBwaXhhIG5vdCByZWFkAE9mZnNldCBvZiBpbmRleCBpbnRvIGFycmF5ID0gJWQAZGVwdGggbm90IDggb3IgMzIgYnBwAGVycm9yIHJlYWRpbmcgcHRhAHBpeHAgbm90IGRlZmluZWQATUFYVkFMICVkCgAgIGNvbG9ybWFwIGRvZXMgbm90IGV4aXN0CgBzYSBub3QgYXBwZW5kZWQgdG8gc3RyZWFtAFdhcm5pbmcgaW4gJXM6IHBpeGcgbm90IDggYnBwOyB1c2luZyAnZnJhY3QnIHRyYW5zcGFyZW50IGFscGhhCgBFcnJvciByZWFkaW5nIHNlbCBmcm9tICVkIHRvICVkCgAgeCBvQ3ggeCAAICogICAgICUtMmQgICAgICAgJS0xMHMgICAgJS0xNHMgICAlcwBsaW5lIHJlYWQgZmFpbAAvACAgICAgL1dpZHRoICVkAENhbm5vdCBxdWFudGl6ZSB0byBmZXdlciB0aGFuICVkIGNvbG9ycwBzUExUIGNodW5rIGhhcyBiYWQgbGVuZ3RoAFByaW1hcnlDaHJvbWF0aWNpdGllcwBEZXByZWNpYXRlZCBhbmQgdHJvdWJsZXNvbWUgb2xkLXN0eWxlIEpQRUcgY29tcHJlc3Npb24gbW9kZSwgcGxlYXNlIGNvbnZlcnQgdG8gbmV3LXN0eWxlIEpQRUcgY29tcHJlc3Npb24gYW5kIG5vdGlmeSB2ZW5kb3Igb2Ygd3JpdGluZyBzb2Z0d2FyZQAlbHUKAEFDQ0VQVEVEACVkOiVmIABVbnNtZWFyZWQgaHlwb3RoZXNlcy5zLgBDcnVuY2ggZG91YmxlIGh5cGhlbnM/AGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAY2VydGFpbnR5X3NjYWxlAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jbGFzc2lmeS9pbnRwcm90by5jcHAAdGVzc2VkaXRfdHJ1bmNhdGVfd29yZGNob2ljZV9sb2cATG9naXN0aWMgb3V0cHV0cyBub3QgaW1wbGVtZW50ZWQgeWV0IQoAVG8gcGFydGl0aW9uOgBSZWZpbmluZyAlZCAlcyBwYXJ0bmVycyBieSBvdmVybGFwIGZvcjoKAHRleHRvcmRfaW50ZXJwb2xhdGluZ19za2V3AFR1cm4gJWQgaXMgJWQgYXQgKCVkLCVkKSwgbWlkIHB0IGlzICVkQCVkLCBmaW5hbCBAJWQKACFwMS0+SXNFbXB0eSgpICYmICFwMi0+SXNFbXB0eSgpAHRvc3Bfd2lkZV9mcmFjdGlvbgAKAEZyYWN0aW9uIG9mIHhoZWlnaHQAQ29uc2lkZXJpbmcAVHJ5IHRvIHNldCB0aGUgYmxhbWUgZm9yIGVycm9ycwBXYXJuaW5nOiBBdXRvIG9yaWVudGF0aW9uIGFuZCBzY3JpcHQgZGV0ZWN0aW9uIHJlcXVlc3RlZCwgYnV0IGRhdGEgcGF0aCBpcyB1bmRlZmluZWQKACB0aXRsZT0iYmJveCAAL1hPYmplY3QgPDwgL0ltMSAAYm94IGRlc2NyIG5vdCB2YWxpZABXYXJuaW5nIGluICVzOiBpbnZhbGlkIGZhY3Rvcjsgc2V0dGluZyB0byAxLjAKAGRwaXggbm90IHJlYWQAbGV2ZWwgbXVzdCBiZSBpbiBlLmcuLCBbMCAuLi4gNV0AJnJtYXAsICZnbWFwLCAmYm1hcCBub3QgYWxsIGRlZmluZWQAT3V0cHV0IGZvcm1hdDogJWQKAHN4IGFuZC9vciBzeSBsZXNzIHRoYW4gNQBjbWFwIG5vdCBkZWZpbmVkAG5hbiBub3QgbWFkZQAmcHhhdmUgYW5kICZweWF2ZSBub3QgZGVmaW5lZABpbnZhbGlkIG51bWFhIHZlcnNpb24AaW50ZXJwb2xhdGlvbiBmYWlsZWQAbmEgbm90IG1hZGUAc3RyZWFtIG5vdCBvcGVuAGVkZ2Vjcm9wIG5vdCBpbiBbMC4wIC4uLiAxLjApAC9Qcm9kdWNlciAobGVwdG9uaWNhKQoAZGF0YWQgYW5kIGRhdGFzIG5vdCBib3RoIGRlZmluZWQAcGl4IG5vdCA4IG9yIDE2IGJwcAAvdG1wL2xlcHQvcmVnb3V0L3JhbmtoaXN0by5wbmcAClBpeGEgVmVyc2lvbiAlZAoAb2Zmc2V0IG5vdCByZWFkAHBpeHMgbm90IDI0IGJwcABFcnJvciBpbiAlczogcHRhYSBub3QgcmVhZAoAbm8gcGF0dGVybiBpcyBkZWZpbmVkAFRVUExUWVBFIEJMQUNLQU5EV0hJVEUKACAgVGlmZiBoZWFkZXIgaW5mb3JtYXRpb246CgBkaXJuYW1lIG5vdCBkZWZpbmVkAFdhcm5pbmcgaW4gJXM6IGludmFsaWQgZnJhY3Q7IHVzaW5nIGZ1bGx5IG9wYXF1ZQoAYmFkIHNlbGEgZmlsZQAgeCBvQ3hvICAAY2FsbG9jIGZhaWwgZm9yIHRpZmZkYXRhAC90bXAAICAgICAvSGVpZ2h0ICVkAENhbm5vdCBxdWFudGl6ZSB0byBtb3JlIHRoYW4gJWQgY29sb3JzAHNQTFQgY2h1bmsgdG9vIGxvbmcAQ29sb3JNYXAAc3AtPnJlYWRoZWFkZXJfZG9uZT09MAAgIE1pbiBTYW1wbGUgVmFsdWU6ICV1CgBPbGQgbWlzZml0cz0lZCB3aXRoIHgtaGVpZ2h0ICVmLCBuZXc9JWQgd2l0aCB4LWhlaWdodCAlZgoACgBNYXJnaW5zIGRvbid0IG1hdGNoISBTb2Z0d2FyZSBlcnJvci4KAHRlc3NlZGl0X2VuYWJsZV9kb2NfZGljdAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaABDZXJ0YWludHkgc2NhbGluZyBmYWN0b3IATm9uLWNvbnRpZ3VvdXMgY2xhc3MgaWRzIGluIGludHRlbXAKAE1heCB3b3JkcyB0byBrZWVwIGluIGxpc3QASW5wdXQgd2lkdGggd2FzICVkCgBPb29wcyEgUGFydGl0aW9uOiglZCBwYXJ0bmVycykAVW5pcXVlIG9uICglZCwlZCktPiglZCwlZCkgb3ZlcmxhcCAlZC8lZCwgbWlzcyAlZC8lZCwgbXQ9JWQvJWQKAEludGVycG9sYXRlIGFjcm9zcyBnYXBzAFRvbyBtYW55IHNlZ21lbnRzIHRvIHJlc2VnbWVudCBzcGxpbmUhIQoAZGVidWcARnJhY3Qgb2YgeGhlaWdodCBmb3Igd2lkZQBObyBjbHVzdGVycyBiZWxvdyBub25zcGFjZSB0aHJlc2hvbGQhIQoAUGFyZW50ICVzIGhhcyBjb21wZXRpdGlvbiAlcwoAc2Vnc2VhcmNoX2RlYnVnX2xldmVsAFdhcm5pbmc6IEF1dG8gb3JpZW50YXRpb24gYW5kIHNjcmlwdCBkZXRlY3Rpb24gcmVxdWVzdGVkLCBidXQgb3NkIGxhbmd1YWdlIGZhaWxlZCB0byBsb2FkCgA7IHhfc2l6ZSAAIDAgUiA+PgoARXJyb3IgaW4gJXM6IGJveGEgbm90IHJlYWQKAEluZm8gaW4gJXM6IG1lZGlhbiBoZSA9ICVkLCBtZWRpYW4gaG8gPSAlZAoACkRQaXggVmVyc2lvbiAlZAoAJmJpbmRleCBub3QgZGVmaW5lZABjYWxsb2MgZmFpbCBmb3IgKm1hcABDb21tYW5kZmlsZSBuYW1lOiAlcwoAc21vb3RoIHBhcmFtcyBsZXNzIHRoYW4gMABpbnZhbGlkIG1pbmRlcHRoAApOb256ZXJvIHZhbHVlcyBpbiBub3JtYWxpemVkIGhpc3RvZ3JhbToAcGl4IG5vdCBkZWZpbmVkAE51bWJlciBvZiBudW1hID0gJWQKCgBpbnZhbGlkIHNvcnQgb3JkZXIAbmFwZWFrIG5vdCBtYWRlAGJidWYgbm90IG1hZGUAJmJveGEgbm90IGRlZmluZWQAL1RpdGxlICVzCgAmZGF0YSBhbmQgJm5ieXRlcyBub3QgYm90aCBkZWZpbmVkAGludmFsaWQgdHlwZQBwaXhnIG5vdCBkZWZpbmVkAG5vdCBhIHBpeGEgZmlsZQAKUGl4Y29tcFslZF06IHcgPSAlZCwgaCA9ICVkLCBkID0gJWQKAGludmFsaWQgdHlwZTE2AHB0YWEgbm90IHdyaXR0ZW4gdG8gc3RyZWFtAFdhcm5pbmcgaW4gJXM6IHBpeHAgYW5kIHB0YXAgZGVmaW5lZDsgdXNpbmcgcHRhcAoAVFVQTFRZUEUgR1JBWVNDQUxFCgAgICAgT25lIHBhZ2UgaW4gZmlsZQoAV2FybmluZyBpbiAlczogbm8gZmlsZXMgZm91bmQKAFdhcm5pbmcgaW4gJXM6IHRyYW5zcGFyZW50IGFscGhhOyBpbWFnZSB3aWxsIG5vdCBiZSBibGVuZGVkCgBwdGEgbm90IGRlZmluZWQAbyAgb0N4IHggAGZhaWxlZCB0byByZWFkIHRpZmZkYXRhAEVycm9yIGluICVzOiBmYWlsdXJlIHRvIGNyZWF0ZSAlZCBkaXJlY3RvcmllcwoAICAgICAvSW1hZ2VNYXRyaXggWyAlZCAwIDAgJWQgMCAlZCBdAEludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogdHdvIFNPRiBtYXJrZXJzAHNQTFQgY2h1bmsgcmVxdWlyZXMgdG9vIG11Y2ggbWVtb3J5AEhhbGZ0b25lSGludHMAU2FtcGxlc1BlclBpeGVsICVkIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29tcHJlc3Npb24gc2NoZW1lACAgTWF4IFNhbXBsZSBWYWx1ZTogJXUKAE9sZCByYXRpbmc9ICVmLCBjZXJ0YWludHk9JWYsIG5ldz0lZiwgJWYKAGRlYnVnAENvdWxkIG5vdCBkZXRlcm1pbmUgYSBtb2RlbCBmb3IgdGhpcyBwYXJhZ3JhcGg6CgBBZGQgd29yZHMgdG8gdGhlIGRvY3VtZW50IGRpY3Rpb25hcnkAdGVzc2VkaXRfY2xhc3NfbWlzc19zY2FsZQBDbGFzcyBpZCAlZCBleGNlZWRzIE51bUNsYXNzZXNJbiAoVGVtcGxhdGVzKSAlZAoAd29yZF90b19kZWJ1ZwBJdGVyYXRpb24gJWQ6IEJFU1QgT0NSIFRFWFQgOiAlcwoAaGFzIHNpbmdsZXRvbiBwYXJ0bmVyOiglZCBwYXJ0bmVycwBTcGFjaW5nIHJ1biBlbmRlZC4gQ2F1c2U6AFNwbGl0dGluZyBzcGxpbmUgYXQgJWQgd2l0aCBzdGVwICVnIGF0ICglZCwlZCkKAGRpc3BsYXkAdG9zcF93aWRlX2FzcGVjdF9yYXRpbwBObyBjbHVzdGVycyBhYm92ZSBub25zcGFjZSB0aHJlc2hvbGQhIQoAQWRkVml0ZXJiaVN0YXRlRW50cnkgZm9yIHVuaWNoYXIgJXMgcmF0aW5nPSUuNGYgY2VydGFpbnR5PSUuNGYgdG9wX2Nob2ljZV9mbGFncz0weCV4AFNlZ1NlYXJjaCBkZWJ1ZyBsZXZlbABXQVJOSU5HOiBGb3VuZCBubyBibG9ja3MKADsgeF9kZXNjZW5kZXJzIAAgMCBvYmoKPDwKICAvVHlwZSAvUGFnZQogIC9QYXJlbnQgMiAwIFIKICAvTWVkaWFCb3ggWzAgMCAAYm94YSBub3Qgd3JpdHRlbiB0byBzdHJlYW0ASW5mbyBpbiAlczogR290IHdvcnNlOiBkZWwyID0gJWYgPiBkZWwxID0gJWYKAG5vdCBhIGRwaXggZmlsZQAmc2luZGV4IG5vdCBkZWZpbmVkACZ0YWIgbm90IGRlZmluZWQACkNvbW1hbmRmaWxlIGRhdGE6AHNtb290aCBwYXJhbXMgZXhjZWVkIDgAV2FybmluZyBpbiAlczogQ29udmVydGluZyBjb2xvcm1hcCBjb2xvcnMgdG8gZ3JheQoAIE1pbmRpZmYgICAgICBmcmFjdGRpZmYgICAgICBhdmVkaWZmCgBwaXggbm90IDEgb3IgOCBicHAAaW52YWxpZCBudW1iZXIgb2YgbnVtYQBpbnZhbGlkIHNvcnQgdHlwZQBuZWl0aGVyICZuciBub3IgJm5ycGwgYXJlIGRlZmluZWQAY2NiYTogJTdkIGNjCgBpbnZhbGlkIHBvbGFyaXR5AEVycm9yIGluICVzOiB0aXRsZSBzdHJpbmcgaXMgbm90IGFzY2lpCgBkZXB0aCBub3QgaW4gezEsMiw0LDgsMTYsMzJ9AHBpeCBjb2xvcm1hcHBlZABuYWx1dCBub3QgZGVmaW5lZABpbnZhbGlkIHBpeGEgdmVyc2lvbgBzaXplIHJlYWRpbmcAaW52YWxpZCB0eXBlOABuZXcgeCBhcnJheSBub3QgcmV0dXJuZWQAbm8gcHRhAFRVUExUWVBFIFJHQgoAICAgICVkIHBhZ2VzIGluIGZpbGUKAFdhcm5pbmcgaW4gJXM6IAogIE11bHRpcGxlIGZpbGVzIHdpdGggc2FtZSBudW1iZXI6ICVkCgAoY3ksIGN4KSBub3QgYm90aCA+PSAwAG8gIG9DeG8gIABpbnZhbGlkIGJwczsgPiA4AGRpcmVjdG9yeSBuYW1lIG5vdCBtYWRlACAgICAgL0RhdGFTb3VyY2UgRGF0YQBJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IG1pc3NpbmcgU09TIG1hcmtlcgBNaXNzaW5nIElIRFIgYmVmb3JlIHRSTlMAVGlsZVdpZHRoAEluY29tcGF0aWJsZSB2ZXJ0aWNhbCBzdWJzYW1wbGluZyBhbmQgaW1hZ2Ugc3RyaXAvdGlsZSBsZW5ndGgAICBTTWluIFNhbXBsZSBWYWx1ZTogJWcKAFBPU1QgRklYX1FVT1RFUyBGQUlMIFN0cmluZzoiJXMiOyBTdHJsZW49JWQ7ICNCbG9icz0lZAoAZGlzcGxheQA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoAdGVzc2VkaXRfZGVidWdfZm9udHMAU2NhbGUgZmFjdG9yIGZvciBmZWF0dXJlcyBub3QgdXNlZABXYXJuaW5nOiBleGVjdXRpbmcgV3JpdGVJbnRUZW1wbGF0ZXMoKSB3aXRoICVkIGNsYXNzZXMgaW4gVGVtcGxhdGVzLCB3aGlsZSB0YXJnZXRfdW5pY2hhcnNldCBzaXplIGlzICVkCgBXb3JkIGZvciB3aGljaCBzdG9wcGVyIGRlYnVnIGluZm9ybWF0aW9uIHNob3VsZCBiZSBwcmludGVkIHRvIHN0ZG91dABGaWxlICVzIGxpbmUgJWQgJXM6CgBidXQgaXRzIHNpbmdsZXRvbiBwYXJ0bmVyIGlzOgBObyBtb3JlIGxpbmVzCgBSZXNlZ21lbnRpbmcgc3BsaW5lIGZhaWxlZCAtIGluc3VmZmljaWVudCBwdHMgKCVkLCVkLCVkLCVkKQoAQm91bmRpbmcgYm94PSglZCwlZCktPiglZCwlZCkKAHdpZGUgaWYgdy9oIGxlc3MgdGhhbiB0aGlzAE5vIGNsdXN0ZXJzIGJlbG93IHNwYWNlIHRocmVzaG9sZCEhCgB0ZXh0b3JkX3dvcmRzX21pbl9taW5zcGFjZQAgcGFyZW50X3ZzZT0lcAoAc2Vnc2VhcmNoX21heF9wYWluX3BvaW50cwBwYXJhZ3JhcGhfZGVidWdfbGV2ZWwAOyB4X2FzY2VuZGVycyAAXQogIC9Db250ZW50cyAAYm94IG5vdCBmb3VuZABsZXNzIHRoYW4gMiBib3hlcwBpbnZhbGlkIGRwaXggdmVyc2lvbgBXYXJuaW5nIGluICVzOiBwdHIgYWRkcmVzcyBpcyBOVUxMCgB0YWIgbm90IG1hZGUACkRhdGFmaWxlIG5hbWVzOgAmcGl4bWluIG9yICZwaXhtYXggdW5kZWZpbmVkACZsdXQgbm90IGRlZmluZWQAIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgBXYXJuaW5nIGluICVzOiBubyBPTiBwaXhlbHMgaW4gcGl4CgBOdW1hWyVkXToASW5mbyBpbiAlczogU2hlbGwgc29ydCBjaG9zZW4KACZiZXN0dGhyZXNoIG5vdCBkZWZpbmVkAGJvdW5kaW5nIGJveCBub3QgZm91bmQAV2FybmluZyBpbiAlczogbGFyZ2UgbnVtIHJlY3RhbmdsZXMgPSAlZCByZXF1ZXN0ZWQ7IHVzaW5nIDEwMDAKAD4+CmVuZG9iagoAZGF0YSBub3QgYWxsb2NhdGVkACZhdmUgbm90IGRlZmluZWQAV2FybmluZyBpbiAlczogc2FtcGxpbmcgZmFjdG9yIGxlc3MgdGhhbiAxOyBzZXR0aW5nIHRvIDEKAE51bWJlciBvZiBwaXggPSAlZAoAICBjb21wdHlwZSA9ICVkLCBzaXplID0gJWQsIGNtYXBmbGFnID0gJWQKAHBpeHMgdW5kZWZpbmVkIG9yIG5vdCAxIGJwcABuZXcgeSBhcnJheSBub3QgcmV0dXJuZWQAcGl4ZCBub3QgbWFkZQBUVVBMVFlQRSBSR0JfQUxQSEEKACAgMSBicHA6IGZvcmVncm91bmQgcGl4ZWwgZnJhY3Rpb24gT04vVG90YWwgPSAlZwoAcGRpciBub3Qgb3BlbmVkAG5vIHB0cyBpbiBwdGEAbyB4b0N4byAgAGNtYXAgbm90IG1hZGUARXJyb3IgaW4gJXM6IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdCEKACAgICAgL0JpdHNQZXJDb21wb25lbnQgJWQAVW5zdXBwb3J0ZWQgSlBFRyBwcm9jZXNzOiBTT0YgdHlwZSAweCUwMngASW52YWxpZCB0Uk5TIGFmdGVyIElEQVQAVGlsZUxlbmd0aABzPjAAICBTTWF4IFNhbXBsZSBWYWx1ZTogJWcKAHdvcmQtPnJhd19jaG9pY2UgIT0gbnVsbHB0cgBBc3NlcnQgZmFpbGVkACVzCgBPdXRwdXQgZm9udCBpbmZvIHBlciBjaGFyAGNsYXNzaWZ5X2FkYXB0ZWRfcHJ1bmluZ19mYWN0b3IAQ2xhc3MtPk51bUNvbmZpZ3MgPT0gdGhpcy0+Zm9udHNldF90YWJsZV8uZ2V0KENsYXNzLT5mb250X3NldF9pZCkuc2l6ZQBzZWdtZW50X25vbmFscGhhYmV0aWNfc2NyaXB0AChQZXJmZWN0KQBOVUxMCgBTcGFjaW5nIGNoYW5nZS4gU3BhY2luZ3M6CgB0ZXh0b3JkX3NrZXdzbW9vdGhfb2Zmc2V0AGJsb2Jjb3VudD0lZCwgbW9kZV9jb3VudD0lZCwgbW9kZV90PSVkCgBCb3ggKCVkLCVkKS0+KCVkLCVkKTogaC13aWR0aD0lLjFmLCB2LXdpZHRoPSUuMWYgcC13aWR0aD0lMS5mCgB0b3NwX2Z1enp5X3NwYWNlX2ZhY3RvcgBObyBjbHVzdGVycyBhYm92ZSBzcGFjZSB0aHJlc2hvbGQhIQoAY3Vycl9zdGF0ZSAhPSBudWxscHRyAE1heGltdW0gbnVtYmVyIG9mIHBhaW4gcG9pbnRzIHN0b3JlZCBpbiB0aGUgcXVldWUAJmx0OwAiPgAgMCBSCiAgL1Jlc291cmNlcwogIDw8CiAgICAAIEJveDogeCA9ICVkLCB5ID0gJWQsIHcgPSAlZCwgaCA9ICVkCgBsZXB0L3Bsb3RzAGRwaXggbm90IG1hZGUAJnNpemUgbm90IGRlZmluZWQAJm5jb2xvcnMgbm90IGRlZmluZWQAClBsb3QgZGF0YToAc21vb3RoIHBhcmFtcyBleGNlZWQgNQAlNWQgICAgICAgICAlNy40ZiAgICAgICAgJTcuNGYKAFdhcm5pbmcgaW4gJXM6IGFsbCBwaXhlbHMgYXJlIDAKAGludmFsaWQgbnVtYSBoZWFkZXIASW5mbyBpbiAlczogQmluIHNvcnQgY2hvc2VuCgBuYXkgbm90IGRlZmluZWQAY2NiYSBub3QgcmV0dXJuZWQARXJyb3IgaW4gJXM6IGZhaWx1cmUgaW4gcGl4RmluZExhcmdlc3RSZWN0YW5nbGUKADMgMCBvYmoKPDwKL1R5cGUgL1BhZ2VzCi9LaWRzIFsgNCAwIFIgXQovQ291bnQgMQo+PgoAJm9wYXF1ZSBub3QgZGVmaW5lZABwaXggbm90IDEsIDIsIDQgb3IgOCBicHAAL3RtcC9sZXB0L3JlZ291dC9ydG5hcmVkACBwaXhbJWRdOiB4cmVzID0gJWQsIHlyZXMgPSAlZAoAY29tcHR5cGUvc2l6ZSByZWFkaW5nAHBpeGQgZGVmaW5lZCBidXQgIT0gcGl4cwBuZXcgcHRyIGFycmF5IG5vdCByZXR1cm5lZABjYWxsb2MgZmFpbCBmb3IgcGl4ZWxhAEVOREhEUgoAPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KAG5ldyBwdHIgYXJyYXkgbm90IHJldHVybmVkAG5vdCBhbGwgeCBhbmQgeSA+PSAwAG8gIG9DeG8geAB0aWYgc3RyZWFtIG5vdCBkZWZpbmVkAHNhIG5vdCBtYWRlACAgICAgL0RlY29kZSBbMCAxXQBJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IHR3byBTT0kgbWFya2VycwBEdXBsaWNhdGUgdFJOUyBjaHVuawBUaWxlT2Zmc2V0cwBzPDMAICBQbGFuYXIgQ29uZmlndXJhdGlvbjogAEZhaWxlZCB0byBmaW5kIGEgY2hvaWNlIGZvciAlcywgb2NjdXJyaW5nICVkIHRpbWVzCgBjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpACMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgB0ZXNzZWRpdF9kZWJ1Z19ibG9ja19yZWplY3Rpb24AUHJ1bmUgcG9vciBhZGFwdGVkIHJlc3VsdHMgdGhpcyBtdWNoIHdvcnNlIHRoYW4gYmVzdCByZXN1bHQAQ2lyY3VsYXIgZmlsbCBmcm9tICVkIHRvICVkAERvbid0IHVzZSBhbnkgYWxwaGFiZXRpYy1zcGVjaWZpYyB0cmlja3MuIFNldCB0byB0cnVlIGluIHRoZSB0cmFpbmVkZGF0YSBjb25maWcgZmlsZSBmb3Igc2NyaXB0cyB0aGF0IGFyZSBjdXJzaXZlIG9yIGluaGVyZW50bHkgZml4ZWQtcGl0Y2gAAHBhcnRuZXItPlNpbmdsZXRvblBhcnRuZXIoZmFsc2UpID09IHBhcnQATlVMTABGb3Igc21vb3RoIGZhY3RvcgBtb2RlWyVkXT0lZCAAZ2FwcyA9ICVkLCAlZCwgbWVyZ2VkX2JveDoARnJhY3Qgb2YgeGhlaWdodCBmb3IgZnV6eiBzcABJbml0aWFsIGVzdGltYXRlczpwcl9ub25zcD0lZywgcHJfc3BhY2U9JWcsIGZwX25vbnNwPSVnLCBmcF9zcGFjZT0lZwoAQWRkVml0ZXJiaVN0YXRlRW50cnk6IHZpdGVyYmkgbGlzdCBpcyBmdWxsIQoAc2Vnc2VhcmNoX21heF9mdXRpbGVfY2xhc3NpZmljYXRpb25zACZndDsAOyB0ZXh0YW5nbGUgACAgICAvUHJvY1NldCBbIC9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VJIC9JbWFnZUMgXQogICAgL0ZvbnQgPDwgL2YtMC0wIDMgMCBSID4+CiAgPj4KPj4KZW5kb2JqCgAvdG1wL2xlcHQvcGxvdHMvc2lkZXMuJXMARXJyb3IgaW4gJXM6IGRwaXggbm90IHJlYWQKAHBpeGQgdW5kZWZpbmVkIG9yIG5vdCA4IGJwcABjcGMgbm90IDMgb3IgNAAKUGxvdCB0aXRsZXM6AHBpeHMxIGFuZCBwaXhzMiBub3QgYm90aCBkZWZpbmVkAGQgPT0gMTYgbm90IHN1cHBvcnRlZABFcnJvciBpbiAlczogbmFhIG5vdCByZWFkCgBuYWluIG5vdCBkZWZpbmVkAG5heCBhbmQgbmF5IHNpemVzIGRpZmZlcgBkYXRhIG5vdCByZWFkIGZyb20gZmlsZQAmYm94IG5vdCBkZWZpbmVkAAplbmRzdHJlYW0KZW5kb2JqCgAmcGl4IG5vdCBkZWZpbmVkAHBpeCBpcyBjb2xvcm1hcHBlZABBdmVyYWdlIHJlZCB2YWwgdnMuIHJhbmsgYmluAHJlcyByZWFkaW5nIGVycm9yAGZnZXRzIHJlYWQgZmFpbABwaXhzIGhhcyBjb2xvcm1hcABkYXRhIG5vdCBkZWZpbmVkAHBpeDEgbm90IG1hZGUAcGl4IG5vdCBkZWZpbmVkACB4IG9DeG9vIABXYXJuaW5nIGluICVzOiB0b28gbWFueSBjb2xvcnMgaW4gY21hcCBmb3IgdGlmZjsgdHJ1bmNhdGluZwoAV2FybmluZyBpbiAlczogbm8gbWF0Y2hpbmcgZmlsZXMgZm91bmQKACAgICAgL0RlY29kZSBbMCAxIDAgMSAwIDFdAEludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogU09TIGJlZm9yZSBTT0YASW5jb3JyZWN0IHRSTlMgY2h1bmsgbGVuZ3RoAFRpbGVCeXRlQ291bnRzAHNwLT5zb3NfZW5kWzBdLmxvZyE9MABzaW5nbGUgaW1hZ2UgcGxhbmUKAAoKVEVTVFdEOjoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2NjdXRpbC91bmljaGFyc2V0LmgAIyMjIyMgR2VvbWV0cmljQ2xhc3NpZnkoIHJvd3NbJWQ6JWQpICkgICAjIyMjCgBCbG9jayBhbmQgUm93IHN0YXRzAGNsYXNzaWZ5X2FkYXB0ZWRfcHJ1bmluZ190aHJlc2hvbGQATGluZWFyIGZpbGwgZnJvbSAlZCB0byAlZABzYXZlX2RvY193b3JkcwBXYXJuaW5nOiBkYXRhIHNpemUgaXMgMCBpbiBMU1RNVHJhaW5lcjo6UmVhZExvY2FsVHJhaW5pbmdEdW1wCgBjb2x1bW5fc2V0ICE9IG51bGxwdHIAIExvd2VyIHBhcnRuZXI6AAoASGdhcHMgWyVkLCVkXSwgdmdhcHMgWyVkLCVkXToAdG9zcF9mdXp6eV9zcGFjZV9mYWN0b3IxAEZpcnN0IGZwIGl0ZXJhdGlvbjppbml0aWFsX3BpdGNoPSVnLCBnYXBfaXFyPSVnLCBwaXRjaF9pcXI9JWcsIHBpdGNoPSVnCgB0ZXh0b3JkX3dvcmRzX2RlZmF1bHRfbm9uc3BhY2UATWF4aW11bSBudW1iZXIgb2YgcGFpbiBwb2ludCBjbGFzc2lmaWNhdGlvbnMgcGVyIGNodW5rIHRoYXQgZGlkIG5vdCByZXN1bHQgaW4gZmluZGluZyBhIGJldHRlciB3b3JkIGNob2ljZS4AJmFtcDsAOyBiYXNlbGluZSAAanBnX3F1YWxpdHkAJXM6IEJveCBzaWRlcyB2cy4gYm94IGluZGV4AGRwaXggbm90IHdyaXR0ZW4gdG8gc3RyZWFtAHBpeGQgbm90IGNtYXBwZWQAZGF0YSBub3QgbWFkZQAKUGxvdCBzdHlsZXM6AHBpeHMxIGFuZCBwaXhzMiBub3QgZXF1YWwgc2l6ZQBwaXggZGVwdGhzIG5vdCBlcXVhbABuYSBub3QgZm91bmQAaW52YWxpZDogbm90IGluLXBsYWNlAEluZm8gaW4gJXM6IE51bWJlciBvZiBjcm9zc2luZ3M6ICVkCgBkYXRhb3V0IG5vdCBtYWRlAHBpeHMgbm90IDEgYnBwAHN0ciBub3QgZGVmaW5lZAAmcGl4IG5vdCAzMiBicHAAJnJvb3R2YXIgbm90IGRlZmluZWQAL3RtcC9sZXB0L3JlZ291dC9ydG5hZ3JlZW4AcGl4IG5vdCByZWFkACAgeHJlcyA9ICVkLCB5cmVzID0gJWQKAGludmFsaWQgZGVzdCBkZXB0aABzdHJlYW0gbm90IG9wZW5lZABsZXB0L2Zvcm1hdABwaXggbm90IDEgYnBwACB4IG9DeG94IABXYXJuaW5nIGluICVzOiB1bmtub3duIHRpZmYgY29tcHJlc3Npb247IHVzaW5nIG5vbmUKAEVycm9yIGluICVzOiBmYWlsZWQgdG8gcmVtb3ZlICVzCgAgICAgIC9EZWNvZGUgWzAgMSAwIDEgMCAxIDAgMV0ARmFpbGVkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcwBNaXNzaW5nIFBMVEUgYmVmb3JlIHRSTlMAU3ViSUZEAHNwLT5zb3NfZW5kW3NdLmxvZz09MABzZXBhcmF0ZSBpbWFnZSBwbGFuZXMKAGNsYXNzaWZ5X3dvcmRfcGFzczEgc3RhcnQKAGNwMSAhPSBudWxscHRyICYmIGNwMiAhPSBudWxscHRyAFRvbyBtdWNoIHZhcmlldHkgZm9yIHNpbXBsZSBvdXRsaW5lIGNsYXNzaWZpY2F0aW9uLgB0ZXNzZWRpdF9lbmFibGVfYmlncmFtX2NvcnJlY3Rpb24AVGhyZXNob2xkIGF0IHdoaWNoIGNsYXNzaWZ5X2FkYXB0ZWRfcHJ1bmluZ19mYWN0b3Igc3RhcnRzAFdhcm5pbmc6IFBhcmFtICVzIHRydW5jYXRlZCBmcm9tICVmIHRvICVkIQoAU2F2ZSBEb2N1bWVudCBXb3JkcwBMU1RNUmVjb2duaXplcjo6U2VyaWFsaXplKCZtZ3JfLCAmZnApAENoYW5nZWQgY29sdW1uIGdyb3VwcyBhdCBncmlkIGluZGV4ICVkLCB5PSVkCgAgbnVsbHB0ciBsb3dlciBwYXJ0bmVyOgoAT3V0cHV0IHhoZWlnaHQ9JWcKAEhvcnogYXQ6AHRvc3BfZnV6enlfc3BhY2VfZmFjdG9yMgBSZXZpc2VkIGZwIGl0ZXJhdGlvbjppbml0aWFsX3BpdGNoPSVnLCBnYXBfaXFyPSVnLCBwaXRjaF9pcXI9JWcsIHBpdGNoPSVnCgBMYW5ndWFnZSBtb2RlbCBjb21wb25lbnRzIHZlcnkgZWFybHkgcHJ1bmVkIHRoaXMgZW50cnkKAHNlZ3NlYXJjaF9tYXhfY2hhcl93aF9yYXRpbwAmcXVvdDsAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQAgMCBvYmoKPDwKICAvVHlwZSAvUGFnZXMKICAvS2lkcyBbIAAvdG1wL2xlcHQvcGxvdHMvc2lkZXMuJWQAZHBpeGQgIT0gZHBpeHMAbm90IGFsbCA0IHRhYmxlcyBkZWZpbmVkAG5vIGVudHJpZXMATnVtYmVyIG9mIHBsb3RzOiAlZAoAV2FybmluZyBpbiAlczogbm8gcGl4ZWwgcGFpciBkaWZmcyBhcyBsYXJnZSBhcyBtaW5kaWZmCgAmZnJhY3Qgbm90IGRlZmluZWQAaW52YWxpZCBzb3J0b3JkZXIAJmJlc3R3aWR0aCBhbmQgJmJlc3RzaGlmdCBub3QgZGVmaW5lZABjY2JhOgBzdHIgbm90IGFsbCBhc2NpaQAmcGl4IG5vdCA0IHNwcABwaXggdW5kZWZpbmVkIG9yIG5vdCA4IGJwcABBdmVyYWdlIGdyZWVuIHZhbCB2cy4gcmFuayBiaW4AZGF0YSBub3QgZGVmaW5lZAByZWFkIGZhaWwgZm9yIHJlcwBkZXB0aCA+IGQARXJyb3IgaW4gJXM6IHBpeCBub3QgcmVhZAoASW5mbyBpbiAlczogd3JpdGUvcmVhZCBibXAKAHBpeCBub3QgcmV0dXJuZWQAb3ggb0N4IHggAEJpZyB0cm91YmxlOiB0aWZmYnBsID0gJWQsIGJwbCA9ICVkCgB0YWlsIHVuZGVmaW5lZCBvciBlbXB0eQAgID4+IGltYWdlAFJlYWQgZmFpbGVkIG9uIHRlbXBvcmFyeSBmaWxlAFplcm8gbGVuZ3RoIHRSTlMgY2h1bmsASW5rU2V0AHNwLT5saWJqcGVnX3Nlc3Npb25fYWN0aXZlIT0wACAgUGFnZSBOdW1iZXI6ICV1LSV1CgBtYWtlX3JlamVjdF9tYXA6IGluaXRpYWwgbWFwAEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgBOb3QgZW5vdWdoIHZhcmlldHkgZm9yIHNpbXBsZSBvdXRsaW5lIGNsYXNzaWZpY2F0aW9uLgBFbmFibGUgY29ycmVjdGlvbiBiYXNlZCBvbiB0aGUgd29yZCBiaWdyYW0gZGljdGlvbmFyeS4AY2xhc3NpZnlfYWRhcHRfcHJvdG9fdGhyZXNob2xkAGRlYnVnAGRvY19kaWN0X3BlbmRpbmdfdGhyZXNob2xkAF8AQmxvY2sgbWVkaWFuIHNpemUgPSAoJWQsICVkKQoACgB0ZXh0b3JkX3NrZXdzbW9vdGhfb2Zmc2V0MgB3YXJuaW5nOiBSb3cgTGluZSBoZWlnaHQgPCAwOyAlNC4yZgoAVmVydCBhdDoAdG9zcF9nYXBfZmFjdG9yAEJsaz0lZDpSb3c9JWQ6JWM6cF9pcXI9JWc6Z19pcXI9JWc6ZG1fcF9pcXI9JWc6ZG1fZ19pcXI9JWc6JWM6AExhbmd1YWdlIG1vZGVsIGNvbXBvbmVudHMgZWFybHkgcHJ1bmVkIHRoaXMgZW50cnkKAE1heGltdW0gY2hhcmFjdGVyIHdpZHRoLXRvLWhlaWdodCByYXRpbwAmIzM5OwAgMCBSIABCb3ggc2lkZXMgdnMuIGJveCBpbmRleABzYW1wbGluZyBmYWN0b3IgPCAxZgBwaXhzIGFuZCBwaXhkIG5vdCBzYW1lIHNpemUAbmNvbG9ycyA+IDI1NgBPdXRwdXQgZmlsZSBuYW1lOiAlcwoAcGl4bWluICYgcGl4bWF4IG5vdCBkZWZpbmVkAGRpbGF0aW9uIG11c3QgYmUgb2RkAGFycmF5IG5vdCBtYWRlACZzY29yZSBub3QgZGVmaW5lZABmaWxlIG5vdCB0eXBlIGNjYmEAPGZlZmYAcGl4IG5vdCBkZWZpbmVkIG9yIG5vdCA4IGJwcAByb3cgd2lkdGggbXVzdCBiZSA+PSAyAC90bXAvbGVwdC9yZWdvdXQvcnRuYWJsdWUARXJyb3IgaW4gJXM6IHBpeGEgbm90IHJlYWQKAGNhbGxvYyBmYWlsIGZvciBkYXRhAGRlcHRoIG5vdCBpbiB7MSwgMiwgNCwgOCwgMTYsIDMyfQBoZWFkZXIgZGF0YSByZWFkIGZhaWxlZABJbmZvIGluICVzOiAgICAqKioqIGJhZCBibXAgaW1hZ2U6IGQgPSAlZCAqKioqCgBFcnJvciBpbiAlczogc2VsIG5vdCBtYWRlCgAgeHhvQ3hvbyAAbm90IGFsbCBhcnJheXMgZGVmaW5lZAB0ZW1wIGRpcm5hbWUgbm90IG1hZGUAICBEYXRhIGNsb3NlZmlsZQBTZWVrIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZQB0Uk5TIGNodW5rIG5vdCBhbGxvd2VkIHdpdGggYWxwaGEgY2hhbm5lbABJbmtOYW1lcwBzcC0+bGlianBlZ19zZXNzaW9uX2FjdGl2ZT09MAAgIENvbG9yIE1hcDogAG1ha2VfcmVqZWN0X21hcDogYWZ0ZXIgTk4AYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQAjIENhbm5vdCBkZXRlcm1pbmUgJXMgaW5kZW50IGxpa2VseSB0byBzdGFydCBwYXJhZ3JhcGhzLgoAdGVzc2VkaXRfZW5hYmxlX2RpY3RfY29ycmVjdGlvbgBUaHJlc2hvbGQgZm9yIGdvb2QgcHJvdG9zIGR1cmluZyBhZGFwdGl2ZSAwLTI1NQBkaXNwbGF5AFdvcnN0IGNlcnRhaW50eSBmb3IgdXNpbmcgcGVuZGluZyBkaWN0aW9uYXJ5AC5jaGVja3BvaW50AEJsayAlZCwgdHlwZSAlZCByZXJvdGF0aW9uKCUuMmYsICUuMmYpLCBjaGFyKCUuMmYsJS4yZiksIGJveDoAVG9wID0gJWQsIGJvdHRvbSA9ICVkCgBkZWJ1ZwBOZWl0aGVyIGF0OgBnYXAgcmF0aW8gdG8gZmxpcCBzcC0+a2VybgBDaG9vc2luZyBub24gZG0gdmVyc2lvbjpwaXRjaF9pcXI9JWcsIGdhcF9pcXI9JWcsIGRtX3BpdGNoX2lxcj0lZywgZG1fZ2FwX2lxcj0lZwoAdGV4dG9yZF93b3Jkc19pbml0aWFsX2xvd2VyAEFkanVzdGVkIGNvc3QgPSAlZwoAc2F2ZV9hbHRfY2hvaWNlcwBGaW5kTGluZXMoKSA9PSAwAF0KICAvQ291bnQgAGJveCBpbmRleAAKRlBpeDogdyA9ICVkLCBoID0gJWQKAHRhYmxlcyBub3QgYWxsIGRlZmluZWQAbm8gY29sb3JzAEF4aXMgc2NhbGluZzogJWQKAGlhYSBub3QgZGVmaW5lZABwaXhzMSBub3QgZGVmaW5lZABpYXJyYXkgbm90IG1hZGUAbmFzIHNpemUgdG9vIHNtYWxsAGJveCBub3QgbWFkZQAlMDR4AHBpeCBoYXMgY29sb3JtYXAAY29sdW1uIGhlaWdodCBtdXN0IGJlID49IDIAQXZlcmFnZSBibHVlIHZhbCB2cy4gcmFuayBiaW4Ad2IAZXJyb3IgcmVhZGluZyBkYXRhAHBpeCBub3QgOCBvciAzMiBicHAgYW5kIG5vdCBjbWFwcGVkACZkYXRhIG5vdCBkZWZpbmVkAEluZm8gaW4gJXM6IHdyaXRlL3JlYWQgcG5nCgBwaXhzIG5vdCBkZWZpbmVkAG8geG9DeG8geABub3QgYWxsIHNhIHRoZSBzYW1lIHNpemUAZmlsZXBhdGggdW5kZWZpbmVkIG9yIGVtcHR5ACAgUmF3RGF0YSBmbHVzaGZpbGUAV3JpdGUgZmFpbGVkIG9uIHRlbXBvcmFyeSBmaWxlIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8ATWlzc2luZyBJSERSIGJlZm9yZSBiS0dEAE51bWJlck9mSW5rcwBzcC0+c3Vic2FtcGxpbmdfY29udmVydF95Y2JjcmJ1Zj09MAAgICAlNWx1OiAlNXUgJTV1ICU1dQoAY2xhc3NpZnlfd29yZF9wYXNzMiAtIFNUQVJUAGxlZnQARW5hYmxlIHNpbmdsZSB3b3JkIGNvcnJlY3Rpb24gYmFzZWQgb24gdGhlIGRpY3Rpb25hcnkuAGNsYXNzaWZ5X2FkYXB0X2ZlYXR1cmVfdGhyZXNob2xkAEFzc2VydCBmYWlsZWQAZG9jX2RpY3RfY2VydGFpbnR5X3RocmVzaG9sZABFbXB0eSB0cnV0aCBzdHJpbmcgYXQgZGVjb2RlIHRpbWUhCgBkZWJ1ZwBNZWFuIHNwYWNpbmcgPSAlZC8lZAoAZGlzcGxheQBBc3NlcnQgZmFpbGVkAHRvc3Bfa2Vybl9nYXBfZmFjdG9yMQBDaG9vc2luZyBkbSB2ZXJzaW9uOnBpdGNoX2lxcj0lZywgZ2FwX2lxcj0lZywgZG1fcGl0Y2hfaXFyPSVnLCBkbV9nYXBfaXFyPSVnCgBNYXggaW5pdGlhbCBjbHVzdGVyIHNpemUATGFuZ3VhZ2UgbW9kZWwgY29tcG9uZW50cyBkaWQgbm90IGxpa2UgdGhpcyBlbnRyeQoAU2F2ZSBhbHRlcm5hdGl2ZSBwYXRocyBmb3VuZCBkdXJpbmcgY2hvcHBpbmcgYW5kIHNlZ21lbnRhdGlvbiBzZWFyY2gAYSBjaGFyYWN0ZXIARkVGRgBzaWRlIGxvY2F0aW9uAHZhbFslZCwgJWRdID0gJWYgICAAJTAyeAB3YgBpYSBub3QgbWFkZQBwaXhzMiBub3QgZGVmaW5lZABXYXJuaW5nIGluICVzOiBsYXJnZSBhcnJheTogJWQgZWxlbWVudHMKAGxhc3QgPCBmaXJzdCEAc3RlcCBudW1hYSBub3QgbWFkZQA+AGxpbmVwdHJzIG5vdCBkZWZpbmVkACZhYnNkaWZmIG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiBjYXJyYXkgbm90IG1hZGUKAHBpeGEgbm90IHdyaXR0ZW4gdG8gc3RyZWFtAEVycm9yIGluICVzOiBwaXhhYyBub3QgcmVhZAoAc2NhbGUgZmFjdG9ycyBtdXN0IGJlID4gMAAmc2l6ZSBub3QgZGVmaW5lZABJbmZvIGluICVzOiAgICAqKioqIGJhZCBwbmcgaW1hZ2U6IGQgPSAlZCAqKioqCgBwaXhzIGhhcyBubyBjb2xvcgB0b28gbWFueSA0LWFyZyB0YWcgY2FsbHMAbmV3ZGlyIG5vdCBOVUxMIG9yIGEgc3ViZGlyIG9mIC90bXAAICBzaG93cGFnZQBBcHBsaWNhdGlvbiB0cmFuc2ZlcnJlZCB0b28gZmV3IHNjYW5saW5lcwBJbnZhbGlkIGJLR0QgYWZ0ZXIgSURBVABEb3RSYW5nZQBzcC0+c3Vic2FtcGxpbmdfY29udmVydF95Y2JjcmltYWdlPT0wAChwcmVzZW50KQoAY2xhc3NpZnlfd29yZF9wYXNzMiAtIFByZSBYaHQAcmlnaHQAdGVzc2VkaXRfYmlncmFtX2RlYnVnAFRocmVzaG9sZCBmb3IgZ29vZCBmZWF0dXJlcyBkdXJpbmcgYWRhcHRpdmUgMC0yNTUAV29yc3QgY2VydGFpbnR5IGZvciB3b3JkcyB0aGF0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBkb2N1bWVudCBkaWN0aW9uYXJ5AEl0ZXJhdGlvbiAlZDogR1JPVU5EICBUUlVUSCA6ICVzCgBkaXNwbGF5AFNldHRpbmcgbWVhbiBvbjoAdGV4dG9yZF90ZXN0X3gAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAGdhcCByYXRpbyB0byBmbGlwIGtlcm4tPnNwAHJldl9wX2lxcj0lZzpyZXZfZ19pcXI9JWc6cGl0Y2g9JWc6AERpc2NhcmRlZCBWaXRlcmJpRW50cnkgd2l0aCBoaWdoIGNvc3QgJWcgbWF4IGNvc3QgJWcKAGRlYnVnAGRlYnVnACAwIG9iago8PAogIC9Qcm9kdWNlciAoVGVzc2VyYWN0IABsZWZ0IHNpZGUAbmV3IHB0ciBhcnJheSBub3QgcmV0dXJuZWQAV2FybmluZyBpbiAlczogZ2FtbWEgbXVzdCBiZSA+IDAuMDsgc2V0dGluZyB0byAxLjAKAFRpdGxlOiAlcwoAcGl4czEgbm90IGNtYXBwZWQgb3IgPj04IGJwcABuYWluZGV4IG5vdCBkZWZpbmVkAG5tYXggPCAxIQBzdmdzdHIgbm90IG1hZGUAY2FsbG9jIGZhaWwgZm9yIGJ1ZgBpbnZhbGlkIGRpcmVjdGlvbgBjYXJyYXkgbm90IGRlZmluZWQAcGl4IG5vdCBmb3VuZABwaXhhY29tcCBub3QgZGVmaW5lZABpbnZhbGlkIHN1YnBpeGVsIG9yZGVyACZwaXggbm90IGRlZmluZWQASW5mbyBpbiAlczogd3JpdGUvcmVhZCB1bmNvbXByZXNzZWQgdGlmZgoAV2FybmluZyBpbiAlczogbXVsdGlwbGUgb3JpZ2lucyBpbiBzZWwgaW1hZ2UKAGNoYXIqAG51bGwgaW5wdXQgZm9yIGJvdGggc3RyaW5ncwAgIHJlc3RvcmUAVW5zdXBwb3J0ZWQgbWFya2VyIHR5cGUgMHglMDJ4AE1pc3NpbmcgUExURSBiZWZvcmUgYktHRABUYXJnZXRQcmludGVyAExpYkpwZWcAICBUcmFuc2ZlciBGdW5jdGlvbjogAGNsYXNzaWZ5X3dvcmRfcGFzczIgLSBFTkQAIyBJbmRlbnQgb2YgJWQgbG9va3MgbGlrZSBhIGZpcnN0IGxpbmUgJWQlJSBvZiB0aGUgdGltZS4KAEFtb3VudCBvZiBkZWJ1ZyBvdXRwdXQgZm9yIGJpZ3JhbSBjb3JyZWN0aW9uLgBkaXNhYmxlX2NoYXJhY3Rlcl9mcmFnbWVudHMAbWF4X3Blcm11dGVyX2F0dGVtcHRzAEl0ZXJhdGlvbiAlZDogQUxJR05FRCBUUlVUSCA6ICVzCgBDbGljayBhdCAoJWQsICVkKQoATGVmdCBydW4gZnJvbSB5PSVkIHRvICVkIHRlcm1pbmF0ZWQgd2l0aCBzdW0gJWQtJWQsIG5ldyAlZC0lZAoAY29vcmQgb2YgdGVzdCBwdABDbGljayBhdCAoJWQsICVkKQoAdG9zcF9rZXJuX2dhcF9mYWN0b3IyAHBfaXFyL2c9JWc6cF9pcXIveD0lZzppcXJfcmVzPSVjOgBEaXNjYXJkZWQgVml0ZXJiaUVudHJ5IHdpdGggaGlnaCBjb3N0ICVnCgBkaXNwbGF5AGRpc3BsYXkAKQogIC9DcmVhdGlvbkRhdGUgKEQ6AHRvcCBzaWRlAG1pbnZhbCBub3QgPCBtYXh2YWwAWCBheGlzIGxhYmVsOiAlcwoAcGl4czIgbm90IGNtYXBwZWQgb3IgPj04IGJwcAAmc29ydGVkIG5vdCBkZWZpbmVkAG5zZXRzID09IDAAdwAvSW0lZCAlZCAwIFIgICAAbGluZSBpcyBuZWl0aGVyIGhvcml6IG5vciB2ZXJ0ACVkOiAoJWQgJWQgJWQpACZkYXRhIG5vdCBkZWZpbmVkAHdiAHBpeHQgbm90IG1hZGUAJnZhbCBub3QgZGVmaW5lZABJbmZvIGluICVzOiAgICAqKioqIGJhZCB0aWZmIHVuY29tcHJlc3NlZCBpbWFnZTogZCA9ICVkICoqKioKAGludmFsaWQgY29sb3IAbF91aW50OCoAcGF0aG5hbWUgbm90IGRlZmluZWQAfSBleGVjAFZpcnR1YWwgYXJyYXkgY29udHJvbGxlciBtZXNzZWQgdXAARHVwbGljYXRlIGJLR0QgY2h1bmsARXh0cmFTYW1wbGVzACVzACAgICAlMmx1OiAlNXUAZml4c3BhY2UAR2VvbWV0cnk6IFRhYlN0b3AgY2x1c3RlciB0b2xlcmFuY2UgPSAlZDsgJWQgbGVmdCB0YWJzOyAlZCByaWdodCB0YWJzCgBlbmFibGVfbm9pc2VfcmVtb3ZhbABEbyBub3QgaW5jbHVkZSBjaGFyYWN0ZXIgZnJhZ21lbnRzIGluIHRoZSByZXN1bHRzIG9mIHRoZSBjbGFzc2lmaWVyAE1heGltdW0gbnVtYmVyIG9mIGRpZmZlcmVudCBjaGFyYWN0ZXIgY2hvaWNlcyB0byBjb25zaWRlciBkdXJpbmcgcGVybXV0YXRpb24uIFRoaXMgbGltaXQgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiB1c2VyIHBhdHRlcm5zIGFyZSBzcGVjaWZpZWQsIHNpbmNlIG92ZXJseSBnZW5lcmljIHBhdHRlcm5zIGNhbiByZXN1bHQgaW4gZGF3ZyBzZWFyY2ggZXhwbG9yaW5nIGFuIG92ZXJseSBsYXJnZSBudW1iZXIgb2Ygb3B0aW9ucy4AVFJBSU5JTkcgYWN0aXZhdGlvbiBwYXRoIGZvciB0cnV0aCBzdHJpbmcgJXMKAEFzc2VydCBmYWlsZWQAUmlnaHQgcnVuIGZyb20geT0lZCB0byAlZCB0ZXJtaW5hdGVkIHdpdGggc3VtICVkLSVkLCBuZXcgJWQtJWQKAHRvc3Bfa2Vybl9nYXBfZmFjdG9yMwA/PwB0ZXh0b3JkX3dvcmRzX2luaXRpYWxfdXBwZXIAIWN1cnJfc3RhdGUtPnZpdGVyYmlfc3RhdGVfZW50cmllcy5lbXB0eSgpAC8AKQogIC9UaXRsZSA8AHJpZ2h0IHNpZGUAbmFnIG5vdCBtYWRlAFkgYXhpcyBsYWJlbDogJXMKAHBpeDMgYW5kIHBpeDQgZGVwdGhzIG5vdCBlcXVhbAAmbmFzeCBhbmQvb3IgJm5hc3kgbm90IGRlZmluZWQAc2Egbm90IG1hZGUAeHN0ciBub3QgbWFkZQB4MSA+PSB4MgBpbnZhbGlkIGRpcmVjdGlvbgAmc2l6ZSBub3QgZGVmaW5lZABwaXhhY29tcCBub3Qgd3JpdHRlbiB0byBzdHJlYW0ARXJyb3IgaW4gJXM6IGludmFsaWQgZGVwdGggJWQKAHN0cmVhbSBub3Qgb3BlbgBJbmZvIGluICVzOiB3cml0ZS9yZWFkIGx6dyBjb21wcmVzc2VkIHRpZmYKAG5vIGhpdHMgaW4gc2VsAFdhcm5pbmcgaW4gJXM6IGFycmF5IHR5cGUgbm90IGNoYXIqIG9yIGxfdWludDgqOyBpZ25vcmUKAABnNCBkYXRhIG5vdCBtYWRlAEltYWdlIHRvbyB3aWRlIGZvciB0aGlzIGltcGxlbWVudGF0aW9uAEluY29ycmVjdCBiS0dEIGNodW5rIGxlbmd0aABTYW1wbGVGb3JtYXQAUHJlbWF0dXJlIGVuZCBvZiBKUEVHIGRhdGEAICU1dQBNTSBwYXNzIFNUQVJUAE5vdCBlbm91Z2ggZnVsbCBsaW5lcyB0byBrbm93IHdoaWNoIGxpbmVzIHN0YXJ0IHBhcmFzLgBSZW1vdmUgYW5kIGNvbmRpdGlvbmFsbHkgcmVhc3NpZ24gc21hbGwgb3V0bGluZXMgd2hlbiB0aGV5IGNvbmZ1c2UgbGF5b3V0IGFuYWx5c2lzLCBkZXRlcm1pbmluZyBkaWFjcml0aWNzIHZzIG5vaXNlAGNsYXNzaWZ5X2NoYXJhY3Rlcl9mcmFnbWVudHNfZ2FyYmFnZV9jZXJ0YWludHlfdGhyZXNob2xkAEVycm9yOiBmYWlsZWQgdG8gbG9hZCAlcwoATFNUTVRyYWluaW5nAEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgBBc3NlcnQgZmFpbGVkAHRvc3BfaWdub3JlX2JpZ19nYXBzAERQAE1pbiBpbml0aWFsIGNsdXN0ZXIgc3BhY2luZwBTZXQgdml0ZXJiaV9zdGF0ZV9lbnRyaWVzX3BydW5hYmxlX21heF9jb3N0IHRvICVnCgBmYWlsZWRfdmFycy50eHQAPgo+PgplbmRvYmoKAGJvdHRvbSBzaWRlAFdhcm5pbmcgaW4gJXM6IGZhY3RvciBtdXN0IGJlID49IDAuMDsgc2V0dGluZyB0byAwLjAKACZwc25yIG5vdCBkZWZpbmVkAG5hcyBub3QgaW52ZXJ0aWJsZQBjY2Igbm90IGZvdW5kADQgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL1BhcmVudCAzIDAgUgovTWVkaWFCb3ggWyVkICVkICVkICVkXQovQ29udGVudHMgNSAwIFIKL1Jlc291cmNlcwo8PAovWE9iamVjdCA8PCAlcyA+PgovUHJvY1NldCBbIC9JbWFnZUIgL0ltYWdlSSAvSW1hZ2VDIF0KPj4KPj4KZW5kb2JqCgB5MSA+PSB5MgBzaXplIDwgMQBzdHJ1Y3QgbmFtZSBub3QgZm91bmQAcGl4YyBub3QgZm91bmQAcGl4IG5vdCA4IGJwcCAmIG5vdCBjbWFwcGVkACVkAEluZm8gaW4gJXM6ICAgICoqKiogYmFkIHRpZmYgbHp3IGNvbXByZXNzZWQgaW1hZ2U6IGQgPSAlZCAqKioqCgBXYXJuaW5nIGluICVzOiBzaXplIDwgMTM7IHNldHRpbmcgdG8gMTMKAGxfdWludDE2AGRpciBzdGFydHMgd2l0aCAnLi4nAGc0IGRhdGEgbm90IGRlZmluZWQAUmVhZCBmcm9tIFhNUyBmYWlsZWQASW5jb3JyZWN0IGJLR0QgY2h1bmsgaW5kZXggdmFsdWUAU01pblNhbXBsZVZhbHVlAHNwLT5vdXRfc3RhdGU8PW9zb3NFb2kAICBTdWJJRkQgT2Zmc2V0czoATU0gcGFzcyBFTkQAIyBOb3QgZW5vdWdoIHZhcmlldHkgZm9yIGNsZWFyIG91dGxpbmUgY2xhc3NpZmljYXRpb24uIEd1ZXNzaW5nIHRoZXNlIGFyZSAlcyBhbGlnbmVkIGJhc2VkIG9uIHNjcmlwdC4KAGRlYnVnX25vaXNlX3JlbW92YWwARXhjbHVkZSBmcmFnbWVudHMgdGhhdCBkbyBub3QgbG9vayBsaWtlIHdob2xlIGNoYXJhY3RlcnMgZnJvbSB0cmFpbmluZyBhbmQgYWRhcHRpb24AdW5pY2hhcnNldC5jb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAGl0Mi5kYXRhKCkgIT0gcHRyAEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgB0ZXh0b3JkX3Rlc3RfeQB4aHQgbXVsdGlwbGllcgBNUABOZXcAaW5kZXggPCBsZW4AeHJlZgowIAAucG5nAG5hYyBub3QgbWFkZQBlbXB0eSBpbnB1dCBwaXgAc2l6ZSA8PSAwAHNwZ2xvYmFsIG5vdCBtYWRlAHEgJS40ZiAlLjRmICUuNGYgJS40ZiAlLjRmICUuNGYgY20gL0ltJWQgRG8gUQoAcGl4cyBuZWl0aGVyIDggYnBwIG5vciBjb2xvcm1hcHBlZABwaXhhIG5vdCBkZWZpbmVkACVzACAgY29tcHR5cGUgPSAlZCwgc2l6ZSA9ICVsdSwgY21hcGZsYWcgPSAlZAoAcGl4IG5vdCAzMiBicHAgJiBub3QgY21hcHBlZABlbmQgb2YgZmlsZSByZWFjaGVkAEluZm8gaW4gJXM6IHdyaXRlL3JlYWQgemlwIGNvbXByZXNzZWQgdGlmZgoAV2FybmluZyBpbiAlczogZ3JpZCB0aGlja25lc3MgPCAyOyBzZXR0aW5nIHRvIDIKACV1AGZuYW1lIHN0YXJ0cyB3aXRoICcuLicAJSUlJVRpdGxlOiBHNCBjb21wcmVzc2VkIFBTAFdyaXRlIHRvIFhNUyBmYWlsZWQATWlzc2luZyBJSERSIGJlZm9yZSBoSVNUAFNNYXhTYW1wbGVWYWx1ZQAgJTVsdQBBZnRlciBQb29yIHF1YWxpdHkgcmVqZWN0aW9uAE1lbW9yeSBsZWFrISBDb252ZXJ0SHlwb3RoZXNpemVNb2RlbFJ1bnNUb1BhcmFncmFwaHMoKSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UhCgBEZWJ1ZyByZWFzc2lnbm1lbnQgb2Ygc21hbGwgb3V0bGluZXMAY2xhc3NpZnlfZGVidWdfY2hhcmFjdGVyX2ZyYWdtZW50cwBpbiBmaWxlICVzLCBsaW5lICVkAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL2JiZ3JpZC5oAGJveGVzXy5lbXB0eSgpAHRvc3BfaWdub3JlX3ZlcnlfYmlnX2dhcHMAREYAVXBkYXRlZCB2aXRlcmJpIGxpc3QAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L3JlamN0bWFwLmgACjAwMDAwMDAwMDAgNjU1MzUgZiAKAC90bXAvbGVwdC9wbG90cy9zaXplLiVzAGZyYWN0aW9uIG5vdCBpbiBbLTEuMCwgMS4wXQBwaXggc2l6ZXMgdW5lcXVhbAAmdmFsIG5vdCBkZWZpbmVkACUwZCwlMGQAY3N0ciBub3QgbWFkZQBzYW1wbGluZyBmYWN0b3IgPCAxAG5vIHBpeCBpbiBwaXhhAFBpeGFjb21wAAoARXJyb3IgaW4gJXM6IGludmFsaWQgcmVmZXJlbmNlIHZhbHVlIGZvciBuZXV0cmFsIGJvb3N0CgBjaGFyIHJlYWQgaXMgbm90IGEgZGlnaXQASW5mbyBpbiAlczogICAgKioqKiBiYWQgdGlmZiB6aXAgY29tcHJlc3NlZCBpbWFnZTogZCA9ICVkICoqKioKAFdhcm5pbmcgaW4gJXM6IHNwYWNpbmcgPCA1OyBzZXR0aW5nIHRvIDUKAHZhbCAlcyBub3Qgb2YgdHlwZSAlcwoAYmFzZWRpciBhbmQgc3ViZGlycyBub3QgYm90aCBkZWZpbmVkADEwMCBkaWN0IGJlZ2luAENvcHlyaWdodCAoQykgMjAxMiwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcASW52YWxpZCBoSVNUIGFmdGVyIElEQVQAQ2xpcFBhdGgAMjU1Pj04K3NwLT5zYW1wbGVzX3Blcl9waXhlbF9wZXJfcGxhbmUqMwAgICVsdSAlczoKAHVucmVqX2dvb2RfcXVhbGl0eV93b3JkcyAtIFNUQVJUAABub2lzZV9jZXJ0X2Jhc2VjaGFyAEJyaW5nIHVwIGdyYXBoaWNhbCBkZWJ1Z2dpbmcgd2luZG93cyBmb3IgZnJhZ21lbnRzIHRyYWluaW5nAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9kaWN0L2RpY3QuY3BwAEVycm9yOiB0cmFuc2NyaXB0aW9uICVzIHRvbyBsb25nIHRvIGZpdCBpbnRvIHRhcmdldCBvZiB3aWR0aCAlZAoAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvdGV4dG9yZC9jb2xwYXJ0aXRpb24uaAB0b3NwX3JlcF9zcGFjZQBNRgB0ZXh0b3JkX3dvcmRzX21pbmxhcmdlAEdlbmVyYXRlVG9wQ2hvaWNlSW5mbzogdG9wX2Nob2ljZV9mbGFncz0weCV4CgBBc3NlcnQgZmFpbGVkACAwMDAwMCBuIAoAJXM6IEJveCBzaXplIHZzLiBib3ggaW5kZXgAcGl4MSBoYXMgY29sb3JtYXAAZnJhY3Qgbm90IGluIFswLjAgLi4uIDEuMF0AbmV3IHB0ciBhcnJheSBub3QgcmV0dXJuZWQANSAwIG9iago8PCAvTGVuZ3RoICVkID4+CnN0cmVhbQolc2VuZHN0cmVhbQplbmRvYmoKAHBpeHMgc2l6ZSBpbGxlZ2FsAHBpeCBub3QgOCBicHAAcGFjIG5vdCBtYWRlACZkYXRhIG5vdCBkZWZpbmVkAG5vIHdoaXRlc3BhY2UgZm91bmQASW5mbyBpbiAlczogd3JpdGUvcmVhZCBnNCBjb21wcmVzc2VkIHRpZmYKAG5ldyBwdHIgYXJyYXkgbm90IHJldHVybmVkAGN1c3RvbSB0YWcocykgbm90IHdyaXR0ZW4AcGF0aCBub3QgZGVmaW5lZAB7ADhkICAxNS1KYW4tMjAxMgBNaXNzaW5nIFBMVEUgYmVmb3JlIGhJU1QAWENsaXBQYXRoVW5pdHMAVGlsZXMAdW5yZWpfZ29vZF9xdWFsaXR5X3dvcmRzIC0gRU5EAHgASGluZ2Vwb2ludCBmb3IgYmFzZSBjaGFyIGNlcnRhaW50eQBtYXRjaGVyX2RlYnVnX3NlcGFyYXRlX3dpbmRvd3MAZGVmX2xldHRlcl9pc19va2F5OiBjdXJyZW50IHVuaWNoYXI9JXMgd29yZF9lbmQ9JWQgbnVtIGFjdGl2ZSBkYXdncz0lZAoATWVhbiBybXM9JWclJSwgZGVsdGE9JWclJSwgdHJhaW49JWclJSglZyUlKSwgc2tpcCByYXRpbz0lZyUlCgBPd25lcnNoaXAgaW5jb3JyZWN0IGZvciBibG9iOgB0ZXh0b3JkX21pbl9ibG9ic19pbl9yb3cAcmVwIGdhcCBtdWx0aXBsaWVyIGZvciBzcGFjZQA6c2QvcD0lZzpvY2M9JWc6aW5pdF9yZXM9JXMKAEZyYWN0aW9uIG9mIHZhbGlkIGdhcHMgbmVlZGVkAEh5cGhlbmF0ZWQgd29yZCBmb3VuZAoAbm9uYW1lLnRpZgB0cmFpbGVyCjw8CiAgL1NpemUgAC90bXAvbGVwdC9wbG90cy9zaXplLiVkAHBpeDIgaGFzIGNvbG9ybWFwAG5hcyBub3QgbWFkZQBjaWQgbm90IGZvdW5kAGRlcHRoIG5vdCAzMiBicHAAcGl4ZCBub3QgZGVmaW5lZCBvciBub3QgOCBicHAAUGl4YQAmc2l6ZSBub3QgZGVmaW5lZABpbnZhbGlkIHJlYWQASW5mbyBpbiAlczogICAgKioqKiBiYWQgdGlmZiBnNCBpbWFnZSAqKioqCgBzYSBub3QgZGVmaW5lZABsX3VpbnQzMgBpbnZhbGlkIHR5cGUAICAvUmF3RGF0YSBjdXJyZW50ZmlsZSAvQVNDSUk4NURlY29kZSBmaWx0ZXIgZGVmAENhdXRpb246IHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIHRvbyBjb2Fyc2UgZm9yIGJhc2VsaW5lIEpQRUcARHVwbGljYXRlIGhJU1QgY2h1bmsAWUNsaXBQYXRoVW5pdHMAMjU1Pj02K3NwLT5zYW1wbGVzX3Blcl9waXhlbF9wZXJfcGxhbmUqMgBTdHJpcHMAV3JpdGUgcmVzdWx0cyBwYXNzAG5vaXNlX2NlcnRfZGlzam9pbnQAVXNlIHR3byBkaWZmZXJlbnQgd2luZG93cyBmb3IgZGVidWdnaW5nIHRoZSBtYXRjaGluZzogT25lIGZvciB0aGUgcHJvdG9zIGFuZCBvbmUgZm9yIHRoZSBmZWF0dXJlcy4AUmVjZWl2ZWQgRGF3Z1Bvc2l0aW9uIHdpdGggbm8gZGF3ZyBvciBwdW5jX2Rhd2cuICB3dGg/CgAyIFBlcmNlbnQgaW1wcm92ZW1lbnQgdGltZT0lZCwgYmVzdCBlcnJvciB3YXMgJWcgQCAlZAoAUGFydD0ATWluIGJsb2JzIGJlZm9yZSBncmFkaWVudCBjb3VudGVkAHRvc3BfZW5vdWdoX3NtYWxsX2dhcHMAdHVuZV9yb3dfcGl0Y2g6c3RhcnQgcGl0Y2g9JWcsIHNkPSVnCgBGb3VuZCBjb21wb3VuZCBtYXJrZXIKACAACiAgL1Jvb3QgMSAwIFIKICAvSW5mbyAAQm94IHNpemUgdnMuIGJveCBpbmRleABwaXggbm90IDggb3IgMzIgYnBwACZtZWR2YXIgbm90IGRlZmluZWQAL0ltYWdlTWFzayB0cnVlCi9Db2xvclNwYWNlIC9EZXZpY2VHcmF5ACZib3h0aWxlIG5vdCBkZWZpbmVkAHBpeCB3aWR0aCAhPSBuAGludmFsaWQgZmlsZSB0eXBlACZwaXhhYyBub3QgZGVmaW5lZABidWZmIG5vdCBkZWZpbmVkAEluZm8gaW4gJXM6IHdyaXRlL3JlYWQgZzMgY29tcHJlc3NlZCB0aWZmCgBpbnZhbGlkIHJhbmdlAGxfaW50MzIAbm8gaW5wdXQAICA8PCAAQWRvYmUgQVBQMTQgbWFya2VyOiB2ZXJzaW9uICVkLCBmbGFncyAweCUwNHggMHglMDR4LCB0cmFuc2Zvcm0gJWQASW5jb3JyZWN0IGhJU1QgY2h1bmsgbGVuZ3RoAFlDYkNyQ29lZmZpY2llbnRzAFVuZXhwZWN0ZWQgZXJyb3IAICAgICUzbHU6IFslOGx1LCAlOGx1XQoAICIlcyIgAEhpbmdlcG9pbnQgZm9yIGRpc2pvaW50IGNlcnRhaW50eQAATGV0dGVyIGZvdW5kIGluIGRhd2cgJWQKAHJiAE5vdCBvd25lZAoARnJhY3Qgb2Yga2VybnMgcmVxZCBmb3IgaXNvbGF0ZWQgcm93IHN0YXRzAHRlc3RpbmcgcGl0Y2ggYXQgJWcsIHNkPSVnCgBDb21wb3VuZCB3b3JkIGZvdW5kCgB3ACAwIFIKPj4Kc3RhcnR4cmVmCgBib3ggZGltZW5zaW9uAGludmFsaWQgc2FtcGxpbmcgZmFjdG9yAG5hZCBub3QgZGVmaW5lZAAvQ29sb3JTcGFjZSAvRGV2aWNlR3JheQBtaW5kaXN0IG11c3QgYmUgPj0gMABwaXhkIGhlaWdodCAhPSBjb2x1bW4gaGVpZ2h0AGRpcm5hbWUgbm90IGRlZmluZWQASW5mbyBpbiAlczogd29yay1hcm91bmQ6IHdyaXRpbmcgdG8gYSB0ZW1wIGZpbGUKAHNpemUgaXMgdG9vIHNtYWxsAEluZm8gaW4gJXM6ICAgICoqKiogYmFkIHRpZmYgZzMgaW1hZ2UgKioqKgoAaW52YWxpZCBmb3JtYXQAJWQAbm8gY3VycmVudCBkaXIgZm91bmQAICAgIC9JbWFnZVR5cGUgMQBVbmtub3duIEFQUDAgbWFya2VyIChub3QgSkZJRiksIGxlbmd0aCAldQBNaXNzaW5nIElIRFIgYmVmb3JlIHBIWXMAWUNiQ3JTdWJzYW1wbGluZwBGcmFjdGlvbmFsIHNjYW5saW5lIG5vdCByZWFkAAl0CGINcgpuC3YACgBub2lzZV9jZXJ0X3B1bmMAY2xhc3NpZnlfbGVhcm5fZGVidWdfc3RyAEFwcGVuZCB0cmFuc2l0aW9uIGZyb20gcHVuYyBkYXdnIHRvIGN1cnJlbnQgZGF3Z3M6IAB3YgBPd25lciBwYXJ0OgB0b3NwX3RhYmxlX2tuX3NwX3JhdGlvAHR1bmVfcm93X3BpdGNoOnN0YXJ0IHBpdGNoPSVnLCBiZXN0X2RlbHRhPSVkLCBjb3VudD0lZAoAdGV4dG9yZF93b3Jkc19waXRjaHNkX3RocmVzaG9sZABUZXN0IExldHRlciBPSyBmb3IgdW5pY2hhciAlZCwgbm9ybWVkICVkCgBhAAolJUVPRgoAd2lkdGgAJm5hIG5vdCBkZWZpbmVkAGlzdGFydCA+IGllbmQ7IG5vdGhpbmcgdG8gYWRkAC9CaXRzUGVyQ29tcG9uZW50IDEKL0ludGVycG9sYXRlIHRydWUAdHNpemUgbXVzdCBiZSA+IDEAcGl4cyBub3QgZGVmaW5lZCBvciBub3QgOCBicHAAbm8gcGl4YSBmaWxlcyBmb3VuZAB0bXBmaWxlIHN0cmVhbSBub3Qgb3BlbmVkAGJ1ZmYgc2l6ZSB0b28gc21hbGwASW5mbyBpbiAlczogd3JpdGUvcmVhZCBybGUgY29tcHJlc3NlZCB0aWZmCgBsX2Zsb2F0NjQAcGF0aG91dCBub3QgbWFkZQAgICAgL1dpZHRoICVkAFVua25vd24gQVBQMTQgbWFya2VyIChub3QgQWRvYmUpLCBsZW5ndGggJXUASW52YWxpZCBwSFlzIGFmdGVyIElEQVQAWUNiQ3JQb3NpdGlvbmluZwBjYz4wAFwlYwAiJXMiCgBUaHJlc2hvbGQgZm9yIG5ldyBwdW5jIGNoYXIgY2VydGFpbnR5AENsYXNzIHN0ciB0byBkZWJ1ZyBsZWFybmluZwBMZXR0ZXIgZm91bmQgaW4gcHVuY3R1YXRpb24gZGF3ZwoAQXNzZXJ0IGZhaWxlZABiYmxvYi0+b3duZXIoKSA9PSBwYXJ0AHRleHRvcmRfc3BsaW5lX21pbmJsb2JzAE1pbiBkaWZmZXJlbmNlIG9mIGtuICYgc3AgaW4gdGFibGUAdHVuZV9yb3dfcGl0Y2g6b3V0cHV0IHBpdGNoPSVnLCBzZD0lZwoAUGl0Y2ggc3luYyB0aHJlc2hvbGQATGV0dGVyIHdhcyBPSyBmb3IgdW5pY2hhciAlZCwgbm9ybWVkICVkCgByAERyb3BwaW5nIGludmFsaWQgY29kZXBvaW50ICVkCgBoZWlnaHQAcGl4YSBub3QgZGVmaW5lZABuYWFkIG5vdCBkZWZpbmVkAC9GaWx0ZXIgL0NDSVRURmF4RGVjb2RlCi9EZWNvZGVQYXJtcwo8PAovSyAtMQovQ29sdW1ucyAlZAo+PgBXYXJuaW5nIGluICVzOiBudGlsZXMgPSAlZDsgbGFyZ2VyIHRoYW4gc3VnZ2VzdGVkIG1heCBvZiA3CgBjb2x2ZWN0IG5vdCBkZWZpbmVkAEVycm9yIGluICVzOiBwaXhhIG5vdCByZWFkIGZvciAlZC10aCBmaWxlAGNvbnZlcnNpb24gdG8gcGRmIGZhaWxlZABJbmZvIGluICVzOiAgICAqKioqIGJhZCB0aWZmIHJsZSBpbWFnZTogZCA9ICVkICoqKioKACVsZgAvdG1wLwAgICAgL0hlaWdodCAlZABEZWZpbmUgQXJpdGhtZXRpYyBUYWJsZSAweCUwMng6IDB4JTAyeABEdXBsaWNhdGUgcEhZcyBjaHVuawBSZWZlcmVuY2VCbGFja1doaXRlAE9KUEVHIGVuY29kaW5nIG5vdCBzdXBwb3J0ZWQ7IHVzZSBuZXctc3R5bGUgSlBFRyBjb21wcmVzc2lvbiBpbnN0ZWFkAFwlMDNvACoqKiogIiVjIiAqKioqCgBub2lzZV9jZXJ0X2ZhY3RvcgBjbGFzc2lmeV9jbGFzc19wcnVuZXJfdGhyZXNob2xkAEV4dGVuZCBwdW5jdHVhdGlvbiBkYXdnOiAAc3JjLmRhd2dzID09IG51bGxwdHIAIXRleHRfdHlwZSB8fCBiYmxvYi0+cmVnaW9uX3R5cGUoKSA+PSBCUlRfVU5LTk9XTgBNaW4gYmxvYnMgaW4gZWFjaCBzcGxpbmUgc2VnbWVudAB0b3NwX3RhYmxlX3hodF9zcF9yYXRpbwBXb3JkIGVuZGluZyBhdCAoJWQsJWQpLCBsZW49JWQsIHN5bmMgcmF0aW5nPSVnLCAATGV0dGVyICVzIG5vdCBPSyEKAHIrACUwNFgAaW52YWxpZCB1c2VmbGFnAG1pbnJhdGlvIG5vdCBpbiBbMC4wIC4uLiAxLjBdAG5hYSBub3QgZGVmaW5lZAAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCAG5vIHRpbGVzIGZvdW5kAGludmFsaWQgbmJpbnMAcGFhIG5vdCByZWFkAHcASW5mbyBpbiAlczogd3JpdGUvcmVhZCBwYWNrYml0cyBjb21wcmVzc2VkIHRpZmYKAGxfdWludDE2LWxfdWludDE2AFRNUERJUgAgICAgL0ltYWdlTWF0cml4IFsgJWQgMCAwICVkIDAgJWQgXQBEZWZpbmUgSHVmZm1hbiBUYWJsZSAweCUwMngASW5jb3JyZWN0IHBIWXMgY2h1bmsgbGVuZ3RoAFhNTFBhY2tldAAgICVzOiAiAG51bGwgYmVzdCBjaG9pY2UKAFNjYWxpbmcgb24gY2VydGFpbnR5IGRpZmYgZnJvbSBIaW5nZXBvaW50AENsYXNzIFBydW5lciBUaHJlc2hvbGQgMC0yNTUAUmV0dXJuIHRvIHB1bmN0dWF0aW9uIGRhd2c6IAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9yZWNvZGViZWFtLmgAIXRleHRfdHlwZSB8fCBvbF9pdC5kYXRhKCktPnBhdGhsZW5ndGgoKSA+IDAARXhwZWN0IHNwYWNlcyBiaWdnZXIgdGhhbiB0aGlzAChGKQBwcm9iKCVzIHwgJXMpPSVnCgB3KwAlMDRYJTA0WABJbmZvIGluICVzOiAlZCB2YWxpZCBib3hlcywgJWQgaW52YWxpZCBib3hlcwoAc3Vic2FtcGxpbmcgZmFjdG9yIG11c3QgYmUgPj0gMQAvQ29sb3JTcGFjZSAvRGV2aWNlQ01ZSwBpID0gJWQsIG1lYW4gPSAlNy4zZiwgZGVsbSA9ICU3LjNmLCBzdGRldiA9ICU3LjNmLCBkZWxzID0gJTcuM2YKAHJvd3ZlY3Qgbm90IGRlZmluZWQAClBpeGFhIFZlcnNpb24gJWQKAEVycm9yIGluICVzOiBwZGYgZGF0YSBub3Qgd3JpdHRlbiB0byBmaWxlCgBJbmZvIGluICVzOiAgICAqKioqIGJhZCB0aWZmIHBhY2tiaXRzIGltYWdlOiBkID0gJWQgKioqKgoAJXUtJXUAcmVzdWx0IG5vdCBkZWZpbmVkACAgICAvQml0c1BlckNvbXBvbmVudCAxAERlZmluZSBRdWFudGl6YXRpb24gVGFibGUgJWQgIHByZWNpc2lvbiAlZABNaXNzaW5nIElIRFIgYmVmb3JlIG9GRnMATWF0dGVpbmcAIgoAVGVzcyBBY2NlcHRlZDogJXMKAG5vaXNlX21heHBlcmJsb2IAY2xhc3NpZnlfY2xhc3NfcHJ1bmVyX211bHRpcGxpZXIAQWN0aXZlIGRhd2c6IFslZCwgJWxsZF0gZWRnZT0lbGxkCgBuZXR3b3JrXyAhPSBudWxscHRyICYmIG5ldHdvcmtfLT50eXBlKCkgPT0gTlRfU0VSSUVTAHRvc3BfdGFibGVfZnV6enlfa25fc3BfcmF0aW8AJWQsIAB0ZXh0b3JkX3dvcmRzX2RlZl9maXhlZABGb3VuZCBzbWFsbCBwcm9iICVnCgBhKwBhbGxvY2F0b3I8VD46OmFsbG9jYXRlKHNpemVfdCBuKSAnbicgZXhjZWVkcyBtYXhpbXVtIHN1cHBvcnRlZCBzaXplAFdhcm5pbmcgaW4gJXM6IG4gPCAzOyBzb21lIGludmFsaWQKAG54IGFuZCBueSBtdXN0IGJvdGggYmUgPiAwAEVycm9yIGluICVzOiBpbiBqcGVnOiBzcHAgIT0gMSwgMyBvciA0CgBJbmZvIGluICVzOiBtZWRpYW4gb2YgbWVhbiA9ICU3LjNmCgBwaXggbm90IGRlZmluZWQgb3Igbm90IDggYnBwAG5vdCBhIHBpeGFhIGZpbGUAJm5ieXRlcyBub3QgZGVmaW5lZABJbmZvIGluICVzOiB3cml0ZS9yZWFkIHBubQoAdW5rbm93biB0eXBlOyB0YWcocykgbm90IHdyaXR0ZW4ARXJyb3IgaW4gJXM6IHJlc3VsdCBhcnJheSB0b28gc21hbGwgZm9yIHBhdGgKACAgICAvSW50ZXJwb2xhdGUgdHJ1ZQBEZWZpbmUgUmVzdGFydCBJbnRlcnZhbCAldQBJbnZhbGlkIG9GRnMgYWZ0ZXIgSURBVABEYXRhVHlwZQBtaW4taXMtd2hpdGUAVFJVRQBNYXggZGlhY3JpdGljcyB0byBhcHBseSB0byBhIGJsb2IAQ2xhc3MgUHJ1bmVyIE11bHRpcGxpZXIgMC0yNTU6ICAgICAgIABQdW5jdHVhdGlvbiBjb25zdHJhaW50IG5vdCBzYXRpc2ZpZWQgYXQgZW5kIG9mIHdvcmQuCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvbHN0bS9sc3RtcmVjb2duaXplci5oAHRleHRvcmRfc3BsaW5lX21lZGlhbndpbgBGdXp6eSBpZiBsZXNzIHRoYW4gdGhpcwBSb3cgZW5kaW5nIGF0ICglZCwlZCksIGxlbj0lZCwgc3luYyByYXRpbmc9JWcsIABUaHJlc2hvbGQgZm9yIGRlZmluaXRlIGZpeGVkAC1sb2cgWyBwKCVzKSAqIHAoJXMgfCAlcykgXSA9IC1sb2cyKCVnKiVnKSA9ICVnCgBhYgBXYXJuaW5nIGluICVzOiB0aGVyZSBhcmUgc3RpbGwgJWQgaW52YWxpZCBib3hlcwoAc2ltdGhyZXNoIGludmFsaWQ7IHNob3VsZCBiZSBuZWFyIDAuMjUAL0JpdHNQZXJDb21wb25lbnQgOABJbmZvIGluICVzOiBzdGFuZGFyZCBkZXYgb2YgbWVhbiA9ICU3LjNmCgBpbnZhbGlkIGNvbABpbnZhbGlkIHBpeGFhIHZlcnNpb24AV2FybmluZyBpbiAlczogaW52YWxpZCBjb21wcmVzc2lvbiB0eXBlOyB1c2luZyBwZXItcGFnZSBkZWZhdWx0CgBJbmZvIGluICVzOiAgICAqKioqIGJhZCBwbm0gaW1hZ2U6IGQgPSAlZCAqKioqCgBtb2Rlc3RyaW5nIG5vdCBkZWZpbmVkAGludmFsaWQgZmxhZwAgICAgL0RlY29kZSBbMSAwXQBGcmVlZCBFTVMgaGFuZGxlICV1AER1cGxpY2F0ZSBvRkZzIGNodW5rAEltYWdlRGVwdGgAbWluLWlzLWJsYWNrAEZBTFNFAG5vaXNlX21heHBlcndvcmQAY2xhc3NpZnlfY3BfY3V0b2ZmX3N0cmVuZ3RoAEFwcGVuZCBjdXJyZW50IGRhd2cgdG8gdXBkYXRlZCBhY3RpdmUgZGF3Z3M6IABpZC5sZW5ndGgoKSA+IDEgJiYgaWRbMF0gPT0gJzonAFNpemUgb2Ygd2luZG93IGZvciBzcGxpbmUgc2VnbWVudGF0aW9uAHRvc3BfZnV6enlfa25fZnJhY3Rpb24AbmV3X3NkPSVnOnNkL3A9JWc6bmV3X3NwX3NkPSVnOnJlcz0lYzoAY19pdC5kYXRhKCkgIT0gbnVsbHB0cgByK2IAbm8gcHRycyBkZWZpbmVkAEltYWdlICVzIGlzIHBob3RvCgAvRmlsdGVyIC9EQ1REZWNvZGUASW5mbyBpbiAlczogbWVkaWFuIG9mIHN0ZGV2ID0gJTcuM2YKAGxlcHQvcmVkb3V0AE51bWJlciBvZiBwaXhhID0gJWQKAEVycm9yIGluICVzOiBwaXhbJWRdIG5vdCByZXRyaWV2ZWQKAEluZm8gaW4gJXM6IHdyaXRlL3JlYWQganBlZwoAVElGRnN0cmVhbQBmYWlsZWQgdG8gbWFrZSBkaXJuYW1lACAgICAvRGVjb2RlIFswIDFdAE9idGFpbmVkIEVNUyBoYW5kbGUgJXUASW5jb3JyZWN0IG9GRnMgY2h1bmsgbGVuZ3RoAFRpbGVEZXB0aABSR0IgY29sb3IARG9uZSBmbGFnOiAlcwoKAE1heCBkaWFjcml0aWNzIHRvIGFwcGx5IHRvIGEgd29yZABDbGFzcyBQcnVuZXIgQ3V0b2ZmU3RyZW5ndGg6ICAgICAgICAgAFJldHVybmluZyAlZCBmb3IgcGVybXV0ZXIgY29kZSBmb3IgdGhpcyBjaGFyYWN0ZXIuCgBscl9wdHIgIT0gbnVsbHB0cgBOZXcgZnV6enkga24gYWxnAHJvd19zZD0lZzpzZC9wPSVnOnJlcz0lYzpOPSVkOnJlczI9JXMsaW5pdCBwaXRjaD0lZywgcm93X3BpdGNoPSVnLCBhbGxfY2Fwcz0lZAoAcGZvbnQgJXMgcGZvbnQgJXMgZm9udCAlcyBmb250MiAlcyBjb21tb24gJXMoJWQpCgB3K2IAJmZyYWN0IG5vdCBkZWZpbmVkAEltYWdlICVzIGlzIE5PVCBwaG90bwoARXJyb3IgaW4gJXM6IGluIGpwMms6IHNwcCAhPSAxICYmIHNwcCAhPSAzCgBJbmZvIGluICVzOiBiZXN0IHRpbGU6IGluZGV4ID0gJWQKAC90bXAvbGVwdC9yZWRvdXQvaGlzdHBsb3QACgogLS0tLS0tLS0tLS0tLS0tIHBpeGFbJWRdIC0tLS0tLS0tLS0tLS0tLQoASW5mbyBpbiAlczogcGxhY2Vob2xkZXIgaW1hZ2VbJWRdIGhhcyB3ID0gMQoASW5mbyBpbiAlczogICAgKioqKiBiYWQganBlZyBpbWFnZTogZCA9ICVkLCBkaWZmID0gJTUuMmYgKioqKgoAb3BlcmF0aW9uIG5vdCBkZWZpbmVkAC9sZXB0LlhYWFhYWAAgICAgL0RhdGFTb3VyY2UgUmF3RGF0YQBFbmQgT2YgSW1hZ2UATWlzc2luZyBJSERSIGJlZm9yZSBwQ0FMAEltYWdlRnVsbFdpZHRoAHBhbGV0dGUgY29sb3IgKFJHQiBmcm9tIGNvbG9ybWFwKQB3b3JkLT5iZXN0X2Nob2ljZSAhPSBudWxscHRyAGRlYnVnX3hfaHRfbGV2ZWwAY2xhc3NpZnlfaW50ZWdlcl9tYXRjaGVyX211bHRpcGxpZXIAUGF0dGVybiBkYXdnOiBbJWQsICVsbGRdIGVkZ2U9JWxsZAoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2xzdG0vcGx1bWJpbmcuaAB0b3NwX2Z1enp5X3NwX2ZyYWN0aW9uAEJhZCBib3ggam9pbmVkIHRvIHByZXYgYXQAdGV4dG9yZF93b3Jkc19kZWZfcHJvcABmb250aW5mb19pZCA8IGZvbnRpbmZvX3RhYmxlXy0+c2l6ZSgpAGErYgBubyBib3hlcyBpbiBib3hhAFNldHRpbmcgJWQgc2ltaWxhciB0byAlZCwgaW4gY2xhc3MgJWQKAC9GaWx0ZXIgL0pQWERlY29kZQBJbmZvIGluICVzOiBkZWx0YSBmcm9tIG1lZGlhbiBpbiB1bml0cyBvZiBzdGRldiA9ICU1LjNmCgBIaXN0b2dyYW0AdGV4dCByZWFkaW5nAEVycm9yIGluICVzOiBlbmNvZGluZyB0eXBlIHNlbGVjdGlvbiBmYWlsZWQgZm9yIHBpeFslZF0KAEluZm8gaW4gJXM6IEFsbCBmb3JtYXRzIHJlYWQgYW5kIHdyaXR0ZW4gT0shCgAmZGF0YXNpemUgbm90IGRlZmluZWQAbWtzdGVtcCBmYWlsZWQAICAgICAgICA8PAAgICAgICAgICUzZCAlM2QgJTNkICUzZCAlM2QgJTNkICUzZCAlM2QASW52YWxpZCBwQ0FMIGFmdGVyIElEQVQASW1hZ2VGdWxsTGVuZ3RoAHRyYW5zcGFyZW5jeSBtYXNrAEV4YW1pbmluZyBmb250cyBpbiAlcwoAUmVlc3RpbWF0ZSBkZWJ1ZwBJbnRlZ2VyIE1hdGNoZXIgTXVsdGlwbGllciAgMC0yNTU6ICAgAExldHRlciBmb3VuZCBpbiBwYXR0ZXJuIGRhd2cgJWQKAGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAdGV4dG9yZF9tYXhfYmxvYl9vdmVybGFwcwBOZXcgZnV6enkgc3AgYWxnAEFmdGVyIHJlcGVhdGVkIHdvcmQ6AFRocmVzaG9sZCBmb3IgZGVmaW5pdGUgcHJvcAB0ZW1wX2ZpZCA8IDAgfHwgZm9udGluZm9fdGFibGVfLT5zaXplKCkAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQBubyBkYXRhIGNhbiBiZSByZXR1cm5lZABXcml0aW5nIHRvIC90bXAvbGVwdC9jb21wL3Njb3JlYXJyYXkucG5nCgAvQ29sb3JTcGFjZSAlZCAwIFIASW5mbyBpbiAlczogc3RkZXYgYXMgZnJhY3Rpb24gb2YgbWVkaWFuIHN0ZGV2ID0gJTUuM2YKAEdyYXlzY2FsZSB2YWx1ZQBFcnJvciBpbiAlczogcGFhIG5vdCByZWFkCgBFcnJvciBpbiAlczogcGRmIGVuY29kaW5nIGZhaWxlZCBmb3IgcGl4WyVkXQoAL3RtcC9sZXB0L2Zvcm1hdC9maWxlLmJtcABvcCBub3QgJ3InIG9yICd3JwBmbmFtZSBub3QgZGVmaW5lZAAgICAgICAgICAgL0sgLTEASkZJRiBBUFAwIG1hcmtlcjogdmVyc2lvbiAlZC4lMDJkLCBkZW5zaXR5ICVkeCVkICAlZABEdXBsaWNhdGUgcENBTCBjaHVuawBUZXh0dXJlRm9ybWF0AHNlcGFyYXRlZABGb250ICVzLCB0b3RhbCBzY29yZSA9ICVkCgAoJ2AiAGNsYXNzaWZ5X2Jsbl9udW1lcmljX21vZGUAQWRkaW5nIGh5cGhlbiBiZWdpbm5pbmcgZGF3ZyBbJWQsICVsbGRdCgAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaABNYXggbnVtYmVyIG9mIGJsb2JzIGEgYmlnIGJsb2IgY2FuIG92ZXJsYXAAdG9zcF9taW5fc2FuZV9rbl9zcABib3hfaXQuZW1wdHkoKSB8fCAhYm94X2l0LmRhdGEoKS0+am9pbmVkX3RvX3ByZXYoKQBzcGFjaW5nIGZvciAlcyglZCkgJXMoJWQpIGNvbCAlZDogZXhwZWN0ZWQgJWcgYWN0dWFsICVkCgBiYWEgbm90IGRlZmluZWQAL3RtcC9sZXB0L2NvbXAvc2NvcmVhcnJheS5wbmcAL0NvbG9yU3BhY2UgL0RldmljZUdyYXkKL0RlY29kZSBbMSAwXQBubyB0aWxlcyByZXF1ZXN0ZWQATnVtYmVyIG9mIHBpeGVscwBwYWEgbm90IHdyaXR0ZW4gdG8gc3RyZWFtAEVycm9yIGluICVzOiBubyBwZGYgZmlsZXMgbWFkZQoAL3RtcC9sZXB0L2Zvcm1hdC9maWxlLnBuZwBCYWQgZmlsZTogYW1vdW50IHRvbyBiaWc6ICVsdQoAbnVtcHJlICsgbnVtcG9zdCB0b28gYmlnACAgICAgICAgICAvQ29sdW1ucyAlZABXYXJuaW5nOiB0aHVtYm5haWwgaW1hZ2Ugc2l6ZSBkb2VzIG5vdCBtYXRjaCBkYXRhIGxlbmd0aCAldQBObyBtZW1vcnkgZm9yIHBDQUwgcHVycG9zZQBUZXh0dXJlV3JhcE1vZGVzAFlDYkNyAFdvcmQgbW9kYWwgZm9udD0lcywgc2NvcmU9JWQsIDJuZCBjaG9pY2UgJXMvJWQKAGNoc19sZWFkaW5nX3B1bmN0AEFzc3VtZSB0aGUgaW5wdXQgaXMgbnVtYmVycyBbMC05XS4AQWRkaW5nIGJlZ2lubmluZyBwdW5jIGRhd2cgWyVkLCAlbGxkXQoAIWludF9tb2RlXwBEb24ndCB0cnVzdCBzcGFjZXMgbGVzcyB0aGFuIHRoaXMgdGltZSBrbgBkZWJ1ZwB2c2UgIT0gbnVsbHB0cgBubyBvdXRwdXQgcmVxdWVzdGVkACZzY29yZSBub3QgZGVmaW5lZABFcnJvciBpbiAlczogdW5rbm93biBjb2xvcnNwYWNlOiBzcHAgPSAlZAoARXJyb3IgaW4gJXM6IHRzaXplID0gJWQsIHdfYXZhaWwgPSAlZAoAc2NvcmUgZnJhY3QgPSAlMy4xZgBmcCBub3QgZGVmaW5lZAAvdG1wL2xlcHQvZm9ybWF0L2ZpbGUudGlmAGJhZCB3aGVuY2UgdmFsdWUAJWQAICAgICAgICAgIC9Sb3dzICVkAEpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogdHlwZSAweCUwMngsIGxlbmd0aCAldQBJbnZhbGlkIHBDQUwgZGF0YQBGaWVsZE9mVmlld0NvdGFuZ2VudAA3ICgweDcpAFdvcmQgbW9kYWwgZm9udD0lcywgc2NvcmU9JWQuIE5vIDJuZCBjaG9pY2UKAExlYWRpbmcgcHVuY3R1YXRpb24Ac3BlY2tsZV9sYXJnZV9tYXhfc2l6ZQBBZGRpbmcgYmVnaW5uaW5nIGRhd2cgWyVkLCAlbGxkXQoAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2xzdG0vbmV0d29ya2lvLmgAdG9zcF9pbml0X2d1ZXNzX2tuX211bHQAZGlzcGxheQB0ZXh0b3JkX3dvcmRzX3ZldG9fcG93ZXIAQ29tcHV0ZUFkanVzdGVkUGF0aENvc3QgJWcgUGFyYW1zTW9kZWwgZmVhdHVyZXM6CgAmYXJlYSBub3QgZGVmaW5lZABwaXgxIGFuZCBwaXgyIG5vdCBib3RoIGRlZmluZWQAL0JpdHNQZXJDb21wb25lbnQgJWQAV2FybmluZyBpbiAlczogbnRpbGVzID0gJWQ7IHJvb20gZm9yIG9ubHkgJWQKAC90bXAvbGVwdC9yZWRvdXQvaGlzdHBsb3QucG5nAFBpeGFjb21wIEluZm8gZm9yICVzOgoAL3RtcC9sZXB0L2Zvcm1hdC9maWxlX2x6dy50aWYAICAgICAgICA+PiAvQ0NJVFRGYXhEZWNvZGUgZmlsdGVyACAgICB3aXRoICVkIHggJWQgdGh1bWJuYWlsIGltYWdlAEludmFsaWQgcENBTCBwYXJhbWV0ZXJzIGZvciBlcXVhdGlvbiB0eXBlAE1hdHJpeFdvcmxkVG9TY3JlZW4AQ0lFIEwqYSpiKgBtb2RhbF9mb250ICE9IG51bGxwdHIAKS4sOzo/IQBNYXggbGFyZ2Ugc3BlY2tsZSBzaXplAC5kb2MAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQB0ZXh0b3JkX21pbl94aGVpZ2h0AFRocmVzaCBndWVzcyAtIG11bHQga24gYnkgdGhpcwBBc3NlcnQgZmFpbGVkAFJvd3MgcmVxdWlyZWQgdG8gb3V0dm90ZSBhIHZldG8AJXM9JWcKAGJveGEgYW5kIHBpeGEgY291bnRzIGRpZmZlcgBtaW5yYXRpbyBub3QgaW4gWzAuNSAuLi4gMS4wXQAvRmlsdGVyIC9GbGF0ZURlY29kZQBFcnJvciBpbiAlczogdHNpemUgPSAlZCwgaF9hdmFpbCA9ICVkCgBQaXhhY29tcCBJbmZvOgoAL3RtcC9sZXB0L2Zvcm1hdC9maWxlX3ppcC50aWYAICA+PiBpbWFnZW1hc2sATWlzY2VsbGFuZW91cyBtYXJrZXIgMHglMDJ4LCBsZW5ndGggJXUAVW5yZWNvZ25pemVkIGVxdWF0aW9uIHR5cGUgZm9yIHBDQUwgY2h1bmsATWF0cml4V29ybGRUb0NhbWVyYQAwICgweDApAERpY3Rpb25hcnkgY29ycmVjdGlvbiByZXBsYWNlcyBiZXN0IGNob2ljZSAnJXMnIHdpdGggJyVzJwoAY2hzX3RyYWlsaW5nX3B1bmN0MQBzcGVja2xlX3JhdGluZ19wZW5hbHR5AGEATWluIGNyZWRpYmxlIHBpeGVsIHhoZWlnaHQAdG9zcF9pbml0X2d1ZXNzX3hodF9tdWx0AEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgB2c2UtPm5ncmFtX2luZm8gIT0gbnVsbHB0cgAlZAAmbmFhIG5vdCBkZWZpbmVkAC9EZWNvZGVQYXJtcwo8PAogIC9Db2x1bW5zICVkCiAgL1ByZWRpY3RvciAxNAogIC9Db2xvcnMgJWQKICAvQml0c1BlckNvbXBvbmVudCAlZAo+PgoATnVtYmVyIG9mIHBpeGNvbXA6ICVkCgAvdG1wL2xlcHQvZm9ybWF0L2ZpbGVfZzQudGlmAH0AVW5leHBlY3RlZCBtYXJrZXIgMHglMDJ4AE5vIG1lbW9yeSBmb3IgcENBTCBwYXJhbXMAQ29weXJpZ2h0AHJvdyAwIHRvcCwgY29sIDAgbGhzAEFzc2VydCBmYWlsZWQAMXN0IFRyYWlsaW5nIHB1bmN0dWF0aW9uAFBlbmFsdHkgdG8gYWRkIHRvIHdvcnN0IHJhdGluZyBmb3Igbm9pc2UARXJyb3I6IENvdWxkIG5vdCBvcGVuIGZpbGUgJXMKAFRocmVzaCBndWVzcyAtIG11bHQgeGh0IGJ5IHRoaXMAJmRlbDEgYW5kICZkZWwyIG5vdCBib3RoIGRlZmluZWQAJncgYW5kICZoIG5vdCBib3RoIGRlZmluZWQAAFNpemUgb2YgcGl4Y29tcCBhcnJheSBhbGxvYzogJWQKAC90bXAvbGVwdC9mb3JtYXQvZmlsZV9nMy50aWYAJSVCZWdpbkRhdGE6ACAgICAgICAgJTR1ICU0dSAlNHUgJTR1ICU0dSAlNHUgJTR1ICU0dQBNaXNzaW5nIElIRFIgYmVmb3JlIHNDQUwAUmljaFRJRkZJUFRDAHJvdyAwIHRvcCwgY29sIDAgcmhzAGNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkAKSdgIgBkZWJ1ZwBkb2Nfd29yZF9maWxlAHRvc3BfbWF4X3NhbmVfa25fdGhyZXNoAHRleHRvcmRfcGl0Y2hfcm93c2ltaWxhcml0eQBVcGRhdGVCZXN0Q2hvaWNlKCkgY29uc3RydWN0ZWQgd29yZABib3hhMSBhbmQgYm94YTIgbm90IGJvdGggZGVmaW5lZABwaXhzIG5vdCBkZWZpbmVkIG9yIDEgYnBwACVkIDAgb2JqCjw8Ci9MZW5ndGggJWx1Ci9TdWJ0eXBlIC9JbWFnZQolcwovV2lkdGggJWQKL0hlaWdodCAlZAolcwolcwolcz4+CnN0cmVhbQoAT2Zmc2V0IG9mIGluZGV4IGludG8gYXJyYXk6ICVkCgAvdG1wL2xlcHQvZm9ybWF0L2ZpbGVfcmxlLnRpZgBleGVjAFF1YW50aXppbmcgdG8gJWQgPSAlZColZColZCBjb2xvcnMASW52YWxpZCBzQ0FMIGFmdGVyIElEQVQAUGhvdG9zaG9wAHJvdyAwIGJvdHRvbSwgY29sIDAgcmhzAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAGNoc190cmFpbGluZ19wdW5jdDIAZGlzcGxheQAlcwoAdGV4dG9yZF9zcGxpbmVfc2hpZnRfZnJhY3Rpb24ATXVsdGlwbGllciBvbiBrbiB0byBsaW1pdCB0aHJlc2gARnJhY3Rpb24gb2YgeGhlaWdodCBmb3Igc2FtZW5lc3MAUmF3IGZlYXR1cmVzIGV4dHJhY3RlZCBmcm9tICVzIChjb3N0PSVnKSBbIABXYXJuaW5nIGluICVzOiBubyB2YWxpZCBib3hlcyBvdXQgb2YgJWQgYm94ZXMKAFdyaXRpbmcgdG8gL3RtcC9sZXB0L2NvbXAvdGlsZWRoaXN0b3MucGRmCgBpbnZhbGlkIGltYWdlIGluZGV4AEJveGEgaGFzICVkIGJveGVzCgAvdG1wL2xlcHQvZm9ybWF0L2ZpbGVfcGFja2JpdHMudGlmACUlRW5kRGF0YQBRdWFudGl6aW5nIHRvICVkIGNvbG9ycwBEdXBsaWNhdGUgc0NBTCBjaHVuawBFWElGSUZET2Zmc2V0AHJvdyAwIGJvdHRvbSwgY29sIDAgbGhzACVkIG5ldyB3b3JkcyAlcyB0aGFuICVkIG9sZCB3b3JkczogcjogJWcgdiAlZyBjOiAlZyB2ICVnIHZhbGlkIGRpY3Q6ICVkIHYgJWQKADJuZCBUcmFpbGluZyBwdW5jdHVhdGlvbgAsIHhodEJBRABGcmFjdGlvbiBvZiBsaW5lIHNwYWNpbmcgZm9yIHF1YWQAdG9zcF9mbGlwX2NhdXRpb24AJWcgAGluZGljIG5vdCBtYWRlAC90bXAvbGVwdC9jb21wL3RpbGVkaGlzdG9zLnBkZgAlZCAwIG9iagpbIC9JbmRleGVkIC9EZXZpY2VSR0IKJWQKJXMKXQplbmRvYmoKAEJveGEgaXMgZW1wdHkKAC90bXAvbGVwdC9mb3JtYXQvZmlsZS5wbm0AZW5kAFNlbGVjdGVkICVkIGNvbG9ycyBmb3IgcXVhbnRpemF0aW9uAHNDQUwgY2h1bmsgdG9vIHNob3J0AElDQyBQcm9maWxlAHJvdyAwIGxocywgY29sIDAgdG9wAGJldHRlcgBxdWFsaXR5X3Jlal9wYwAsIHhodFNVQgBEb24ndCBhdXRvZmxpcCBrbiB0byBzcCB3aGVuIGxhcmdlIHNlcGFyYXRpb24AXQoAcGl4cyB1bmRlZmluZWQgb3Igbm90IDggYnBwAGNhbGxvYyBmYWlsIGZvciBkYXRhACAgUGl4Y29tcCBJbmZvIGZvciAlczoAL3RtcC9sZXB0L2Zvcm1hdC9maWxlLmpwZwByZXN0b3JlAEF0IG1hcmtlciAweCUwMngsIHJlY292ZXJ5IGFjdGlvbiAlZABPdXQgb2YgbWVtb3J5IHdoaWxlIHByb2Nlc3Npbmcgc0NBTCBjaHVuawBHUFNJRkRPZmZzZXQAcm93IDAgcmhzLCBjb2wgMCB0b3AAd29yc2UAZ29vZF9xdWFsaXR5X2RvYyBsdGUgcmVqZWN0aW9uIGxpbWl0AENvbnNpc3RlbmN5IGNvdWxkIG5vdCBiZSBjYWxjdWxhdGVkLgoAdG9zcF9sYXJnZV9rZXJuaW5nAHRleHRvcmRfcGl0Y2hfc2NhbGViaWd3b3JkcwBVcGRhdGVkIHJhdyBjaG9pY2UKACZjeCBhbmQgJmN5IG5vdCBib3RoIGRlZmluZWQAZGFsb2Mgbm90IGRlZmluZWQAICBQaXhjb21wIEluZm86AGZpbGUgbm90IGZvdW5kAFJTVCVkAG1hbGZvcm1lZCB3aWR0aCBzdHJpbmcgaW4gc0NBTCBjaHVuawBTdG9OaXRzAHJvdyAwIHJocywgY29sIDAgYm90dG9tAEJvdW5kaW5nIGJveD0oJWQsJWQpLT4oJWQsJWQpCgBxdWFsaXR5X2Jsb2JfcGMAJXNXb3JkOiAlcyAlNC4yZiVzAHRleHRvcmRfc3BsaW5lX291dGxpZXJfZnJhY3Rpb24ATGltaXQgdXNlIG9mIHhodCBnYXAgd2l0aCBsYXJnZSBrbnMAU2NhbGUgc2NvcmVzIG9uIGJpZyB3b3JkcwBVcGRhdGVkIGJlc3QgY2hvaWNlCgBJbmZvIGluICVzOiBpbnB1dCBpbWFnZSBpcyB3aGl0ZQoAeHJlZgowICVkCjAwMDAwMDAwMDAgNjU1MzUgZiAKACB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZCwgZGVwdGggPSAlZAoAZmlsZSBub3QgdGlmZiBmb3JtYXQAU21vb3RoaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBub25zdGFuZGFyZCBzYW1wbGluZyByYXRpb3MAVHJ1bmNhdGVkIHNDQUwgY2h1bmsASW50ZXJvcGVyYWJpbGl0eUlGRE9mZnNldAByb3cgMCBsaHMsIGNvbCAwIGJvdHRvbQBpbmRleCA8IGxlbgBnb29kX3F1YWxpdHlfZG9jIGd0ZSBnb29kIGJsb2JzIGxpbWl0AE5vbi0ARnJhY3Rpb24gb2YgbGluZSBzcGFjaW5nIGZvciBvdXRsaWVyAHRvc3BfZG9udF9mb29sX3dpdGhfc21hbGxfa2VybnMATmV3IHN0YXRlIABwaXggdW5kZWZpbmVkIG9yIGludmFsaWQAJTAxMGQgMDAwMDAgbiAKACAgICB4cmVzID0gJWQsIHlyZXMgPSAlZCwgc2l6ZSBpbiBieXRlcyA9ICVsdQoAZmxhdGUgZGF0YSBub3QgbWFkZQBTdGFydCBPZiBGcmFtZSAweCUwMng6IHdpZHRoPSV1LCBoZWlnaHQ9JXUsIGNvbXBvbmVudHM9JWQAbWFsZm9ybWVkIGhlaWdodCBzdHJpbmcgaW4gc0NBTCBjaHVuawBETkdWZXJzaW9uACAgSW5rIFNldDogAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3N0cnVjdC9yZWpjdG1hcC5oAHF1YWxpdHlfb3V0bGluZV9wYwAsIFcATGltaXQgdXNlIG9mIHhodCBnYXAgd2l0aCBvZGQgc21hbGwga25zAGZ1bGxfd2hfcmF0aW9fdmFyICs9ICglZy0lZyleMgoASW5mbyBpbiAlczogSW1hZ2UgaXMgdGV4dAoAdHJhaWxlcgo8PAovU2l6ZSAlZAovUm9vdCAxIDAgUgovSW5mbyAyIDAgUgo+PgpzdGFydHhyZWYKJWQKJSUlJUVPRgoAICAgIGhhcyBjb2xvcm1hcAoAZmxhdGUgZGF0YSBub3QgZGVmaW5lZAAgICAgQ29tcG9uZW50ICVkOiAlZGh4JWR2IHE9JWQASW52YWxpZCBzQ0FMIGRhdGEARE5HQmFja3dhcmRWZXJzaW9uAENNWUsKADI5X1Rlc3NNZW1iZXJSZXN1bHRDYWxsYmFja18wXzFJTGIwRXZOOXRlc3NlcmFjdDE2RG9jUXVhbENhbGxiYWNrc0VpRQAxM1Rlc3NDYWxsYmFjazFJaUUATjl0ZXNzZXJhY3QxNEVxdWF0aW9uRGV0ZWN0RQBOOXRlc3NlcmFjdDE3TFRSUmVzdWx0SXRlcmF0b3JFAE45dGVzc2VyYWN0MTVNdXRhYmxlSXRlcmF0b3JFAAAAAAAADgEAALQAAABaAAAATjl0ZXNzZXJhY3QxMlBhZ2VJdGVyYXRvckUAUGFyYWdyYXBoTW9kZWxTbWVhcmVyAFJlY29tcHV0ZU1hcmdpbnNBbmRDbGVhckh5cG90aGVzZXMAMzFfVGVzc0Z1bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8ySUxiMEViUktQMTRQYXJhZ3JhcGhNb2RlbFMzX0UAMTlUZXNzUmVzdWx0Q2FsbGJhY2sySWJSS1AxNFBhcmFncmFwaE1vZGVsUzNfRQAzMV9UZXNzRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzJJTGIwRWJSS045dGVzc2VyYWN0MTRMaW5lSHlwb3RoZXNpc0VTM19FADE5VGVzc1Jlc3VsdENhbGxiYWNrMkliUktOOXRlc3NlcmFjdDE0TGluZUh5cG90aGVzaXNFUzNfRQBTdHJvbmdFdmlkZW5jZUNsYXNzaWZ5AE1vZGVsU3Ryb25nRXZpZGVuY2UASW50ZXJuYWxQYXJhZ3JhcGhNb2RlbEJ5T3V0bGluZQBHZW9tZXRyaWNDbGFzc2lmeQBDYWxjdWxhdGVUYWJTdG9wcwAzMV9UZXNzRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzJJTGIwRWJSS2lTMV9FADMxX1Rlc3NGdW5jdGlvblJlc3VsdENhbGxiYWNrXzBfMklMYjBFYlJLaVMxX0UAMzFfVGVzc0Z1bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8ySUxiMEViUktpUzFfRQAzMV9UZXNzRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzJJTGIwRWJSS2lTMV9FADMxX1Rlc3NGdW5jdGlvblJlc3VsdENhbGxiYWNrXzBfMklMYjBFYlJLaVMxX0UAMzFfVGVzc0Z1bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8ySUxiMEViUktpUzFfRQAxOVRlc3NSZXN1bHRDYWxsYmFjazJJYlJLaVMxX0UAMTlUZXNzUmVzdWx0Q2FsbGJhY2sySWJSS2lTMV9FADE5VGVzc1Jlc3VsdENhbGxiYWNrMkliUktpUzFfRQAxOVRlc3NSZXN1bHRDYWxsYmFjazJJYlJLaVMxX0UAMTlUZXNzUmVzdWx0Q2FsbGJhY2sySWJSS2lTMV9FADE5VGVzc1Jlc3VsdENhbGxiYWNrMkliUktpUzFfRQBNYXJrUm93c1dpdGhNb2RlbAAzMV9UZXNzRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzJJTGIwRWJSS1BLMTRQYXJhZ3JhcGhNb2RlbFM0X0UAMTlUZXNzUmVzdWx0Q2FsbGJhY2sySWJSS1BLMTRQYXJhZ3JhcGhNb2RlbFM0X0UATjl0ZXNzZXJhY3QxNFJlc3VsdEl0ZXJhdG9yRQB0cmFpbmVkZGF0YQB0cmFpbmVkZGF0YQAzMV9UZXNzRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzJJTGIwRWJSS045dGVzc2VyYWN0OEZvbnRJbmZvRVMzX0UAMzFfVGVzc0Z1bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8ySUxiMEViUktOOXRlc3NlcmFjdDhGb250SW5mb0VTM19FADMxX1Rlc3NGdW5jdGlvblJlc3VsdENhbGxiYWNrXzBfMklMYjBFYlJLTjl0ZXNzZXJhY3Q4Rm9udEluZm9FUzNfRQAxOVRlc3NSZXN1bHRDYWxsYmFjazJJYlJLTjl0ZXNzZXJhY3Q4Rm9udEluZm9FUzNfRQAxOVRlc3NSZXN1bHRDYWxsYmFjazJJYlJLTjl0ZXNzZXJhY3Q4Rm9udEluZm9FUzNfRQAxOVRlc3NSZXN1bHRDYWxsYmFjazJJYlJLTjl0ZXNzZXJhY3Q4Rm9udEluZm9FUzNfRQBnb29kX3F1YWxpdHlfZG9jIGx0ZSBvdXRsaW5lIGVycm9yIGxpbWl0ACwgQwB0b3NwX25lYXJfbGhfZWRnZQB3b3Jkc19pbml0aWFsX2xvd2VyAGkgPT0gMAAvdG1wL2xlcHQvY29tcC9wbG90LiVkACZkYSBub3QgZGVmaW5lZAAgICAgbm8gY29sb3JtYXAKACUhUFMtQWRvYmUtMy4wIEVQU0YtMy4wAFN0YXJ0IG9mIEltYWdlAE91dCBvZiBwbGFjZSB0SU1FIGNodW5rAFVuaXF1ZUNhbWVyYU1vZGVsACAgRG90IFJhbmdlOiAldS0ldQoAcXVhbGl0eV9jaGFyX3BjACwgUAB0ZXh0b3JkX3NrZXdfaWxlAERvbid0IHJlZHVjZSBib3ggaWYgdGhlIHRvcCBsZWZ0IGlzIG5vbiBibGFuawB0b3RhbF9ibG9icyA9PSB3b3JkX3Jlcy0+cmF0aW5ncy0+ZGltZW5zaW9uKCkASGlzdG9zAGJhcyBub3QgZGVmaW5lZAAgICAgY29tcHR5cGUgPSAlcyAoJWQpCgAlJSUlVGl0bGU6IEZsYXRlIGNvbXByZXNzZWQgUFMAU3RhcnQgT2YgU2NhbjogJWQgY29tcG9uZW50cwBEdXBsaWNhdGUgdElNRSBjaHVuawBMb2NhbGl6ZWRDYW1lcmFNb2RlbAAgIFdoaXRlIFBvaW50OiAlZy0lZwoAZ29vZF9xdWFsaXR5X2RvYyBndGUgZ29vZCBjaGFyIGxpbWl0ACwgRgBJbGUgb2YgZ3JhZGllbnRzIGZvciBwYWdlIHNrZXcAdG9zcF9zaWxseV9rbl9zcF9nYXAAZGVidWcAL3RtcC9sZXB0L2NvbXAAJVBERi0xLgAgICAgRXJyb3IhISBJbnZhbGlkIGNvbXB0eXBlIGluZGV4OiAlZAoAJSVMYW5ndWFnZUxldmVsOiAzACAgICBDb21wb25lbnQgJWQ6IGRjPSVkIGFjPSVkAEluY29ycmVjdCB0SU1FIGNodW5rIGxlbmd0aABDRkFQbGFuZUNvbG9yACAgUmVmZXJlbmNlIEJsYWNrL1doaXRlOgoAcXVhbGl0eV9taW5faW5pdGlhbF9hbHBoYXNfcmVxZAAsIABEb24ndCBsZXQgc3AgbWludXMga24gZ2V0IHRvbyBzbWFsbAB3b3Jkc19pbml0aWFsX3VwcGVyAGRpc3BsYXkALnBuZwBQREYgaGVhZGVyIHNpZ25hdHVyZSBub3QgZm91bmQAbmV3IHB0ciBhcnJheSBub3QgcmV0dXJuZWQAWyAvSW5kZXhlZCAvRGV2aWNlUkdCICVkICAgICAgICAgICUlc2V0IGNvbG9ybWFwIHR5cGUvc2l6ZQAgIFNzPSVkLCBTZT0lZCwgQWg9JWQsIEFsPSVkAE5vIHNwYWNlIGluIGNodW5rIGNhY2hlIGZvciB0RVh0AENGQUxheW91dAAgICAgJTJkOiAlNWcgJTVnCgBhbHBoYXMgaW4gYSBnb29kIHdvcmQAICU0LjJmIC0tPiAlNC4yZgoAdG9zcF9wYXNzX3dpZGVfZnV6el9zcF90b19jb250ZXh0AEFzc2VydCBmYWlsZWQASW5mbyBpbiAlczogcmF0aW8gJWYgPiAlZjsgaXNwaG90byBpcyB0cnVlCgBzdGFydHhyZWYKACAgPH4AQ2xvc2VkIHRlbXBvcmFyeSBmaWxlICVzAE1pc3NpbmcgSUhEUiBiZWZvcmUgdEVYdABMaW5lYXJpemF0aW9uVGFibGUAICBYTUxQYWNrZXQgKFhNUCBNZXRhZGF0YSk6CgB0ZXNzZWRpdF90ZXNzX2FkYXB0aW9uX21vZGUAZGVidWcAdGV4dG9yZF9za2V3X2xhZwBIb3cgd2lkZSBmdXp6aWVzIG5lZWQgY29udGV4dABjb250YWluc191bmljaGFyX2lkKHVuaWNoYXJfaWQpAEluZm8gaW4gJXM6IHJhdGlvICVmIDwgJWY7IGlzcGhvdG8gaXMgZmFsc2UKAHN0YXJ0eHJlZiBub3QgZm91bmQhACAgXSBzZXRjb2xvcnNwYWNlAE9wZW5lZCB0ZW1wb3JhcnkgZmlsZSAlcwBObyBtZW1vcnkgdG8gcHJvY2VzcyB0ZXh0IGNodW5rAEJsYWNrTGV2ZWxSZXBlYXREaW0AICBSaWNoVElGRklQVEMgRGF0YTogPHByZXNlbnQ+LCAlbHUgYnl0ZXMKAEFkYXB0YXRpb24gZGVjaXNpb24gYWxnb3JpdGhtIGZvciB0ZXNzAGRpc3BsYXkATGFnIGZvciBza2V3IG9uIHJvdyBhY2N1bXVsYXRpb24AdGV4dG9yZF9ub19yZWplY3RzAHdvcmRzX2RlZmF1bHRfcHJvcF9ub25zcGFjZQAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuaABuYWExIGFuZCBuYWEyIG5vdCBib3RoIGRlZmluZWQAJWQKAC9EYXRhIFJhd0RhdGEgPDwgPj4gL0ZsYXRlRGVjb2RlIGZpbHRlciBkZWYASkZJRiBleHRlbnNpb24gbWFya2VyOiBKUEVHLWNvbXByZXNzZWQgdGh1bWJuYWlsIGltYWdlLCBsZW5ndGggJXUATm90IGVub3VnaCBtZW1vcnkgdG8gcHJvY2VzcyB0ZXh0IGNodW5rAEJsYWNrTGV2ZWwAICBQaG90b3Nob3AgRGF0YTogPHByZXNlbnQ+LCAlbHUgYnl0ZXMKAHRlc3NlZGl0X21pbmltYWxfcmVqX3Bhc3MxAE9iamVjdENhY2hlKCVwKTo6fk9iamVjdENhY2hlKCk6IFdBUk5JTkchIExFQUshIG9iamVjdCAlcCBzdGlsbCBoYXMgY291bnQgJWQgKGlkICVzKQoARG9uJ3QgcmVtb3ZlIG5vaXNlIGJsb2JzAHVuaWNoYXJzZXQuY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQBuYWExIGFuZCBuYWEyIGFyZSBkaWZmZXJlbnQgc2l6ZQB4cmVmbG9jIG5vdCBmb3VuZCEAICAgICAvRGVjb2RlIFswIDI1NV0ASkZJRiBleHRlbnNpb24gbWFya2VyOiBwYWxldHRlIHRodW1ibmFpbCBpbWFnZSwgbGVuZ3RoICV1AEluc3VmZmljaWVudCBtZW1vcnkgdG8gcHJvY2VzcyB0ZXh0IGNodW5rAEJsYWNrTGV2ZWxEZWx0YUgAICBJQ0MgUHJvZmlsZTogPHByZXNlbnQ+LCAlbHUgYnl0ZXMKAERvIG1pbmltYWwgcmVqZWN0aW9uIG9uIHBhc3MgMSBvdXRwdXQAQXNzZXJ0IGZhaWxlZAB0ZXh0b3JkX3Nob3dfYmxvYnMAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2RpY3QvZGljdC5oAGxlcHQvY29tcHRpbGUAaW52YWxpZCB4cmVmbG9jIQAgICAgIC9EZWNvZGUgWzEgMF0ASkZJRiBleHRlbnNpb24gbWFya2VyOiBSR0IgdGh1bWJuYWlsIGltYWdlLCBsZW5ndGggJXUATm8gc3BhY2UgaW4gY2h1bmsgY2FjaGUgZm9yIHpUWHQAQmxhY2tMZXZlbERlbHRhVgAgIFNhbXBsZSB0byBOaXRzIGNvbnZlcnNpb24gZmFjdG9yOiAlLjRlCgB0ZXNzZWRpdF90ZXN0X2FkYXB0aW9uACVzWyVkLCAlbGxkXSBbcHVuYzogJWxsZCVzXQoAdGV4dG9yZF9saW5lc3BhY2VfaXFybGltaXQARGlzcGxheSB1bnNvcnRlZCBibG9icwB3b3Jkc19kZWZhdWx0X2ZpeGVkX3NwYWNlAHVuaWNoYXJzZXQtPmNvbnRhaW5zX3VuaWNoYXJfaWQodW5pY2hhcl9pZCkASW5mbyBpbiAlczogU2l6ZXMgZGlmZmVyOiB3cmF0aW8gPSAlZiwgaHJhdGlvID0gJWYKADAgJWQAJmRhdGEgbm90IGRlZmluZWQAVW5yZWNvZ25pemVkIGNvbXBvbmVudCBJRHMgJWQgJWQgJWQsIGFzc3VtaW5nIFlDYkNyAE1pc3NpbmcgSUhEUiBiZWZvcmUgelRYdABXaGl0ZUxldmVsACAgJXM6IABUZXN0IGFkYXB0aW9uIGNyaXRlcmlhACByZXR1cm5lZABNYXggaXFyL21lZGlhbiBmb3IgbGluZXNwYWNlAHRleHRvcmRfc2hvd19ib3hlcwBQVFJBSU5fRElHSVRTX1NIT1JUAC90bXAvbGVwdC9jb21wdGlsZS9wbG90LiVkAG5vYmogbm90IGZvdW5kACZzaXplIG5vdCBkZWZpbmVkAEZyZWVkIFhNUyBoYW5kbGUgJXUAT3V0IG9mIG1lbW9yeSBwcm9jZXNzaW5nIHpUWHQgY2h1bmsARGVmYXVsdFNjYWxlACV1AHRlc3RfcHQAY29udGFpbnNfdW5pY2hhcl9pZCh1bmljaGFyX2lkKQB0ZXh0b3JkX21heF9ub2lzZV9zaXplAFBUUkFJTl9ESUdJVFNfTUVEAC90bXAvbGVwdC9jb21wdGlsZS9wbG90LiVkLnBuZwAlZAAmcGl4IG5vdCBkZWZpbmVkAE9idGFpbmVkIFhNUyBoYW5kbGUgJXUAVHJ1bmNhdGVkIHpUWHQgY2h1bmsAQmVzdFF1YWxpdHlTY2FsZQAweCV4AFRlc3QgZm9yIHBvaW50AC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5oAFBpeGVsIHNpemUgb2Ygbm9pc2UAd29yZHNfZGVmYXVsdF9maXhlZF9saW1pdABQVFJBSU5fRElHSVRTX0xPTkcASW1hZ2UgJWQKZGlzdCA9ICU1LjNmLCBzY29yZSA9ICU1LjNmACVkIDAgb2JqAFVua25vd24gQWRvYmUgY29sb3IgdHJhbnNmb3JtIGNvZGUgJWQAVW5rbm93biBjb21wcmVzc2lvbiB0eXBlIGluIHpUWHQgY2h1bmsARGVmYXVsdENyb3BPcmlnaW4AJWQAdGVzdF9wdF94ACAAdGV4dG9yZF93aWR0aF9saW1pdAB0ZXh0b3JkX2Jhc2VsaW5lX2RlYnVnAEFsbG93ZWQgc2l6ZSB2YXJpYW5jZQBQVFJBSU5fTlVNX1NIT1JUAFdyaXRpbmcgdG8gL3RtcC9sZXB0L2NvbXB0aWxlL2NvbXBhcmVncmF5LnBkZgoARXJyb3IgaW4gJXM6IGJhZCB0cmFpbGVyIGZvciBvYmplY3QgJWQKAENvcnJ1cHQgSlBFRyBkYXRhOiBiYWQgYXJpdGhtZXRpYyBjb2RlAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHByb2Nlc3MgelRYdCBjaHVuawBEZWZhdWx0Q3JvcFNpemUAJWx1AHhjb29yZABjb3B5X2h5cGhlbl9pbmZvOiAATWF4IHdpZHRoIG9mIGJsb2JzIHRvIG1ha2Ugcm93cwBCYXNlbGluZSBkZWJ1ZyBsZXZlbABQVFJBSU5fTlVNX01FRAAvdG1wL2xlcHQvY29tcHRpbGUvY29tcGFyZWdyYXkucGRmAEluZm8gaW4gJXM6IHJlYnVpbGRpbmcgcGRmIHRyYWlsZXIKAEluY29uc2lzdGVudCBwcm9ncmVzc2lvbiBzZXF1ZW5jZSBmb3IgY29tcG9uZW50ICVkIGNvZWZmaWNpZW50ICVkAEluc3VmZmljaWVudCBtZW1vcnkgdG8gc3RvcmUgelRYdCBjaHVuawBDb2xvck1hdHJpeDEAJWxkAHRlc3RfcHRfeQB0ZXh0b3JkX25vaXNlX2FyZWFfcmF0aW8AUFRSQUlOX05VTV9MT05HAC90bXAvbGVwdC9jb21wdGlsZS9zY29yZXMubmEAIDAgb2JqCgBDb3JydXB0IEpQRUcgZGF0YTogJXUgZXh0cmFuZW91cyBieXRlcyBiZWZvcmUgbWFya2VyIDB4JTAyeABObyBzcGFjZSBpbiBjaHVuayBjYWNoZSBmb3IgaVRYdABDb2xvck1hdHJpeDIAJWYAeWNvb3JkAEZyYWN0aW9uIG9mIGJvdW5kaW5nIGJveCBmb3Igbm9pc2UAdGV4dG9yZF93b3Jkc19kZWZpbml0ZV9zcHJlYWQAUFRSQUlOX0RPQ19TSE9SVAAvdG1wL2xlcHQvY29tcHRpbGUvZGlzdHMubmEAeHJlZgBDb3JydXB0IEpQRUcgZGF0YTogcHJlbWF0dXJlIGVuZCBvZiBkYXRhIHNlZ21lbnQATWlzc2luZyBJSERSIGJlZm9yZSBpVFh0AENhbWVyYUNhbGlicmF0aW9uMQAweCV1bHgAbXVsdGlsYW5nX2RlYnVnX2xldmVsAHRleHRvcmRfY2hvcF93aWR0aAB0ZXh0b3JkX2luaXRpYWx4X2lsZQBOb24tZnV6enkgc3BhY2luZyByZWdpb24AUFRSQUlOX0RPQ19NRUQAaW52YWxpZCBtYXhncmF5OyBzaG91bGQgYmUgPj0gMjAwAG5hcGFnZSBub3QgZGVmaW5lZABDb3JydXB0IEpQRUcgZGF0YTogYmFkIEh1ZmZtYW4gY29kZQBObyBtZW1vcnkgdG8gcHJvY2VzcyBpVFh0IGNodW5rAENhbWVyYUNhbGlicmF0aW9uMgBQcmludCBtdWx0aWxhbmcgZGVidWcgaW5mby4ATWF4IHdpZHRoIGJlZm9yZSBjaG9wcGluZwBJbGUgb2Ygc2l6ZXMgZm9yIHhoZWlnaHQgZ3Vlc3MAUFRSQUlOX0RPQ19MT05HACZib3gxIGFuZCAmYm94MiBub3QgYm90aCBkZWZpbmVkACAlZCAwIFIgAFdhcm5pbmc6IHVua25vd24gSkZJRiByZXZpc2lvbiBudW1iZXIgJWQuJTAyZABUcnVuY2F0ZWQgaVRYdCBjaHVuawBSZWR1Y3Rpb25NYXRyaXgxADx1bnN1cHBvcnRlZCBkYXRhIHR5cGUgaW4gVElGRlByaW50PgBwYXJhZ3JhcGhfZGVidWdfbGV2ZWwAdGV4dG9yZF9pbml0aWFsYXNjX2lsZQBQVFJBSU5fRElDVF9TSE9SVAAmc2l6ZSBub3QgZGVmaW5lZAAzIDAgb2JqCjw8Ci9UeXBlIC9QYWdlcwovS2lkcyBbJXNdCi9Db3VudCAlZAo+PgoAUHJlbWF0dXJlIGVuZCBvZiBKUEVHIGZpbGUATWFsZm9ybWVkIGlUWHQgY2h1bmsAUmVkdWN0aW9uTWF0cml4MgBQcmludCBwYXJhZ3JhcGggZGVidWcgaW5mby4AdGV4dG9yZF9ub2lzZV9zaXplZnJhY3Rpb24AdGV4dG9yZF9zcGFjZXNpemVfcmF0aW9mcABQVFJBSU5fRElDVF9NRUQAbmFhIG5vdCBkZWZpbmVkACAwIFIAQ29ycnVwdCBKUEVHIGRhdGE6IGZvdW5kIG1hcmtlciAweCUwMnggaW5zdGVhZCBvZiBSU1QlZABOb3QgZW5vdWdoIG1lbW9yeSB0byBwcm9jZXNzIGlUWHQgY2h1bmsAQW5hbG9nQmFsYW5jZQBwYXJhZ3JhcGhfdGV4dF9iYXNlZAB0ZXh0b3JkX2V4cGFuc2lvbl9mYWN0b3IARnJhY3Rpb24gb2Ygc2l6ZSBmb3IgbWF4aW1hAE1pbiByYXRpbyBzcGFjZS9ub25zcGFjZQBQVFJBSU5fRElDVF9MT05HAEVycm9yIGluICVzOiAlZCBudW1iZXJzIGluIG51bWFbJWRdCgBJbnZhbGlkIFNPUyBwYXJhbWV0ZXJzIGZvciBzZXF1ZW50aWFsIEpQRUcASW5zdWZmaWNpZW50IG1lbW9yeSB0byBzdG9yZSBpVFh0IGNodW5rAEFzU2hvdE5ldXRyYWwAUnVuIHBhcmFncmFwaCBkZXRlY3Rpb24gb24gdGhlIHBvc3QtdGV4dC1yZWNvZ25pdGlvbiAobW9yZSBhY2N1cmF0ZSkARmFjdG9yIHRvIGV4cGFuZCByb3dzIGJ5IGluIGV4cGFuZF9yb3dzAHRleHRvcmRfbm9pc2Vfc2l6ZWxpbWl0AFBUUkFJTl9GUkVRX1NIT1JUAGJ5dGVhIG5vdCBtYWRlAEFwcGxpY2F0aW9uIHRyYW5zZmVycmVkIHRvbyBtYW55IHNjYW5saW5lcwBObyBzcGFjZSBpbiBjaHVuayBjYWNoZSBmb3IgdW5rbm93biBjaHVuawBBc1Nob3RXaGl0ZVhZAGxzdG1fdXNlX21hdHJpeABGcmFjdGlvbiBvZiB4IGZvciBiaWcgdCBjb3VudABQVFJBSU5fRlJFUV9NRUQAYnl0ZWEgbm90IGRlZmluZWQAJXMKAHVua25vd24gY3JpdGljYWwgY2h1bmsAQmFzZWxpbmVFeHBvc3VyZQBVc2UgcmF0aW5ncyBtYXRyaXgvYmVhbSBzZWFyY2ggd2l0aCBsc3RtAHRleHRvcmRfbm9pc2VfdHJhbnNsaW1pdAB0ZXh0b3JkX3NwYWNlc2l6ZV9yYXRpb3Byb3AAUFRSQUlOX0ZSRVFfTE9ORwBieXRlYSBzaXplIGlzIGludmFsaWQAZXJyb3IgaW4gdXNlciBjaHVuawBCYXNlbGluZU5vaXNlACV8IAB0ZXh0b3JkX292ZXJsYXBfeABUcmFuc2l0aW9ucyBmb3Igbm9ybWFsIGJsb2IAUFRSQUlOX1NIQVBFX0NPU1RfUEVSX0NIQVIAJmRlbHggYW5kICZkZWx5IG5vdCBkZWZpbmVkAElnbm9yaW5nIGJhZCBhZGFwdGl2ZSBmaWx0ZXIgdHlwZQBCYXNlbGluZVNoYXJwbmVzcwBvdXRsaW5lc19vZGQARnJhY3Rpb24gb2YgbGluZXNwYWNlIGZvciBnb29kIG92ZXJsYXAAdGV4dG9yZF9ub2lzZV9ub3JtcmF0aW8AUFRSQUlOX05HUkFNX0NPU1RfUEVSX0NIQVIATGV2ZWwgJWQ6IGRlbHggPSAlZCwgZGVseSA9ICVkLCBzY29yZSA9ICU3LjRmCgBOb3QgZW5vdWdoIGltYWdlIGRhdGEAQmF5ZXJHcmVlblNwbGl0AE5vbiBzdGFuZGFyZCBudW1iZXIgb2Ygb3V0bGluZXMARG90IHRvIG5vcm0gcmF0aW8gZm9yIGRlbGV0aW9uAHRleHRvcmRfZnBpcXJfcmF0aW8AUFRSQUlOX05VTV9CQURfUFVOQwAvdG1wL2xlcHQvY29tcC9jb21wYXJlLnBkZgBFeHRyYSBjb21wcmVzc2VkIGRhdGEATGluZWFyUmVzcG9uc2VMaW1pdABpaiE/JSI6OwB0ZXh0b3JkX25vaXNlX3JlandvcmRzAFBpdGNoIElRUi9HYXAgSVFSIHRocmVzaG9sZABQVFJBSU5fTlVNX0JBRF9DQVNFAGNvcnJlbF8ARGVjb21wcmVzc2lvbiBFcnJvcgBDYW1lcmFTZXJpYWxOdW1iZXIAb3V0bGluZXNfMgB0ZXh0b3JkX21pbnhoAFJlamVjdCBub2lzZS1saWtlIHdvcmRzAFBUUkFJTl9YSEVJR0hUX0NPTlNJU1RFTkNZAENvcnJlbGF0aW9uIHNjb3JlcyBhdCBsZXZlbHMgMSB0aHJvdWdoIDUARXh0cmEgY29tcHJlc3Npb24gZGF0YQBMZW5zSW5mbwB0ZXNzZWRpdF9nb29kX3F1YWxpdHlfdW5yZWoAZnJhY3Rpb24gb2YgbGluZXNpemUgZm9yIG1pbiB4aGVpZ2h0AHRleHRvcmRfbm9pc2VfcmVqcm93cwBQVFJBSU5fTlVNX0JBRF9DSEFSX1RZUEUAL3RtcC9sZXB0L2NvbXAvY29ycmVsLnBkZgBSb3cgaGFzIHRvbyBtYW55IGJ5dGVzIHRvIGFsbG9jYXRlIGluIG1lbW9yeQBDaHJvbWFCbHVyUmFkaXVzAFJlZHVjZSByZWplY3Rpb24gb24gZ29vZCBkb2NzAFJlamVjdCBub2lzZS1saWtlIHJvd3MAdGV4dG9yZF9tYXhfcGl0Y2hfaXFyAFBUUkFJTl9OVU1fQkFEX1NQQUNJTkcAYXJlYXMgbXVzdCBiZSA+IDAARGFtYWdlZCBjb21wcmVzc2VkIGRhdGFzdHJlYW0gaW4gY2h1bmsgb3RoZXIgdGhhbiBJREFUAEFudGlBbGlhc1N0cmVuZ3RoAHRlc3NlZGl0X3VzZV9yZWplY3Rfc3BhY2VzAHRleHRvcmRfbm9pc2Vfc3lmcmFjdABYaCBmcmFjdGlvbiBub2lzZSBpbiBwaXRjaABQVFJBSU5fTlVNX0JBRF9GT05UAC90bXAvbGVwdC9jb21wL2NvcnJlbF8lZC5wbmcAU2hhZG93U2NhbGUAUmVqZWN0IHNwYWNlcz8AdGV4dG9yZF9taW5fbGluZXNpemUAeGggZnJhY3QgaGVpZ2h0IGVycm9yIGZvciBub3JtIGJsb2JzAFBUUkFJTl9SQVRJTkdfUEVSX0NIQVIAL3RtcC9sZXB0L2NvbXAvcGxvdDEARE5HUHJpdmF0ZURhdGEAdGVzc2VkaXRfcmVqZWN0X2RvY19wZXJjZW50ACogYmxvYiBoZWlnaHQgZm9yIGluaXRpYWwgbGluZXNpemUAdGV4dG9yZF9ub2lzZV9zeGZyYWN0AHJlc2VydmVkXyA+PSBsZW4AL3RtcC9sZXB0L2NvbXAvcGxvdDEucG5nAE1ha2VyTm90ZVNhZmV0eQAlcmVqIGFsbG93ZWQgYmVmb3JlIHJlaiB3aG9sZSBkb2MAeGggZnJhY3Qgd2lkdGggZXJyb3IgZm9yIG5vcm0gYmxvYnMAdGV4dG9yZF9mcF9taW5fd2lkdGgAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L3JhdG5ncy5oACU1LjNmAENhbGlicmF0aW9uSWxsdW1pbmFudDEAdGVzc2VkaXRfcmVqZWN0X2Jsb2NrX3BlcmNlbnQAdGV4dG9yZF9ub2lzZV9oZnJhY3QATWluIHdpZHRoIG9mIGRlY2VudCBibG9icwAvdG1wL2xlcHQvY29tcC9jb21wYXJlZ3JheS5wZGYAQ2FsaWJyYXRpb25JbGx1bWluYW50MgAlcmVqIGFsbG93ZWQgYmVmb3JlIHJlaiB3aG9sZSBibG9jawB0ZXh0b3JkX2V4Y2Vzc19ibG9ic2l6ZQBIZWlnaHQgZnJhY3Rpb24gdG8gZGlzY2FyZCBvdXRsaW5lcyBhcyBzcGVja2xlIG5vaXNlAC90bXAvbGVwdC9jb21wL3RpbGVzY29yZXMubmEAUmF3RGF0YVVuaXF1ZUlEAHRlc3NlZGl0X3JlamVjdF9yb3dfcGVyY2VudABOZXcgcm93IG1hZGUgaWYgYmxvYiBtYWtlcyByb3cgdGhpcyBiaWcAdGV4dG9yZF9ub2lzZV9zbmNvdW50AGRlYnVnAE9yaWdpbmFsUmF3RmlsZU5hbWUAJXJlaiBhbGxvd2VkIGJlZm9yZSByZWogd2hvbGUgcm93AHN1cGVyIG5vcm0gYmxvYnMgdG8gc2F2ZSByb3cAZGlzcGxheQBPcmlnaW5hbFJhd0ZpbGVEYXRhAHRlc3NlZGl0X3dob2xlX3dkX3Jlal9yb3dfcGVyY2VudAB0ZXh0b3JkX25vaXNlX3Jvd3JhdGlvAEFjdGl2ZUFyZWEATnVtYmVyIG9mIHJvdyByZWplY3RzIGluIHdob2xlIHdvcmQgcmVqZWN0cyB3aGljaCBwcmV2ZW50cyB3aG9sZSByb3cgcmVqZWN0aW9uAHRleHRvcmRfb2NjdXBhbmN5X3RocmVzaG9sZAB0ZXh0b3JkX25vaXNlX2RlYnVnAE1hc2tlZEFyZWFzAHRlc3NlZGl0X3ByZXNlcnZlX2Jsa19yZWpfcGVyZmVjdF93ZHMARnJhY3Rpb24gb2YgbmVpZ2hib3VyaG9vZABEZWJ1ZyByb3cgZ2FyYmFnZSBkZXRlY3RvcgBBc1Nob3RJQ0NQcm9maWxlAE9ubHkgcmVqIHBhcnRpYWxseSByZWplY3RlZCB3b3JkcyBpbiBibG9jayByZWplY3Rpb24AdGV4dG9yZF9ibHNoaWZ0X21heHNoaWZ0AEFzU2hvdFByZVByb2ZpbGVNYXRyaXgAdGVzc2VkaXRfcHJlc2VydmVfcm93X3Jlal9wZXJmZWN0X3dkcwBNYXggYmFzZWxpbmUgc2hpZnQAQ3VycmVudElDQ1Byb2ZpbGUAT25seSByZWogcGFydGlhbGx5IHJlamVjdGVkIHdvcmRzIGluIHJvdyByZWplY3Rpb24AdGV4dG9yZF91bmRlcmxpbmVfd2lkdGgAdGV4dG9yZF9ibHNoaWZ0X3hmcmFjdGlvbgBDdXJyZW50UHJlUHJvZmlsZU1hdHJpeAB0ZXNzZWRpdF9kb250X2Jsa3Jlal9nb29kX3dkcwBNdWx0aXBsZSBvZiBsaW5lX3NpemUgZm9yIHVuZGVybGluZQBNaW4gc2l6ZSBvZiBiYXNlbGluZSBzaGlmdABFeHBvc3VyZVRpbWUAVXNlIHdvcmQgc2VnbWVudGF0aW9uIHF1YWxpdHkgbWV0cmljACF0b19ibG9ja3MtPmVtcHR5KCkARk51bWJlcgB0ZXNzZWRpdF9kb250X3Jvd3Jlal9nb29kX3dkcwBpbiBmaWxlICVzLCBsaW5lICVkAEV4cG9zdXJlUHJvZ3JhbQB0ZXNzZWRpdF9wcmVzZXJ2ZV9taW5fd2RfbGVuAHRleHRvcmRfbWluX2Jsb2JfaGVpZ2h0X2ZyYWN0aW9uAC93b3Jrc3BhY2UvdGVzc2VyYWN0L3NyYy90ZXh0b3JkL3RleHRvcmQuY3BwAFNwZWN0cmFsU2Vuc2l0aXZpdHkAT25seSBwcmVzZXJ2ZSB3ZHMgbG9uZ2VyIHRoYW4gdGhpcwBNaW4gYmxvYiBoZWlnaHQvdG9wIHRvIGluY2x1ZGUgYmxvYiB0b3AgaW50byB4aGVpZ2h0IHN0YXRzAGRlYnVnAElTT1NwZWVkUmF0aW5ncwB0ZXNzZWRpdF9yb3dfcmVqX2dvb2RfZG9jcwBkaXNwbGF5AE9wdG9lbGVjdHJpY0NvbnZlcnNpb25GYWN0b3IAQXBwbHkgcm93IHJlamVjdGlvbiB0byBnb29kIGRvY3MAQXNzZXJ0IGZhaWxlZABFeGlmVmVyc2lvbgB0ZXNzZWRpdF9nb29kX2RvY19zdGlsbF9yb3dyZWpfd2QAdGV4dG9yZF94aGVpZ2h0X21vZGVfZnJhY3Rpb24AYmxvY2stPnBkYmxrLnBvbHlfYmxvY2soKSAhPSBudWxscHRyAERhdGVUaW1lT3JpZ2luYWwAcmVqIGdvb2QgZG9jIHdkIGlmIG1vcmUgdGhhbiB0aGlzIGZyYWN0aW9uIHJlamVjdGVkAE1pbiBwaWxlIGhlaWdodCB0byBtYWtlIHhoZWlnaHQAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL2Njc3RydWN0L2Jsb2Jib3guaABEYXRlVGltZURpZ2l0aXplZAB0ZXNzZWRpdF9yZWplY3RfYmFkX3F1YWxfd2RzAENvbXBvbmVudHNDb25maWd1cmF0aW9uAFJlamVjdCBhbGwgYmFkIHF1YWxpdHkgd2RzAENvbXByZXNzZWRCaXRzUGVyUGl4ZWwAdGVzc2VkaXRfZGVidWdfZG9jX3JlamVjdGlvbgB0ZXh0b3JkX2FzY2hlaWdodF9tb2RlX2ZyYWN0aW9uAFNodXR0ZXJTcGVlZFZhbHVlAFBhZ2Ugc3RhdHMATWluIHBpbGUgaGVpZ2h0IHRvIG1ha2UgYXNjaGVpZ2h0AEFwZXJ0dXJlVmFsdWUAdGVzc2VkaXRfZGVidWdfcXVhbGl0eV9tZXRyaWNzAEJyaWdodG5lc3NWYWx1ZQBPdXRwdXQgZGF0YSB0byBkZWJ1ZyBmaWxlAEV4cG9zdXJlQmlhc1ZhbHVlAGJsYW5kX3VucmVqAHRleHRvcmRfZGVzY2hlaWdodF9tb2RlX2ZyYWN0aW9uAE1heEFwZXJ0dXJlVmFsdWUAdW5yZWogcG90ZW50aWFsIHdpdGggbm8gY2hlY2tzAE1pbiBwaWxlIGhlaWdodCB0byBtYWtlIGRlc2NoZWlnaHQAU3ViamVjdERpc3RhbmNlAHF1YWxpdHlfcm93cmVqX3BjAE1ldGVyaW5nTW9kZQB1bmx2X3RpbGRlX2NydW5jaGluZwBMaWdodFNvdXJjZQBNYXJrIHYuYmFkIHdvcmRzIGZvciB0aWxkZSBjcnVuY2gAdGV4dG9yZF9hc2N4X3JhdGlvX21pbgBGbGFzaABob2NyX2ZvbnRfaW5mbwBNaW4gY2FwL3hoZWlnaHQARm9jYWxMZW5ndGgAQWRkIGZvbnQgaW5mbyB0byBob2NyIG91dHB1dABTdWJqZWN0QXJlYQBob2NyX2NoYXJfYm94ZXMATWFrZXJOb3RlAEFkZCBjb29yZGluYXRlcyBmb3IgZWFjaCBjaGFyYWN0ZXIgdG8gaG9jciBvdXRwdXQAdGV4dG9yZF9hc2N4X3JhdGlvX21heABVc2VyQ29tbWVudABjcnVuY2hfZWFybHlfbWVyZ2VfdGVzc19mYWlscwBNYXggY2FwL3hoZWlnaHQAU3ViU2VjVGltZQBCZWZvcmUgd29yZCBjcnVuY2g/AFN1YlNlY1RpbWVPcmlnaW5hbABjcnVuY2hfZWFybHlfY29udmVydF9iYWRfdW5sdl9jaHMAU3ViU2VjVGltZURpZ2l0aXplZABUYWtlIG91dCB+XiBlYXJseT8AdGV4dG9yZF9kZXNjeF9yYXRpb19taW4ARmxhc2hwaXhWZXJzaW9uAGNydW5jaF90ZXJyaWJsZV9yYXRpbmcATWluIGRlc2MveGhlaWdodABDb2xvclNwYWNlAGNydW5jaCByYXRpbmcgbHQgdGhpcwBQaXhlbFhEaW1lbnNpb24AY3J1bmNoX3RlcnJpYmxlX2dhcmJhZ2UAUGl4ZWxZRGltZW5zaW9uAEFzIGl0IHNheXMAdGV4dG9yZF9kZXNjeF9yYXRpb19tYXgAUmVsYXRlZFNvdW5kRmlsZQBjcnVuY2hfcG9vcl9nYXJiYWdlX2NlcnQATWF4IGRlc2MveGhlaWdodABGbGFzaEVuZXJneQBjcnVuY2ggZ2FyYmFnZSBjZXJ0IGx0IHRoaXMAU3BhdGlhbEZyZXF1ZW5jeVJlc3BvbnNlAGNydW5jaF9wb29yX2dhcmJhZ2VfcmF0ZQBGb2NhbFBsYW5lWFJlc29sdXRpb24AY3J1bmNoIGdhcmJhZ2UgcmF0aW5nIGx0IHRoaXMAdGV4dG9yZF94aGVpZ2h0X2Vycm9yX21hcmdpbgBGb2NhbFBsYW5lWVJlc29sdXRpb24AY3J1bmNoX3BvdF9wb29yX3JhdGUAQWNjZXB0ZWQgdmFyaWF0aW9uAEZvY2FsUGxhbmVSZXNvbHV0aW9uVW5pdABQT1RFTlRJQUwgY3J1bmNoIHJhdGluZyBsdCB0aGlzAFN1YmplY3RMb2NhdGlvbgBjcnVuY2hfcG90X3Bvb3JfY2VydABFeHBvc3VyZUluZGV4AFBPVEVOVElBTCBjcnVuY2ggY2VydCBsdCB0aGlzAHRleHRvcmRfbG1zX2xpbmVfdHJpYWxzAFNlbnNpbmdNZXRob2QAY3J1bmNoX2RlbF9yYXRpbmcATnVtYmVyIG9mIGxpbmV3IGZpdHMgdG8gZG8ARmlsZVNvdXJjZQBjcnVuY2hfZGVsX2NlcnQAU2NlbmVUeXBlAGNydW5jaF9kZWxfbWluX2h0AENGQVBhdHRlcm4ARGVsIGlmIHdvcmQgaHQgbHQgeGh0IHggdGhpcwB0ZXh0b3JkX25ld19pbml0aWFsX3hoZWlnaHQAQ3VzdG9tUmVuZGVyZWQAY3J1bmNoX2RlbF9tYXhfaHQAVXNlIHRlc3QgeGhlaWdodCBtZWNoYW5pc20ARXhwb3N1cmVNb2RlAERlbCBpZiB3b3JkIGh0IGd0IHhodCB4IHRoaXMAV2hpdGVCYWxhbmNlAGNydW5jaF9kZWxfbWluX3dpZHRoAERpZ2l0YWxab29tUmF0aW8ARGVsIGlmIHdvcmQgd2lkdGggbHQgeGh0IHggdGhpcwB0ZXh0b3JkX2RlYnVnX2Jsb2IARm9jYWxMZW5ndGhJbjM1bW1GaWxtAGNydW5jaF9kZWxfaGlnaF93b3JkAFByaW50IHRlc3QgYmxvYiBpbmZvcm1hdGlvbgBTY2VuZUNhcHR1cmVUeXBlAERlbCBpZiB3b3JkIGd0IHhodCB4IHRoaXMgYWJvdmUgYmwAR2FpbkNvbnRyb2wAY3J1bmNoX2RlbF9sb3dfd29yZABSb3cgYXQgJWcoJWcpLCBkcm9wb3V0IGRpc3Q9JWQsAENvbnRyYXN0AERlbCBpZiB3b3JkIGd0IHhodCB4IHRoaXMgYmVsb3cgYmwAIHRvbyBmYXIgLSBkZWxldGluZwoAU2F0dXJhdGlvbgBjcnVuY2hfc21hbGxfb3V0bGluZXNfc2l6ZQAgbmVhcmVyIG5laWdoYm91ciAoJWQpIGF0ICVnCgBTaGFycG5lc3MAU21hbGwgaWYgbHQgeGh0IHggdGhpcwAgZXF1YWwgYnV0IG1vcmUgYmVsaWV2YWJsZSBhdCAlZyAoJWcvJWcpCgBEZXZpY2VTZXR0aW5nRGVzY3JpcHRpb24AY3J1bmNoX3JhdGluZ19tYXgAIGtlZXBpbmcKAFN1YmplY3REaXN0YW5jZVJhbmdlAEZvciBhZGogbGVuZ3RoIGluIHJhdGluZyBwZXIgY2gAaW5kZXggPj0gMCAmJiBpbmRleCA8IGxpbmVfY291bnQASW1hZ2VVbmlxdWVJRABjcnVuY2hfcG90X2luZGljYXRvcnMAaW4gZmlsZSAlcywgbGluZSAlZABIb3cgbWFueSBwb3RlbnRpYWwgaW5kaWNhdG9ycyBuZWVkZWQAL3dvcmtzcGFjZS90ZXNzZXJhY3Qvc3JjL3RleHRvcmQvbWFrZXJvdy5jcHAAY3J1bmNoX2xlYXZlX29rX3N0cmluZ3MARXhwYW5kaW5nIGJvdHRvbSBvZiByb3cgYXQgJWYgZnJvbSAlZiB0byAlZgoARG9uJ3QgdG91Y2ggc2Vuc2libGUgc3RyaW5ncwBFYXRpbmcgcm93IGJlbG93IGF0ICVmCgBjcnVuY2hfYWNjZXB0X29rAFRydW5jYXRpbmcgbGltaXQgdG8gJWYgZHVlIHRvIHRvdWNoaW5nIHJvdyBhdCAlZgoAVXNlIGFjY2VwdGFiaWxpdHkgaW4gb2tzdHJpbmcATm90IGV4cGFuZGluZyBsaW1pdCBiZXlvbmQgJWYgZHVlIHRvIHRvdWNoaW5nIHJvdyBhdCAlZgoAY3J1bmNoX2xlYXZlX2FjY2VwdF9zdHJpbmdzAEV4cGFuZGluZyB0b3Agb2Ygcm93IGF0ICVmIGZyb20gJWYgdG8gJWYKAERvbid0IHBvdCBjcnVuY2ggc2Vuc2libGUgc3RyaW5ncwBFYXRpbmcgcm93IGFib3ZlIGF0ICVmCgBjcnVuY2hfaW5jbHVkZV9udW1lcmFscwBBZGp1c3Rpbmcgcm93IGxpbWl0cyBmb3IgYmxvY2soJWQsJWQpCgBGaWRkbGUgYWxwaGEgZmlndXJlcwBSb3cgYXQgJWYgaGFzIG1pbiAlZiwgbWF4ICVmLCBzaXplICVmCgBjcnVuY2hfbGVhdmVfbGNfc3RyaW5ncwBSb3cgYXQgJWcgeWllbGRzIHNwYWNpbmcgb2YgJWcKAERvbid0IGNydW5jaCB3b3JkcyB3aXRoIGxvbmcgbG93ZXIgY2FzZSBzdHJpbmdzAEJsb2IgYmFzZWQgc3BhY2luZz0oJWcsJWcpLCBvZmZzZXQ9JWcAY3J1bmNoX2xlYXZlX3VjX3N0cmluZ3MAIHJvdyBiYXNlZD0lZyglZykAY3J1bmNoX2xvbmdfcmVwZXRpdGlvbnMACkVzdGltYXRlIGxpbmUgc2l6ZT0lZywgc3BhY2luZz0lZywgb2Zmc2V0PSVnCgBDcnVuY2ggd29yZHMgd2l0aCBsb25nIHJlcGV0aXRpb25zAEJsb2NrIGF2ZXJhZ2UgeGhlaWdodD0lLjRmLCBhc2NyaXNlPSUuNGYsIGRlc2Nkcm9wPSUuNGYKAGNydW5jaF9kZWJ1ZwBTa2lwcGluZyByZXBlYXRlZCBjaGFyIHdoZW4gY29tcHV0aW5nIHhoZWlnaHQKAGZpeHNwX25vbl9ub2lzZV9saW1pdABtaW5faGVpZ2h0PSVkLCBtYXhfaGVpZ2h0PSVkLCBtb2RlPSVkLCBjb3VudD0lZCwgdG90YWw9JWQKAEhvdyBtYW55IG5vbi1ub2lzZSBibGJzIGVpdGhlciBzaWRlPwBmb3VuZCAlZCBtb2RlczogAGZpeHNwX3NtYWxsX291dGxpbmVzX3NpemUAJWQgAHRlc3NlZGl0X3ByZWZlcl9qb2luZWRfcHVuY3QACgBSZXdhcmQgcHVuY3R1YXRpb24gam9pbnMAWD0lZCwgYXNjPSVkLCBjb3VudD0lZCwgcmF0aW89JWcKAGZpeHNwX2RvbmVfbW9kZQBTaW5nbGUgbW9kZSB4aGVpZ2h0IHNldCB0byAlZwoAV2hhdCBjb25zdGl0dWVzIGRvbmUgZm9yIHNwYWNpbmcATXVsdGktbW9kZSB4aGVpZ2h0IHNldCB0byAlZywgYXNjPSVnCgBkZWJ1Z19maXhfc3BhY2VfbGV2ZWwARGVzY2Ryb3A6ICVkIChwb3RlbnRpYWwgYXNjZW5kZXJzICVkLCBkZXNjZW5kZXJzICVkKQoAQ29udGV4dHVhbCBmaXhzcGFjZSBkZWJ1ZwBjb3JyZWN0aW5nIHJvdyB4aGVpZ2h0OiByb3ctPnhoZWlnaHQgJS40Ziwgcm93LT5hY3Jpc2UgJS40ZiByb3ctPmRlc2Nkcm9wICUuNGYKAC4sAHVzaW5nIGF2ZXJhZ2UgeGhlaWdodAoAbnVtZXJpY19wdW5jdHVhdGlvbgBsb3dlcmNhc2UsIGNvcnJlY3RlZCBhc2NyaXNlCgBQdW5jdC4gY2hzIGV4cGVjdGVkIFdJVEhJTiBudW1iZXJzAGFsbCBjYXBzCgB4X2h0X2FjY2VwdGFuY2VfdG9sZXJhbmNlAHNtYWxsIGNhcHMKAE1heCBhbGxvd2VkIGRldmlhdGlvbiBvZiBibG9iIHRvcCBvdXRzaWRlIG9mIGZvbnQgZGF0YQBhbGwgY2FwcyB3aXRoIGlycmVndWxhciB4aGVpZ2h0CgB4X2h0X21pbl9jaGFuZ2UAY29ycmVjdGVkIHJvdy0+eGhlaWdodCA9ICUuNGYsIHJvdy0+YWNyaXNlID0gJS40Ziwgcm93LT5kZXNjZHJvcCA9ICUuNGYKAE1pbiBjaGFuZ2UgaW4geGh0IGJlZm9yZSBhY3R1YWxseSB0cnlpbmcgaXQAYmxvYi0+Y2Jsb2IoKSAhPSBudWxscHRyAHN1cGVyc2NyaXB0X2RlYnVnAFVuZGVybGluZWQgYmxvYiBhdDoARGVidWcgbGV2ZWwgZm9yIHN1YiAmIHN1cGVyc2NyaXB0IGZpeGVyAFdhczoAc3VwZXJzY3JpcHRfd29yc2VfY2VydGFpbnR5AExhcmdlIGJsb2Igb3ZlcmxhcHMgJWQgYmxvYnMgYXQ6AEhvdyBtYW55IHRpbWVzIHdvcnNlIGNlcnRhaW50eSBkb2VzIGEgc3VwZXJzY3JpcHQgcG9zaXRpb24gZ2x5cGggbmVlZCB0byBiZSBmb3IgdXMgdG8gdHJ5IGNsYXNzaWZ5aW5nIGl0IGFzIGEgY2hhciB3aXRoIGEgZGlmZmVyZW50IGJhc2VsaW5lPwBTZWdtZW50aW5nIGJhc2VsaW5lIG9mICVkIGJsb2JzIGF0ICglZCwlZCkKAHN1cGVyc2NyaXB0X2JldHRlcmVkX2NlcnRhaW50eQBNYWRlICVkIHNlZ21lbnRzIG9uIHJvdyBhdCAoJWQsJWQpCgBXaGF0IHJlZHVjdGlvbiBpbiBiYWRuZXNzIGRvIHdlIHRoaW5rIHN1ZmZpY2llbnQgdG8gY2hvb3NlIGEgc3VwZXJzY3JpcHQgb3ZlciB3aGF0IHdlJ2QgdGhvdWdodC4gIEZvciBleGFtcGxlLCBhIHZhbHVlIG9mIDAuNiBtZWFucyB3ZSB3YW50IHRvIHJlZHVjZSBiYWRuZXNzIG9mIGNlcnRhaW50eSBieSBhdCBsZWFzdCA0MCUATGluZWFyIHNwbGluaW5nIGJhc2VsaW5lIG9mICVkIGJsb2JzIGF0ICglZCwlZCksIGludG8gJWQgc2VnbWVudHMgb2YgJWQgYmxvYnMKAHN1cGVyc2NyaXB0X3NjYWxlZG93bl9yYXRpbwBUZXN0IGJsb2IgYXNzaWduZWQgdG8gcm93IGF0ICglZywlZykgb24gcGFzcyAlZAoAQSBzdXBlcnNjcmlwdCBzY2FsZWQgZG93biBtb3JlIHRoYW4gdGhpcyBpcyB1bmJlbGlldmFibHkgc21hbGwuICBGb3IgZXhhbXBsZSwgMC4zIG1lYW5zIHdlIGV4cGVjdCB0aGUgZm9udCBzaXplIHRvIGJlIG5vIHNtYWxsZXIgdGhhbiAzMCUgb2YgdGhlIHRleHQgbGluZSBmb250IHNpemUuAFRlc3QgYmxvYiBhc3NpZ25lZCB0byBubyByb3cgb24gcGFzcyAlZAoAc3Vic2NyaXB0X21heF95X3RvcABUZXN0IGJsb2IgeT0oJWcsJWcpLCByb3c9KCVmLCVmKSwgc2l6ZT0lZywgb3ZlcmxhcD0lZgoATWF4aW11bSB0b3Agb2YgYSBjaGFyYWN0ZXIgbWVhc3VyZWQgYXMgYSBtdWx0aXBsZSBvZiB4LWhlaWdodCBhYm92ZSB0aGUgYmFzZWxpbmUgZm9yIHVzIHRvIHJlY29uc2lkZXIgd2hldGhlciBpdCdzIGEgc3Vic2NyaXB0LgBNZXJnaW5nIHJvd3MgYXQgKCVnLCVnKSwgKCVnLCVnKQoAc3VwZXJzY3JpcHRfbWluX3lfYm90dG9tAFRlc3QgYmxvYiB5PSglZywlZyksIHJvdz0oJWYsJWYpLCBzaXplPSVnLCBvdmVybGFwPSVmLT4lZgoATWluaW11bSBib3R0b20gb2YgYSBjaGFyYWN0ZXIgbWVhc3VyZWQgYXMgYSBtdWx0aXBsZSBvZiB4LWhlaWdodCBhYm92ZSB0aGUgYmFzZWxpbmUgZm9yIHVzIHRvIHJlY29uc2lkZXIgd2hldGhlciBpdCdzIGEgc3VwZXJzY3JpcHQuAGRlYnVnAHRlc3NlZGl0X3dyaXRlX2Jsb2NrX3NlcGFyYXRvcnMAZGlzcGxheQBXcml0ZSBibG9jayBzZXBhcmF0b3JzIGluIG91dHB1dABBc3NlcnQgZmFpbGVkAHRlc3NlZGl0X3dyaXRlX3JlcF9jb2RlcwBCb3VuZGluZyBib3g9KCVkLCVkKS0+KCVkLCVkKQoAV3JpdGUgcmVwZXRpdGlvbiBjaGFyIGNvZGUAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQB0ZXNzZWRpdF93cml0ZV91bmx2AFdyaXRlIC51bmx2IG91dHB1dCBmaWxlAHRlc3NlZGl0X2NyZWF0ZV90eHQAV3JpdGUgLnR4dCBvdXRwdXQgZmlsZQB0ZXNzZWRpdF9jcmVhdGVfaG9jcgBXcml0ZSAuaHRtbCBoT0NSIG91dHB1dCBmaWxlAHRlc3NlZGl0X2NyZWF0ZV9hbHRvAFdyaXRlIC54bWwgQUxUTyBmaWxlAHRlc3NlZGl0X2NyZWF0ZV9sc3RtYm94AFdyaXRlIC5ib3ggZmlsZSBmb3IgTFNUTSB0cmFpbmluZwB0ZXNzZWRpdF9jcmVhdGVfdHN2AFdyaXRlIC50c3Ygb3V0cHV0IGZpbGUAdGVzc2VkaXRfY3JlYXRlX3dvcmRzdHJib3gAV3JpdGUgV29yZFN0ciBmb3JtYXQgLmJveCBvdXRwdXQgZmlsZQB0ZXNzZWRpdF9jcmVhdGVfcGRmAFdyaXRlIC5wZGYgb3V0cHV0IGZpbGUAdGV4dG9ubHlfcGRmAENyZWF0ZSBQREYgd2l0aCBvbmx5IG9uZSBpbnZpc2libGUgdGV4dCBsYXllcgBqcGdfcXVhbGl0eQBTZXQgSlBFRyBxdWFsaXR5IGxldmVsAHVzZXJfZGVmaW5lZF9kcGkAU3BlY2lmeSBEUEkgZm9yIGlucHV0IGltYWdlAG1pbl9jaGFyYWN0ZXJzX3RvX3RyeQBTcGVjaWZ5IG1pbmltdW0gY2hhcmFjdGVycyB0byB0cnkgZHVyaW5nIE9TRAB8AHVucmVjb2duaXNlZF9jaGFyAE91dHB1dCBjaGFyIGZvciB1bmlkZW50aWZpZWQgYmxvYnMAc3VzcGVjdF9sZXZlbABTdXNwZWN0IG1hcmtlciBsZXZlbABzdXNwZWN0X3Nob3J0X3dvcmRzAERvbid0IHN1c3BlY3QgZGljdCB3ZHMgbG9uZ2VyIHRoYW4gdGhpcwBzdXNwZWN0X2NvbnN0cmFpbl8xSWwAVU5MViBrZWVwIDFJbCBjaGFycyByZWplY3RlZABzdXNwZWN0X3JhdGluZ19wZXJfY2gARG9uJ3QgdG91Y2ggYmFkIHJhdGluZyBsaW1pdABzdXNwZWN0X2FjY2VwdF9yYXRpbmcAQWNjZXB0IGdvb2QgcmF0aW5nIGxpbWl0AHRlc3NlZGl0X21pbmltYWxfcmVqZWN0aW9uAE9ubHkgcmVqZWN0IHRlc3MgZmFpbHVyZXMAdGVzc2VkaXRfemVyb19yZWplY3Rpb24ARG9uJ3QgcmVqZWN0IEFOWVRISU5HAHRlc3NlZGl0X3dvcmRfZm9yX3dvcmQATWFrZSBvdXRwdXQgaGF2ZSBleGFjdGx5IG9uZSB3b3JkIHBlciBXRVJEAHRlc3NlZGl0X3plcm9fa2VsdmluX3JlamVjdGlvbgBEb24ndCByZWplY3QgQU5ZVEhJTkcgQVQgQUxMAHRlc3NlZGl0X3JlamVjdF9tb2RlAFJlamVjdGlvbiBhbGdvcml0aG0AdGVzc2VkaXRfcmVqZWN0aW9uX2RlYnVnAEFkYXB0aW9uIGRlYnVnAHRlc3NlZGl0X2ZsaXBfME8AQ29udGV4dHVhbCAwTyBPMCBmbGlwcwB0ZXNzZWRpdF9sb3dlcl9mbGlwX2h5cGhlbgBBc3BlY3QgcmF0aW8gZG90L2h5cGhlbiB0ZXN0AHRlc3NlZGl0X3VwcGVyX2ZsaXBfaHlwaGVuAHJlal90cnVzdF9kb2NfZGF3ZwBVc2UgRE9DIGRhd2cgaW4gMTFsIGNvbmYuIGRldGVjdG9yAHJlal8xSWxfdXNlX2RpY3Rfd29yZABVc2UgZGljdHdvcmQgdGVzdAByZWpfMUlsX3RydXN0X3Blcm11dGVyX3R5cGUARG9uJ3QgZG91YmxlIGNoZWNrAHJlal91c2VfdGVzc19hY2NlcHRlZABJbmRpdmlkdWFsIHJlamVjdGlvbiBjb250cm9sAHJlal91c2VfdGVzc19ibGFua3MAcmVqX3VzZV9nb29kX3Blcm0AcmVqX3VzZV9zZW5zaWJsZV93ZABFeHRlbmQgcGVybXV0ZXIgY2hlY2sAcmVqX2FscGhhc19pbl9udW1iZXJfcGVybQByZWpfd2hvbGVfb2ZfbW9zdGx5X3JlamVjdF93b3JkX2ZyYWN0AGlmID50aGlzIGZyYWN0AHRlc3NlZGl0X2ltYWdlX2JvcmRlcgBSZWogYmxicyBuZWFyIGltYWdlIGVkZ2UgbGltaXQALT8qPQBva19yZXBlYXRlZF9jaF9ub25fYWxwaGFudW1fd2RzAEFsbG93IE5OIHRvIHVucmVqAElsMVtdAGNvbmZsaWN0X3NldF9JX2xfMQBJbDEgY29uZmxpY3Qgc2V0AG1pbl9zYW5lX3hfaHRfcGl4ZWxzAFJlamVjdCBhbnkgeC1odCBsdCBvciBlcSB0aGFuIHRoaXMAdGVzc2VkaXRfY3JlYXRlX2JveGZpbGUAT3V0cHV0IHRleHQgd2l0aCBib3hlcwB0ZXNzZWRpdF9wYWdlX251bWJlcgAtMSAtPiBBbGwgcGFnZXMsIGVsc2Ugc3BlY2lmaWMgcGFnZSB0byBwcm9jZXNzAHRlc3NlZGl0X3dyaXRlX2ltYWdlcwBDYXB0dXJlIHRoZSBpbWFnZSBmcm9tIHRoZSBJUEUAaW50ZXJhY3RpdmVfZGlzcGxheV9tb2RlAFJ1biBpbnRlcmFjdGl2ZWx5PwAudGlmAGZpbGVfdHlwZQBGaWxlbmFtZSBleHRlbnNpb24AdGVzc2VkaXRfb3ZlcnJpZGVfcGVybXV0ZXIAQWNjb3JkaW5nIHRvIGRpY3Rfd29yZAB0ZXNzZWRpdF9sb2FkX3N1YmxhbmdzAExpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGxvYWQgd2l0aCB0aGlzIG9uZQB0ZXNzZWRpdF91c2VfcHJpbWFyeV9wYXJhbXNfbW9kZWwASW4gbXVsdGlsaW5ndWFsIG1vZGUgdXNlIHBhcmFtcyBtb2RlbCBvZiB0aGUgcHJpbWFyeSBsYW5ndWFnZQBtaW5fb3JpZW50YXRpb25fbWFyZ2luAE1pbiBhY2NlcHRhYmxlIG9yaWVudGF0aW9uIG1hcmdpbgB0ZXh0b3JkX3RhYmZpbmRfc2hvd192bGluZXMARGVidWcgbGluZSBmaW5kaW5nAHRleHRvcmRfdXNlX2Nqa19mcF9tb2RlbABVc2UgQ0pLIGZpeGVkIHBpdGNoIG1vZGVsAHBvbHlfYWxsb3dfZGV0YWlsZWRfZngAQWxsb3cgZmVhdHVyZSBleHRyYWN0b3JzIHRvIHNlZSB0aGUgb3JpZ2luYWwgb3V0bGluZQB0ZXNzZWRpdF9pbml0X2NvbmZpZ19vbmx5AE9ubHkgaW5pdGlhbGl6ZSB3aXRoIHRoZSBjb25maWcgZmlsZS4gVXNlZnVsIGlmIHRoZSBpbnN0YW5jZSBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3IgT0NSIGJ1dCBzYXkgb25seSBmb3IgbGF5b3V0IGFuYWx5c2lzLgB0ZXh0b3JkX2VxdWF0aW9uX2RldGVjdABUdXJuIG9uIGVxdWF0aW9uIGRldGVjdG9yAHRleHRvcmRfdGFiZmluZF92ZXJ0aWNhbF90ZXh0AEVuYWJsZSB2ZXJ0aWNhbCBkZXRlY3Rpb24AdGV4dG9yZF90YWJmaW5kX2ZvcmNlX3ZlcnRpY2FsX3RleHQARm9yY2UgdXNpbmcgdmVydGljYWwgdGV4dCBwYWdlIG1vZGUAdGV4dG9yZF90YWJmaW5kX3ZlcnRpY2FsX3RleHRfcmF0aW8ARnJhY3Rpb24gb2YgdGV4dGxpbmVzIGRlZW1lZCB2ZXJ0aWNhbCB0byB1c2UgdmVydGljYWwgcGFnZSBtb2RlAHRleHRvcmRfdGFiZmluZF9hbGlnbmVkX2dhcF9mcmFjdGlvbgBGcmFjdGlvbiBvZiBoZWlnaHQgdXNlZCBhcyBhIG1pbmltdW0gZ2FwIGZvciBhbGlnbmVkIGJsb2JzLgB0ZXNzZWRpdF9wYXJhbGxlbGl6ZQBSdW4gaW4gcGFyYWxsZWwgd2hlcmUgcG9zc2libGUAcHJlc2VydmVfaW50ZXJ3b3JkX3NwYWNlcwBQcmVzZXJ2ZSBtdWx0aXBsZSBpbnRlcndvcmQgc3BhY2VzAAwAcGFnZV9zZXBhcmF0b3IAUGFnZSBzZXBhcmF0b3IgKGRlZmF1bHQgaXMgZm9ybSBmZWVkIGNvbnRyb2wgY2hhcmFjdGVyKQBsc3RtX2Nob2ljZV9tb2RlAEFsbG93cyB0byBpbmNsdWRlIGFsdGVybmF0aXZlIHN5bWJvbHMgY2hvaWNlcyBpbiB0aGUgaE9DUiBvdXRwdXQuIFZhbGlkIGlucHV0IHZhbHVlcyBhcmUgMCwgMSwgMiBhbmQgMy4gMCBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4gV2l0aCAxIHRoZSBhbHRlcm5hdGl2ZSBzeW1ib2wgY2hvaWNlcyBwZXIgdGltZXN0ZXAgYXJlIGluY2x1ZGVkLiBXaXRoIDIgdGhlIGFsdGVybmF0aXZlIHN5bWJvbCBjaG9pY2VzIGFyZSBhY2N1bXVsYXRlZCBwZXIgY2hhcmFjdGVyLiAAcGFnZXNlZ19hcHBseV9tdXNpY19tYXNrAERldGVjdCBtdXNpYyBzdGFmZiBhbmQgcmVtb3ZlIGludGVyc2VjdGluZyBjb21wb25lbnRzAF9kZWJ1Zy5wZGYAc3BsaXR0ZXJfLnNwbGl0dGVkX2ltYWdlKCkAaW4gZmlsZSAlcywgbGluZSAlZAAvd29ya3NwYWNlL3Rlc3NlcmFjdC9zcmMvY2NtYWluL3Rlc3NlcmFjdGNsYXNzLmNwcABzcGxpdHRlcl8ub3JpZ19waXgoKQBOOXRlc3NlcmFjdDlUZXNzZXJhY3RFAEFsbERlYnVnSW1hZ2VzAEFzc2VydCBmYWlsZWQATjl0ZXNzZXJhY3QxNkltYWdlVGhyZXNob2xkZXJFAGNvcnIAY2wAY2hvcABjbC9MTQBwZ2x0AHNzX2hldXIAc3NfcHAAY2wvb2xkX0xNAGFkYXB0AG5vX3RyX3NwbABub190cgB1bmtuAE5TdDNfXzIxOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAAAAAAAAANA/AAAAAAAA4D8AAAAAAADQP1VVVVVVVeU/Tjl0ZXNzZXJhY3Q4Q0NTdHJ1Y3RFADMxX1Rlc3NGdW5jdGlvblJlc3VsdENhbGxiYWNrXzBfMUlMYjBFdk45dGVzc2VyYWN0OEZvbnRJbmZvRUUAMzFfVGVzc0Z1bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8xSUxiMEV2Tjl0ZXNzZXJhY3Q4Rm9udEluZm9FRQAxM1Rlc3NDYWxsYmFjazFJTjl0ZXNzZXJhY3Q4Rm9udEluZm9FRQAxM1Rlc3NDYWxsYmFjazFJTjl0ZXNzZXJhY3Q4Rm9udEluZm9FRQA2TUFUUklYADEzQmFuZFRyaU1hdHJpeElQMTZCTE9CX0NIT0lDRV9MSVNURQAxM0JhbmRUcmlNYXRyaXhJUDE2QkxPQl9DSE9JQ0VfTElTVEUAMTNCYW5kVHJpTWF0cml4SVAxNkJMT0JfQ0hPSUNFX0xJU1RFADEzQmFuZFRyaU1hdHJpeElQMTZCTE9CX0NIT0lDRV9MSVNURQAxNkdFTkVSSUNfMkRfQVJSQVlJUDE2QkxPQl9DSE9JQ0VfTElTVEUAMTZHRU5FUklDXzJEX0FSUkFZSVAxNkJMT0JfQ0hPSUNFX0xJU1RFADE2R0VORVJJQ18yRF9BUlJBWUlQMTZCTE9CX0NIT0lDRV9MSVNURQAxNkdFTkVSSUNfMkRfQVJSQVlJUDE2QkxPQl9DSE9JQ0VfTElTVEUAAAAAAOgDAADmAzEA4wNiAN0DkgDUA8MAygPyALwDIgGtA1ABmwN+AYcDqwFxA9cBWQMCAj8DKwIjA1MCBQN6AuQCnwLDAsMCnwLkAnoCBQNTAiMDKwI/AwICWQPXAXEDqwGHA34BmwNQAa0DIgG8A/IAygPDANQDkgDdA2IA4wMxAOYDAADoA8//5gOe/+MDbv/dAz3/1AMO/8oD3v68A7D+rQOC/psDVf6HAyn+cQP+/VkD1f0/A639IwOG/QUDYf3kAj39wwIc/Z8C+/x6At38UwLB/CsCp/wCAo/81wF5/KsBZfx+AVP8UAFE/CIBNvzyACz8wwAj/JIAHfxiABr8MQAY/AAAGvzP/x38nv8j/G7/LPw9/zb8Dv9E/N7+U/yw/mX8gv55/FX+j/wp/qf8/v3B/NX93fyt/fv8hv0c/WH9Pf09/WH9HP2G/fv8rf3d/NX9wfz+/af8Kf6P/FX+efyC/mX8sP5T/N7+RPwO/zb8Pf8s/G7/I/ye/x38z/8a/AAAGPwxABr8YgAd/JIAI/zDACz88gA2/CIBRPxQAVP8fgFl/KsBefzXAY/8AgKn/CsCwfxTAt38egL7/J8CHP3DAj395AJh/QUDhv0jA639PwPV/VkD/v1xAyn+hwNV/psDgv6tA7D+vAPe/soDDv/UAz3/3QNu/+MDnv/mA8//MTZHRU5FUklDXzJEX0FSUkFZSWlFADE2R0VORVJJQ18yRF9BUlJBWUlpRQAyOV9UZXNzTWVtYmVyUmVzdWx0Q2FsbGJhY2tfMF8ySUxiMEVpOFdFUkRfUkVTaWlFADE5VGVzc1Jlc3VsdENhbGxiYWNrMklpaWlFADI5X1Rlc3NNZW1iZXJSZXN1bHRDYWxsYmFja18wXzJJTGIwRWI4V0VSRF9SRVNSSzRUQk9YUzNfRQAxOVRlc3NSZXN1bHRDYWxsYmFjazJJYlJLNFRCT1hTMl9FAAAAAFDDR05vbmUAUHVuY3R1YXRpb24AVG9wIENob2ljZQBUb3AgTG93ZXIgQ2FzZQBUb3AgVXBwZXIgQ2FzZQBOZ3JhbQBOdW1iZXIAVXNlciBQYXR0ZXJuAFN5c3RlbSBEaWN0aW9uYXJ5AEHgrxALE0RvY3VtZW50IERpY3Rpb25hcnkAQYCwEAsyVXNlciBEaWN0aW9uYXJ5AEZyZXF1ZW50IFdvcmRzIERpY3Rpb25hcnkAQ29tcG91bmQAQcCwEAviC0lsbGVnYWwgYW1iaWd1aXR5IHNwZWNpZmljYXRpb24gb24gbGluZSAlZAoACSAAAElsbGVnYWwgdW5pY2hhciAlcyBpbiBhbWJpZ3VpdHkgc3BlY2lmaWNhdGlvbgoAAAAAAAABAAAAAQAAAAIAAAABAAAAAgAAAAIAAAADAAAAAQAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAABAAAAAgAAAAIAAAADAAAAAgAAAAMAAAADAAAABAAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAQAAAAFAAAAAQAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAACAAAAAwAAAAMAAAAEAAAAAwAAAAQAAAAEAAAABQAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAQAAAAFAAAAAwAAAAQAAAAEAAAABQAAAAQAAAAFAAAABQAAAAYAAAABAAAAAgAAAAIAAAADAAAAAgAAAAMAAAADAAAABAAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAQAAAAFAAAAAgAAAAMAAAADAAAABAAAAAMAAAAEAAAABAAAAAUAAAADAAAABAAAAAQAAAAFAAAABAAAAAUAAAAFAAAABgAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAQAAAAFAAAAAwAAAAQAAAAEAAAABQAAAAQAAAAFAAAABQAAAAYAAAADAAAABAAAAAQAAAAFAAAABAAAAAUAAAAFAAAABgAAAAQAAAAFAAAABQAAAAYAAAAFAAAABgAAAAYAAAAHAAAAAQAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAACAAAAAwAAAAMAAAAEAAAAAwAAAAQAAAAEAAAABQAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAQAAAAFAAAAAwAAAAQAAAAEAAAABQAAAAQAAAAFAAAABQAAAAYAAAACAAAAAwAAAAMAAAAEAAAAAwAAAAQAAAAEAAAABQAAAAMAAAAEAAAABAAAAAUAAAAEAAAABQAAAAUAAAAGAAAAAwAAAAQAAAAEAAAABQAAAAQAAAAFAAAABQAAAAYAAAAEAAAABQAAAAUAAAAGAAAABQAAAAYAAAAGAAAABwAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAQAAAAFAAAAAwAAAAQAAAAEAAAABQAAAAQAAAAFAAAABQAAAAYAAAADAAAABAAAAAQAAAAFAAAABAAAAAUAAAAFAAAABgAAAAQAAAAFAAAABQAAAAYAAAAFAAAABgAAAAYAAAAHAAAAAwAAAAQAAAAEAAAABQAAAAQAAAAFAAAABQAAAAYAAAAEAAAABQAAAAUAAAAGAAAABQAAAAYAAAAGAAAABwAAAAQAAAAFAAAABQAAAAYAAAAFAAAABgAAAAYAAAAHAAAABQAAAAYAAAAGAAAABwAAAAYAAAAHAAAABwAAAAgAAABOOXRlc3NlcmFjdDZDQ1V0aWxFAE5TdDNfXzIxOWJhc2ljX29zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQBOU3QzX18yMTliYXNpY19vc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAY29uZmlnAGNvbmZpZwB1bmljaGFyc2V0AHVuaWNoYXJzZXQAdW5pY2hhcmFtYmlncwB1bmljaGFyYW1iaWdzAGludHRlbXAAaW50dGVtcABwZmZtdGFibGUAcGZmbXRhYmxlAG5vcm1wcm90bwBub3JtcHJvdG8AcHVuYy1kYXdnAHB1bmMtZGF3ZwB3b3JkLWRhd2cAd29yZC1kYXdnAG51bWJlci1kYXdnAG51bWJlci1kYXdnAGZyZXEtZGF3ZwBmcmVxLWRhd2cAAAAAAGZpeGVkLWxlbmd0aC1kYXdncwBBsLwQCxJmaXhlZC1sZW5ndGgtZGF3Z3MAQdC8EAvlAWN1YmUtdW5pY2hhcnNldABjdWJlLXVuaWNoYXJzZXQAY3ViZS13b3JkLWRhd2cAY3ViZS13b3JkLWRhd2cAc2hhcGV0YWJsZQBzaGFwZXRhYmxlAGJpZ3JhbS1kYXdnAGJpZ3JhbS1kYXdnAHVuYW1iaWctZGF3ZwB1bmFtYmlnLWRhd2cAcGFyYW1zLW1vZGVsAHBhcmFtcy1tb2RlbABsc3RtAGxzdG0AbHN0bS1wdW5jLWRhd2cAbHN0bS1wdW5jLWRhd2cAbHN0bS13b3JkLWRhd2cAbHN0bS13b3JkLWRhd2cAQcC+EAsQbHN0bS1udW1iZXItZGF3ZwBB4L4QCxBsc3RtLW51bWJlci1kYXdnAEGAvxALSWxzdG0tdW5pY2hhcnNldABsc3RtLXVuaWNoYXJzZXQAbHN0bS1yZWNvZGVyAGxzdG0tcmVjb2RlcgB2ZXJzaW9uAHZlcnNpb24AQdi/EAsMgDAAAIAgDgCAIMgDAEHwvxALgAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBsMEQCzgCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMEBAQEBAQEBABBgMIQC4cDX19JTlZBTElEX1VOSUNIQVJfXwBOU3QzX18yMTliYXNpY19pc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUATlN0M19fMjE5YmFzaWNfaXN0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIxOWJhc2ljX2lzdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQBOU3QzX18yMTliYXNpY19pc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAMTlUZXNzUmVzdWx0Q2FsbGJhY2sySVBjUzBfaUUAMjlfVGVzc01lbWJlclJlc3VsdENhbGxiYWNrXzBfMklMYjBFUGNOOXRlc3NlcmFjdDVURmlsZUVTMF9pRQBBkMUQC7S6CnYyCicnICIgMQpgJyAiIDEKJ2AgIiAxCuKAmCcgIiAxCifigJggIiAxCuKAmScgIiAxCifigJkgIiAxCmBgICIgMQpg4oCYICIgMQrigJhgICIgMQpg4oCZICIgMQrigJlgICIgMQrigJjigJgg4oCcIDEK4oCY4oCZICIgMQrigJnigJggIiAxCuKAmeKAmSDigJ0gMQosLCDigJ4gMQptIHJuIDAKcm4gbSAwCm0gaW4gMAppbiBtIDAKZCBjbCAwCmNsIGQgMApubiBybSAwCnJtIG5uIDAKbiByaSAwCnJpIG4gMApsaSBoIDAKbHIgaCAwCmlpIHUgMAppaSBuIDAKbmkgbSAwCmlpaSBtIDAKbGwgSCAwCkktSSBIIDAKdnYgdyAwClZWIFcgMAp0IGYgMApmIHQgMAphIG8gMApvIGEgMAplIGMgMApjIGUgMApyciBuIDAKRSBmaSAwCmw8IGsgMApsZCBraSAwCmx4IGggMAp4biBtIDAKdXggaW4gMApyIHQgMApkIHRsIDAKZGkgdGggMAp1ciBpbiAwCnVuIGltIDAKdSBhIDAKbyDDsyAwCsOzIG8gMAppIMOtIDAKw60gaSAwCmEgw6EgMArDoSBhIDAKZSDDqSAwCsOpIGUgMAp1IMO6IDAKw7ogdSAwCm4gw7EgMArDsSBuIDAKMCBvIDAKZCB0ciAwCm4gdHIgMArDsSBmaSAwCnUgdGkgMArDsSB0aSAwCmQgdGkgMApkIHTDrSAwCmQgcsOtIDAKYSDDoCAwCmUgw6ggMApuIGlqIDAKZyBpaiAwCm8gw7IgMApFIMOJIDAKRSDDiCAwCnUgw7wgMAp4bkUgYW4gMQptWXggbWUgMQpxdEUgbnQgMQpUbGIgbGUgMQp2eE4gdmEgMQpnalEgbmcgMQpqcEYgaWogMQpZcmwgbGUgMQphcVkgYW4gMQp6dkogdmEgMQpmYkwgYmUgMQpOdmsgdmEgMQpmSnAgcHIgMQp3eEMgd2EgMQpjdUogcXUgMQpRenQgdGEgMQpxS3cgd2EgMQpzY0ogc3QgMQpwWHAgcG8gMQpWcWkgdGkgMQpVeGsga2EgMQprSnYga2EgMQpZa2Qga2EgMQp2cFggdmEgMQppQnYgdGkgMQp6UmIgc3ogMQp5VG0gbWkgMQptS3AgcHIgMQpWenEgcXUgMQpYdHAgdGkgMQptdkQgdmEgMQptRHEgbWUgMQpqeFAgaWogMQpCeHYgdmEgMQpvSXUgcXUgMQpSdmMgdmEgMQp1Q2ogcXUgMQpvQW8gdm8gMQpxdUIgdHUgMQpidFYgdGkgMQpMbWMgbWUgMQp0VncgdGkgMQpZeHYgdmEgMQpIeG0gbWUgMQpkVmggdGggMQp4WWMgY2ggMQp1UGogdHUgMQpmVGYgZm8gMQpSancgaWogMQp4ZEEgZGkgMQpqek4gaWogMQpteEwgbWUgMQp5Z0ogbmcgMQpWdmcgdmEgMQpyaksgaWogMQp5dVYgdHUgMQpzV2sga3UgMQpQZ3ogc3ogMQpqSG0gbWUgMQp6a1Uga3UgMQpndkcgdmEgMQpoZFAgdGggMQptVmIgbWUgMQpRZ2QgZGkgMQp6Y1ogY2ggMQp6cWogaWogMQp6c0ogc3ogMQpkZk4gZGkgMQpkZ1cgZGkgMQp3TnIgcmkgMQp6dkMgdmEgMQpxWXcgcXUgMQp1SHkgdHUgMQp0TnEgdGggMQpseEogbGkgMQpIYmsga3UgMQp4c0cgc3QgMQp2U2IgdmEgMQp4RmIgYnUgMQpOdGcgdGggMQpvQmogaWogMQpxa3YgcXUgMQpiVmogaWogMQp6alQgaWogMQpidlggdmEgMQpvWmYgdG8gMQprY1Uga28gMQpmRm0gbWUgMQpYYmogaWogMQpLcXYgdmEgMQpSd2ogaWogMQpkdkogdmEgMQp6bkogc3ogMQpxcVYgcXUgMQpweE0gcG8gMQplQmogaWogMQptSnggbWUgMQp4bk0gbmcgMQphQ3EgdmEgMQpwSGogaWogMQp0ZlEgdGggMQp3cW4gcXUgMQptU3MgaXMgMQpzQncgc3QgMQpGaG4gdGggMQp6TmIgc3ogMQpNdmIgdmEgMQpiVnQgdGggMQpxSHQgdGggMQpxTHYgcXUgMQprZ0YgbmcgMQp2eFcgdmEgMQpjZFkgY2ggMQpYcnogc3ogMQpFZmggdGggMQpscUkgcXUgMQpMenEgcXUgMQp6aFggdGggMQpnaFogdGggMQpsRmcgbmcgMQp2VmMgdmEgMQpsTXIgZXIgMQpUcWogcXUgMQpqQXggaWogMQppTXQgdGggMQpObHYgdmEgMQp6YlAgc3ogMQprVngga2EgMQplUWwgdGUgMQpzV2Igc3QgMQpCcXkgcXUgMQpkWGsga2EgMQp2VWMgdmEgMQp2T2IgdmEgMQp1SGYgcXUgMQpxTnIgcXUgMQp1RnogcXUgMQpNbHIgZXIgMQprbVoga2EgMQpzUnQgdGggMQpXcXYgcXUgMQpoZksgdGggMQp2eFEgdmEgMQpsQ3EgcXUgMQpmWXcgd2EgMQp0ZlMgdGggMQpxZE8gcXUgMQpkUWQgZGUgMQp4ZFggZGUgMQptTnggbWUgMQprRnogc3ogMQp3alMgaWogMQp5UHAgcHIgMQp3Y1cgY2ggMQpOanogc3ogMQpkVnAgZGUgMQpkcUQgcXUgMQpySnMgc3ogMQp4cEggcG8gMQp4cVIgcXUgMQpnVnIgZXIgMQpCdHEgdGggMQpubUIgbnQgMQp6Y00gc3ogMQpjZkcgY2ggMQptZk8gbWUgMQpZaGMgdGggMQpiWm0gbWUgMQptekIgc3ogMQp2UncgdmEgMQp5RGggdGggMQpaZ2YgbmcgMQprcVQgcXUgMQpJdXogcXUgMQpyYlcgZXIgMQpKbXEgcXUgMQpLdmogdmEgMQp6Y0QgY2ggMQp4Z0MgbmcgMQpqQ3ggaWogMQpiV2cgbmcgMQp5d1cgd2EgMQpKa2MgY2ggMQp4R3Mgc3ogMQp2YkggdmEgMQpsVHogc3ogMQplQ2IgZXIgMQpqVnYgdmEgMQpqRHEgcXUgMQpqb1EgcG8gMQpxdE0gdGggMQpScWsgcXUgMQpIdmcgdmEgMQp1QXogcXUgMQptZlcgbWUgMQp0Z1MgdGggMQpjcUQgcXUgMQpzZlkgc3ogMQpZaHYgdGggMQp1cU0gcXUgMQp4cEsgcHIgMQpKemggdGggMQpjUWsgY2ggMQp0ak8gdGggMQpxeFogcXUgMQp6UHYgc3ogMQpxTmsgcXUgMQpsdlEgdmEgMQprR3cga2EgMQp4dUQgcXUgMQpKdnkgdmEgMQpqWWUgdGUgMQpmWnUgcXUgMQpxWW8gcXUgMQp2aEkgdGggMQpmeFkgZm8gMQp5UGYgZm8gMQpmR2ogaWogMQpkbVQgbWUgMQp2ZlggdmEgMQp4UXQgdGggMQpjeFMgY2ggMQp2ekEgdmEgMQpxYUEgcXUgMQpKYnggYmUgMQprVmQga2EgMQpYanYgdmEgMQpoa0kgdGggMQp2UXUgcXUgMQp2aEsgdGggMQpEdmogdmEgMQpWYm0gbWUgMQpmcE4gcHIgMQpwa0cga2EgMQpiTGMgY2ggMQp0SmMgdGggMQp3d0ogd2EgMQpacncgZXIgMQp3ZFcgZGUgMQpXZ2YgbmcgMQpQcXogcXUgMQp3Z04gbmcgMQp6SHQgdGggMQp4VGwgbGUgMQpEdnQgdGggMQp3bVUgbWUgMQp4aG0gdGggMQpoQ3ggdGggMQp2d1YgdmEgMQp6dkwgdmEgMQpuR2YgbnQgMQpqakMgaWogMQpVY2cgY2ggMQpwV2YgcHIgMQpqeEcgaWogMQpNcW4gcXUgMQp5dlcgdmEgMQpsV2sga2EgMQptZE8gbWUgMQpxTm0gcXUgMQpSd2cgbmcgMQp4ZnYgdmEgMQp1T3cgcXUgMQp4aFogdGggMQpqTHIgZXIgMQpmQnkgZm8gMQpuVWogbnQgMQpsVGcgbmcgMQpqbFAgaWogMQp3clIgZXIgMQpyWHcgZXIgMQplVncgdmUgMQp6V24gbmcgMQptSnMgc3ogMQpNZ3kgbmcgMQp1WnEgcXUgMQpUZGcgbmcgMQptcUkgcXUgMQpEaHAgdGggMQpwbUsgbWUgMQpTc2Ygc3ogMQpzV2wgc3ogMQppcUsgcXUgMQpnakcgbmcgMQpkakIgaWogMQp3S3YgdmEgMQp3dkkgdmEgMQp0Y1UgdGggMQp0a0cgdGggMQp6VWUgdGUgMQpsVWggdGggMQpuQmcgbnQgMQpkSHggZGUgMQpXYnogc3ogMQp2dVEgcXUgMQpIcGwgbGUgMQpvVmogaWogMQp2QmIgdmEgMQpUZHogc3ogMQpwZlYgcHIgMQpxZ04gcXUgMQpwY1UgY2ggMQpnY04gY2ggMQp2a0EgdmEgMQpjUWYgY2ggMQpZenggc3ogMQp5cEYgcHIgMQp2QncgdmEgMQpwUGQgZGUgMQpxbVUgcXUgMQplV2YgdmUgMQpqWnIgZXIgMQpId2wgbGUgMQp5eUkgbnkgMQpaZmggdGggMQpMZ3cgbmcgMQp1cXAgcXUgMQp4T2ogaWogMQpka0oga28gMQpkcU0gcXUgMQpzYlcgaXMgMQp6TXAgc3ogMQpuSnogbmcgMQprTWMga28gMQp6cVcgcXUgMQp2UWsgdmEgMQplcUQgcXUgMQpoRm4gdGggMQp2Y1ogY2ggMQp4R2sga2EgMQpremYgc3ogMQp4WnggeGUgMQpxdk4gcXUgMQp5a1kga2EgMQpickggZXIgMQpXcmggdGggMQp3akUgaWogMQpralEga2EgMQpmTGogaWogMQptZ0UgbmcgMQp4d0kgd2EgMQppRHcgdGkgMQpCdHggdGggMQp2UHogdmEgMQp5cUggcXUgMQp3RmUgZXIgMQpsUXkgbGUgMQpnQnAgbmcgMQpqZFkgZGUgMQp0dlEgdGggMQpsak8gbGUgMQpOc3EgcXUgMQp4ZE8gZGUgMQpnelcgbmcgMQp3dE0gdGggMQpxZlIgcXUgMQpqWmggdGggMQpXY2IgY2ggMQpkdlEgdmEgMQpqSGIgaWogMQp4Yk0gYmUgMQpuV2cgbnQgMQpZd2ogaWogMQpYd2ogaWogMQpweEsgcHIgMQp5YlEgYmUgMQpXdm0gdmEgMQpMZ3ogbmcgMQpidFMgdGggMQpqUmwgbGUgMQpxcUogcXUgMQpDbnEgcXUgMQpGbXcgbWUgMQpkdlAgdmEgMQp2cUIgcXUgMQpkakkgZGUgMQpqVnEgcXUgMQpmdlogdmEgMQpDd3QgdGggMQpVeWIgYmUgMQpGZmMgY2ggMQpzb1ggc3ogMQpxaFIgdGggMQpmV3ogc3ogMQp2clggdmEgMQplT3EgcXUgMQpid1ogYmUgMQpkblYgbmcgMQpHYncgYmUgMQp4R2QgZGUgMQptblogbmcgMQpicE4gcHIgMQpkelggZGUgMQpCeHEgcXUgMQp6cHggc3ogMQpkcVogcXUgMQp4VGYgZm8gMQp3UHYgdmEgMQpjeHEgcXUgMQpoZFQgdGggMQp5d1ggd2EgMQpVdnYgdmEgMQpyS3AgZXIgMQpzZEYgZGUgMQpKY2cgY2ggMQp4ek8gc3ogMQp4VHQgdGggMQpkalAgZGUgMQpnVG4gbmcgMQpHdHAgdGggMQp4Z0EgbmcgMQpiZEwgZGUgMQp3ek8gc3ogMQpmaEkgdGggMQpXbXAgbWUgMQpRZHQgdGggMQp1WXEgcXUgMQpwYkogcHIgMQpqUmQgZGUgMQpYc3ggc3ogMQp6Z0kgbmcgMQpxaFkgdGggMQpHZ2ogbmcgMQpGanEgcXUgMQpRd2sga2EgMQp6eFcgc3ogMQp2Q2MgY2ggMQpjY0wgY2ggMQpLeHMgc3ogMQptWXIgZXIgMQpyUXQgZXIgMQpaeHMgc3ogMQpoZFEgdGggMQpkd0ggZGUgMQpZbWwgbGUgMQpxVnogcXUgMQpSdmwgdmEgMQp5SGsga2EgMQpXanQgdGggMQpoTXcgdGggMQpwelUgc3ogMQpnY0wgY2ggMQpxT2EgcXUgMQplcUkgcXUgMQppWXAgdGkgMQp2Q3EgcXUgMQp1b1Ygcm8gMQpmWnggZm8gMQpxUWQgcXUgMQpxZEUgcXUgMQpxV3ggcXUgMQpZa2ogaWogMQpGcGogaWogMQp6R3YgdmEgMQpyd08gZXIgMQpRenEgcXUgMQpLcWIgcXUgMQp6Z1QgbmcgMQpqc1ogc3ogMQphSHEgcXUgMQp5akwgaWogMQpZY3cgY2ggMQpiblAgYW4gMQp2V24gYW4gMQp6eVkgc3ogMQp6UnMgc3QgMQp3dVAgcXUgMQp2akIgdmEgMQpqclQgZXIgMQp2d0ogdmEgMQpkVmogZGUgMQp6dlcgdmEgMQpkWmsgZGUgMQpuckcgYW4gMQpxc1UgcXUgMQpQdnMgdmEgMQpsTGggdGggMQpxQ3ogcXUgMQpkdlYgZGUgMQpQancgaWogMQpLbWogaWogMQpKZmggdGggMQpud1kgYW4gMQpnd0MgbmcgMQp2R2IgdmEgMQpxV3IgcXUgMQpxcFcgcXUgMQpkS2sgZGUgMQp5V2IgYmUgMQpqbU4gaWogMQpncFYgbmcgMQpxelMgcXUgMQpvWmggdGggMQpRbXQgdGggMQptTmsgbWUgMQp5cE0gcHIgMQpsd0ggbGUgMQp6SHMgc3ogMQpqekMgam8gMQpvSmggdGggMQpMcWggdGggMQpoWGcgdGggMQp4RWYgZm8gMQp1V3ggcXUgMQprdlQgdmEgMQp6c0cgc3ogMQpsU3ggbGUgMQpxS2IgcXUgMQpReWUgZGUgMQp4SGsga2EgMQpDd3AgcHIgMQp6bUogc3ogMQp4dUwgcXUgMQpiZEggZGUgMQpQYncgd2EgMQpxZFggcXUgMQpsVmMgY2ggMQpicUwgcXUgMQp3TnMgc3ogMQp2ek4gdmEgMQpxakEgcXUgMQpaaGYgdGggMQp5cEogcHIgMQp4TXEgcXUgMQpiVGsga2EgMQp0TGYgdGggMQp4Z1IgbmcgMQprUXogc3ogMQpSanAgaWogMQp4aEcgdGggMQpiQ2MgY2ggMQpoYkYgdGggMQpyeFEgZXIgMQpxVnAgcXUgMQpia1kga2EgMQpxUGwgcXUgMQpqUWsgaWogMQpPdnEgcXUgMQpzVnYgdmEgMQpwbVUgbWUgMQp1RnYgcXUgMQp4YVogdmEgMQpnR24gYW4gMQpwZ0kgbmcgMQp6VGogc3ogMQpsdkMgdmEgMQp3R3YgdmEgMQpyTnYgdmEgMQpRdHEgdGggMQp2TmggdGggMQpsUHYgdmEgMQpKZHEgcXUgMQpYZGogZGUgMQp5cWsgcXUgMQppd1kgdGkgMQpObXEgcXUgMQpmVHAgcHIgMQpxelEgcXUgMQpwakEgaWogMQpwdkggdmEgMQp4TGogaWogMQpxV2ggdGggMQp2VnEgcXUgMQpnUWQgZGUgMQpzdlkgdmEgMQpmTGYgZm8gMQpxekIgcXUgMQpEeGcgbmcgMQp1elkgcXUgMQpnVnogc3ogMQpoWmIgdGggMQpHcHggcHIgMQp4cWggdGggMQpnY1ggY2ggMQpIeGQgZGUgMQp0VXEgdGggMQpiS3AgcHIgMQppR3ggdGkgMQp4dlEgdmEgMQpseEEgbGUgMQpzakggc3QgMQpHcW8gcXUgMQpkZ1EgZGUgMQp5RGsga2EgMQpabnYgdmEgMQp2ZlUgdmEgMQp2dUQgcXUgMQpvUWogaWogMQpiaEQgdGggMQpxTGogcXUgMQptZFkgZGUgMQpyWmIgZXIgMQprRHYgdmEgMQpmc0sgc3ogMQpLcWYgcXUgMQp5V2wgbGUgMQptVncgbWUgMQptY1YgY2ggMQp0RGYgdGggMQpsQW8gbGUgMQpmelIgc3ogMQpYcnEgcXUgMQpqclogZXIgMQpxbU4gcXUgMQpKbnAgYW4gMQpqaEMgdGggMQprcVIgcXUgMQpkV24gZGUgMQpXbXcgbWUgMQpSZ3kgbmcgMQp1dk4gcXUgMQpqaVkgdGkgMQp4V2MgY2ggMQp5SnIgZXIgMQpvSHEgcXUgMQp5dncgdmEgMQpZZG4gZGUgMQpOdnEgcXUgMQpHbXYgdmEgMQp4eFogeGUgMQpYZGYgZGUgMQp4WWggdGggMQpWbnYgYW4gMQpqTnogc3ogMQpXbnEgcXUgMQpYd2sga2EgMQpxV3ogcXUgMQptUXMgc3ogMQpWeGIgYmUgMQp4d0cgd2EgMQp3dnAgdmEgMQpnbVYgbmcgMQpSenEgcXUgMQpDcHcgcHIgMQpHeXkgbnkgMQp4ekEgc3ogMQp3R3ggd2EgMQpicVMgcXUgMQp3aFIgdGggMQpqUGMgY2ggMQppcUcgcXUgMQpkaksgZGUgMQpjVmsgY2ggMQpyd1QgZXIgMQpWaG4gdGggMQpIZncgd2EgMQpibkogYW4gMQpDcGQgZGUgMQpObWQgZGUgMQpkbk8gYW4gMQpxV2MgcXUgMQphVnEgcXUgMQpxT24gcXUgMQpRbHIgZXIgMQpxbk4gcXUgMQpyTHEgcXUgMQp3dEUgdGggMQpqZ1IgbmcgMQpZcXAgcXUgMQpId2cgbmcgMQpuV2sgYW4gMQp3cUIgcXUgMQpmQXAgcHIgMQpoWnYgdGggMQpLenAgc3ogMQpmTmsga2EgMQpUa2QgZGUgMQp1WW0gcXUgMQprY1IgY2ggMQp4TmwgbGUgMQprSGsga2EgMQpiSmsga2EgMQpqakQgaWogMQpObHEgcXUgMQpkaEIgdGggMQpqWGwgbGUgMQpud0IgYW4gMQpIemIgc3ogMQpxUXogcXUgMQpmS2MgY2ggMQpqVncgaWogMQp5bFUgbGUgMQpMemogc3ogMQpzWHUgcXUgMQp3Qncgd2EgMQpJcWcgcXUgMQp3alYgaWogMQp3eHQgdGggMQpqeksgc3ogMQpyRGQgZGUgMQp1UXkgcXUgMQpxR3cgcXUgMQp0YlUgdGggMQprVW8ga2EgMQpkVm0gZGUgMQpEZG4gYW4gMQp2cUMgdm8gMQpqa1ogaWogMQpMdnogdmEgMQp0UHkgdGggMQpWZmogaWogMQpRaGIgdGggMQp3aEIgdGggMQpGcWYgcXUgMQpoQ3YgdGggMQpGamYgaWogMQpRZnIgZXIgMQp6d0Ygc3ogMQpGd2Ygd2EgMQpwdlUgdmEgMQp3aEMgdGggMQpoVGsgdGggMQpkbFEgZGUgMQp3ekwgc3ogMQp6cVMgcXUgMQpxdFAgdGggMQp5aEMgdGggMQp5akIgaWogMQppVGQgZGUgMQprTHgga2EgMQpScWkgcXUgMQpxalMgcXUgMQp2akkgdmEgMQpwR3ogc3ogMQp3blYgYW4gMQpsUXggbGUgMQp1dlMgcXUgMQpaZ2UgZGUgMQpnSnYgbmcgMQpZZGIgZGUgMQp3RGggdGggMQp6d1Ygc3ogMQpoTm0gdGggMQp6d1Egc3ogMQpmUnIgZXIgMQp3VnIgZXIgMQpuS2cgYW4gMQpUZ2cgbmcgMQpiWXAgcHIgMQpsQm4gYW4gMQp6anAgc3ogMQpxQWYgcXUgMQp6bUsgbWUgMQp3cUsgcXUgMQp2alQgdmEgMQpMcWwgcXUgMQpzbkMgYW4gMQpmelkgc3ogMQp2cVUgcXUgMQptR2IgbWUgMQpma1Aga2EgMQp3UWcgbmcgMQpGcXQgdGggMQpiVm0gbWUgMQpXY3ggY2ggMQp3cFkgd2EgMQpsRnYgdmEgMQpnd0QgbmcgMQpnV3AgbmcgMQpmalQgaWogMQpwRnQgdGggMQppSXAgaW4gMQp0YkQgdGggMQpYcWMgcXUgMQpRa2MgY2ggMQpxZVogcXUgMQpxUGIgcXUgMQpnd0wgbmcgMQpmSGkgaW4gMQp4d1Agd2EgMQp4dkIgdmEgMQpqU3cgaWogMQpwekYgc3ogMQp3WXAgd2EgMQpkRHggZGUgMQpuQnggYW4gMQpjTnYgY2ggMQpVYm0gbWUgMQp4WHUgcXUgMQpkUmwgZGUgMQpkQnogZGUgMQpYdmggdGggMQpYbGQgZGUgMQptd1kgbWUgMQp3aFEgdGggMQpNemwgbGUgMQpBcWogcXUgMQp1RHAgcXUgMQpjalogY2ggMQpWa2Yga2EgMQp1R3EgcXUgMQpoQnMgdGggMQpxTGggdGggMQp0ZlcgdGggMQpjUG4gYW4gMQp4b04gb24gMQpZZHggZGUgMQpMeGsga2EgMQpjY1ogY2ggMQp1SmggdGggMQpzVnAgc3ogMQp3ckUgZXIgMQp4Z1AgbmcgMQpoUHAgdGggMQpldVUgcXUgMQpzWmggdGggMQpxbksgcXUgMQpCZ2ggdGggMQpzbFEgbGUgMQpneEEgbmcgMQpqTGQgZGUgMQp6bkQgYW4gMQprWGsga2EgMQp0ZlYgdGggMQpWd2wgbGUgMQp4V2QgZG8gMQp4bkggYW4gMQpjT3EgY2ggMQpMa2sga2EgMQpOdnkgdmEgMQp4SWggdGggMQp4a0sga2EgMQpyTXIgZXIgMQpybVEgZXIgMQpiUG4gYW4gMQpmQWEgYW4gMQp2UXYgdmEgMQpmSHIgZXIgMQpQbXYgdmEgMQp2ekogc3ogMQp3VGcgbmcgMQpiV2MgY2ggMQpad2cgbmcgMQpnS3ggbmcgMQpHYnEgcXUgMQp3TWsga2EgMQpOZnggZm8gMQpmQW8gb24gMQpkSGIgZGUgMQpseEggbGUgMQpkcU8gcXUgMQpUbHEgcXUgMQpZamogaWogMQpJeWggdGggMQp1b1kgcXUgMQptaEggdGggMQpsTWogbGUgMQpmekYgc3ogMQpmclIgZXIgMQp5TmwgbGUgMQphUHYgYW4gMQp5d0cgd2EgMQpDbXcgbWUgMQpzdksgdmEgMQpzck8gZXIgMQpVaHogdGggMQp2UG4gYW4gMQp6VHEgcXUgMQprekggc3ogMQpJb3ggb24gMQpmUWEgYW4gMQp3WnIgZXIgMQpucVUgYW4gMQp3UGIgd2EgMQpUemcgbmcgMQpwblIgYW4gMQp2ZkogdmEgMQp2eVggdmEgMQpmTHogc3ogMQp6alAgc3ogMQpwbVIgbWUgMQplUHEgcXUgMQpqeVQgaWogMQptalAgaWogMQpmc0ggc3ogMQp2d0IgdmEgMQpZbnIgYW4gMQpUcWggdGggMQpMdnYgdmEgMQp0Q2YgdGggMQp3cEIgd2EgMQp3WGggdGggMQptaFggdGggMQprWWQgZGUgMQpEcGcgbmcgMQp5Z1IgbmcgMQpSZnAgcHIgMQpKeXEgcXUgMQp5eHEgcXUgMQpwUGMgY2ggMQphT2ogYW4gMQpad3cgd2EgMQpmRnggZm8gMQpiRGggdGggMQpxS3ggcXUgMQp3SHggd2EgMQpoclggdGggMQpyRmggdGggMQpsTHggbGUgMQphWWogYW4gMQprQ3Mgc3ogMQpsV3QgdGggMQpwZFkgZGUgMQpzd0kgc3ogMQpiTHcgd2EgMQpNenggc3ogMQpjS2sgY2ggMQpoTXogdGggMQpKY3UgcXUgMQp3akIgaWogMQpNcWUgcXUgMQpyeFcgZXIgMQpnWnYgbmcgMQpSZm4gYW4gMQpwd0Qgd2EgMQpsaFggdGggMQpmVmcgbmcgMQp2ZlcgdmEgMQpseFAgbGUgMQpZeWogaWogMQpoUGcgdGggMQpVeHEgcXUgMQpiZE8gZGUgMQpiUnogc3ogMQpkWHEgcXUgMQpSanEgcXUgMQpmZ1YgbmcgMQp4QWYgZm8gMQp3WG4gYW4gMQpLdnYgdmEgMQpzdkwgdmEgMQpmV3YgdmEgMQpkclEgZXIgMQpMcHYgdmEgMQpxS3AgcXUgMQplQ3YgZXIgMQp4d0ggd2EgMQpjdkMgY2ggMQprVWYga2EgMQpvUHggb24gMQp0akogdGggMQpiQmsga2EgMQp2cEkgdmEgMQpnelkgbmcgMQpvWnMgb24gMQpwS2MgY2ggMQp4S3Mgc3ogMQpxY0ggcXUgMQpWZm0gbWUgMQpzdk0gdmEgMQpWanggaWogMQpsVncgbGUgMQp3V2Ygd2EgMQpYcHggcHIgMQpsY0EgY2ggMQp0TGMgdGggMQpsRGcgbmcgMQpYamggdGggMQpYZGggdGggMQpyS20gZXIgMQpmblcgYW4gMQpUY2IgY2ggMQpxZ1ggcXUgMQpxWm8gcXUgMQplSnYgZXIgMQpZeHkgbnkgMQprZk0ga2EgMQpxS2UgcXUgMQp2TWYgdmEgMQpkZ1kgZGUgMQpnR2QgbmcgMQpWY2ogY2ggMQpTZncgd2EgMQp4RGsga2EgMQpmVGMgY2ggMQpxUncgcXUgMQp0T2EgdGggMQpndVEgcXUgMQptZ0ogbmcgMQpiUmQgZGUgMQprWXEgcXUgMQp4d0Qgd2EgMQp2WHMgdmEgMQp6bEMgbGUgMQprbUgga2EgMQpqaFogdGggMQpXeG8gb24gMQp2dFggdGggMQppV20gaW4gMQpxVnggcXUgMQpIanYgdmEgMQpQeHMgc3ogMQpiWWkgaW4gMQp3Z0cgbmcgMQpKdnMgdmEgMQpnSGggdGggMQpLenkgc3ogMQp4akkgaWogMQp1VmIgcXUgMQpQenEgcXUgMQpoeEMgdGggMQp3UHkgd2EgMQpiWGggdGggMQpqelkgc3ogMQpmcUogcXUgMQpxeFggcXUgMQp2ZkIgdmEgMQpwUG0gbWUgMQpicEMgcHIgMQpoRnYgdGggMQpDcWwgcXUgMQpkd0kgZGUgMQpUY3EgY2ggMQpaanggaWogMQp3T3ogc3ogMQpKZmogaWogMQppWnIgaW4gMQpWeGYgZm8gMQpMcHggcHIgMQpmSHQgdGggMQpoRnkgdGggMQpsY0QgY2ggMQp2TWMgY2ggMQp4eVUgbnkgMQptR3EgcXUgMQp3SnYgdmEgMQp6S3Mgc3ogMQpsTW0gbGUgMQptcVUgcXUgMQp2SGcgbmcgMQpsR2MgY2ggMQplSWogdGUgMQpWZGggdGggMQpyQ2sgZXIgMQp3UWggdGggMQpZd2Ygd2EgMQp6VWYgc3ogMQpxWnMgcXUgMQp2TnQgdGggMQpEeGogaWogMQpjWXIgY2ggMQpkS3QgdGggMQp2RHAgdmEgMQpxbkYgYW4gMQpMc2ogc3ogMQp4SHYgdmEgMQpqQ3QgdGggMQpiblggYW4gMQpmQnggZm8gMQpqVnQgdGggMQpxT3kgcXUgMQp1cUQgcXUgMQpSZncgd2EgMQpjalMgY2ggMQp1ZlggcXUgMQpmdkkgdmEgMQpPd3ggd2EgMQpnWHcgbmcgMQpvQ3YgdmEgMQpNcnggZXIgMQpjSWIgY2ggMQpmSmogaWogMQprcU0gcXUgMQp6cUwgcXUgMQpyUHogZXIgMQppd1cgaW4gMQpjTXAgY2ggMQpsVnQgdGggMQp2VGIgdmEgMQpJd2Ygd2EgMQp4bFogbGUgMQp2alEgdmEgMQppUGIgaW4gMQpXaGsgdGggMQpXdmggdGggMQptekQgc3ogMQpIcWsgcXUgMQpqcUIgcXUgMQpxaE0gdGggMQpwclIgZXIgMQpubFYgYW4gMQpxWWsgcXUgMQp6VnAgc3ogMQp2cE8gdmEgMQpSdnIgZXIgMQpzY1kgY2ggMQpxZEEgcXUgMQp2TGsgdmEgMQpzdkkgdmEgMQptZEUgZGUgMQpoQnggdGggMQpacnYgZXIgMQpqV3QgdGggMQpmVHggZm8gMQpZcGMgY2ggMQptTWsga2EgMQpmZHEgcXUgMQpoY0sgdGggMQp4Q3kgbnkgMQpmVnIgZXIgMQphUHggYW4gMQpmcFUgcHIgMQpWa2Iga2EgMQp0Yk0gdGggMQp6UXQgdGggMQpneFYgbmcgMQpTZmcgbmcgMQpwWWwgbGUgMQpnV3QgdGggMQp4RWIgYmUgMQptWHkgbWUgMQpsblEgYW4gMQpxbUwgcXUgMQpWa3kga2EgMQp3d1ggd2EgMQpVd3ggd2EgMQpjZkIgY2ggMQpHeHAgcHIgMQpmcEwgcHIgMQpqVHggaWogMQpjWnYgY2ggMQp6bEsgbGUgMQpoQmMgdGggMQpXcWkgcXUgMQpsR3MgbGUgMQpEcXogcXUgMQpKZ3cgbmcgMQpnQ3ggbmcgMQpjTmogY2ggMQpjcUogY2ggMQpibEQgbGUgMQpxWHIgcXUgMQprWHIgZXIgMQpraEsgdGggMQp4WmggdGggMQpqU3Mgc3ogMQp5anggaWogMQpId2Ygd2EgMQpmWHMgc3ogMQpxZ3ogcXUgMQpYZHcgZGUgMQpoY04gdGggMQpqSmQgZGUgMQpjbVEgY2ggMQptdlYgdmEgMQpOcWUgcXUgMQp6eFMgc3ogMQprR3QgdGggMQp0RmcgdGggMQpmek0gc3ogMQpYcnIgZXIgMQpkY0ogY2ggMQpkUWEgYW4gMQpxTnkgcXUgMQpoeFQgdGggMQp0d0IgdGggMQpCcWogcXUgMQpwcksgZXIgMQp6ZEMgZGUgMQp5QW8gb24gMQpkTHQgc3QgMQpwZ0YgbmcgMQp2Z1cgbmcgMQp2cE4gdmEgMQpJdnggdmEgMQp2WWwgbGUgMQp4UmcgbmcgMQpqUHUgcXUgMQpPcXIgcXUgMQp2amcgbmcgMQpkcEggZGUgMQp5RHAgcHIgMQp4ZkogZm8gMQpmcVYgcXUgMQplQmYgZXIgMQpaa3cga2EgMQpxSHAgcXUgMQpBcXogcXUgMQpiTncgd2EgMQpmalggaWogMQpmcVMgcXUgMQpsaksgbGUgMQpHa2Yga2EgMQpiU2YgYmUgMQpNeGcgbmcgMQpEcW0gcXUgMQpoS3AgdGggMQp3RnEgcXUgMQp3bUogbWUgMQp2elQgdmEgMQpyaEogdGggMQpuSGYgYW4gMQpqSm8gb24gMQpxV3kgcXUgMQpXdmsgdmEgMQpna0IgbmcgMQptRXcgbWUgMQpVZ3ggbmcgMQpRbXkgbWUgMQpManEgcXUgMQpiR3AgcHIgMQpsSGcgbmcgMQpjR2cgY2ggMQpnRmsgbmcgMQp4blYgYW4gMQplRnkgZXIgMQpOZm0gbWUgMQpoU2YgdGggMQpnWGogbmcgMQp4SGYgZm8gMQp1cWogcXUgMQp3WGEgYW4gMQp2Y1QgY2ggMQp1SncgcXUgMQpwV3ggcHIgMQpxcFEgcXUgMQpocUUgdGggMQpZZm4gYW4gMQpqckkgZXIgMQpjZ0sgY2ggMQp5eVAgbnkgMQpabWcgbmcgMQpMa2MgY2ggMQplVXEgcXUgMQpqclkgZXIgMQprRnMgc3ogMQpzVXEgcXUgMQpqbFogbGUgMQpjblYgY2ggMQphUGogYW4gMQptakUgaWogMQpwWmwgbGUgMQp1RnMgcXUgMQpLbmYgYW4gMQpGcGMgY2ggMQpoZlIgdGggMQpxbkMgYW4gMQpEbHEgcXUgMQpmck0gZXIgMQpzZkIgc3ogMQpHeGsga2EgMQpGa2ogaWogMQp2R2sgdmEgMQpnUm0gbmcgMQpyV2YgZXIgMQpyWXYgZXIgMQpxRWQgcXUgMQpxSHIgcXUgMQpTbXYgdmEgMQpsRnAgbGUgMQprRHMgc3ogMQpkU2QgZGUgMQpyTHcgZXIgMQpjblogYW4gMQpXanAgaWogMQpwVHEgcXUgMQpLY3ggY2ggMQp2S3MgdmEgMQpiY0sgY2ggMQp2d3kgdmEgMQpVanggaWogMQpRdnIgZXIgMQpkY1YgY2ggMQp4VmYgZm8gMQp1SWsgcXUgMQpqbE4gbGUgMQp2d0wgdmEgMQpmV3AgcHIgMQpQeHIgZXIgMQpyUmIgZXIgMQpiZkQgYmUgMQp5Q3ggbnkgMQpuSnMgYW4gMQpkQ20gZGUgMQpjYkcgY2ggMQpnQ2YgbmcgMQp0bVYgdGggMQpxZUMgcXUgMQprblMgYW4gMQpnd1kgbmcgMQpXamwgbGUgMQptSXcgbWUgMQpxalcgcXUgMQpnd3YgbmcgMQpxSncgd2EgMQpjbkEgYW4gMQpiQm0gbWUgMQpnRncgbmcgMQp3RG4gYW4gMQpxZ0wgcXUgMQpsVWEgYW4gMQpoRG4gdGggMQprSHgga2EgMQp3WG0gbWUgMQpxeVkgcXUgMQpwa0Qga2EgMQpzTHogc3QgMQp6eEYgc3ogMQp2TXggdmEgMQpwbFIgbGUgMQpwd1ogcHIgMQpwWWQgZGUgMQp6Zkwgc3ogMQp6dEsgdGggMQptVG0gbWUgMQpkQ3AgZGUgMQpid3ggd2EgMQp4Q3Mgc3ogMQp0ZkYgdGggMQpMbnEgYW4gMQpkWWkgaW4gMQpwV3EgcXUgMQpvSXggb24gMQp5d0Ugd2EgMQp3Tmsga2EgMQpqd08gaWogMQp4Wnogc3ogMQp3R20gbWUgMQpjVncgY2ggMQpiaksgaWogMQpHemcgbmcgMQprd3ogc3ogMQpwQm4gYW4gMQpjVHggY2ggMQpySHEgcXUgMQpXc2cgbmcgMQp4RWggdGggMQp5cksgZXIgMQptTWIgbWUgMQpwSHcgcHIgMQpjak4gY2ggMQpuWG4gYW4gMQpid08gd2EgMQpmbEIgbGUgMQpRcWogcXUgMQptS3YgdmEgMQpmRm4gYW4gMQp3Zkcgd2EgMQp3ZkIgd2EgMQpKcWsgcXUgMQpid0sgd2EgMQpoaEkgdGggMQpsVWUgZXIgMQp3RmQgZGUgMQp2a1QgdmEgMQp4TGcgbmcgMQpmaEIgdGggMQp3bVYgbWUgMQp0bUYgdGggMQpSdGMgdGggMQpkeVkgZGUgMQpqeXcgaWogMQprUmYga2EgMQpmWHogc3ogMQpabnogYW4gMQp3cVggcXUgMQp1TXggcXUgMQpnd1YgbmcgMQpQYmggdGggMQpkY00gY2ggMQpuUHogYW4gMQpjd1UgY2ggMQp2SnQgdGggMQpneVEgbmcgMQpmWGkgaW4gMQpic1ogc3ogMQpCcWkgcXUgMQp2R24gYW4gMQprbk4gYW4gMQp3WXEgcXUgMQp0VGIgdGggMQpibVAgbWUgMQpqcFogaWogMQpNcXcgcXUgMQp2ak0gdmEgMQpxVmggdGggMQpqdVkgcXUgMQpyQmsgZXIgMQpqdUkgcXUgMQp6RXEgcXUgMQp6V2cgbmcgMQpmekggc3ogMQp0THggdGggMQpOY2YgY2ggMQprZk4ga2EgMQp1VW8gcXUgMQpmQ3Mgc3ogMQp0Q3YgdGggMQpzVXkgc3ogMQpwQmYgcHIgMQpqQnogc3ogMQp2RGMgY2ggMQpxbXggcXUgMQpxdEsgdGggMQpxY1MgY2ggMQp2UHQgdGggMQpnUW0gbmcgMQpoelIgdGggMQpkY0wgY2ggMQp4ckkgZXIgMQpkdk4gdmEgMQpDd3YgdmEgMQp4aFEgdGggMQpHenUgcXUgMQpwZE8gZGUgMQpCcXIgcXUgMQp2TG4gYW4gMQpseGYgbGUgMQp2WWsgdmEgMQp3U3EgcXUgMQpwa1Mga2EgMQp6S2cgbmcgMQp0UG0gdGggMQpQbWogaWogMQpsV3UgcXUgMQpYdXUgcXUgMQpqY1ggY2ggMQp4elEgc3ogMQpHencgc3ogMQplUG0gZXIgMQpmd1cgd2EgMQpxd0EgcXUgMQp2UXQgdGggMQpieFAgYmUgMQpkbUQgZGUgMQphd1EgYW4gMQpmVmYgZm8gMQpid1kgd2EgMQpaeHQgdGggMQpYaGsgdGggMQpnWWsgbmcgMQp6Q2Ygc3ogMQp5ZlEgbnkgMQp6R3cgc3ogMQpndkUgbmcgMQpnQ3YgbmcgMQpvUGYgb24gMQp6WGkgaW4gMQpodkkgdGggMQpoelMgdGggMQptZlggbWUgMQpkUGQgZGUgMQpMcmYgZXIgMQpsckcgZXIgMQptWWYgbWUgMQpoTmogdGggMQpxQWogcXUgMQpzeFEgc3QgMQprVGwgbGUgMQpxT2YgcXUgMQpKZHggZGUgMQpzd0sgc3ogMQpqUWIgaWogMQpEcXAgcXUgMQpjV3YgY2ggMQpkeEUgZGUgMQpzWGogc3ogMQpudkIgYW4gMQp3WGYgd2EgMQpDcWkgcXUgMQpielcgc3ogMQpyUmYgZXIgMQptWmogaWogMQpibkYgYW4gMQpxYUcgYW4gMQpCcXMgcXUgMQpsTW4gYW4gMQp3SHAgcHIgMQpMamMgY2ggMQpNd2Ygd2EgMQpweksgc3ogMQptUGIgbWUgMQpxakUgcXUgMQp3UnIgZXIgMQp4WmYgZm8gMQpucUcgYW4gMQp2VmIgdmEgMQpwakMgaWogMQp1SGwgcXUgMQpqRG4gYW4gMQpwcVggcXUgMQpwcWsgcXUgMQp4Z1UgbmcgMQp3Snggd2EgMQp6bksgYW4gMQpyaEIgdGggMQp2RHEgcXUgMQpzSmMgY2ggMQpYa2ggdGggMQpsbkogYW4gMQpiUnEgcXUgMQpmekEgc3ogMQpiUWUgZXIgMQpUeHcgd2EgMQpia0cga2EgMQp5d1ogd2EgMQp6V2MgY2ggMQpsaEwgdGggMQpnbUYgbmcgMQpzZlEgc3ogMQp6bUcgc3ogMQpPZ3ogbmcgMQp4dUEgcXUgMQpxQXEgcXUgMQp6RHcgc3ogMQpsVnUgcXUgMQp4Uncgd2EgMQp4bU0gbWUgMQpweEIgcHIgMQp6dFQgdGggMQprekogc3ogMQpuRnogYW4gMQp1VnogcXUgMQpwblEgYW4gMQpwR3QgdGggMQpYZG4gYW4gMQpmVnogc3ogMQpNaGcgdGggMQpYcW8gcXUgMQpzSHEgcXUgMQpqd0MgaWogMQp2a0cgdmEgMQpYa3gga2EgMQp0UmcgdGggMQpudlYgYW4gMQpxd0cgcXUgMQpWaGggdGggMQp6d08gc3ogMQpxUWIgcXUgMQpjclIgY2ggMQpNcnEgcXUgMQpvUWUgZXIgMQptQnQgdGggMQp2VXkgdmEgMQp0d1cgdGggMQpRZ24gYW4gMQpOeHUgcXUgMQpxaEYgdGggMQp4cFggcHIgMQpmdkQgdmEgMQpDdnkgdmEgMQpvSGogb24gMQpRcW8gcXUgMQp2WWQgZGUgMQp4aFYgdGggMQpmWmYgZm8gMQp5S20gbWUgMQp4WXEgcXUgMQpmY1UgY2ggMQpxRXAgcXUgMQpqWGQgZGUgMQptbFEgbGUgMQpHZ3ogbmcgMQpjTHAgY2ggMQp5eFUgbnkgMQpndkogbmcgMQp3cUQgcXUgMQp2c04gc3ogMQpJamYgaWogMQpqYkogaWogMQpiTXggYmUgMQprWHMgc3ogMQpnclQgbmcgMQp3T2QgZGUgMQpwR3cgcHIgMQpHa2QgZGUgMQpxQ2ogcXUgMQpocVkgdGggMQpyRHAgZXIgMQpuUXQgdGggMQprZFYgZGUgMQpiZ1MgbmcgMQpUcW8gcXUgMQpmRWogaWogMQpoWnMgdGggMQpqWW4gYW4gMQpiUHggYmUgMQpoZ1kgdGggMQpQdnkgdmEgMQpmeEsgZm8gMQpId3cgd2EgMQp4Umsga2EgMQpkbVAgZGUgMQptY1kgY2ggMQpieFIgYmUgMQpMc2wgbGUgMQpoUmwgdGggMQppd1EgaW4gMQpXcXggcXUgMQprZlYga2EgMQpxd04gcXUgMQpRcHYgdmEgMQptck8gZXIgMQppRmMgdGkgMQp3ekQgc3ogMQpxYkYgcXUgMQp4ZlMgZm8gMQpQcWggdGggMQp4WWIgYmUgMQpsRGggdGggMQp2dEcgdGggMQpYenUgcXUgMQp4aksgaWogMQpqRHggaWogMQpuQ2ogYW4gMQptQ2sga2EgMQpxeFAgcXUgMQpvTXYgb24gMQpjZ1kgY2ggMQpXcXQgdGggMQpra1Ega2EgMQp0cU8gdGggMQpqbkMgYW4gMQpmR3EgcXUgMQpCZnYgdmEgMQp2WWkgaW4gMQpwY0wgY2ggMQpGZ3AgbmcgMQpqdFIgdGggMQp2aEYgdGggMQp3VWkgaW4gMQpuTmogYW4gMQpqVHcgaWogMQpxc00gcXUgMQphSmcgYW4gMQpqUWUgZXIgMQpHbmogYW4gMQpmbU0gbWUgMQp6cU0gcXUgMQpnalogbmcgMQpueEggYW4gMQpjZE8gY2ggMQphQXggYW4gMQp0VXYgdGggMQpoWGsgdGggMQpxQnggcXUgMQp0Z0sgdGggMQpmWnkgbnkgMQpKa3gga2EgMQpwdkQgdmEgMQpibVQgbWUgMQpvWXggb24gMQpod1YgdGggMQptakIgaWogMQpiWW4gYW4gMQppSHggaW4gMQpsWWggdGggMQpxQ2kgaW4gMQpmaFIgdGggMQpuRGYgYW4gMQpoQ2QgdGggMQpseEIgbGUgMQplWGogZXIgMQpmdlcgdmEgMQpjY1cgY2ggMQpkVGMgY2ggMQpzcUEgcXUgMQpmTnQgdGggMQp6a00gc3ogMQpsUnYgbGUgMQpxbkkgYW4gMQp4d0Mgd2EgMQp6cVkgcXUgMQp5UWIgYmUgMQp4ckMgZXIgMQp4Rm0gbWUgMQpvZVEgZXIgMQptTGwgbGUgMQpqd1QgaWogMQpmd0Qgd2EgMQp2cEUgdmEgMQpmbFkgbGUgMQpzUmcgbmcgMQp2U2QgZGUgMQp3dVIgcXUgMQp3ckkgZXIgMQpZc24gc3QgMQpWaGogdGggMQpDcWggdGggMQpZZ2IgbmcgMQpoUHEgdGggMQpta0Iga2EgMQp0UnEgdGggMQphalEgYW4gMQpoY1IgdGggMQp2RHcgdmEgMQpwUW4gYW4gMQp4ZVUgZXIgMQp2Y00gY2ggMQp6VmMgY2ggMQpiUmggdGggMQp1RnggcXUgMQpmYlcgYmUgMQp1VXYgcXUgMQpOaHYgdGggMQpZa3gga2EgMQpXdHAgdGggMQpNemogc3ogMQpucFQgaW4gMQpYcWsgcXUgMQp4d04gd2EgMQpoWHcgdGggMQp6TGIgc3ogMQpHeHkgbnkgMQpkRHEgcXUgMQpCZnkgbnkgMQpma3gga2EgMQpqT3EgcXUgMQpEZGsgZGUgMQpOanAgaWogMQp4akogaWogMQpxaFMgdGggMQpRd20gbWUgMQp5V2ogaWogMQpuRnYgYW4gMQpwTGIgcHIgMQpxYkIgcXUgMQpzbVggc3ogMQp0blogdGggMQp6UWggdGggMQpGemIgc3ogMQpjTmIgY2ggMQpocFYgdGggMQpCeHogc3ogMQp4Z0cgbmcgMQpSbGogbGUgMQppSHEgaW4gMQpzd04gc3ogMQpOanYgdmEgMQp3UGsga2EgMQpvUnYgb24gMQpwSnMgc3ogMQprWncga2EgMQp2VnMgc3QgMQpWYncgd2EgMQpGZmggdGggMQptelEgc3ogMQpHdmwgbGUgMQpQZ3EgcXUgMQpsUHAgbGUgMQp2Q3YgdmEgMQprTmYga2EgMQpibUQgbWUgMQptV3QgdGggMQpzbEYgbGUgMQpxaVggaW4gMQp5UnQgdGggMQpscXggcXUgMQpxbGogcXUgMQpzZlogc3ogMQpXZnkgbnkgMQp2ck8gZXIgMQpneFQgbmcgMQpsd0UgbGUgMQpxZEogcXUgMQpZcGsga2EgMQpRcGYgcHIgMQpabncgYW4gMQpiZkogYmUgMQpxUXkgcXUgMQpxQXkgcXUgMQphcVcgYW4gMQpxcUkgcXUgMQpMd2cgbmcgMQpObncgYW4gMQpjTHYgY2ggMQpXdHggdGggMQpxY3EgY2ggMQpzalIgc3ogMQpsV24gYW4gMQpabXggbWUgMQpxWmcgcXUgMQp0WXogdGggMQpnVnggbmcgMQptWHQgdGggMQpud0ogYW4gMQpqd1ogaWogMQpsd0wgbGUgMQplR3ggZXIgMQpTcWsgcXUgMQpnQmcgbmcgMQp6c1Mgc3ogMQprblEgYW4gMQpObmYgYW4gMQpxbVQgcXUgMQpTcXAgcXUgMQpmZlEgZm8gMQpWY3YgY2ggMQpmbUQgbWUgMQp6WWcgbmcgMQpiQXggYmUgMQpuYlcgYW4gMQpnSm0gbmcgMQpKd24gYW4gMQpteEogbWUgMQp4YkMgYmUgMQpSYnEgcXUgMQp4WmMgY2ggMQpiSnkgYmUgMQpYeWsga2EgMQp6a1Ygc3ogMQp1b0YgcXUgMQpiY1UgY2ggMQpjWnEgY2ggMQpyUG0gZXIgMQpyR24gYW4gMQpsY0wgY2ggMQpyVnQgdGggMQpDZ3cgbmcgMQpDdHEgdGggMQplR3YgZXIgMQpSenMgc3QgMQpRaHogdGggMQpzTHYgdmEgMQpWcW0gcXUgMQp5ZEogZGUgMQp4VnIgZXIgMQp0TGsgdGggMQpxZnkgcXUgMQp3eFYgd2EgMQp5UnEgcXUgMQpWeHEgcXUgMQpxWXogcXUgMQp6aE0gdGggMQptTG4gYW4gMQpadnQgdGggMQpGdm0gdmEgMQpoY00gdGggMQpNd3Agd2EgMQpjVGcgY2ggMQpsWHIgZXIgMQpmUWUgZXIgMQpKYncgd2EgMQp5ZkcgbnkgMQpwaEsgdGggMQpnakggbmcgMQpXZGcgZGUgMQpwUG4gYW4gMQpCd2cgbmcgMQp6bkIgYW4gMQpmd0ogd2EgMQp1dFEgdGggMQpjakMgY2ggMQpmVmQgZGUgMQpjVG0gY2ggMQp3TXYgdmEgMQpLZ2sgbmcgMQpuUmQgYW4gMQptTXQgdGggMQp4alEgaWogMQpxWXQgdGggMQpzWWogc3QgMQpqTmMgY2ggMQpxWHQgdGggMQp3ekIgc3ogMQpTanEgcXUgMQpxdEYgdGggMQp3WWkgaW4gMQpnbFQgbmcgMQpVdWcgbmcgMQp1T3AgcXUgMQppQnggaW4gMQpScXQgdGggMQp6V2ogc3ogMQpIY3ggY2ggMQpqTmQgZGUgMQp6UXIgZXIgMQppSGQgaW4gMQpXcHggcHIgMQpuZlkgYW4gMQpSa3ogc3ogMQpLcWcgcXUgMQpHZnYgdmEgMQprckMgZXIgMQpXaGMgdGggMQpsak0gbGUgMQp5eEcgbnkgMQpmcFcgcHIgMQpiY0YgY2ggMQprcnggZXIgMQp1RHQgdGggMQpGem8gb24gMQp3UG4gYW4gMQpMZmogaWogMQpCa3Aga2EgMQpYa3EgcXUgMQpqeEggaWogMQp2SWogdmEgMQpnVGMgY2ggMQpoRWogdGggMQpmcUIgcXUgMQpqbEQgbGUgMQp0RmYgdGggMQpOZncgd2EgMQpGcWUgcXUgMQpUenAgc3ogMQpzSnIgZXIgMQpxSXQgdGggMQpkRmIgZGUgMQpxekUgcXUgMQptVnYgdmEgMQpWcWEgYW4gMQpicU0gcXUgMQptZEogZGUgMQpkSXAgZGUgMQpabnggYW4gMQpqa0sgaWogMQpyZlEgZXIgMQp4a0kga3UgMQpmSW8gcm8gMQpscVYgcXUgMQpRcGQgZGUgMQpwQXggcHIgMQpyclEgZXIgMQpiSXUgcXUgMQp4RHcgd2EgMQpvSHggb24gMQp3Sncgd2EgMQpDcXYgcXUgMQp5dkIgdmEgMQp5cVUgcXUgMQpyTHggZXIgMQpGenggc3ogMQpkWmYgZGUgMQpOcWggdGggMQpSbnogYW4gMQpoVGMgdGggMQpiVmIgYmUgMQpGZG0gZGUgMQp2ZnYgdmEgMQpod1MgdGggMQp6UHQgdGggMQpHeHYgdmEgMQpGdnQgdGggMQptWnIgZXIgMQp6VnIgZXIgMQptQmMgY2ggMQpmWHEgcXUgMQpQbHcgbGUgMQpObHggbGUgMQpqQ2QgZGUgMQpLd3YgdmEgMQpKcWEgYW4gMQp6R3Mgc3QgMQpmdVYgcXUgMQpwekwgc3ogMQppRnggaW4gMQpmVG0gbWUgMQp5V2QgZGUgMQpjSHYgY2ggMQpmRmsga2EgMQptcWQgcXUgMQphUWsgYW4gMQp1RGYgcXUgMQpWYmYgYmUgMQpwZ0ogbmcgMQpma04ga2EgMQpwQm0gbWUgMQpCZHYgZGUgMQpqbVcgaWogMQpKdnYgdmEgMQpYcGsga2EgMQpxUWMgY2ggMQprZEcgZGUgMQpxa1AgcXUgMQpjU2QgY2ggMQpGZGMgY2ggMQpxZ0sgcXUgMQpxZEggcXUgMQp1TnYgcXUgMQplVnQgdGggMQpkZkEgZGUgMQpIenkgc3ogMQpsV2MgY2ggMQp2eEggdmEgMQpoeFcgdGggMQpLaHAgdGggMQp4UWIgYmUgMQpwd1QgcHIgMQpMd2Ygd2EgMQp6RHEgcXUgMQpreEsga2EgMQptdFkgdGggMQpiaFQgdGggMQp5d1Igd2EgMQpqSWEgYW4gMQpXemUgZXIgMQpocUsgdGggMQpmbFogbGUgMQpxTWkgaW4gMQp3cFIgd2EgMQpxSGggdGggMQphT3cgYW4gMQpka1UgZGUgMQp2UnIgZXIgMQp2alggdmEgMQpjdVEgY2ggMQpxbUogcXUgMQp1dUogb3UgMQp5V3ggbnkgMQpoVWYgdGggMQp2elAgdmEgMQpyU3ggZXIgMQpxZ3kgcXUgMQpSemYgc3ogMQp6akIgc3ogMQpTanggaWogMQp4ZkEgZm8gMQpmSGogaWogMQpxa0IgcXUgMQpjZEYgY2ggMQpmV2ogaWogMQpqYkEgaWogMQpCbWIgbWUgMQp5amcgbmcgMQpyeFogZXIgMQpWbXIgZXIgMQppSXEgaW4gMQpXZ2wgbmcgMQptUnAgbWUgMQp3dlMgdmEgMQpVdnkgdmEgMQp5cFEgcHIgMQp2Rncgdm8gMQpmcUUgcXUgMQpzd0ogc3QgMQpKcnggZXIgMQpjeEUgY2ggMQpsWmsgbGUgMQpmVm4gYW4gMQpiaFogdGggMQpqaFIgdGggMQp2U3EgcXUgMQp5UXogc3ogMQpmSHYgdmEgMQp2dU4gcXUgMQpqcEcgaWogMQpQa3ogc3ogMQpnUWIgbmcgMQpwRnMgc3QgMQpHanEgcXUgMQpoc0sgdGggMQp0d3ggdGggMQp5eVEgbnkgMQpkcUYgcXUgMQpiSGggdGggMQpxTXEgcXUgMQpxS3YgcXUgMQp6TGcgbmcgMQpqbU8gaWogMQp3Qmsga2EgMQpwalEgaWogMQp4WnYgdmEgMQpxSXUgdW4gMQp5Y1kgY2ggMQptRGYgbWUgMQp5SnMgc3QgMQpJc3ggc3QgMQpRcXIgcXUgMQpGa3cga2EgMQpDcGogaWogMQpZdnEgcXUgMQp6akcgc3ogMQpnR2MgY2ggMQpYZG0gZGUgMQpoQnYgdGggMQpXeGogaWogMQpZd2Igb3cgMQpWdHEgdGggMQp0alkgdGggMQpqRGogaWogMQp1R2QgcXUgMQp3dkYgdmEgMQp1cWcgcXUgMQpSd3AgcHIgMQpCZ2IgbmcgMQptblUgYW4gMQpkcEkgZGUgMQp3S2QgZGUgMQp5WHogc3ogMQprTGQgZGUgMQpnWXggbmcgMQpxeGsgcXUgMQpIaHkgdGggMQpmcEogcHIgMQpjVmMgY2ggMQprVnYgdmEgMQpKenMgc3QgMQpuRHcgYW4gMQp0akYgdGggMQpiWmogaWogMQptcUwgcXUgMQpoRnQgdGggMQpuTncgYW4gMQp3RnYgdmEgMQpnSGMgY2ggMQpxUnggcXUgMQpKeGggdGggMQpWcHYgdmEgMQpuTWsgYW4gMQp0ak4gdGggMQpmaFEgdGggMQpicEQgcHIgMQpEZmcgbmcgMQpqeU8gaWogMQpqaFYgdGggMQprVmsga2EgMQpuS2MgYW4gMQpqa0ogaWogMQpjd1MgY2ggMQpvRGYgb24gMQpta1kga2EgMQpnZFYgbmcgMQpYaGIgdGggMQpqVXEgcXUgMQphSmYgYW4gMQpReGcgbmcgMQp4elMgc3ogMQp2VXcgdmEgMQpoVGogdGggMQpvVnQgdGggMQp6ZHEgcXUgMQpmSHMgc3QgMQp4S2sga2EgMQpiRmMgY2ggMQpnV3EgcXUgMQpZcWEgYW4gMQpkbUggZGUgMQpUdHEgdGggMQppUWMgY2ggMQpqRmggaWogMQpmY1kgY2ggMQpmc1Igc3QgMQppV2cgaW4gMQpYeWogaWogMQpYanMgc3QgMQp4cGIgcHIgMQpselkgbGUgMQpwemcgbmcgMQpkVncgZGUgMQpJamMgY2ggMQpmdnEgcXUgMQpWbmIgYW4gMQp6ZEggZGUgMQpjRGQgY2ggMQp3cUkgcXUgMQp5ZlUgbnkgMQpxb0ggcXUgMQp4a3cga2EgMQpLY2sgY2ggMQptVXEgcXUgMQp6V20gc3ogMQpCZmogaWogMQpyUWogZXIgMQpxZVcgcXUgMQpxcEMgcXUgMQpvcU0gcXUgMQpwek8gc3ogMQpjalEgY2ggMQp6VHggc3ogMQpnUncgbmcgMQprZFEgZGUgMQp3YlEgd2EgMQpRcGogaWogMQp6SWMgY2ggMQp5eE4gbnkgMQpuQ2sgYW4gMQpKcXogcXUgMQpkRXEgcXUgMQpnZEUgbmcgMQp3Q2cgbmcgMQpwUXQgdGggMQp2S2UgZXIgMQpUam0gaWogMQpaY3kgY2ggMQprbVIga2EgMQpjVHAgY2ggMQpicUUgcXUgMQp2dlogdmEgMQpjTHcgY2ggMQpvSXcgb24gMQp4akcgaWogMQp2dFUgdGggMQpoY0ggdGggMQp4Z1QgbmcgMQp2cVIgcXUgMQp3dU0gcXUgMQp4c1kgc3QgMQpqQ3UgcXUgMQpGYm4gYW4gMQpjcUggY2ggMQpYanogaWogMQpmZ1IgbmcgMQp5aVggaW4gMQpxbk8gYW4gMQp3bU4gbWUgMQp3Z0ggbmcgMQp0YlogdGggMQpYa3Mgc3QgMQpwekMgcG8gMQpsZlggbGUgMQpxQnUgdW4gMQptTHcgbWUgMQpwbVkgbWUgMQp4cUUgcXUgMQpyalkgZXIgMQp2ckggZXIgMQpJdWYgcXUgMQp5ZkQgbnkgMQpjbEcgY2ggMQpjZFogY2ggMQplVGQgZXIgMQpsWHYgbGUgMQprcFYga2EgMQpzWnEgcXUgMQpXeGMgY2ggMQp2bUogdmEgMQpoa0UgdGggMQpwVXcgcHIgMQpDcWQgcXUgMQp3Q24gYW4gMQpweFEgcHIgMQpZd3AgcHIgMQp4d2Igd2EgMQpXam0gaWogMQp6cVEgcXUgMQpnVHAgbmcgMQp1WnYgcXUgMQptZEggZGUgMQpqdVEgcXUgMQpnVm0gbmcgMQp6alkgaWogMQpmaE4gdGggMQp3ZkQgd2EgMQpaamMgY2ggMQppUHYgaW4gMQptelcgc3ogMQp2WG0gdmEgMQpmRXEgcXUgMQpPenEgcXUgMQpnRXAgbmcgMQprRGogaWogMQpabHcgbGUgMQp6YlIgc3ogMQp6Q3QgdGggMQp3b1kgb24gMQpwa1Qga2EgMQprYkkga2EgMQpoZFcgZGUgMQpIc3ggc3QgMQp6cFggc3ogMQp6ZlYgc3ogMQpEaGsgdGggMQp3TXAgcHIgMQpoekogdGggMQpMd3AgcHIgMQp6bU4gc3ogMQp4ZnEgcXUgMQpzalEgc3ogMQp6a0sgc3ogMQpiQnYgdmEgMQpiZEUgZGUgMQpReG4gYW4gMQpqcXQgdGggMQpqaEcgdGggMQpmWXYgdmEgMQp4aEUgdGggMQpjYkYgY2ggMQpKbmIgYW4gMQpqeE4gaWogMQpmWXggZm8gMQpoSnAgdGggMQpjUnQgdGggMQpxblMgYW4gMQp2THAgdmEgMQpjQmQgY2ggMQpxcVUgcXUgMQpTZGQgZGUgMQp4ZVogZXIgMQpKd28gb24gMQpkUGYgZGUgMQpmTmwgbGUgMQprSWIga2EgMQpjYkwgY2ggMQpRZHIgZXIgMQpNZmIgYmUgMQpqSmwgbGUgMQpteFkgbWUgMQpsRmQgbGUgMQp0d1QgdGggMQprRmsga2EgMQpjckIgY2ggMQpqUnIgZXIgMQpIdHogdGggMQpwWWYgcHIgMQpyVmMgZXIgMQp2UmYgdmEgMQp3VnEgcXUgMQp6cEEgc3ogMQpnbFkgbGUgMQpzTmogaWogMQp2S3ggdmEgMQp0dkIgdGggMQpZamYgaWogMQptd1AgbWUgMQpKeWIgYmUgMQp0QmMgdGggMQpnU2IgbmcgMQpjTWwgY2ggMQpnakogbmcgMQpkWXogZGUgMQp6UGcgbmcgMQprcUIgcXUgMQpzRnYgc3QgMQp4a0gga2EgMQpmWnQgdGggMQp5aFIgdGggMQpid04gd2EgMQpxakcgcXUgMQpuUW0gYW4gMQpxTXIgcXUgMQpqY1cgY2ggMQpxSnYgcXUgMQpnVG0gbmcgMQprbVEga2EgMQpXbGMgY2ggMQprWWYga2EgMQplSnAgZXIgMQpUa2Iga2EgMQpoZk0gdGggMQpueFkgYW4gMQpwRGwgbGUgMQp3Y04gY2ggMQpwUWEgYW4gMQpvaFogdGggMQp4Unogc3ogMQpsYlYgbGUgMQpsS2MgY2ggMQp3eEIgd2EgMQpMd3cgd2EgMQpmcVEgcXUgMQpra1oga2EgMQppd08gaW4gMQpkZ1UgbmcgMQpkdk8gZGUgMQpwRHQgdGggMQprdksga2EgMQpqbFYgbGUgMQp4WGQgZGUgMQp5a0Yga3UgMQppeVQgaW4gMQpVZnggZm8gMQpuelUgYW4gMQp4YkggYnUgMQpsU2IgbGUgMQpYcGYgcHIgMQpVdmYgdmEgMQp5eUYgbnkgMQpmeFAgZm8gMQpqWXUgcXUgMQpxamIgcXUgMQpneEwgbmcgMQpwd0kgcHIgMQpqVWUgZXIgMQpyRmMgY2ggMQpmc0Ygc3QgMQpjZFcgY2ggMQpYd3AgcHIgMQp4ZEggZGUgMQpqWXMgaWogMQpiRmQgZGUgMQpxSWggdGggMQp5SWcgbmcgMQp2VGQgZGUgMQp3ZkUgd2EgMQpxUmIgcXUgMQp5aEsgdGggMQprTW4gYW4gMQpjcEIgY2ggMQp0eE4gdGggMQprUGQgZGUgMQpuYkIgYW4gMQpza1Egc3QgMQp1S3cgcXUgMQp3UWYgd2EgMQprV2Yga2EgMQp3cUEgcXUgMQpjd0EgY2ggMQp2Smsga2EgMQpoY0QgdGggMQpuZksgYW4gMQp1WGYgcXUgMQpjZ0EgY2ggMQpQamQgZGUgMQpMcXMgcXUgMQp6d0Mgc3ogMQpsak4gbGUgMQp2a1Aga2EgMQpScXAgcXUgMQp6R3ggc3ogMQpqUGcgbmcgMQprYlQga2EgMQprcFEga2EgMQpNenEgcXUgMQpHanMgc3QgMQprRGwgbGUgMQpqd1IgaWogMQpXeXEgcXUgMQpxeFMgcXUgMQpxR3QgdGggMQpXdnIgZXIgMQp6Tnggc3ogMQp2Q20gdmEgMQpobEQgdGggMQp2QnAgdmEgMQptSmMgY2ggMQpoRmIgdGggMQp2RG0gdmEgMQpwZkMgcHIgMQpMcHkgcHIgMQpGaGQgdGggMQpkeFMgZGUgMQp3V2cgbmcgMQpGZ24gYW4gMQpuRmYgYW4gMQpjeEYgY2ggMQphVmggdGggMQpTcXggcXUgMQpWanogaWogMQp6bkMgYW4gMQpxcXYgcXUgMQp6clogZXIgMQpiTmwgbGUgMQpudlcgYW4gMQpReWIgYmUgMQpGaHQgdGggMQpqR3YgaWogMQpnTHAgbmcgMQpnTGIgbmcgMQpxS2ogcXUgMQpoSmQgdGggMQpaamcgbmcgMQpuUXEgYW4gMQpucFggYW4gMQpxaU8gaW4gMQp2dkcgdmEgMQpqT3ggaWogMQpoaEUgdGggMQp2ZE4gZGUgMQpDenogc3ogMQpnalUgbmcgMQpoVmIgdGggMQpLY2cgY2ggMQpkdkggZGUgMQp3dEQgdGggMQpqSW8gb24gMQpqUWEgYW4gMQpGeWogaWogMQpjcFUgY2ggMQpoeFkgdGggMQpxYkQgcXUgMQpzdkogc3QgMQp2alcgaWogMQpncFkgbmcgMQpxblIgYW4gMQpnUW4gYW4gMQpDdmggdGggMQp5a0Iga2EgMQp4Z0IgbmcgMQp6ZkQgc3ogMQp5SHcgd2EgMQpxZEcgcXUgMQpxVG4gYW4gMQpsVG0gbGUgMQpqZ0IgbmcgMQpneFMgbmcgMQpxUGUgcXUgMQpwcFEgcHIgMQp5eFcgbnkgMQpIamsgaWogMQprTmsga2EgMQpjbkogYW4gMQp1SGQgcXUgMQpqdkggaWogMQpHZ24gbmcgMQpsYlMgbGUgMQpRY3ggY2ggMQpjcVIgY2ggMQpKeWMgY2ggMQp3UnAgcHIgMQpuZkEgYW4gMQpsWHcgbGUgMQpjbUogY2ggMQpZc3cgc3QgMQpxUXMgcXUgMQpnc1ggbmcgMQpjSXEgY2ggMQpqalogaWogMQpMbGIgbGUgMQptTXYgdmEgMQpsVmggdGggMQpGcGggdGggMQpabW0gbWUgMQp4TWQgZGUgMQpHd2Igd2EgMQpRanYgaWogMQpscVogcXUgMQp6SmggdGggMQpXa3kga2EgMQpoRGsgdGggMQp5TGcgbmcgMQpkWXcgZGUgMQpkQ3EgcXUgMQpHbWogaWogMQp4VHEgcXUgMQp3a0Yga2EgMQpoRnAgdGggMQpxbkIgYW4gMQp4eUogbnkgMQpuSWogYW4gMQp4WWQgZGUgMQpXcXIgcXUgMQp4cVYgcXUgMQp3WWsga2EgMQpRZHogZGUgMQpmYk4gYmUgMQpxd1kgcXUgMQpVYnggYmUgMQp3dEwgdGggMQpuUXcgYW4gMQpqSmsgaWogMQpOenMgc3QgMQpkQ24gYW4gMQpOZnYgdmEgMQpIZ2ggdGggMQpIY3EgY2ggMQpYdmIgdmEgMQpzeEogc3QgMQp3TXggd2EgMQpxRm4gYW4gMQpHemYgc3ogMQpxZkogcXUgMQp6ZFEgZGUgMQpYZ3ogbmcgMQpma0kga2EgMQpwdksgdmEgMQpDcXIgcXUgMQp6RmQgZGUgMQpvSG0gb24gMQphSmogYW4gMQpGemQgZGUgMQpkV2sgZGUgMQp3bUUgbWUgMQpzTWwgbGUgMQp0QnAgdGggMQp2TncgdmEgMQpRZGggdGggMQp3aEcgdGggMQpxQXAgcXUgMQpqck0gZXIgMQpySHcgZXIgMQpMdmMgY2ggMQpnUm4gYW4gMQp5alYgaWogMQpoUmsgdGggMQpia1Yga2EgMQpqV20gaWogMQp5WXogc3ogMQp2VHkgdmEgMQpkeFYgZGUgMQptS3kgbWUgMQpRbHEgcXUgMQpVcHggcHIgMQpRcHEgcXUgMQpMd20gbWUgMQp5WHIgZXIgMQpnVGsgbmcgMQpxblQgYW4gMQpWbHEgcXUgMQpRcWQgcXUgMQpaZGQgZGUgMQpYcXQgdGggMQpEZmIgYmUgMQpvZU8gb24gMQpuQ3ggYW4gMQpsWGQgbGUgMQp2SGMgY2ggMQp2QWIgdmEgMQpZYncgd2EgMQp6RG4gYW4gMQpkR2sgZGUgMQpwbEggbGUgMQpseEcgbGUgMQpIZ3AgbmcgMQpqUnogaWogMQpkVHMgZGUgMQptQ2ogaWogMQpsSGYgbGUgMQpsTGogbGUgMQp0TmIgdGggMQptS2sga2EgMQpnR2ogbmcgMQpqbFEgbGUgMQpZeWcgbmcgMQpmRHYgdmEgMQp6WGcgbmcgMQpxelogcXUgMQpmRWcgbmcgMQpsaFMgdGggMQptek0gc3ogMQp4cVQgcXUgMQpZY2ogY2ggMQpmYkYgYmUgMQpYc2ogaWogMQpMbmMgYW4gMQpHcXAgcXUgMQpmak8gaWogMQp6aEkgdGggMQp6Z0ggbmcgMQpnV2MgY2ggMQp5S2YgbnkgMQp1UWQgcXUgMQpLd2wgbGUgMQpkeEcgZGUgMQpZcXcgcXUgMQp0S2MgdGggMQpjV24gYW4gMQpoY0kgdGggMQp3Zlkgd2EgMQpyQnAgZXIgMQpjSmQgY2ggMQpzWWYgc3ogMQpTcWogcXUgMQprUXYga2EgMQp4cEYgcHIgMQpmY1ggY2ggMQp5ZksgbnkgMQpqUW8gb24gMQpnVGcgbmcgMQpRd24gYW4gMQpQbnggYW4gMQp5WnQgdGggMQp3UHogc3ogMQpqdVggcXUgMQpMeHYgdmEgMQppWHIgaW4gMQpwY0UgY2ggMQpOcXkgcXUgMQpoakkgdGggMQpoelYgdGggMQpubUYgYW4gMQpwdlcgdmEgMQplSncgZXIgMQpJcWQgcXUgMQpnWHkgbmcgMQp3Zlcgd2EgMQpWZHcgZGUgMQpxSnggcXUgMQpQZHEgcXUgMQpCamIgaWogMQpxTGwgcXUgMQp6ZFcgZGUgMQpmUXIgZXIgMQp4elcgc3ogMQp2d1EgdmEgMQpyd1UgZXIgMQpxUG4gYW4gMQpiRncgd2EgMQp2SGwgbGUgMQpoV2wgdGggMQp3Z08gbmcgMQpoTGsgdGggMQpKa2Iga2EgMQp6QmggdGggMQpEaHggdGggMQpGZ3YgbmcgMQpicEEgcHIgMQp6eEMgc3ogMQpnZlMgbmcgMQpNdnggdmEgMQp1UGsgcXUgMQpWcW4gYW4gMQp5cUMgcXUgMQp2TWsga2EgMQp3cUwgcXUgMQp3ckogZXIgMQpjZE4gY2ggMQpwd1IgcHIgMQpoTWYgdGggMQpqUGYgaWogMQpWYnYgdmEgMQpxekYgcXUgMQpxTmMgY2ggMQpKYnEgcXUgMQpmVGsga2EgMQpaZmYgZm8gMQpGenQgdGggMQpLY3cgY2ggMQplS2YgZXIgMQpwcVogcXUgMQpXcGIgcHIgMQpqa0YgaWogMQpWeHAgcHIgMQpoR3EgdGggMQpxQmMgY2ggMQpmY1QgY2ggMQpqTXEgcXUgMQprWnYga2EgMQpxa0cgcXUgMQpJZnAgcHIgMQpkUncgZGUgMQpabGogbGUgMQpLd2ogaWogMQpmTmIgYmUgMQpkWXkgZGUgMQpoWmwgdGggMQp3dFAgdGggMQpoUHogdGggMQpZa2MgY2ggMQpKbHcgbGUgMQpqTnQgdGggMQp5clcgZXIgMQpnV2QgbmcgMQp5WGQgZGUgMQpmUWwgbGUgMQpqZkYgaWogMQpFanggaWogMQpmR2sga2EgMQpaanogaWogMQp3ZE0gZGUgMQpqbEYgbGUgMQpjeFogY2ggMQpaZ2sgbmcgMQptY0ogY2ggMQpzbEUgbGUgMQpuWXEgYW4gMQpXZmcgbmcgMQp6Smsga2EgMQpidkYgdmEgMQpIbnogYW4gMQpXa3Yga2EgMQpNdnEgcXUgMQpEeGggdGggMQpCdnQgdGggMQpzTWogaWogMQp3UmYgd2EgMQp2TGIgdmEgMQp6R3EgcXUgMQptRnAgbWUgMQpnTmIgbmcgMQpwQ2cgbmcgMQp4RnMgc3ogMQpqS2YgaWogMQpxSmIgcXUgMQpwekkgc3ogMQpqZ0cgbmcgMQpwS3Mgc3ogMQpmcUQgcXUgMQpneFEgbmcgMQpmdkcgdmEgMQp3Z0YgbmcgMQpYeHogc3ogMQpMd3UgcXUgMQpkbFggbGUgMQpsUHogbGUgMQpXcWsgcXUgMQpYemogaWogMQp1SGogcXUgMQp1RmogcXUgMQpqdlYgaWogMQpqWGUgbGUgMQpaZm0gbWUgMQpxSW0gcXUgMQp6YkIgc3ogMQp5WmYgbnkgMQpzS2sgc3ogMQp6cEwgc3ogMQpxS2cgcXUgMQpJYmogaWogMQppUWIgaW4gMQpGeHUgcXUgMQpGcGIgcHIgMQpXdmEgYW4gMQpmekQgc3ogMQpia1Qga2EgMQpZa3QgdGggMQpuakcgYW4gMQpVdmggdGggMQpnZlQgbmcgMQp6Y0kgY2ggMQpiRHEgcXUgMQpKZGggdGggMQp4TWcgbmcgMQpKYnkgYmUgMQpsd0ogbGUgMQpzV3cgc3ogMQpTdncgdmEgMQpuclggYW4gMQp1dlYgcXUgMQpqVnIgZXIgMQp0cUIgdGggMQpiVnIgZXIgMQprUWwgbGUgMQpmYkcgYmUgMQpycU0gcXUgMQp6SGogaWogMQpmaFkgdGggMQpZenIgZXIgMQp2RmYgdmEgMQpRcGcgbmcgMQp1QXEgcXUgMQp6eFAgc3ogMQpqQ24gYW4gMQpxYU0gYW4gMQp4bFkgbGUgMQpjVGYgY2ggMQprQmYga2EgMQpjUWMgY2ggMQpSYmogaWogMQprVnMgc3ogMQpiR3YgdmEgMQp3ZE4gZGUgMQpnZk4gbmcgMQpiUGogaWogMQpnY0kgY2ggMQpneGogbmcgMQpySGIgZXIgMQpwVnIgZXIgMQpyVmogZXIgMQp2Z1MgbmcgMQpGcXogcXUgMQp4TWsga2EgMQpxUW0gcXUgMQpqWmMgY2ggMQpqQmMgY2ggMQp1d1kgcXUgMQpySGYgZXIgMQpjelggY2ggMQp6Y1QgY2ggMQpiRmogaWogMQpxY0IgY2ggMQpoZlQgdGggMQp4cU8gcXUgMQpxZnAgcXUgMQp4alUgaWogMQpiaFIgdGggMQp0V3YgdGggMQppcUUgaW4gMQpncFUgbmcgMQppV2IgaW4gMQp0bFAgdGggMQp0WXEgdGggMQpiQ3YgdmEgMQpvS2MgY2ggMQpTZ2ogbmcgMQpodnEgdGggMQprZlkga2EgMQp6Yk0gc3ogMQp6dkEgc3ogMQpjSHAgY2ggMQp2dksgdmEgMQpmcFogcHIgMQpkZlggZGUgMQp3cksgZXIgMQp4ZUUgZXIgMQpma1kga2EgMQpzYlggc3ogMQpmY1MgY2ggMQp2S2ggdGggMQpRbHggbGUgMQpacWggdGggMQpxV2cgcXUgMQpjZEwgY2ggMQpqdkcgaWogMQpNZ3ggbmcgMQpnd0YgbmcgMQprZFAgZGUgMQp1TXIgcXUgMQp0Y0QgdGggMQpxckwgcXUgMQpNdG0gdGggMQpiUXogc3ogMQpIcHggcHIgMQp6cEkgc3ogMQpqa1IgaWogMQpraEggdGggMQptU3EgcXUgMQpwRnogc3ogMQpqdU8gcXUgMQpYeXEgcXUgMQpqR2QgZGUgMQpZemQgZGUgMQp3YkMgd2EgMQp3U2Igd2EgMQpzWmQgZGUgMQpSenggc3ogMQpGbHggbGUgMQpicUMgcXUgMQpsY0ggY2ggMQp3bUcgbWUgMQp6Q2ogaWogMQp4YUQgYW4gMQppd0ggaW4gMQpxRHAgcXUgMQpzR3ggc3ogMQpYaHkgdGggMQplVmMgY2ggMQp3a0ogd2EgMQpMY2YgY2ggMQpsZ1EgbmcgMQpEaGggdGggMQp6Zk8gc3ogMQprVmMgY2ggMQpobUwgdGggMQpPd2Ygd2EgMQp3WmMgY2ggMQpkbk4gYW4gMQpNenAgc3ogMQptWXcgbWUgMQp5TGggdGggMQpYeHIgZXIgMQpxd0kgcXUgMQpUeHMgc3ogMQp5S3AgcHIgMQpialggaWogMQpwYlMgcHIgMQp6clAgZXIgMQpoSm0gdGggMQpxZ0EgcXUgMQp6d1kgc3ogMQpyWGsgZXIgMQpuRHggYW4gMQp2R3ogc3ogMQptUXEgcXUgMQp1cFkgcXUgMQpyTG4gYW4gMQpWZmsga2EgMQp3Q3YgdmEgMQpjZ3ggY2ggMQprWnEgcXUgMQpXancgaWogMQpRYXggYW4gMQpnckcgbmcgMQpiSmQgZGUgMQpkSnggZGUgMQpjTWQgY2ggMQpRY3MgY2ggMQpta0sga2EgMQpqTnggaWogMQptclkgZXIgMQpYd3ggd2EgMQpyWmwgZXIgMQpneFUgbmcgMQpMbnYgYW4gMQp5Z0MgbmcgMQpEcWggdGggMQpsTG4gYW4gMQptblEgYW4gMQpralUgaWogMQpidk8gdmEgMQpvVm0gb24gMQp2V3QgdGggMQpyR3EgcXUgMQp0YkogdGggMQpmU3YgdmEgMQp3Sm4gYW4gMQpmSnYgdmEgMQpvUXYgb24gMQpWd3Mgc3ogMQpwblUgYW4gMQpObWggdGggMQpjVHEgY2ggMQpFZHggZGUgMQp1cXcgcXUgMQpZcmggdGggMQpRbnggYW4gMQptSmYgbWUgMQprRHEgcXUgMQpYaGQgdGggMQpuTHggYW4gMQp4a1Uga2EgMQpmcVQgcXUgMQpxWWggdGggMQpiRnYgdmEgMQp4YlEgYmUgMQp2Y1MgY2ggMQpxcVQgcXUgMQpna0YgbmcgMQp6RmggdGggMQprcEUga2EgMQpHeGIgYmUgMQpadHcgdGggMQpxSWwgcXUgMQpRa2QgZGUgMQp3ZFYgZGUgMQpyd1AgZXIgMQphQ2cgYW4gMQpacnMgZXIgMQp6bVcgc3ogMQp2Zk8gdmEgMQpoQmogdGggMQp0YkggdGggMQpEeHYgdmEgMQp6ZEQgZGUgMQpuQncgYW4gMQpsclYgZXIgMQpnUXEgbmcgMQp0bEsgdGggMQp6dFAgdGggMQp5cVYgcXUgMQpuUm0gYW4gMQpqVnogc3ogMQpDcnEgZXIgMQpmRmcgbmcgMQpYamcgbmcgMQpDbWwgbGUgMQpxV2ogcXUgMQpqek8gaWogMQpNZHEgcXUgMQptdFEgdGggMQpyR3YgZXIgMQprR24gYW4gMQptTGcgbmcgMQp1V2ogcXUgMQpSY3EgY2ggMQpjVnAgY2ggMQpiV2sga2EgMQpYenggc3ogMQpXa2Iga2EgMQp4ekggc3ogMQpxdVAgdW4gMQpkSHYgZGUgMQpEbXEgcXUgMQpEZ3YgbmcgMQp0Z1kgdGggMQpqdE0gdGggMQp0TXogdGggMQpiSG0gbWUgMQpaZmsga2EgMQp4WnAgcHIgMQpqa0ggaWogMQpyTnAgZXIgMQp4TXYgdmEgMQp3cEYgcHIgMQpkakQgZGUgMQpieFYgYmUgMQpoZ1MgdGggMQpQa2ggdGggMQpEeHEgcXUgMQptTXggbWUgMQpkR2ogZGUgMQprYkgga2EgMQpMaGcgdGggMQpEdnEgcXUgMQpxclQgcXUgMQpJancgaWogMQp3dUkgcXUgMQpad24gYW4gMQpkaEogdGggMQpxY1IgY2ggMQp3aE0gdGggMQpwZ1AgbmcgMQpxa1IgcXUgMQpzcVIgcXUgMQpseFkgbGUgMQp2VncgdmEgMQpsS2QgbGUgMQpObHkgbGUgMQp5S3ogc3ogMQpxQmIgcXUgMQp3UXggd2EgMQprWXcga2EgMQpmUWQgZGUgMQpzdlcgc3ogMQp5R3AgcHIgMQp5dEIgdGggMQpqdlUgaWogMQpranoga2EgMQpqVmMgY2ggMQpRYnogc3ogMQpwcU0gcXUgMQp2d3Uga3UgMQpRd3cgd2EgMQpkY1ogY2ggMQpsaEcgdGggMQpnbVMgbmcgMQpJcXogcXUgMQp6WmYgc3ogMQpoTG4gdGggMQplTWYgZXIgMQp4TnEgcXUgMQptUG0gdW0gMQpwTWcgbmcgMQp3elcgc3ogMQprUmwgbGUgMQpoeksgdGggMQpmYk8gYmUgMQpYeHQgdGggMQpGbnggYW4gMQpCdm4gYW4gMQpialogaWogMQp0Y1kgdGggMQpkbUIgZGUgMQpxRmUgcXUgMQpreEIga2EgMQpxQnogcXUgMQpwVnAgcHIgMQpib1Egb24gMQp4b0ggb24gMQpkV2cgZGUgMQpUZHEgcXUgMQp6TnEgcXUgMQp2WXAgdmEgMQpwRGYgcHIgMQpsd0cgbGUgMQpoRHEgdGggMQpKZHkgZGUgMQpzblogYW4gMQptelUgc3ogMQp6S3ggc3ogMQpydkMgZXIgMQp3dVMgcXUgMQpkblEgYW4gMQp2Q3kgdmEgMQpVZHcgd2EgMQpiVGwgbGUgMQpxYkMgcXUgMQp0YlQgdGggMQppRGsga2EgMQpXaGIgdGggMQp0YlggdGggMQp0Zk8gdGggMQpUZnEgcXUgMQpkYlcgZGUgMQpCZHkgZGUgMQp2alIgaWogMQpjYkMgY2ggMQp3dVcgcXUgMQp3Q3cgd2EgMQpXZHEgcXUgMQp2UmIgdmEgMQpiV20gbWUgMQp2WncgdmEgMQpkSmogZGUgMQpxWnkgcXUgMQpKZ3EgbmcgMQp6Ykggc3ogMQpoSmwgdGggMQpYaGcgdGggMQpuVnAgYW4gMQpkVmMgY2ggMQpxQ2MgY2ggMQpvWWcgbmcgMQprd0gga2EgMQp2d04gdmEgMQp6Zncgc3ogMQp2bE8gbGUgMQp6dFggdGkgMQpkS3ggZGUgMQp4UXMgc3ogMQpjRGwgY2ggMQp5VnYgdmEgMQp6cE4gc3ogMQp4a0cga2EgMQplcVcgcXUgMQpqZEQgZGkgMQpmUW0gbWUgMQpZaGwgdGggMQp0QmYgdGggMQpxRWYgcXUgMQp3aFggdGggMQpWZ3YgbmcgMQpMc3EgcXUgMQpkZkogZGUgMQpaZHAgZGUgMQpyWmMgY2ggMQp0WmggY2ggMQptdEMgdGggMQp6eFEgc3ogMQpWbmogYW4gMQpzSGcgbmcgMQp3WWwgbGUgMQpCcWIgcXUgMQp5clYgZXIgMQpZY3MgY2ggMQpqUncgaWogMQppV3QgdGggMQpoVncgdGggMQp3WnMgc3ogMQpDcW8gcXUgMQpHZm4gYW4gMQpyQnYgZXIgMQpPanogc3ogMQp6R2Ygc3ogMQpiWmMgY2ggMQpGdmQgZGUgMQpaZ3MgbmcgMQpSZmcgbmcgMQpSd3cgd2EgMQpZcnAgZXIgMQppRnAgaW4gMQpiVnggYmUgMQp6Zk0gc3ogMQpxZFYgcXUgMQpiR20gbWUgMQp0bkogdGggMQpwZFIgZGUgMQpnQmMgY2ggMQpnekMgbmcgMQpQd2MgY2ggMQp1QXcgcXUgMQp6blggYW4gMQp2Z1QgbmcgMQpvQXcga28gMQp4Qm0gbWUgMQpkTmYgZGUgMQpQcXMgcXUgMQpOcGQgZGkgMQpvVXkga28gMQpmcEQgcHIgMQpSZnggZm8gMQpsWG0gbGUgMQpxV3MgcXUgMQpnV3YgdmkgMQpGd3YgdmEgMQpMcWogcXUgMQpmdlEgdmEgMQp6Z0IgbmcgMQprSmwgbGUgMQp2V28gb24gMQpYdmMgY2ggMQp5RHEgcXUgMQpiZFAgZGUgMQpqVmYgaWogMQp3UHcgd2EgMQpkd0EgZGUgMQpPcXAgcXUgMQpxaVogaW4gMQp4ZFYgZGUgMQpxRmcgbmcgMQpxekkgcXUgMQp5d0wgd2EgMQpzV3Ygc3ogMQpUcHkgcHIgMQp3YmYgd2EgMQp1UGcgbmcgMQpLbncgYW4gMQppdU8gaW4gMQpRZG4gYW4gMQpZZnYgdmEgMQp3dUsgcXUgMQp4TG4gYW4gMQp5SmcgbmcgMQpOZmsga2EgMQpZcWwgcXUgMQpxc0ggcXUgMQpSenYgc3ogMQpiSXAgcHIgMQpzUXQgdGggMQp0Z0MgdGggMQpxU2EgYW4gMQpmeFEgZm8gMQpoY1ogdGggMQp3Ykogd2EgMQpxUmwgcXUgMQpHY3kgY2ggMQp2Wm0gdmEgMQpYemwgbGUgMQp3Z1IgbmcgMQpkbE8gbGUgMQp0Q2IgdGggMQpxbVkgcXUgMQpxWnggcXUgMQpMYnAgcHIgMQpEZ3EgbmcgMQpWa2ogaWogMQp3cVUgcXUgMQpNcWsgcXUgMQp3VXYgdmEgMQpxZ0MgbmcgMQpzYkQgc3ogMQpTcXkgcXUgMQpiTXEgcXUgMQpCenQgdGggMQpzSXEgcXUgMQpjVmogY2ggMQp3SnQgdGggMQpYam0gaWogMQpIbWcgbmcgMQphUWQgYW4gMQppSHQgdGggMQpmTW0gbWUgMQp3V2MgY2ggMQpmdUUgcXUgMQptQ2YgbWUgMQpxblAgYW4gMQp6TG4gYW4gMQprUnQgdGggMQpNdmwgbGUgMQptUmQgZGUgMQp5ZkogbnkgMQp4Q2IgYmUgMQpzUWIgc3ogMQpxdUMgdW4gMQpDdGMgdGggMQpwUHYgdmEgMQp6akkgc3ogMQp4bUMgbWUgMQp4ZEogZGUgMQpuWHYgYW4gMQp2c08gc3ogMQpwUmQgZGUgMQp2YkYgdmEgMQp3TmwgbGUgMQprSHEgcXUgMQpyd00gZXIgMQpneEQgbmcgMQpRaGkgdGggMQptcUIgcXUgMQpwbkwgYW4gMQpiS2IgYmUgMQppcU4gaW4gMQpka1ggZGUgMQpiUWQgZGUgMQpiTmogaWogMQpUbGsgbGUgMQpObGcgbmcgMQpDeGggdGggMQpNcWYgcXUgMQpQdmogaWogMQp6d1ogc3ogMQpwR2IgcHIgMQpuckYgYW4gMQpia1Mga2EgMQpkUnYgZGUgMQpqSm0gaWogMQppcUYgaW4gMQpmR2MgY2ggMQpueFcgYW4gMQp4c1cgc3ogMQptZlEgbWUgMQpmZ1AgbmcgMQpqbEggbGUgMQpuckkgYW4gMQprWHYga2EgMQpWcHEgcXUgMQp6TWsgc3ogMQpwSGYgcHIgMQpqZE0gZGUgMQpicUogcXUgMQpDa3QgdGggMQp6S3Ygc3ogMQpqekcgc3ogMQp1SXggcXUgMQp5Tm0gbWUgMQpqWXQgdGggMQpmd0wgd2EgMQpkWnggZGUgMQp2Z0YgbmcgMQp3WGkgaW4gMQp2WnQgdGggMQpDdGYgdGggMQp4cUMgcXUgMQpxT2MgY2ggMQp5Z1ggbmcgMQprV2sga2EgMQpnckYgbmcgMQpxblggYW4gMQp4VWkgaW4gMQpwbUMgbWUgMQp1ekUgcXUgMQpJdncgdmEgMQpndkkgbmcgMQprblogYW4gMQpseFogbGUgMQpYd2Ygd2EgMQpEcWIgcXUgMQp5S2cgbmcgMQpWd2cgbmcgMQp4U2IgYmUgMQpId3AgcHIgMQp5TnggbnkgMQp5b1Egb24gMQpjU3ggY2ggMQpFdnEgcXUgMQp0SXcgdGggMQpkZlogZGUgMQpoelAgdGggMQp4Qmsga2EgMQprcXIgcXUgMQp5Qm0gbWUgMQpsSmogbGUgMQpjanEgY2ggMQpkclcgZXIgMQpxYUQgYW4gMQp3RGYgd2EgMQpMeHogc3ogMQp6UWYgZm8gMQpKdHEgdGggMQpxUnYgcXUgMQpHZmMgY2ggMQpYYnQgdGggMQp3WmIgd2EgMQpzclEgZXIgMQpnSnEgbmcgMQpqRnQgdGggMQpnTmMgY2ggMQpSa3IgZXIgMQpwekogc3ogMQpsYkEgbGUgMQpjQnEgY2ggMQpLeXEgcXUgMQp4Y08gY2ggMQp6WHIgZXIgMQpjVnMgY2ggMQpyWW0gZXIgMQprVm0ga2EgMQpmY1ogY2ggMQpmekMgc3ogMQp0S3AgdGggMQpnUHogbmcgMQpxY0wgY2ggMQpZanIgZXIgMQp6eFUgc3ogMQp4YlQgYmUgMQpudlggYW4gMQpxbVIgcXUgMQpieEwgYmUgMQpYd3cgd2EgMQpqU2YgaWogMQpsTmYgbGUgMQp6VHMgc3ogMQprRnEgcXUgMQpxTHogcXUgMQpyclggZXIgMQp3WGcgbmcgMQp6dkUgc3ogMQpId3ggd2EgMQpxRm0gcXUgMQpjZ1IgY2ggMQpwRHAgcHIgMQpPcWIgcXUgMQpzVmMgY2ggMQpYdHggdGggMQpRd3QgdGggMQpXZmUgZXIgMQpQY3ggY2ggMQpicE8gcHIgMQpDd2cgbmcgMQp3eE8gd2EgMQpiVnMgc3ogMQpqRncgaWogMQpmbkYgYW4gMQpreEgga2EgMQpZd3Mgc3ogMQpnZEQgbmcgMQpqV3ggaWogMQpjVGwgY2ggMQprbVcga2EgMQptaFcgdGggMQpielQgc3ogMQpydkogZXIgMQp4Y0ogY2ggMQp2a1Mga2EgMQpzWHIgZXIgMQpzQ3Ygc3ogMQpOdHAgdGggMQpvSGggbG8gMQpZdnMgc3ogMQpwVmYgcHIgMQprRXEgcXUgMQpxZkUgcXUgMQpvV20gb24gMQp0TXcgdGggMQp6WXAgc3ogMQpuRncgYW4gMQp5UWMgY2ggMQp6UWogc3ogMQp3S3EgcXUgMQptS2YgbWUgMQp1THIgcXUgMQp3SWIgd2EgMQp3ckggZXIgMQpwZ0wgbmcgMQpMYnQgdGggMQp6akYgc3ogMQpxRnAgcXUgMQp6ZFggZGUgMQp3VGMgY2ggMQpKd2wgbGUgMQpseFUgbGUgMQpoakEgdGggMQppUGcgaW4gMQpYbnMgYW4gMQp3a1cga2EgMQpwZlAgcHIgMQpEeXEgcXUgMQpqV3UgcXUgMQpxelIgcXUgMQpZanogc3ogMQp0d1ggdGggMQpOd2ogaWogMQpqYkIgaWogMQpxd1IgcXUgMQpZdGYgdGggMQpibFggbGUgMQp4Wmsga2EgMQpZbXcgbWUgMQp3Zlggd2EgMQpWcXkgcXUgMQpYcW4gYW4gMQp5VXcgd2EgMQpqelQgam8gMQprTnQgdGggMQpwbVEgbWUgMQpkWHIgZXIgMQp5bHEgcXUgMQp0V3ogdGggMQpLdnIgZXIgMQpiaFEgdGggMQp1Sm4gYW4gMQpwYlQgcHIgMQphQmYgYW4gMQpSaGogdGggMQp1QXggcXUgMQpCZ3ggbmcgMQpqcU4gcXUgMQpqZEMgaWogMQpmQnMgc3QgMQpjWGsgY2ggMQpubU0gYW4gMQp4UnIgZXIgMQpIa3ogc3ogMQpkaFogdGggMQpGeXAgcHIgMQprR20ga2EgMQpzR3EgcXUgMQpqS2ggdGggMQp2RHogc3ogMQp2THEgcXUgMQpsSnMgbGUgMQp6Tm4gYW4gMQpXZ2ogbmcgMQpqbUwgaWogMQpnVnQgdGggMQp3Rnogc3ogMQp6YkQgc3ogMQprVGQgZGUgMQpkd1ggZGUgMQp4UmwgbGUgMQpBenYgc3ogMQpiUWggdGggMQpxUWYgcXUgMQp5b1ogb24gMQpqUHMgc3ogMQpqeUcgaWogMQprWGoga2EgMQp5QnYgdmEgMQpud1AgYW4gMQp4bkEgYW4gMQpiS2YgYmUgMQpxYlAgcXUgMQp2R3Mgc3ogMQpqakcgaWogMQpLcWMgY2ggMQp6VnQgdGggMQp3U2cgbmcgMQpzV20gc3ogMQpmRGcgbmcgMQpwSHogc3ogMQpmWXAgcHIgMQp6clcgZXIgMQpsRHggbGUgMQpoUWggdGggMQpCZHAgZGUgMQpmcVogcXUgMQpvUW0gb24gMQpRc3EgcXUgMQp4anEgcXUgMQpNZnYgdmEgMQp6YlEgc3ogMQpxdVIgdW4gMQpjTWIgY2ggMQp6cUQgcXUgMQpkWGYgZGUgMQpySGggdGggMQpqaEYgdGggMQpuTmYgYW4gMQp3SGIgd2EgMQpUcHEgcXUgMQpialkgaWogMQpjSnEgY2ggMQpsQ2sgbGUgMQpQZnAgcHIgMQpPcW4gYW4gMQpmbVIgbWUgMQpRcHUgcXUgMQpOY3YgY2ggMQpxWXIgcXUgMQpzZkEgc3ogMQpmclMgZXIgMQpHcGYgcHIgMQpqbUQgaWogMQpod0kgdGggMQpSYnogc3ogMQpqaEIgdGggMQp4WGogaWogMQpxWWQgcXUgMQpzVmYgc3ogMQpjQ3ogY2ggMQpxTWwgcXUgMQpmcEsgcHIgMQpoVnkgdGggMQpsY0ogY2ggMQpPa2ogaWogMQpxSmcgbmcgMQpqTHAgaWogMQpuWWYgYW4gMQpucEYgb24gMQpyV2sgZXIgMQptY1AgY2ggMQpuWm0gYW4gMQpmWWIgZm8gMQp6YkMgc3ogMQpuQnEgYW4gMQpmankgaWogMQpiSXggYmUgMQp0d04gdGggMQpHZ2sgbmcgMQpDem0gc3ogMQpqdE8gdGggMQpuUmwgYW4gMQpqeUMgaWogMQp5RWggdGggMQp2bUggdmEgMQp3dFEgdGggMQp3SWYgd2EgMQpqSWYgaWogMQpxYk0gcXUgMQpSd3EgcXUgMQpmcUYgcXUgMQpXZmogaWogMQpqZlcgaWogMQp3V20gbWUgMQpXcHAgcHIgMQpNZ2ogbmcgMQpkU2YgZGUgMQp3WXYgdmEgMQpjY0kgY2ggMQp5bFQgbGUgMQpHcWggdGggMQpDbXogc3ogMQpIZmsga2EgMQpxQnQgdGggMQp5Q2YgbnkgMQpxek8gcXUgMQp5ZEYgZGUgMQpWZHQgdGggMQpwSmQgZGUgMQpzZlIgc3ogMQpkbFYgbGUgMQpqT2QgZGUgMQpuZkYgYW4gMQp3VHQgdGggMQpyR2sgZXIgMQp4QXcgd2EgMQp2ZkYgdmEgMQpEemcgbmcgMQprRnAga2EgMQpqVG0gaWogMQpuTnEgYW4gMQpxY04gY2ggMQpKanggaWogMQp0S2YgdGggMQpacnEgcXUgMQpobUsgdGggMQpNcXogcXUgMQp4ZlIgZm8gMQp3UXEgcXUgMQptcUcgcXUgMQp4VXIgZXIgMQpvaVUgaW4gMQpxc1MgcXUgMQpxR2cgbmcgMQpxdE8gdGggMQp0UGIgdGggMQpScW0gcXUgMQp2a1gga2EgMQpXc2Igc3QgMQpjeFIgY2ggMQpmWnIgZXIgMQp5UWcgbmcgMQp6aVUgaW4gMQp4dlcgdmEgMQphRHggYW4gMQpiUWogaWogMQpqeEMgaWogMQpUd2sga2EgMQpzUWggdGggMQpCZnggZm8gMQphR2ogYW4gMQpQZ2MgY2ggMQpIemggdGggMQpxZ1cgbmcgMQprZEYgZGUgMQprYlkga2EgMQpRanggaWogMQpIeGogaWogMQp0VnggdGggMQpueFogYW4gMQpvVmQgb24gMQpIbHEgcXUgMQpqS3ogc3ogMQpxQWkgaW4gMQpkTmwgbGUgMQpwcUEgcXUgMQplSXYgZXIgMQp4bVcgbWUgMQp5Y0sgY2ggMQptUWQgZGUgMQpobVUgdGggMQpubEYgYW4gMQpHa2wgbGUgMQpxQnEgcXUgMQpyaFEgdGggMQpabmsgYW4gMQpWZnAgcHIgMQpuQm4gYW4gMQpxdkwgcXUgMQphcU4gYW4gMQprTGYga2EgMQp6SnIgZXIgMQp0UXcgdGggMQpzV3EgcXUgMQpid1cgd2EgMQp2ekIgc3ogMQp5eVIgbnkgMQpxcU4gcXUgMQp3eUkgbnkgMQpqekogc3ogMQpxZ0kgcXUgMQpiZ1EgbmcgMQp5THQgdGggMQpWcXEgcXUgMQpYbnIgYW4gMQp3SGcgbmcgMQphUWcgYW4gMQpjRmggdGggMQp6alEgc3ogMQpncEQgbmcgMQp4ek4gc3ogMQppSXcgaW4gMQpkUWcgbmcgMQpwUXkgcHIgMQpYeXggbnkgMQpzV2MgY2ggMQpqRmQgZGUgMQpicEYgcHIgMQpWc3Ygc3QgMQpRcWwgcXUgMQp3elQgc3ogMQpzcVEgcXUgMQpLem0gc3ogMQpvRnEgcXUgMQpna0ogbmcgMQpoa0ggdGggMQpxTGcgbmcgMQpibVUgbWUgMQpjckogY2ggMQpzbFggbGUgMQpUenggc3ogMQpxYnggcXUgMQprcEkga2EgMQp4Q2YgZm8gMQpGbWwgbGUgMQpRaGogdGggMQp0UXMgdGggMQp2UmQgZGUgMQpZY2IgY2ggMQpjalAgY2ggMQp5dUUgcXUgMQpnSWkgaW4gMQprV2cgbmcgMQpKd2ggdGggMQpmVnkgbnkgMQpqcXkgcXUgMQpXenAgc3ogMQpDd2MgY2ggMQpxRXkgcXUgMQpqclggZXIgMQpLcWkgaW4gMQpsWXYgbGUgMQpkR3YgZGUgMQpDd2ogaWogMQpuRHYgYW4gMQpPam0gaWogMQpEbnggYW4gMQp2ckYgZXIgMQpKbXIgZXIgMQp6Zkkgc3ogMQpicVQgcXUgMQpYdmogaWogMQpuUHAgYW4gMQphVncgYW4gMQp3QnYgdmEgMQprVmIga2EgMQpnY0ggY2ggMQpYYnMgc3ogMQp0UmQgdGggMQptUXogc3ogMQpIeGUgZXIgMQpEbncgYW4gMQp4V2cgbmcgMQpwR2MgY2ggMQpoZ0kgdGggMQp5d1Agd2EgMQpuclcgYW4gMQppVnEgZGkgMQp4ekUgc3ogMQpWeGQgZGUgMQpMemMgY2ggMQpKd3AgcHIgMQpnQ3EgbmcgMQpPdHEgdGggMQp3dlAgdmEgMQpjTnIgY2ggMQppWHEgaW4gMQpRbmwgaW4gMQp0UHogdGggMQpoSWIgdGggMQphUGcgYW4gMQp6dncgc3ogMQpucU8gYW4gMQpzcU8gcXUgMQpialEgaWogMQpsd1EgbGUgMQpwRXEgcXUgMQpiV2ogaWogMQpzd1Qgc3ogMQpnbVkgbmcgMQpnUmsgbmcgMQpkWnIgZXIgMQpmTXIgZXIgMQpseE8gbGUgMQprYlEga2EgMQp5Zk4gbnkgMQp5bXEgcXUgMQpqcEsgaWogMQpXam4gYW4gMQpmbVcgbWUgMQpyS3ggZXIgMQpkbEggbGUgMQprY0sgY2ggMQp2YlYgdmEgMQpxTmwgcXUgMQpwSHQgdGggMQpobFQgdGggMQpsQnYgbGUgMQpvYUYgYW4gMQp4Zk0gZm8gMQpyWmQgZXIgMQpqZ1cgbmcgMQpIdmggdGggMQpGa2Yga2EgMQpjRGMgY2ggMQpoTGggdGggMQpxUXAgcXUgMQp6aEogdGggMQppdlEgaW4gMQpVa3EgcXUgMQpicFYgcHIgMQpiSnEgcXUgMQphUHcgYW4gMQpzZEsgZGUgMQpjR2YgY2ggMQpMancgaWogMQpxaFAgdGggMQptRncgbWUgMQpmSXUgcXUgMQp6aEIgdGggMQpmdUggcXUgMQpiRnEgcXUgMQpXZ2sgbmcgMQpGcWggdGggMQp6bWYgc3ogMQpacGYgcHIgMQpuRmggdGggMQp5Qncgd2EgMQpnSWogbmcgMQpxQmYgZm8gMQpVd2wgbGUgMQp6ck0gZXIgMQp5QmQgZGUgMQpSbGYgbGUgMQpQemggY2ggMQpyWnggZXIgMQpxVnMgcXUgMQpkeEogZGUgMQpMY3ogY2ggMQpnRm4gYW4gMQp2SW0gdmEgMQpxdEcgdGggMQpxYkcgcXUgMQpiSGcgbmcgMQp4clkgZXIgMQp0QmQgdGggMQpuS3EgYW4gMQpOa3QgdGggMQpqQ3EgcXUgMQpieVggYmUgMQpvQnAgb24gMQpXanogc3ogMQp6ZlAgc3ogMQphUXogYW4gMQpzanggaWogMQpuZlcgYW4gMQpuWHcgYW4gMQpiSncgd2EgMQphU2YgYW4gMQppUmYgaW4gMQp5TWQgZGUgMQpmQmMgY2ggMQp2eFIgdmEgMQpMbHggbGUgMQp5R3Mgc3ogMQpKc3kgc3ogMQpMdnggdmEgMQplRmggdGggMQp3Yk0gd2EgMQp1T3EgcXUgMQp3V2wgbGUgMQpidlUgdmEgMQpmbk8gYW4gMQptekkgc3ogMQpWY2YgY2ggMQptaEUgdGggMQp2Z1EgbmcgMQpqZ1AgbmcgMQpxYmogcXUgMQpiWmYgYmUgMQpYdGogdGggMQp5WXEgcXUgMQpqZEsgZGUgMQpqekIgc3ogMQpZeXMgc3ogMQp3VWcgbmcgMQp5QmIgYmUgMQpxak0gcXUgMQpzWHcgc3ogMQpYcXcgcXUgMQpjVGIgY2ggMQpqckUgZXIgMQpzTnAgc3ogMQpaaG0gdGggMQp4VnMgc3ogMQpqR3ogc3ogMQpKcWggdGggMQp6VG0gc3ogMQp2aEUgdGggMQpkUWkgaW4gMQpUbXYgdmEgMQpxeEQgcXUgMQpmekUgc3ogMQp2TXIgZXIgMQpDcXggcXUgMQp0d1kgdGggMQpuVnogYW4gMQpsUmsgbGUgMQpPd3EgcXUgMQpxWWogcXUgMQp5UWsga2EgMQpObGYgbGUgMQpxRG4gYW4gMQpiSHcgd2EgMQpjakEgY2ggMQpzZ1UgbmcgMQprUWkgaW4gMQp5TmYgbnkgMQpsd1ogbGUgMQp2R2QgZGUgMQpWbW4gYW4gMQp0cEIgdGggMQpjRmQgY2ggMQp4SG0gbWUgMQpiU2cgbmcgMQpoRXEgdGggMQpld1EgZXIgMQplV2QgZXIgMQpqZlIgaWogMQp6cFkgc3ogMQpjdlEgY2ggMQpoWHIgdGggMQpjSncgY2ggMQp3RXAgcHIgMQpOeGwgbGUgMQpxTWYgcXUgMQp2R2MgY2ggMQpweVEgcHIgMQpqcFUgaWogMQp4b0Egb24gMQpnWG4gYW4gMQpxcUcgcXUgMQpwWG4gYW4gMQp2bFAgbGUgMQpMenYgc3ogMQpqeEIgaWogMQpjSmMgY2ggMQpqY1QgY2ggMQpXdG0gdGggMQpjTGcgY2ggMQprVXgga2EgMQpuRnAgYW4gMQpKc3cgc3ogMQpzQmcgbmcgMQpqRm4gYW4gMQpndkMgbmcgMQpmRnkgbnkgMQpxbkEgYW4gMQpaYmIgYmUgMQpQenggc3ogMQpwc0ogc3ogMQpsWnEgcXUgMQp5ZlAgbnkgMQpnWXYgbmcgMQpiZkMgYmUgMQpkTXggZGUgMQpobE4gdGggMQp3UmwgbGUgMQpxakggcXUgMQpXamMgY2ggMQp1UXAgcXUgMQp6VGIgc3ogMQpxVXIgcXUgMQp6cXAgcXUgMQp2bFIgbGUgMQpqcVggcXUgMQpzd1Igc3ogMQpxTXkgbnkgMQp6a1Qgc3ogMQp5cVggcXUgMQpubFIgYW4gMQpIcW4gYW4gMQphYUogYW4gMQpsS3cgbGUgMQpiekIgc3ogMQpWZ2sgbmcgMQphVm0gYW4gMQpkblIgYW4gMQp0eFEgdGggMQpRemkgaW4gMQp6eFYgc3ogMQp4Z1EgbmcgMQp0dlogdGggMQpqd04gaWogMQpFcWogcXUgMQpCeGogaWogMQpoekggdGggMQpRZnkgbnkgMQpQcGogaWogMQpBcXAgcXUgMQp6Sm4gYW4gMQpzekYgc3QgMQpxZlggcXUgMQpwelYgc3ogMQp0Z04gdGggMQp4c1Mgc3ogMQpuUXogYW4gMQp0a0YgdGggMQpRaHEgdGggMQpnSmMgY2ggMQp1T2EgYW4gMQpycVcgcXUgMQpmWXogc3ogMQp1RmMgY2ggMQpOY3ggY2ggMQpsTXcgbGUgMQpjakkgY2ggMQpKY3cgY2ggMQp2RW8gb24gMQplUXkgZXIgMQpTeGMgY2ggMQpiVXggbWIgMQp6ZEogc3ogMQpscE4gbGUgMQpSa3EgcXUgMQp2dkkgdmEgMQpRbXEgcXUgMQp0Z0ogdGggMQpnZkUgbmcgMQpxY1ggY2ggMQprbFQgbGUgMQpiYlYgYmUgMQpwbVogbWUgMQp1cUEgcXUgMQpjWXkgY2ggMQp3bVkgbWUgMQp6bEIgbGUgMQp6TmQgc3ogMQpjdlogY2ggMQpkdkwgZGUgMQp3THogc3ogMQpxY0cgY2ggMQpRamwgbGUgMQpucWYgYW4gMQpneFkgbmcgMQphcUkgYW4gMQpLcWEgYW4gMQpYcXAgcXUgMQpZdmcgbmcgMQpxcUYgcXUgMQp5SGggdGggMQpuSGMgYW4gMQpVcXEgcXUgMQp6Zk4gc3ogMQptWHEgcXUgMQpGZ2ogbmcgMQpEc3ggc3ogMQp4UnYgdmEgMQp3Ylogd2EgMQpIbnAgYW4gMQpmVXggZm8gMQpjWWQgY2ggMQpxVGcgbmcgMQpCZ3EgbmcgMQpwQ24gYW4gMQpYbWggdGggMQp2akogaWogMQp0ZEcgdGggMQpaaGsgdGggMQp4Rm4gYW4gMQpka1EgZGUgMQpMY2cgY2ggMQptSXUgcXUgMQpJd2QgZGUgMQp3ancgaWogMQp6Ylggc3ogMQpZaHAgdGggMQpjdkggY2ggMQpMY3ggY2ggMQpXZm4gYW4gMQpOZnEgcXUgMQpxTXYgcXUgMQpVdncgdmEgMQpRbmggdGggMQpuYkcgYW4gMQpzRmcgbmcgMQp4bEogbGUgMQpiUGIgYmUgMQp4cEkgcHIgMQptclYgZXIgMQpGd3UgcXUgMQp3T3kgd2EgMQpQbWggdGggMQpKaHEgdGggMQpaYnggYmUgMQpwZ1kgbmcgMQpSYncgd2EgMQpBd3ggd2EgMQptY0IgY2ggMQpna0cgbmcgMQp4a1cga2EgMQpQbncgaW4gMQpiTnMgc3ogMQpuWHIgYW4gMQpWbXQgdGggMQplVXYgZXIgMQp5UXYgdmEgMQpreHIgZXIgMQpLc3cgc3ogMQpicFcgcHIgMQpxZUQgcXUgMQpRdmggdGggMQpiUm0gbWUgMQpxSm0gcXUgMQpjc1kgY2ggMQpxd0ggcXUgMQpDcWMgY2ggMQpsWXEgcXUgMQpkUHAgZGUgMQpvQWUgZXIgMQpkY1MgY2ggMQp1d1UgcXUgMQp6akwgc3ogMQpvWnggb24gMQpralIgaWogMQpjRHkgY2ggMQpmU3Mgc3ogMQplUWYgbGUgMQpxQm0gcXUgMQptTGIgbWUgMQpacmogZXIgMQpHa3gga2EgMQpwa1gga2EgMQp2VGsga2EgMQpaZ3AgbmcgMQpkaFAgdGggMQpuUHYgYW4gMQp4blEgYW4gMQpiSHAgcHIgMQpYZ2YgbmcgMQpDd2Ygd2EgMQpsYk4gbGUgMQpqTm0gaWogMQp4TnQgdGggMQpySnAgZXIgMQpvSmQgb24gMQpSeXEgcXUgMQpsdkwgbGUgMQpxdlkgcXUgMQp2d0MgdmEgMQprRmogaWogMQpxSGQgcXUgMQp3Y0IgY2ggMQp4VHMgc3ogMQpmUXogc3ogMQpEbGYgbGUgMQp3THQgdGggMQpGYmggdGggMQpycUogcXUgMQpoaE8gdGggMQp4T2kgaW4gMQptcXogcXUgMQpxbVEgbWUgMQpxUWogcXUgMQpvdlEgb24gMQpnZlIgbmcgMQpQbXEgcXUgMQpUY2ogY2ggMQptcVEgcXUgMQptd1YgbWUgMQpiWHcgd2EgMQpqbEEgbGUgMQpmakcgaWogMQpqeFkgaWogMQpxd00gcXUgMQprdlUga2EgMQpCa3EgcXUgMQpnZkEgbmcgMQpBd2MgY2ggMQpWbXYgdmEgMQpRaGwgdGggMQpXbWogaWogMQpjTXEgY2ggMQp0SHAgdGggMQpsUGIgbGUgMQp2bEsgbGUgMQpZZ2sgbmcgMQpnSnMgbmcgMQp0V2wgdGggMQp4Vncgd2EgMQpzck4gZXIgMQpVaGIgdGggMQp2ZlIgdmEgMQprRmYga2EgMQpKbHogbGUgMQpmS3EgcXUgMQptUnEgcXUgMQprV3cga2EgMQp6dk8gc3ogMQpYcXogcXUgMQpkSWogZGUgMQp3Sm0gbWUgMQpGcXYgcXUgMQp3TnQgdGggMQpseEwgbGUgMQp4TG0gbWUgMQpkcU4gcXUgMQp3UmogaWogMQpManQgdGggMQp3Uncgd2EgMQpjeEIgY2ggMQpjakggY2ggMQpWcWogcXUgMQpxSnMgcXUgMQpjRmsgY2ggMQp4cWQgcXUgMQpFcWggdGggMQpxUmQgcXUgMQp2ZlQgdmEgMQpacWIgcXUgMQptR2MgY2ggMQpTYmQgZGUgMQppd1YgaW4gMQpqZkkgaWogMQpuV3ogYW4gMQpMamcgbmcgMQpyakcgZXIgMQpjRmIgY2ggMQp1cVogcXUgMQptVm0gbWUgMQpqZ0sgbmcgMQpkWmggdGggMQpCcXggcXUgMQpxdUcgdW4gMQpsQ3YgbGUgMQpseFcgbGUgMQpnR2IgbmcgMQpndlkgbmcgMQptakYgaWogMQpwdFggdGggMQpwWXkgcHIgMQpZcmYgZXIgMQptVmQgZGUgMQp6cFIgc3ogMQp4S3cgd2EgMQp3cE0gcHIgMQpjTGsgY2ggMQpTcXogcXUgMQpnV24gYW4gMQpzV3ogc3QgMQpzclMgZXIgMQpjVnggY2ggMQp4TmIgYmUgMQpoUGIgdGggMQpiR3EgcXUgMQp0ZEggdGggMQp5SmwgbGUgMQp2VWsga2EgMQpkSnogc3ogMQpxaEkgdGggMQptdFAgdGggMQpsR2IgbGUgMQpoRHggdGggMQp6Zlcgc3ogMQpObWwgbGUgMQpIc3cgc3QgMQpwZkcgcHIgMQpkTWogZGUgMQprS3EgcXUgMQpyalMgZXIgMQpRbGcgbmcgMQpOZnkgbnkgMQpjcU0gY2ggMQpoV20gdGggMQpmdU8gcXUgMQp6ZkYgc3ogMQpxZ0ggbmcgMQpicFogcHIgMQpidFkgdGggMQp1cUIgcXUgMQpxeUEgcXUgMQpYcnAgZXIgMQp5dFggdGggMQpkSG0gZGUgMQp2QmcgbmcgMQp5eU4gbnkgMQpRcmogZXIgMQpnS2QgbmcgMQpiZlUgYmUgMQpRZnQgdGggMQpicVAgcXUgMQpxT3ogcXUgMQpYaGMgdGggMQpkcVkgcXUgMQpoalEgdGggMQpZZnUgcXUgMQphWGsgYW4gMQpwYlYgcHIgMQp2alAgaWogMQpZYnAgcHIgMQpKbWIgbWUgMQpxRnEgcXUgMQp5UHEgcXUgMQp5V3cgd2EgMQp2aFggdGggMQppd1QgaW4gMQpxWmYgcXUgMQp1cVUgcXUgMQp1RmsgcXUgMQpjcFcgY2ggMQpMcHEgcXUgMQprZkwga2EgMQpwUWUgZXIgMQpnd3ogbmcgMQpqcE0gaWogMQpRa20ga2EgMQpqZ0ggbmcgMQp4alAgaWogMQp4Z0wgbmcgMQpqTG0gaWogMQpkeE4gZGUgMQp2V3Mgc3QgMQpKamggdGggMQpoaEcgdGggMQpZdmMgY2ggMQp4ckUgZXIgMQpiWncgd2EgMQpMdncgdmEgMQplTncgZXIgMQpmakIgaWogMQpkY1EgY2ggMQpsWnQgdGggMQpKd3EgcXUgMQpxUGcgbmcgMQp4TWIgYmUgMQpoZkQgdGggMQpqelEgc3ogMQpVdWYgcXUgMQp6R2sgc3ogMQp6Q2MgY2ggMQpucEMgYW4gMQp0V2QgdGggMQpoakYgdGggMQpQenMgc3QgMQp3dUEgcXUgMQpRaGcgdGggMQpNcW0gcXUgMQpmc0kgc3QgMQpmZFUgZGUgMQpYcm0gZXIgMQpxUWcgbmcgMQpia1cga2EgMQpkSGcgbmcgMQpyY0IgY2ggMQpoV3UgdGggMQpuSXEgYW4gMQpyWXEgcXUgMQp4WHYgdmEgMQp3cVAgcXUgMQp4bU4gbWUgMQpzSmYgc3QgMQp5TWYgbnkgMQpTZmsga2EgMQpxelcgcXUgMQpjdlQgY2ggMQprbVgga2EgMQp4cVUgcXUgMQpjbkcgYW4gMQpKcGkgaW4gMQpmclggZXIgMQp5TGYgbnkgMQp1eVUgcXUgMQpEZHcgZGUgMQpUZ2ogbmcgMQpxZUggcXUgMQpmRXogc3ogMQpwQ2sga2EgMQpxbWYgcXUgMQpyakggZXIgMQp4TXAgcHIgMQpZd28gb24gMQp6Z0QgbmcgMQpQcXggcXUgMQpucU0gb24gMQp3ZFggZGUgMQpCcHogc3ogMQpsaE0gdGggMQpFcGIgcHIgMQpiaEogdGggMQprdlEga2EgMQpSc3EgcXUgMQp4YlAgYmUgMQpuTW0gYW4gMQp4dUMgcXUgMQp3anMgc3ogMQpmeFggZm8gMQpodlQgdGggMQp1UHggcXUgMQpKbXkgbWUgMQpRemQgZGUgMQpOc3ogc3QgMQp2V2QgZGUgMQpoZlggdGggMQpqQ2cgbmcgMQp5UXggbnkgMQp3aEogdGggMQp3cnEgcXUgMQp4Z1cgbmcgMQpKaGogdGggMQpsaEMgdGggMQpQd2Ygb3cgMQpsakMgbGUgMQp2dkIgdmEgMQptY04gY2ggMQp5SHggbnkgMQpiQmogaWogMQpxUnogcXUgMQpnbEggbmcgMQpjWnAgY2ggMQpxSmggdGggMQp0U2cgdGggMQp4Vm0gbWUgMQp1V3MgcXUgMQpWeG8gb24gMQpmak0gaWogMQp6aEsgdGggMQpDamggdGggMQp2WnIgZXIgMQpiQ3Mgc3ogMQpyd1kgZXIgMQp4RWkgaW4gMQpkVXYgZGUgMQpmUmcgbmcgMQpHY3UgY2ggMQpqRGYgaWogMQpkakggZGUgMQp2bFUgbGUgMQpxeUcgcXUgMQprZnEgcXUgMQpsWGcgbmcgMQpsYkMgbGUgMQpQd2cgbmcgMQpPYWUgYW4gMQpwYkMgcHIgMQpkV3QgdGggMQpselUgbGUgMQp3Snogc3ogMQpkWWogZGUgMQpjQmogY2ggMQpmUnYgdmEgMQpkakcgZGUgMQptWWcgbmcgMQpRYmMgY2ggMQpnblggYW4gMQp3UG0gbWUgMQp3dk4gdmEgMQpxR20gcXUgMQpxTmggdGggMQptUmcgbmcgMQpVcXYgcXUgMQpReG0gbWUgMQpmelggc3ogMQp6ak0gc3ogMQp4cUEgcXUgMQpiTXMgc3ogMQp2bUwgbWUgMQpFeXggbnkgMQpoSGogdGggMQpqR3AgaWogMQptZkQgbWUgMQpKZncgd2EgMQpXamggdGggMQpiWnMgc3ogMQpJeWsga2EgMQp6Um4gYW4gMQpjZFUgY2ggMQptSmggdGggMQpRankgaWogMQpRYW8gYW4gMQpiWHYgdmEgMQpoU2cgdGggMQpyQW8gZXIgMQpoTHMgdGggMQpsQ3MgbGUgMQpxa0ogcXUgMQpSeHUgcXUgMQp4ZE4gZGUgMQp5WXggbnkgMQpka04gZGUgMQpSZ3cgbmcgMQp6Z0wgc3ogMQpSY2ogY2ggMQppV3ogaW4gMQpkTGsgZGUgMQptcFggbWUgMQpHYmQgZGUgMQpibkggYW4gMQprZE0gZGUgMQp3cUcgcXUgMQp2TXogc3ogMQp6d0ggc3ogMQp3Z3ggbmcgMQpMamsgaWogMQp0bEcgdGggMQp0Z0UgdGggMQpXY3cgY2ggMQpWYnkgYmUgMQptVnogc3ogMQpIZ2MgY2ggMQpncVAgbmcgMQpoaEIgdGggMQpuRnggYW4gMQp5QmYgbnkgMQpXbXggbWUgMQp2TmIgdmEgMQpNbnYgYW4gMQpabWMgY2ggMQpielMgc3ogMQp5ZkMgbnkgMQpFcHggcHIgMQpsakcgbGUgMQp3VWEgYW4gMQpRZ28gbmcgMQpwcWIgcXUgMQpKa20ga2EgMQpXdnkgdmEgMQpCanAgaWogMQp2ZlogdmEgMQp3eFQgd2EgMQpWeHcgd2EgMQpkUnQgdGggMQpuVnEgYW4gMQppV2YgaW4gMQpTbXEgcXUgMQpqd0cgaWogMQp2Y1cgY2ggMQpRZ3ogbmcgMQpXa3EgcXUgMQp4ckwgZXIgMQp0VmggY2ggMQpabHIgZXIgMQp6RHQgdGggMQp5eFAgbnkgMQpZeXcgd2EgMQp6UGsgc3ogMQpCZ2cgbmcgMQp4T2sga2EgMQpvWHEgcXUgMQp0UWYgdGggMQpmeEYgZm8gMQpkT3EgcXUgMQpWdHAgdGggMQpqaFAgdGggMQp2aFogdGggMQpHcXEgcXUgMQpkRmcgbmcgMQplQ2cgbmcgMQprakggaWogMQp2cVEgcXUgMQpqcEwgaWogMQpoZ1ogdGggMQp4RmQgZGUgMQpRamQgZGUgMQp4S20gbWUgMQp6UWMgY2ggMQpOaHcgdGggMQpLcW8gcXUgMQpod08gdGggMQpvWW4gYW4gMQpXbmYgYW4gMQp2U2MgY2ggMQpBZnEgcXUgMQpqcUogcXUgMQpqRWcgbmcgMQpkS3AgZGUgMQpubUsgYW4gMQp3WHcgd2EgMQp2akMgaWogMQpkWGIgZGUgMQp0UW4gdGggMQpxb1IgcXUgMQpiUmYgYmUgMQp5eUwgbnkgMQprU2ogaWogMQpYeXUgcXUgMQp2bUEgdmEgMQpaZ20gbmcgMQpMYnggYmUgMQpiSXYgdmEgMQpaZHEgcXUgMQpnSG4gYW4gMQpiWXEgcXUgMQpNcWQgcXUgMQpxTWsgcXUgMQpRc3Ygc3QgMQp6WHggc3ogMQpoUWYgdGggMQp3Y1YgY2ggMQpYZnogc3ogMQpNaGMgdGggMQprQnogc3ogMQpiV3AgcHIgMQpXenUgcXUgMQpoV3cgdGggMQp5TnAgcHIgMQp4YlogYmUgMQptVGIgbWUgMQpLZGYgZGUgMQpwZlEgcHIgMQp2Q2QgZGUgMQpQcWYgcXUgMQpvZlogb24gMQp3WWQgZGUgMQpUZmMgY2ggMQpHbmIgYW4gMQpaZHggZGUgMQp6Vmogc3ogMQpUcXcgcXUgMQpmelYgc3ogMQpJZ3EgbmcgMQpRdnYgdmkgMQpQbWYgbWUgMQpxSGUgcXUgMQp5YlIgYmUgMQpjRmcgY2ggMQpLdmYgdmEgMQpaeG0gbWUgMQpvVmMgY2ggMQpZaGIgdGggMQpid1Agd2EgMQpWdnogc3ogMQpzZFcgZGUgMQpnRnogbmcgMQptUmwgbGUgMQpicU4gcXUgMQpiaFUgdGggMQp0QncgdGggMQpIYmIgYmUgMQpKenAgc3ogMQp6clMgZXIgMQpta1ogbWUgMQpiS3cgd2EgMQpqUHggaWogMQpYcWEgYW4gMQpmR3ogc3ogMQp4TGsga2EgMQpuclYgYW4gMQpUbXggbWUgMQp6dlogc3ogMQpnV2wgbmcgMQpZeGIgYmUgMQp5V3QgdGggMQpscU4gcXUgMQp0V3UgdGggMQp4WnQgdGggMQppcUkgaW4gMQpjcFEgY2ggMQp6UGYgc3ogMQpicUcgcXUgMQpnbUkgbmcgMQpXa2MgY2ggMQpadnMgc3ogMQpxZE4gcXUgMQpoWWYgdGggMQpzQm4gYW4gMQpEd2Igb3cgMQpXenEgcXUgMQpRZHcgZGUgMQpzdlIgc3ogMQpOdnYgdmEgMQpqUmMgY2ggMQpxRHYgcXUgMQpxR2UgcXUgMQpjd1QgY2ggMQpmVHkgbnkgMQpDdnYgdmEgMQpmbFEgbGUgMQptV2cgbmcgMQp0d1MgdGggMQpucE0gYW4gMQpVZnEgcXUgMQpmdUcgcXUgMQpvQ2ogb24gMQp0eEYgdGggMQpZZnQgdGggMQpxd3kgcXUgMQpWZHogZGUgMQpWZ3EgbmcgMQpSa2cgbmcgMQpQeHogc3ogMQptQ24gYW4gMQp3aFogdGggMQpmZ0IgbmcgMQpqdlcgaWogMQprZEwgZGUgMQpMeGkgaW4gMQpzdkIgc3ogMQp4dUggcXUgMQpnRnkgbmcgMQpvVnYgb24gMQpaaHEgdGggMQpvcUcgcXUgMQpvSnAgb24gMQpnSWYgbmcgMQpid0Ygd2EgMQp2TGggdGggMQpqZ1ggbmcgMQpxS2kgaW4gMQp4UmggdGggMQpxd1YgcXUgMQptTmwgbGUgMQpHdnYgdmEgMQpwUWYgcHIgMQp4YlYgYmUgMQpkcFogZGUgMQpmSHEgcXUgMQpiQmQgZGUgMQp2VWggdGggMQpoekEgdGggMQpNbnogYW4gMQpwQnQgdGggMQpvYUUgYW4gMQpzbEsgbGUgMQpXbGcgbmcgMQpqaEsgdGggMQp4dlggdmEgMQpGZnggZm8gMQpnWGggdGggMQpjV2YgY2ggMQpHcHkgcHIgMQp4bVMgbWUgMQpnWm4gYW4gMQpkalggZGUgMQpia1gga2EgMQp4bFAgbGUgMQpoQ3QgdGggMQpZaGogdGggMQpnd1EgbmcgMQprbEQgbGUgMQpSaHEgdGggMQphRWogYW4gMQpqcFkgaWogMQpwVm4gYW4gMQpuSnggYW4gMQp6ZFYgZGUgMQpSdmYgdmEgMQpPcXkgcXUgMQp6cFQgc3ogMQpQemMgY2ggMQpxVG0gcXUgMQpqZnEgaWogMQp6dFkgdGggMQpacXYgcXUgMQpuWmIgYW4gMQpwSGwgbGUgMQpRY3IgY2ggMQp6Vm0gc3ogMQpwTm0gbWUgMQpYaGogdGggMQpvWXkgb24gMQpGbHEgcXUgMQpsd2ogbGUgMQpyd0ggZXIgMQpvV3EgcXUgMQpCd20gbWUgMQpqWHMgc3ogMQpMa3QgdGggMQpsVm4gYW4gMQpqWGEgYW4gMQpoa0IgdGggMQpxclEgcXUgMQpkcUsgcXUgMQpaeG4gYW4gMQp5Z1ogbmcgMQpGZ3QgdGggMQpud00gYW4gMQpXenggc3ogMQpxZ2IgbmcgMQpZZ3YgbmcgMQpYZGQgZGUgMQp4ak0gaWogMQpxSGIgcXUgMQp6S3ogc3ogMQpkdk0gZGUgMQpacHggcHIgMQp3UHQgdGggMQpxaUEgaW4gMQpqeVYgaWogMQpqeVIgaWogMQpVb3ggb24gMQpRa3oga2EgMQpMeHEgcXUgMQpmcHEgcXUgMQpYbWYgbWUgMQprUngga2EgMQpqRmsgaWogMQpuWmMgYW4gMQpoQ3AgdGggMQpIYncgd2EgMQp6bEYgbGUgMQprcUkgcXUgMQp3V2ogaWogMQpxS2sgcXUgMQpKcGYgcHIgMQpsYlIgbGUgMQpyYkogZXIgMQp6Zksgc3ogMQpnVmsgbmcgMQpiWnggYmUgMQp6blEgYW4gMQpnWmIgZ2EgMQp3dEkgdGggMQpidlcgdmEgMQpxaEcgdGggMQp4clYgZXIgMQpwWWMgY2ggMQpiUXEgcXUgMQpxcFYgcXUgMQpwRm0gbWUgMQp6ZE8gZGUgMQpKdmogaWogMQptUWwgbGUgMQp4V20gbWUgMQpEdHogdGggMQpsS3ogbGUgMQpka0kgZGUgMQpmU3ggZm8gMQp5Q3AgcHIgMQp3aEYgdGggMQpsVm0gbGUgMQp5SHYgdmEgMQpQbG0gbGUgMQpKcG0gbWUgMQpoRXcgaGEgMQp6SHogc3ogMQp1SWogcXUgMQpnekIgbmcgMQpxc1YgcXUgMQpwYlggcHIgMQpqeVkgaWogMQptanEgcXUgMQp6RGQgZGUgMQpUcWMgY2ggMQpmVGcgbmcgMQpxYmggdGggMQpDanEgcXUgMQpwY1cgY2ggMQpYaHAgdGggMQpmd1Igd2EgMQpkUW0gZGUgMQp4Q2sga2EgMQp5aE0gdGggMQpnbFEgbmcgMQpnVmIgbmcgMQpQZHkgZGUgMQp5T2ogaWogMQpqWmcgbmcgMQpvcVogcXUgMQpicUkgcXUgMQpqa1ggaWogMQpLZmggdGggMQp4cFEgcHIgMQpyaFggdGggMQp3akkgaWogMQpCcWYgcXUgMQphQ3AgYW4gMQpjY1ggY2ggMQp2R20gbWEgMQpwYVUgYW4gMQp4VWggdGggMQpnTGQgbmcgMQp0ZkogdGggMQpmd0ggd2EgMQpQbnEgYW4gMQpreFYga2EgMQpOYmsga2EgMQpzcUUgcXUgMQpDanAgaWogMQprY1oga2EgMQpXcWogaWogMQp0elkgdGggMQpucVggYW4gMQpZeWMgY2ggMQpMemQgZGUgMQp4WnkgbnkgMQpzZFkgZGUgMQpqWG4gYW4gMQpOYm0gbWUgMQp3THIgZXIgMQpOcXIgcXUgMQpad3ggd2EgMQp5dkggdmEgMQp5bEMgbGUgMQpxeWggdGggMQpKbnogYW4gMQpoSHYgdGggMQp6VXEgcXUgMQp4Z0kgbmcgMQpadHAgdGggMQpWdmIgdmEgMQp0R24gdGggMQpVanEgcXUgMQpqSHMgc3ogMQpiV3EgcXUgMQpiWHIgZXIgMQpoRmcgdGggMQpnZFQgbmcgMQpxSGMgY2ggMQpsQ2ogbGUgMQptVmcgbmcgMQpwUXEgcXUgMQp2V2wgbGUgMQp5RnEgcXUgMQpkalkgZGUgMQpidFEgdGggMQp2bE0gbGUgMQpJd3QgdGggMQpQZGIgZGUgMQpqdFEgdGggMQp4alIgaWogMQpkaFcgdGggMQp6WHMgc3ogMQpmYkUgYmUgMQpIcXIgcXUgMQp2THQgdGggMQprYkQga2EgMQp2VWQgZGUgMQp5WmMgY2ggMQpRa2UgbGUgMQpmaEcgdGggMQplSHQgdGggMQp2SGogaWogMQpUZmcgbmcgMQp1b0EgcXUgMQp6Q3ggc3ogMQp6TGsgc3ogMQpqZFcgZGUgMQpDZ24gYW4gMQpMcnEgcXUgMQp5T2kgaW4gMQpxT3cgcXUgMQpmcXMgcXUgMQpsdFEgdGggMQpud1UgYW4gMQp6WXEgcXUgMQpHenMgc3QgMQpuV3YgYW4gMQpsTnggbGUgMQpXcWwgcXUgMQpkY0QgY2ggMQp2ZkQgdmEgMQpxVmQgcXUgMQpXenogc3ogMQpqZkggaWogMQpScnQgdGggMQpxRHIgcXUgMQpsT2ggdGggMQp3d1ogd2EgMQptUXcgbWUgMQpucUsgYW4gMQpVdmwgbGUgMQprUnEgcXUgMQpWaGcgdGggMQp4c0Qgc3QgMQpMZGQgZGUgMQpzUXYgc3QgMQpxTWogcXUgMQpoYlEgdGggMQpjalggY2ggMQpuYlQgYW4gMQp4TmYgZm8gMQp3Q3QgdGggMQpqblggYW4gMQp0WmYgdGggMQpxQ2sgcXUgMQpkSGsgZGUgMQpDY3EgY2ggMQp1TWYgcXUgMQpidkcgdmEgMQp6UHogc3ogMQp5SXkgbnkgMQpsSHggbGUgMQpmbkIgYW4gMQpFYnggYmUgMQpyR2MgY2ggMQptZ0QgbmcgMQpoSmcgdGggMQpqY0cgY2ggMQpZYmQgZGUgMQpvRHEgcXUgMQpqUnggaWogMQprSmYga2EgMQp0RnYgdGggMQpHZHYgZGUgMQpmSG4gYW4gMQpVcXAgcXUgMQpjWWggdGggMQprSHAga2EgMQpxaFogdGggMQp3WmggdGggMQprUXQgdGggMQpod0ggdGggMQp4elUgc3ogMQp0UWcgdGggMQpRYmogaWogMQp6VmwgbGUgMQpxSmQgcXUgMQpYcmYgZXIgMQpmTXYgdmEgMQpxSmMgY2ggMQpEcXkgcXUgMQpxTXMgcXUgMQpmemwgbGUgMQpXZHggZGUgMQpUZHcgd2EgMQptY1QgY2ggMQpmT2QgZGUgMQpLZ2ogbmcgMQp5clQgZXIgMQpicUEgcXUgMQpzbnEgYW4gMQpMenQgdGggMQpnTHcgbmcgMQpkTHEgcXUgMQpRenIgZXIgMQpRcm4gYW4gMQplRm4gYW4gMQpObXcgd2EgMQpweEUgcHIgMQpDcWsgcXUgMQpXY2QgY2ggMQpmWHcgd2EgMQpmYlUgYmUgMQphZU8gYW4gMQpzdlYgc3QgMQp5VnQgdGggMQpzUnAgc3QgMQpyeFUgZXIgMQpxaEsgdGggMQp1UXcgcXUgMQpvWHcgb24gMQpKdncgdmEgMQprdkgga2EgMQp6Vnkgc3ogMQpyT3EgcXUgMQpjV3ggY2ggMQppWHYgaW4gMQpjQmsgY2ggMQp4a00ga2EgMQp2SGIgdmEgMQpqYlcgaWogMQptWXEgcXUgMQpmbkggYW4gMQp6Umogc3ogMQpodk4gdGggMQpvTWggdGggMQp5cU8gcXUgMQpmQmYgZm8gMQpvUGogb24gMQpmRmMgY2ggMQpsVnEgcXUgMQpwdEogdGggMQpOdGogdGggMQpyd0wgZXIgMQpjRnogY2ggMQpqVmQgZGUgMQpHYnYgdmEgMQpvSm4gYW4gMQp3a0wga2EgMQpxb1QgcXUgMQpReGsga2EgMQpyWmogaWogMQpDZ2QgbmcgMQpndlcgbmcgMQprWXYga2EgMQpxalIgcXUgMQpWbnEgYW4gMQp5SnQgdGggMQp4V3kgbnkgMQpiWGwgbGUgMQp4Vmsga2EgMQp4dUcgcXUgMQpIenMgc3QgMQp1RHEgcXUgMQpZd2sga2EgMQpKa2ggdGggMQpHZG0gZGUgMQpxY08gY2ggMQpobEggdGggMQpKZnYgdmEgMQpjTG4gYW4gMQp3ekcgc3ogMQp5aEYgdGggMQprZkQga2EgMQprYkoga2EgMQpOcXAgcXUgMQpnWXEgbmcgMQp6dE0gdGggMQpqY0QgY2ggMQp3Z1kgbmcgMQpxZFQgZGEgMQp2VHcgdmEgMQpjTnogY2ggMQpKYmMgY2ggMQpYY2ogY2ggMQpyVXcgZXIgMQpnWHYgbmcgMQpkUmYgZGUgMQpiSnogc3ogMQphcUEgYW4gMQp1T3ogcXUgMQp3UGogaWogMQp1RHcgcXUgMQptcUYgcXUgMQpjWHIgY2ggMQp5ckwgZXIgMQpuSmsgYW4gMQpoc1kgdGggMQpacXMgcXUgMQpxZVMgcXUgMQpiTHYgdmEgMQpqRW8gb24gMQpwbUUgbWUgMQpqSXQgdGggMQp2elogc3ogMQpRaGQgdGggMQpjbk4gYW4gMQpiUHEgcXUgMQpwWncgcHIgMQppd1IgaW4gMQpvSnYga28gMQp1ZkkgcXUgMQp3S20gbWUgMQp1V3YgcXUgMQpmQ2YgZm8gMQp3Qm4gYW4gMQpVeWYgbnkgMQp1VnggcXUgMQprS2Yga2EgMQptclogZXIgMQpsWGIgbGUgMQp6Sm0gc3ogMQp3WXIgZXIgMQpIa3cga2EgMQpFd3ogc3ogMQp4SnkgbnkgMQpFbXggbWUgMQpjcUwgY2ggMQp6Vmsgc3ogMQp5UGIgYmUgMQp6Y0MgY2ggMQpOZHEgcXUgMQp1V2YgcXUgMQprY00gY2ggMQp0a0IgdGggMQp5aHEgdGggMQpxYVAgYW4gMQpyVnMgZXIgMQpkTGQgZGUgMQpTZ20gbmcgMQpYaHggdGggMQp4cUggcXUgMQpLcXkgcXUgMQp5Uncgd2EgMQpXZHcgZGUgMQpxY1EgY2ggMQp6YnAgc3ogMQpkdFkgdGggMQpjd0IgY2ggMQpuZlYgYW4gMQpjZ1AgY2ggMQpwd1cgcHIgMQpwcWYgcXUgMQpYa3Aga2EgMQppekogaW4gMQpjWXcgY2ggMQppUWwgaW4gMQpRdnkgdmEgMQp5bFIgbGUgMQpzRnAgc3QgMQpMcWcgbmcgMQp4blAgYW4gMQpnWWwgbmcgMQp3SXIgZXIgMQpmcVIgcXUgMQpRcGsga2EgMQpxWHogcXUgMQpMcnIgZXIgMQpzakkgc3QgMQppeVggaW4gMQpaZnEgcXUgMQp2dEggdGggMQpjWmYgY2ggMQpoWHAgdGggMQpySncgZXIgMQpnYlAgbmcgMQpRdWcgbmcgMQpqUnQgdGggMQpsWGggdGggMQpwVmMgY2ggMQprR2MgY2ggMQpOeHIgZXIgMQp5S2sga2EgMQp4QW8gb24gMQpvVXggb24gMQpuV3ggYW4gMQpmd1Ugd2EgMQptS2cgbmcgMQpxaE8gdGggMQpzR2cgbmcgMQpXd3UgcXUgMQpjbkUgYW4gMQp0alMgdGggMQpReWQgZGUgMQp5V20gbWUgMQpRZGogZGUgMQpqU2QgZGUgMQpJb3kgb24gMQpYcHAgcHIgMQp4SmIgYmUgMQp4dlQgdmEgMQpjZFQgY2ggMQpraFggdGggMQpoVnAgdGggMQpjalQgY2ggMQpIcWYgcXUgMQpuYlAgYW4gMQpVd2Igd2EgMQpLY2IgY2ggMQpxc1EgcXUgMQp0a1ogdGggMQp6clggZXIgMQp6Yk4gc3ogMQptWWkgaW4gMQpnTHggbmcgMQpzR2MgY2ggMQpQYnYgdmEgMQpnY1YgY2ggMQpRamYgaWogMQp3dkIgdmEgMQpnS3AgbmcgMQpqWnkgaWogMQpxaFcgdGggMQp2Q2cgbmcgMQpMcmsgZXIgMQpmUncgd2EgMQpjTWogY2ggMQpvaEsgdGggMQpmcksgZXIgMQpkUXEgcXUgMQpIZGogZGUgMQpCa3gga2EgMQp5WHYgdmEgMQpmZE8gZGUgMQpzV2cgbmcgMQpYdGYgdGggMQpyVXggYXIgMQpxSG0gcXUgMQprUWggdGggMQp3elUgc3ogMQp2VHQgdGggMQp6a04gc3ogMQpGcXAgcXUgMQp4SmMgY2ggMQp3a1Ega2EgMQp3eEYgd2EgMQp2UmogaWogMQpqekQgc3ogMQpacXUgdW4gMQp6V3cgc3ogMQp6Z1UgbmcgMQp1Z1ggbmcgMQpwbUIgbWUgMQpnekEgbmcgMQpaamogaWogMQp4SWogaWogMQp4b0sgb24gMQpHcXggcXUgMQp1THEgcXUgMQpsR3cgbGUgMQp0WnEgdGggMQp6Y04gY2ggMQp5UHogc3ogMQpycU4gcXUgMQpwd0cgcHIgMQp2ZlAgdmEgMQp2SXkgdmEgMQp2RWogaWogMQpqcUQgcXUgMQpIeHUgcXUgMQpxTHMgcXUgMQpKcHkgcHIgMQpwUncgcHIgMQpmWnMgc3QgMQpWdnggdmEgMQp6a0Igc3ogMQp5R2sga2EgMQprdloga2EgMQpjcVcgY2ggMQp3TGcgbmcgMQpZcGcgbmcgMQpqclIgZXIgMQp2d1ogdmEgMQpnVmQgbmcgMQppQ3cgaWogMQpGeHcgd2EgMQpxeVogcXUgMQpxZ1QgcXUgMQp4THMgc3QgMQpwWGcgbmcgMQpnTnYgbmcgMQpIZ3ogbmcgMQp6SnYgc3ogMQpIdm0gdmEgMQp1WGIgcXUgMQpsTHogbGUgMQpkd1AgZGUgMQpndk4gbmcgMQpjcEYgY2ggMQp2WmogaWogMQpQZnYgdmEgMQp4Y0kgY2ggMQp5VnAgcHIgMQpmZEMgZGUgMQpwYkUgcHIgMQpqUW0gaWogMQpUcXQgdGggMQp3TWggdGggMQpHa3EgcXUgMQp0ZFYgdGggMQp4SWsga2EgMQpoSHAgdGggMQpMc2Igc3QgMQpXdnMgc3QgMQpRY3cgY2ggMQpnZlEgbmcgMQpGanQgdGggMQp4Qnogc3ogMQpmTHggZm8gMQp6a1Igc3ogMQprakEgaWogMQpGY3cgY2ggMQpmaFQgdGggMQpxaUsgcXUgMQp3UXYgdmEgMQpwWGwgbGUgMQpoTGcgdGggMQpqSncgaWogMQpzT2ogc3QgMQp2V2IgdmEgMQpBanEgcXUgMQp2S2MgY2ggMQppSXkgaW4gMQpwSnkgcHIgMQpMcWMgY2ggMQp3QmQgZGUgMQprUmIga2EgMQpMY3AgY2ggMQpnZkIgbmcgMQp6Vm4gYW4gMQpxV2YgcXUgMQpReWYgbnkgMQpwdUYgcXUgMQpmSWUgZXIgMQp3R2Igd2EgMQpqakwgaWogMQpoY0UgdGggMQpxaHAgdGggMQpneE4gbmcgMQp0TWQgdGggMQpSenQgdGggMQpjZ08gY2ggMQp2bVQgdmEgMQpEY3EgY2ggMQpxb0kgcXUgMQpOcXogcXUgMQp2aE0gdGggMQpnQnEgbmcgMQpqV3YgaWogMQp4bUUgbWUgMQpxY2QgY2ggMQpsWWogbGUgMQpkRGMgY2ggMQp4VWEgYW4gMQprVmwgbGUgMQp3cU4gcXUgMQp1dUkgcXUgMQpXemYgc3ogMQp5dlggdmEgMQpQeXEgcXUgMQp3dVUgcXUgMQpoTHAgdGggMQpxcUwgcXUgMQpjVmggdGggMQpGZ3MgbmcgMQp4akYgaWogMQp3a0cga2EgMQpxSnIgcXUgMQpHenEgcXUgMQpJeHYgdmEgMQpoTXYgdGggMQpkZlEgZGUgMQplT3ggZXIgMQptSHEgcXUgMQpaa24gYW4gMQpucVcgYW4gMQpuSmQgYW4gMQpwRWggdGggMQpnVmcgbmcgMQpaeWYgbnkgMQpubVQgYW4gMQpjc1EgY2ggMQpQa3EgcXUgMQp0ZFAgdGggMQpma3ogc3ogMQpRbmMgYW4gMQpwQmogaWogMQpNanYgaWogMQp5bUogbWUgMQpNeHMgc3QgMQpoYkwgdGggMQp2UWggdGggMQp4RHkgbnkgMQpkakMgZGUgMQpjZFEgY2ggMQpibkwgYW4gMQpZamwgbGUgMQpxVWMgY2ggMQptalcgaWogMQp6V3Mgc3QgMQp4dkYgdmEgMQpHcWkgcXUgMQpmR20gbWUgMQpYdXcgcXUgMQpxQ3MgcXUgMQpLeG0gbWUgMQpsTm4gYW4gMQpzZEwgZGUgMQpWdG4gdGggMQpzSmogc3QgMQprUWogaWogMQp4ZlggZm8gMQpOcWsgcXUgMQpjQnMgY2ggMQp5elAgc3ogMQp4VXYgdmEgMQpsYlQgbGUgMQp3eVYgd2EgMQpYa20ga2EgMQpXZHYgZGUgMQpxUW4gYW4gMQpzcVogcXUgMQpzZlcgc3QgMQpnZk0gbmcgMQpWbHAgbGUgMQpYanggaWogMQpoSWogdGggMQpKd3Mgc3QgMQp4WnIgZXIgMQppS3cgaW4gMQpUYmQgZGUgMQp6UXYgc3ogMQpubVogYW4gMQpicEUgcHIgMQp6U3Ygc3ogMQpGZ2kgbmcgMQp1SXcgcXUgMQpadnggdmEgMQpycVIgcXUgMQp2alogaWogMQpOanIgZXIgMQprd0Yga2EgMQpPdncgdmEgMQpod1ogdGggMQpNdmsga2EgMQpEdmYgdmEgMQp4c1Agc3QgMQpnWnEgbmcgMQp2WHYgdmEgMQp3R3QgdGggMQpxbE8gcXUgMQpmTnogc3ogMQpOdncgdmEgMQp6ZFogZGUgMQp2eFYgdmEgMQpOaHogdGggMQp0Wm0gdGggMQppeVMgaW4gMQpxWmEgYW4gMQp4clogZXIgMQpxbHkgcXUgMQpjak0gY2ggMQprWWogaWogMQppeUYgaW4gMQpDZHEgcXUgMQp4d0Ugd2EgMQp4ZlYgZm8gMQp3YkYgd2EgMQp3dU8gcXUgMQpSbGggdGggMQpmQ2ogaWogMQpiY1ogY2ggMQpHanYgaWogMQpnTGwgbmcgMQp3TGMgY2ggMQp6bVAgc3ogMQpjWW8gY2ggMQpSaGsgdGggMQpnck0gbmcgMQpmRGggdGggMQpZeWIgYmUgMQp1eVcgdW4gMQprR2Iga2EgMQppd0sgaW4gMQpxa04gcXUgMQpxWGQgcXUgMQp6Q2Igc3ogMQpyUWYgZXIgMQp4ck8gZXIgMQpGemggdGggMQp3U2ogaWogMQp5UHcgd2EgMQpCcXcgcXUgMQprV2MgY2ggMQpxaFggdGggMQprQncga2EgMQp5dkwgdmEgMQp4Y1QgY2ggMQpGYnogc3ogMQpjRWIgY2ggMQp2RWsga2EgMQp1UWggdGggMQpzSHcgdXMgMQpGdmYgdmEgMQp3a08ga2EgMQp3aVkgaW4gMQpzUG0gc3QgMQpkRm4gYW4gMQpxUXggcXUgMQpSc2cgbmcgMQpmVWogaWogMQp0THcgdGggMQpzUmsgc3QgMQp6a1Agc3ogMQptdkYgdmEgMQpqWWIgaWogMQpzd1kgaXMgMQpyUmMgY2ggMQpySGQgZXIgMQpiRGsga2EgMQpsV3YgbGUgMQp2cXYgcXUgMQpxb04gcXUgMQp6TWwgbGUgMQpwZkogcHIgMQpEbXogc3ogMQpvYlEgb24gMQpWZnogc3ogMQpiVmQgZGUgMQpDanYgaWogMQptS3ogc3ogMQpqakUgaWogMQpBcWMgY2ggMQpDeG4gYW4gMQp2cEggdmEgMQpMeGEgYW4gMQp6cEggc3ogMQpxb0YgcXUgMQpoUnogdGggMQp5WXcgd2EgMQpkVXggZGUgMQpLeGwgbGUgMQp4VW8gb24gMQpoRHAgdGggMQp6RGYgc3ogMQpXc3EgcXUgMQpqelogc3ogMQptR2YgbWUgMQpqalYgaWogMQpwZlIgcHIgMQpiUGQgZGUgMQp3anEgcXUgMQpSanggaWogMQpMd3EgcXUgMQpmcUggcXUgMQpqUnMgc3ogMQpzZlQgc3ogMQpHcncgZXIgMQp6R24gYW4gMQp5Y1cgY2ggMQpsVXEgcXUgMQpwUnEgcXUgMQpuWnEgYW4gMQpTdnggdmEgMQpQaGYgdGggMQpGdmogaWogMQpRbG0gbGUgMQpqZ1MgbmcgMQpNbXYgdmEgMQp4UGQgZGUgMQpxcXcgcXUgMQpyV3AgZXIgMQpxSXIgcXUgMQpDeGYgZm8gMQp3dEcgdGggMQpjS2IgY2ggMQpidEwgdGggMQpwUnggcHIgMQp6c0Igc3ogMQpuYkQgYW4gMQpqS2cgbmcgMQpiaEwgdGggMQpZaHcgdGggMQp5WXIgZXIgMQpqQ20gaWogMQp4eksgc3ogMQpwSmwgbGUgMQpRcnIgZXIgMQp1dkcgcXUgMQpjZkogY2ggMQppcVggaW4gMQp2TmQgZGUgMQpxY00gY2ggMQpXdmogaWogMQp2bVMgdmEgMQp2V3AgdmEgMQphSWogYW4gMQpqbVMgaWogMQpGbWsga2EgMQppeU4gaW4gMQpiWnUgcXUgMQpLemogc3ogMQpWd2QgZGUgMQpVbHggbGUgMQpyQ3YgZXIgMQp3dnEgcXUgMQpRa3IgcmkgMQpmakMgaWogMQp0UnIgdGggMQpwQ3kgcHIgMQpmYkMgYmUgMQpmUWMgY2ggMQpYa2Yga2EgMQpEcXIgcXUgMQpmZ0UgbmcgMQp2TW0gdmEgMQpkUGIgZGUgMQp2akwgaWogMQp3S2MgY2ggMQpQeXcgd2EgMQplWHYgZXIgMQpuVncgYW4gMQpKd3cgd2EgMQpEZnEgcXUgMQp0Q2MgdGggMQpxdEggdGggMQpYcW0gcXUgMQpCaGMgdGggMQp0Y1ggdGggMQp4S3AgcHIgMQp0Zk4gdGggMQppYlogaW4gMQpOemIgc3ogMQpXbmogYW4gMQp2WHkgdmEgMQppVmYgaW4gMQpkeFQgZGUgMQpqeFEgaWogMQpEZHYgZGUgMQptWGQgZGUgMQpmVXEgcXUgMQp3Z1EgbmcgMQpMZ2ogbmcgMQptZ1kgbmcgMQpxTXcgcXUgMQpncEogbmcgMQpzWnggc3QgMQpuWHogYW4gMQpXdmUgZXIgMQpsVmsgbGUgMQp3Q2Igd2EgMQp4dkkgdmEgMQptZkogbWUgMQp0UXEgdGggMQpkVHQgdGggMQpmcWsgcXUgMQpuVnQgdGggMQp3SWggdGggMQpRdnAgdmEgMQp2Zk4gdmEgMQpnUXMgbmcgMQppVnAgaW4gMQpqR2wgbGUgMQp4TWYgZm8gMQp4dncgd2kgMQp6SWwgbGUgMQp6ZlIgc3ogMQp6V3Ygc3ogMQplaFYgdGggMQpkWnEgcXUgMQp0bUsgdGggMQpjTHQgdGggMQpwWmIgcHIgMQp2bkogYW4gMQpmdmsga2EgMQpYaHYgdGggMQpWam4gYW4gMQp0Z0kgdGggMQp4YUogYW4gMQptU2YgbWUgMQpYem0gc3ogMQpkVHogZGUgMQp4WG0gbWUgMQpwUXogc3ogMQpDcWcgbmcgMQpiU3Mgc3QgMQpwclcgZXIgMQpoRGIgdGggMQpzWHQgdGggMQprY0QgY2ggMQprZ1ogbmcgMQpUenQgdGggMQp6Y1IgY2ggMQpYd3UgcXUgMQprWGcgbmcgMQpZd3Ygd2kgMQpycEsgZXIgMQp3UHMgaXMgMQpLanogc3ogMQpmRGIgYmUgMQpqckYgZXIgMQpiYlEgYmUgMQpRZGIgZGUgMQpyS3QgdGggMQp2WWYgdmEgMQp2eEEgdmEgMQpmaE0gdGggMQpqc1Ugc3QgMQp6WGsgc3ogMQp1d08gcXUgMQpqc1Igc3QgMQprSG4gYW4gMQp4V3YgdmEgMQp2ZlMgdmEgMQpwSXYgdmEgMQpiY1cgY2ggMQp6ZE0gc3ogMQpnQ3ogbmcgMQpoek4gdGggMQpiUXcgd2EgMQpvalggb24gMQpWcXYgcXUgMQpxV2IgcXUgMQpZa2Iga2EgMQp4bkogYW4gMQpzSnogc3QgMQpoUnIgdGggMQp0WHMgdGggMQpRZWIgZXIgMQpVd2QgZGUgMQpuWWcgYW4gMQpZZnggZm8gMQp4ckcgZXIgMQplWnIgbGUgMQp1ZlYgdXMgMQpyWG0gZXIgMQpxWnYgcXUgMQp2UXogc3ogMQpUbnEgYW4gMQpSbWogaWogMQpqbE0gbGUgMQpjcU8gY2ggMQp4V2YgZm8gMQpqY1ogY2ggMQpqZlYgaWogMQpabWogaWogMQpieE0gYmUgMQpmRmQgZGUgMQpnalAgbmcgMQpoTXMgdGggMQpZc3EgcXUgMQpxa1YgcXUgMQpLbWMgY2ggMQp4WXkgbnkgMQpkdlggZGUgMQpyd0MgZXIgMQpnd1cgd2EgMQpRcHkgcHIgMQpqWHkgaWogMQpxT2ogcXUgMQpRbXogc3ogMQpFcXEgcXUgMQp6SnMgc3QgMQpmSHkgbnkgMQpoRHQgdGggMQpzRGggdGggMQpWa3EgcXUgMQp5TGMgY2ggMQp2SG0gdmEgMQp2blggYW4gMQpqeFMgaWogMQpKdGogdGggMQpxZ0UgbmcgMQpicEggcHIgMQpJcXkgcXUgMQpxTW4gYW4gMQpkbUUgZGUgMQpIZnEgcXUgMQpwU2IgcHIgMQp4aEkgdGggMQpRanQgdGggMQp5ZlggbnkgMQp2dUYgcXUgMQp3Rncgd2EgMQp6blMgYW4gMQp6bFYgbGUgMQpsa0sgbGUgMQpGdnogc3ogMQpxalQgcXUgMQp6b1Egb24gMQpXdnggdmEgMQpoTW4gdGggMQpkTXcgZGUgMQpnY0YgY2ggMQpkYkIgZGUgMQpDcWogcXUgMQptQ3YgdmEgMQpwSnggcHIgMQpEZnYgdmEgMQpzakwgc3QgMQpxaUcgaW4gMQpabHMgbGUgMQpWc2Ygc3QgMQpGZ2QgbmcgMQp3bUQgbWUgMQpEeG8gb24gMQpxcmsgcXUgMQpwSnIgZXIgMQpjTHggY2ggMQpqZEIgZGUgMQp5Yk0gYmUgMQptdk0gdmEgMQpqdFggdGggMQpjbkIgYW4gMQp3dFcgdGggMQpLc2Qgc3QgMQp3cWwgd2EgMQptaFUgdGggMQpvSnkgb24gMQpHaHAgdGggMQpxb1ggcXUgMQp4c0kgc3QgMQp2RnMgc3QgMQpmWWUgZXIgMQpsblYgYW4gMQp1WG4gYW4gMQpFb2ggdGggMQp3Y00gd2EgMQpqd0sgaWogMQpHa2UgZXIgMQp1RnEgcXUgMQpZY2cgY2ggMQp4cXkgcXUgMQpidE0gdGggMQpqSHcgaWogMQpxZVUgcXUgMQpRanogc3ogMQpudVEgYW4gMQpGY3ggY2ggMQpLcXQgdGggMQpMcXYgcXUgMQptd1UgbWUgMQpmUXMgc3QgMQprU2QgZGUgMQpuWXYgYW4gMQp3R2ogaWogMQpndlogbmcgMQptcU4gcXUgMQpGaHAgdGggMQpwTXEgcXUgMQpkQmggY2ggMQpiWGsga2EgMQpmcUsgcXUgMQpZeXEgcXUgMQpLcnEgcXUgMQpSbnYgYW4gMQp1dUUgcXUgMQpYc3ogc3QgMQpmS2IgYmUgMQp5SWggdGggMQpOY2QgY2ggMQptTHIgZXIgMQpjU3MgY2ggMQpsYkUgbGUgMQp4YVcgYW4gMQpSdGQgdGggMQpyYkYgZXIgMQp2Z1IgbmcgMQpzY1ogY2ggMQpySHAgZXIgMQplWXcgZXIgMQpMeGogaWogMQpxUmcgbmcgMQpqcE4gaWogMQpyalcgZXIgMQpsZ0sgbmcgMQptQ2MgY2ggMQpmR3UgcXUgMQp4elQgc3ogMQp3UXcgd2EgMQprbEogbGkgMQpjcWsgY2ggMQpsTWggdGggMQpwWXMgc3QgMQpoUWsgdGggMQpIeHogc3ogMQpmZVkgZXIgMQpmaEYgdGggMQpmQm0gbWUgMQpmVnQgdGggMQp6ZmggdGggMQpzYlQgc3QgMQpkUXkgZGUgMQpGbWMgY2ggMQp2aEwgdGggMQpKdGIgdGggMQpWcnggZXIgMQp5cVogcXUgMQpqRG0gaWogMQptZlYgbWUgMQpvU3ggb24gMQpKeGcgbmcgMQp3T3EgcXUgMQpkSnEgcXUgMQpWdmMgY2ggMQpFcWUgcXUgMQpqcU8gcXUgMQp6eEkgc3ogMQpxS2YgcXUgMQpmZFcgZGUgMQpjY00gY2ggMQpnY1cgY2ggMQpsRm4gYW4gMQpSdnEgcXUgMQp6bk4gYW4gMQp6YlUgc3ogMQp0TncgdGggMQp3aksgaWogMQpKYmQgZGUgMQpCZmMgY2ggMQpxZVggbGUgMQp0WGsgdGggMQpzbEogbGUgMQpjS2QgY2ggMQpuQ2YgYW4gMQpxZ1YgbmcgMQpNaHggdGggMQpzS2Ygc3QgMQpocVogdGggMQpGZHQgdGggMQpxekogcXUgMQpzTm4gYW4gMQp0alcgdGggMQp4Y04gY2ggMQpmY0ogY2ggMQpkalUgZGUgMQpZZ2ggdGggMQp3b0kgb24gMQpZeXogc3ogMQprUWMgY2ggMQpoZlEgdGggMQpuckwgYW4gMQpsUXMgbGUgMQptdEYgdGggMQp3Ylggd2EgMQpnbVIgbmcgMQpac3EgcXUgMQp5dFEgdGggMQptYkYgbWUgMQpmZ1QgbmcgMQpjV3UgY2ggMQpneEcgbmcgMQpoTnYgdGggMQpkZlcgZGUgMQp6ckMgZXIgMQp3b1ggb24gMQp3alQgaWogMQpQcXcgcXUgMQp2a2Yga2EgMQpuTHogYW4gMQpjalYgY2ggMQpmY1AgY2ggMQp2bFEgbGUgMQpGZ3EgbmcgMQpoZ1AgdGggMQpHcXkgcXUgMQp0S3MgdGggMQpYZnYgdmEgMQp5WnEgcXUgMQp5aVogaW4gMQpyWHYgZXIgMQpZY3kgY2ggMQpmdkEgdmEgMQpUcXMgcXUgMQpoWnkgdGggMQp4d2MgY2ggMQpxVmYgcXUgMQpNaHEgdGggMQp6U2ogc3ogMQp2aFEgdGggMQp0elggdGggMQpHdm0gdmEgMQpjcVUgY2ggMQpIaHAgdGggMQpnUWsgbmcgMQpwd0wgcHIgMQpzTncgc3QgMQpxRXQgdGggMQpOenEgcXUgMQp6c0Qgc3QgMQptRGcgbmcgMQpSdHEgdGggMQpqTGYgaWogMQp3VHAgcHIgMQp4SmggdGggMQpWcW8gcXUgMQpacWsgcXUgMQpxcVEgcXUgMQpoclkgdGggMQpXcW8gcXUgMQptSXkgbWUgMQpJcGsga2EgMQp4akMgaWogMQpsTHAgbGUgMQpocUYgdGggMQpjV2cgY2ggMQpxWWMgcXUgMQpjalUgY2ggMQpxWGsgcXUgMQpocUwgdGggMQp6eFQgc3ogMQpkblggYW4gMQp6QnQgdGggMQpRbHMgbGUgMQpraEMgdGggMQp1cVggcXUgMQpaYmYgYmUgMQppRHggbGkgMQpabnAgYW4gMQpKeHEgcXUgMQpqcVkgcXUgMQp2YlUgdmEgMQpxUnIgcXUgMQpxcGogcXUgMQp3bEcgbGUgMQpXZ3ggbmcgMQpWeGogaWogMQp6U3cgc3ogMQppaFcgdGggMQprelQgc3ogMQphZVogYW4gMQpoS2ogdGggMQp0V3MgdGggMQpnTGMgY2ggMQpncEsgbmcgMQp5Snogc3ogMQpHdnQgdGggMQpmRW8gb24gMQpzS2Qgc3QgMQp4aE4gdGggMQphTXEgYW4gMQplaFggdGggMQprZloga3UgMQpXd2MgY2ggMQpZbXogc3ogMQpWa2QgZGUgMQpiekQgc3ogMQpYa2cgbmcgMQpWenogc3ogMQp4dlYgdmEgMQpwSGggdGggMQpyS3EgcXUgMQp2bU0gdmEgMQpReGogaWogMQp6TnIgZXIgMQpicUIgcXUgMQpKcXcgcXUgMQp6cUIgcXUgMQpYdm0gdmEgMQpsQmYgbGUgMQpxcUIgcXUgMQpnQ3MgbmcgMQpyUmcgbmcgMQpSbm0gYW4gMQpMencgc3ogMQppd04gaW4gMQpwZk4gcHIgMQpoQ3cgd2EgMQp1SHogcXUgMQpjTGMgY2ggMQpsd0QgbGUgMQpxakIgcXUgMQpPankgaWogMQpkbVYgZGkgMQpjQ3cgY2ggMQpsWHMgbGUgMQpzbVIgc3QgMQpteE8gbWUgMQpKcnQgdGggMQp6ak4gc3ogMQpiQm4gYW4gMQpjeFEgY2ggMQpLZHAgZGUgMQpEbGIgbGUgMQpwcUQgcXUgMQpxcUMgcXUgMQpTcHogc3ogMQp0Q2QgdGggMQpnZlAgbmcgMQp1R2ogcXUgMQp4YkUgYmUgMQpYcHYgdmEgMQpYenQgdGggMQpncUcgcXUgMQprcXEgcXUgMQpLdnEgcXUgMQpxV2kgcXUgMQpteFogbWUgMQpxb1kgcXUgMQpTZ2YgbmcgMQpjUnYgY2ggMQpXZ2kgbmcgMQplRHggZXIgMQpjV3cgY2ggMQp2RnEgcXUgMQpLeHYgdmEgMQppV3AgaW4gMQpmUnggZm8gMQp3dEIgdGggMQpzd1cgc3QgMQpncksgbmcgMQpIZmUgZXIgMQpnZlogbmcgMQp4cVggcXUgMQpvS2ogb24gMQp2ZnEgcXUgMQpwV3cgcHIgMQp1V2MgY2ggMQpsQ2cgbmcgMQpxa2cgcXUgMQpjRGggdGggMQpTZnogc3ogMQp1WXggcXUgMQp4dlIgdmEgMQplQW8gZXIgMQpwWWcgbmcgMQpkUnggZGUgMQppV2QgaW4gMQpnR3ggbmcgMQpiWHogc3ogMQprY1AgY2ggMQpoY0ogdGggMQpsQ2YgbGUgMQpnbVcgbmcgMQpIa2Yga2EgMQpyaEwgdGggMQpqcVAgcXUgMQpyUXAgZXIgMQp2Q24gYW4gMQpkV2ogZGUgMQpIcnggZXIgMQpzVHogc3QgMQphVnQgdGggMQpxd0sgcXUgMQp2dkUgdmEgMQp3S3AgcHIgMQp4Y1kgY2ggMQp2cE0gdmEgMQpqbEMgbGUgMQpkbEcgbGUgMQpvVHEgcXUgMQppTHAgaW4gMQp4c0wgc3QgMQpsRnogbGUgMQp2aEMgdGggMQp5bFggbGUgMQpwbU8gbWUgMQpZY2MgY2ggMQpZbnAgYW4gMQpZYm0gbWUgMQpRbG4gYW4gMQpieEEgYmUgMQp0RnMgdGggMQpMcXcgcXUgMQp6Y1UgY2ggMQp2ZksgdmEgMQp2cFEgdmEgMQpEdGYgdGggMQpiVGogaWogMQpWdncgdmEgMQpRYnggYmUgMQp6V2sgc3ogMQpiU3ggYmUgMQp6cEsgc3ogMQp3VGIgd2EgMQpta0Mga2EgMQpjUmggdGggMQpuQmsgYW4gMQp4R3YgdmEgMQpoblEgdGggMQphcVEgYW4gMQp6aFogdGggMQp6d1Agc3ogMQp2cUwgcXUgMQpzY1UgY2ggMQpnbFMgbmcgMQpwakUgaWogMQpxcUQgcXUgMQpsUnggbGUgMQpxVnIgcXUgMQpYdWggdGggMQpickIgZXIgMQpReWMgY2ggMQpTZ3ggbmcgMQpkcWsgcXUgMQpiWWogaWogMQptUHggbWUgMQpGZHYgZGUgMQpYbWQgZGUgMQpjUGogY2ggMQpQcWcgcXUgMQp2WWggdGggMQpiSnggYmUgMQpkUXQgdGggMQpmeGogaWogMQpId3EgcXUgMQp2Z0MgbmcgMQpraksgaWogMQpuckMgYW4gMQp2cVggcXUgMQpCZ2sgbmcgMQpDYnYgdmEgMQpVd3cgd2EgMQp3Y0ogY2ggMQpnQmYgbmcgMQp6VHYgdmEgMQp6d1ggc3ogMQpsV2cgbGUgMQpxT3MgcXUgMQpmYkIgYmUgMQp4cUcgcXUgMQpqUWogaWogMQp2b1Egb24gMQp5alcgaWogMQpxdk8gcXUgMQp4YkYgYmUgMQpuV3UgYW4gMQp5alEgaWogMQpjaksgY2ggMQpTeG4gYW4gMQp5YlggYmUgMQplWWcgbmcgMQpCbW4gYW4gMQpmRHQgdGggMQpqWG0gaWogMQpuTXQgdGggMQpTeGIgYmUgMQpsSG0gbGUgMQpnZlkgbmcgMQpud0cgYW4gMQpnSGwgbmcgMQpXcG0gbWUgMQp3RmogaWogMQpoR20gdGggMQp3d0Mgd2EgMQpNbGYgbGUgMQpjSmIgY2ggMQpibkMgYW4gMQpGdnAgdmEgMQp0R2MgdGggMQpmaFogdGggMQpWa2ggdGggMQpqd2cgbmcgMQp4YksgYmUgMQp6VnEgcXUgMQpxVHogcXUgMQp2ckQgZXIgMQpmUnQgdGggMQpmRnMgc3QgMQpoV2cgdGggMQpsekUgbGUgMQpsd1ggbGUgMQpqSHkgaWogMQpRcXQgdGggMQpEcWkgaW4gMQpUdmogaWogMQpnUGIgbmcgMQpkUHogc3ogMQp6ZFQgc3ogMQptdkEgdmEgMQpadmggdGggMQpxYVUgYW4gMQpmd1Egd2EgMQpSc3cgc3QgMQprbEIgbGUgMQp2bE4gbGUgMQpHdnggdmEgMQpwZEogZGUgMQpsY0IgY2ggMQp2VHEgcXUgMQp5aFYgdGggMQpqTHYgaWogMQpwelIgc3ogMQpYeXcgd2EgMQpYbHEgcXUgMQpScXcgd2EgMQp6aFAgdGggMQpzZ1QgbmcgMQpncEcgbmcgMQp0a1kgdGggMQpkcUUgcXUgMQpRY2cgY2ggMQpiZkIgYmUgMQpXcHYgdmEgMQpXeGwgbGUgMQpYYnEgcXUgMQp5RmggdGggMQpSZnEgcXUgMQpoaEwgdGggMQpqeHogc3ogMQpiS2ggdGggMQpwdFUgdGggMQpjWGUgY2ggMQp6WG0gc3ogMQpHaHcgdGggMQpkelkgc3ogMQpkWG4gYW4gMQpreFcga2EgMQp2VnIgZXIgMQpKeHUgdW4gMQpiYlggYmUgMQpyUGIgZXIgMQpxQ20gcXUgMQpxaUogcXUgMQpYZ3cgbmcgMQpOaHEgdGggMQpjR3AgcG8gMQpoUHcgdGggMQpiVHogc3ogMQpxSWcgbmcgMQpwSmggdGggMQp3Y0UgY2ggMQptQ2IgbWUgMQpiSmMgY2ggMQpuelEgYW4gMQp5cVIgcXUgMQp4SHcgd2EgMQpid0ggd2EgMQpxQ3IgcXUgMQpVcWUgcXUgMQpxeE0gcXUgMQpmcE8gcHIgMQprY04gY2ggMQp5a1Yga2EgMQptUWIgbWUgMQpZcXMgcXUgMQp5Vmsga2EgMQp2YlggdmEgMQptVGQgZGUgMQpqWG8gb24gMQp3cUogcXUgMQprS3QgdGggMQpma1Mga2EgMQpXdnogc3ogMQpJeXYgdmEgMQpoR2sgdGggMQpGemUgZXIgMQpiaE0gdGggMQpxdkkgcXUgMQpuWHEgYW4gMQpuWGMgYW4gMQprSnQgdGggMQpOcWMgY2ggMQpZamMgY2ggMQpGaGIgdGggMQpqeUsgaWogMQpKemogc3ogMQp5cWMgY2ggMQp3bVogbWUgMQp6YkYgc3ogMQpzcHEgcXUgMQpnUG4gYW4gMQpqU2cgbmcgMQpnTWggdGggMQpmWHQgdGggMQpGeXcgd2EgMQpGd2cgbmcgMQpobU4gdGggMQpoTmwgdGggMQp0cVkgdGggMQpwR20gbWUgMQptWHogc3ogMQpxWXkgcXUgMQpSbXEgcXUgMQpEcWEgYW4gMQpXa3gga2EgMQpkcFQgZGUgMQpqeUogaWogMQpKcWogcXUgMQp3alogaWogMQp4TnIgZXIgMQpxQW0gcXUgMQpoQm4gdGggMQpxcEogcXUgMQp5Z1cgbmcgMQpqWGYgaWogMQpyTWwgZXIgMQp6Z1YgbmcgMQpuTHAgYW4gMQpwRnggcHIgMQp0dkcgdGggMQp6UWwgbGUgMQpmZEYgZGUgMQpieEsgYmUgMQpCY3ggY2ggMQpycFkgZXIgMQpzSmIgc3QgMQpLdmggdGggMQprTnEgcXUgMQp6SGQgc3ogMQpkekYgc3ogMQp0SnEgdGggMQpIZnYgdmEgMQp2UWQgZGUgMQpwS2ogaWogMQpmaFYgdGggMQpxWmkgcXUgMQpvaFkgdGggMQp2cXEgcXUgMQp0blEgdGggMQpWcWsgcXUgMQp6SmYgc3ogMQpKa3ogc3ogMQpSd2Ygd2EgMQp6dk0gdmEgMQpieFkgYmUgMQpwWGggdGggMQpmVXkgbnkgMQpwdkUgdmEgMQpMcGsga2EgMQpkelYgc3ogMQp4SWYgZm8gMQp3Wncgd2EgMQpucFEgYW4gMQpwV2sga2EgMQpqZ1EgbmcgMQpKcXIgcXUgMQpnbVggbmcgMQpqZk0gaWogMQpsV2ogbGUgMQpwYk4gcHIgMQpmdkYgdmEgMQpzRGQgc3QgMQpxZEIgcXUgMQpmckwgZXIgMQp1SG4gYW4gMQpnd04gbmcgMQp5QmggdGggMQpaenEgcXUgMQp2RGcgbmcgMQpRY3ogY2ggMQpxemYgcXUgMQp3RWMgY2ggMQpweEggcHIgMQpmcU8gcXUgMQpWcWUgcXUgMQpna0QgbmcgMQpYZnEgcXUgMQp1WGcgcXUgMQpqQ3cgaWogMQpQenUgcXUgMQpnUmggdGggMQp2cUggcXUgMQp2dlcgdmEgMQpSZmIgYmUgMQpncUogcXUgMQp0Z08gdGggMQp3VXkgd2EgMQpKa3cga2EgMQpoU3MgdGggMQpna1cgbmcgMQpRZ3kgbmcgMQpkSmIgZGUgMQpwckYgZXIgMQpidVggcXUgMQpjVmcgY2ggMQpqdFUgdGggMQpmRGMgY2ggMQpZZ2MgY2ggMQpLcXIgcXUgMQpVeXAgcHIgMQpsSmsgbGUgMQpzeFkgc3QgMQp4ZlkgZm8gMQpYa3ogc3ogMQpjZ1ogY2ggMQpjeVggY2ggMQpnYkYgbmcgMQp6VGsgc3ogMQpoc1UgdGggMQp0bFcgdGggMQpaenYgc3ogMQprcUUgcXUgMQpscFEgcG8gMQpxSnUgdW4gMQpoWWkgdGggMQp6bE0gbGUgMQp2RHQgdGggMQpIdm4gYW4gMQpOc2Ygc3QgMQpiSmcgbmcgMQpmTmcgbmcgMQprUW8gb24gMQpLcXAgcXUgMQpiS3Mgc3QgMQptSHAgbWUgMQpVeWogaWogMQpjeFkgY2ggMQp5SWUgZXIgMQpxVGogcXUgMQp3ZlAgd2EgMQpmeEkgZm8gMQp2UWEgYW4gMQpmdk4gdmEgMQpwd04gcHIgMQp2YVEgYW4gMQpteFEgbWUgMQpiZFYgZGUgMQpDZ2ogbmcgMQp4anogc3ogMQpXcXcgcXUgMQp3cE8gcHIgMQp3b1Egb24gMQp4WWogaWogMQpmcFQgcHIgMQpsTnAgbGUgMQpwdlggdmEgMQpwTHAgcHIgMQpLc2cgbmcgMQpyV2cgbmcgMQppVXkgaW4gMQpiZlggYmUgMQp4c1Ygc3QgMQpYbmogYW4gMQpkbVcgZGUgMQpvUXcgb24gMQpaeHkgbnkgMQpPYXkgYW4gMQpwakcgaWogMQpaYnQgdGggMQpIcWwgcXUgMQpaeHEgcXUgMQpqV2QgZGUgMQpxVXAgcXUgMQpxeE4gcXUgMQpxQ28gcXUgMQpZZmQgZGUgMQp2dlUgdmEgMQp2SWsga2EgMQpEZmogaWogMQpabWggdGggMQpDcXQgdGggMQp2UWYgdmEgMQpOYm4gYW4gMQp0SnMgdGggMQpGaHggdGggMQpkelEgc3ogMQp6WWogaWogMQpxQncgcXUgMQp2Y1YgY2ggMQpnR3QgdGggMQppVncgaW4gMQpGenAgc3ogMQpiakggaWogMQpjdVkgY2ggMQpqd1MgaWogMQpDcXAgcXUgMQp5SnYgdmEgMQprZEogZGUgMQprZFQgZGUgMQpucUIgYW4gMQpoV3MgdGggMQpxc2ogcXUgMQpoTHcgdGggMQpoZFggdGggMQpjZ1YgY2ggMQp0WWMgdGggMQplWnggZXIgMQpoZk4gdGggMQpndncgbmcgMQphVnAgYW4gMQpnTXMgbmcgMQpQYmYgYmUgMQptUWYgbWUgMQp5VWkgaW4gMQp2R2YgdmEgMQp4Z0YgbmcgMQp6dlkgc3ogMQp3ckEgZXIgMQp5ck0gZXIgMQp2TWogaWogMQpVeXYgdmEgMQpkTHAgZGUgMQpHamogaWogMQp6RWkgaW4gMQpYZGcgbmcgMQpqSGYgaWogMQpvUHogb24gMQp4SXogc3ogMQpiQ2IgYmUgMQpEenEgcXUgMQpZam4gYW4gMQpnR3ogbmcgMQptalUgaWogMQpDanggaWogMQp4S2MgY2ggMQptdk8gdmEgMQpQemIgc3ogMQpjcksgY2ggMQp4aE8gdGggMQp5bEIgbGUgMQpsRGsgbGUgMQp6bE8gbGUgMQpwZ0ggbmcgMQp2UWIgdmEgMQpzZFogc3QgMQprUW0ga2EgMQpsUmggdGggMQpvUXkgb24gMQp0d0MgdGggMQpCZGogaWogMQpRamcgbmcgMQpkblAgYW4gMQpObnAgYW4gMQpxaVAgcXUgMQpDY2ogY2ggMQp1SHQgdGggMQpxTHggcXUgMQpRc2Ygc3QgMQpmS3ggZm8gMQpma0Uga2EgMQpqbFggbGUgMQpqWmIgaWogMQpWd2ogaWogMQp6YkEgc3ogMQpIaGQgdGggMQpjYlkgY2ggMQpJa2Yga2EgMQpHcnggZXIgMQpqcFAgaWogMQpRZmggdGggMQp4aFcgdGggMQp3bVggbWUgMQphSmIgYW4gMQpzZk8gc3QgMQpxWHEgcXUgMQptWGcgbmcgMQpiblYgYW4gMQpZcHcgcHIgMQp6Q3kgc3ogMQpsaE4gdGggMQpyWG4gYW4gMQpmR2ggdGggMQpXeHEgcXUgMQpjeFQgY2ggMQpac2cgbmcgMQp1R3YgcXUgMQpiek0gc3ogMQp6alMgc3ogMQpkZlMgZGUgMQpncEggbmcgMQpxZ08gbmcgMQprcUYgcXUgMQpxZlUgcXUgMQpxVHAgcXUgMQp2WmIgdmEgMQpFancgaWogMQp6UW4gYW4gMQpnWXogbmcgMQpralYgaWogMQpmV2wgbGUgMQpmUmsga2EgMQp1U2ogcXUgMQpDeGcgbmcgMQpMY3YgY2ggMQpieksgc3ogMQp3cUYgcXUgMQpxSnAgcXUgMQpyQ2ogZXIgMQpxdnMgcXUgMQpsd04gbGUgMQp4bVIgbWUgMQpidEMgdGggMQprVHgga2EgMQpxa1UgcXUgMQpMaGogdGggMQpkSXggZGUgMQp2c1Egc3QgMQpnU2QgbmcgMQp3RGwgbGUgMQpWam0gaWogMQpwbUkgbWUgMQp2V2ggdGggMQpmS3YgdmEgMQp4UHQgdGggMQp1b1EgcXUgMQpLZ2ggdGggMQpnd1ggbmcgMQpzZ0ogbmcgMQpwV2ogaWogMQpRZmYgZm8gMQpoa0ogdGggMQpIcW8gcXUgMQpqd1cgaWogMQpzUXogc3QgMQp3VXcgd2EgMQptS3ggbWUgMQpvUWYgb24gMQpqVmsgaWogMQp4d1Qgd2EgMQpzVHEgcXUgMQp1cVYgcXUgMQpRbHAgbGUgMQpwTWIgcHIgMQp4S2ogaWogMQpicFggcHIgMQp2UWUgZXIgMQpKanEgcXUgMQpxS2ggdGggMQpma0oga2EgMQpqYlEgaWogMQptWncgbWUgMQpYZ2MgY2ggMQp2elUgc3ogMQpwVG0gbWUgMQpwTnEgcXUgMQpyd0QgZXIgMQpRZGcgbmcgMQp3cUMgcXUgMQpZcm4gYW4gMQpxd3cgcXUgMQpxd1UgcXUgMQp4ekYgc3ogMQpmbFcgbGUgMQpqelAgc3ogMQpXeHAgcHIgMQpyRHEgcXUgMQpkR3AgZGUgMQpadGogdGggMQpVdnAgdmEgMQplR2MgY2ggMQp6WmIgc3ogMQpnUWggdGggMQp0RmQgdGggMQpNcWcgbmcgMQpkbkQgYW4gMQpodlkgdGggMQpJeWIgYmUgMQpmRHogc3ogMQpLYmogaWogMQp2WW0gdmEgMQpXeHIgZXIgMQpLd3ogc3ogMQpoclEgdGggMQp5Q3QgdGggMQpIeHcgd2EgMQpoRWYgdGggMQpiZFUgZGUgMQpzR2ogc3QgMQpHd3QgdGggMQpiWWggdGggMQp6bVUgc3ogMQpwRG0gcG8gMQpxbUMgcXUgMQpkVGQgZGUgMQpReHEgcXUgMQp1VmYgcXUgMQpxQWwgcXUgMQpqRWEgYW4gMQpLcHkgcHIgMQpIcXYgcXUgMQpmQ2sga2EgMQphcVogYW4gMQpsVW8gb24gMQpQdm8gb24gMQpEcWYgcXUgMQpnZE0gbmcgMQpmekwgc3ogMQpCaGggdGggMQpkR2QgZGUgMQp3dFkgdGggMQpxVHkgcXUgMQpVeHIgZXIgMQpWdm0gdmEgMQp2SGggdGggMQpxWmMgY2ggMQpmaEMgdGggMQp4ZFogZGUgMQpoWnAgdGggMQpQbXogc3ogMQpjZlQgY2ggMQpwakkgaWogMQptZFogZGUgMQpqa1EgaWogMQpTZGogZGUgMQpoRGYgdGggMQplSmogZXIgMQp3alkgaWogMQp6TG0gc3ogMQplRnMgZXIgMQp3Z2ogbmcgMQpabWsga2EgMQpsdkogbGUgMQp4WW0gbWUgMQpOemYgc3ogMQp3SmkgaW4gMQp5UXMgc3QgMQpwZk0gcHIgMQpkaFIgdGggMQpjbUsgY2ggMQpkaE0gdGggMQpxR2IgcXUgMQp3dlEgdmEgMQpDZ3EgbmcgMQpKZmMgY2ggMQpia0Qga2EgMQpmZFMgZGUgMQpJdnAgdmEgMQpHa2ogaWogMQp6SXYgc3ogMQpCemwgbGUgMQpnQmIgbmcgMQpUcGogaWogMQp2eVkgdmEgMQpVeHMgc3QgMQprd1cga2EgMQpnUGYgbmcgMQpwcUMgcXUgMQpjVGogY2ggMQp5ekkgc3ogMQpZcGggdGggMQpidkQgdmEgMQp4Q2MgY2ggMQpwY1EgY2ggMQpmWncgd2EgMQpaeGYgZm8gMQp3YkEgd2EgMQpiVGYgYmUgMQpyeFIgZXIgMQpxcUUgcXUgMQp5RnAgcHIgMQpwTmYgcHIgMQprTXYga2EgMQp2VXEgcXUgMQp3T2ggdGggMQpoeEggdGggMQpYcWggdGggMQp1SXUgcXUgMQpGenEgcXUgMQpZc2Qgc3QgMQpvalkgb24gMQpjRW8gY2ggMQpsd1IgbGUgMQpxakYgcXUgMQpqVHAgaWogMQp5elQgc3ogMQpqZk8gaWogMQpxU2cgbmcgMQpOY2sgY2ggMQpod0YgdGggMQpHbXEgcXUgMQpJaXEgcXUgMQp6d0Ugc3ogMQpxUXYgcXUgMQp4VmQgZGUgMQpZd3EgcXUgMQpzRnggc3QgMQpmdkIgdmEgMQpxWWUgbGUgMQpnd1QgbmcgMQpXanggaWogMQpiSG4gYW4gMQpmTW4gYW4gMQpnSmcgbmcgMQpWa2cgbmcgMQpGeHYgdmEgMQpsSHYgbGUgMQpXcGsga2EgMQp4QXEgcXUgMQpyeEIgcHIgMQp4dVEgcXUgMQpwSWIgcHIgMQpiZkUgYmUgMQpnUnggbmcgMQpCcGIgcHIgMQpieE4gYmUgMQprZ1UgbmcgMQpQeGMgY2ggMQpjQ3EgY2ggMQpOcGIgcHIgMQpseEUgbGUgMQpsQ3kgbGUgMQpkZ1ggbmcgMQp4TGYgZm8gMQpiUXQgdGggMQpxZ0YgbmcgMQpweFogcHIgMQpwUHggcHIgMQppWXogaW4gMQp2SmwgbGUgMQprVGYga2EgMQpxVm0gcXUgMQpnd1MgbmcgMQp6VGQgc3ogMQpwUWsga2EgMQp4RWcgbmcgMQpmcFAgcHIgMQpxancgcXUgMQpPeXcgd2EgMQptY08gY2ggMQpWamQgZGUgMQpxZGcgbmcgMQpMZnAgcHIgMQp2WmMgY2ggMQpuT3EgYW4gMQpxam4gYW4gMQpzS2MgY2ggMQp3Z1UgbmcgMQpoZ1ggdGggMQpkTXYgZGUgMQpYY3AgY2ggMQpGd3ogc3ogMQpwd0EgcHIgMQpMcGogaWogMQpia1Aga2EgMQp2SG4gYW4gMQpKankgaWogMQptQ3EgcXUgMQp3dk0gdmEgMQpJY2IgY2ggMQprZkoga2EgMQpoc1EgdGggMQpkV2QgZGUgMQpmVXMgc3QgMQpmTG4gYW4gMQpwak4gaWogMQp6Z1EgbmcgMQpqTGogaWogMQp6cUUgcXUgMQpRbXYgdmEgMQpaanIgZXIgMQpaa3Aga2EgMQppeUggaW4gMQp3dVkgcXUgMQptelQgc3ogMQpjd0sgY2ggMQpiQ20gbWUgMQp5ZEcgZGUgMQp4ZFUgZGUgMQp3VGYgd2EgMQpsSGggdGggMQpxeUQgcXUgMQp4bFYgbGUgMQpxeVQgcXUgMQp0V24gdGggMQpyTXogZXIgMQpwWHYgdmEgMQpYYnogc3ogMQprSG0ga2EgMQpjVmQgY2ggMQpxekggcXUgMQp5ZE4gZGUgMQpxTWIgcXUgMQp5alMgaWogMQpnbUMgbmcgMQp6SWkgaW4gMQpmcE0gcHIgMQpsY1ogY2ggMQpxSG4gYW4gMQpKamQgZGUgMQpqbEcgbGUgMQpxY0sgY2ggMQp4UW0gbWUgMQp2SWkgaW4gMQp3QnAgcHIgMQp3Y0kgY2ggMQpkSmQgZGUgMQpRYm4gYW4gMQpCamYgaWogMQpkcFkgZGUgMQpkY0YgY2ggMQp4U2ogaWogMQppWGogaW4gMQpRZ2IgbmcgMQpnRHQgdGggMQp4eHEgcXUgMQp4Y1EgY2ggMQpTcXMgcXUgMQpRbWcgbmcgMQpnY1UgY2ggMQpCdnYgdmEgMQpwekUgc3ogMQp3dFQgdGggMQp2YkwgdmEgMQpiQ3QgdGggMQpRcG8gb24gMQptWHMgbWUgMQpacXIgcXUgMQpHa3kga2EgMQpYbXIgZXIgMQpMbnogYW4gMQp2WXEgcXUgMQp5UmwgbGUgMQpnbUsgbmcgMQp2d1AgdmEgMQplRmcgbmcgMQpOamQgZGUgMQprbEcgbGUgMQpoYkUgdGggMQprV3ogc3ogMQpxcE0gcXUgMQpvWmMgY2ggMQpqUm0gaWogMQp3WGwgbGUgMQppeUQgaW4gMQpmdkwgdmEgMQpyUHcgZXIgMQpmZFIgZGUgMQppU2cgbmcgMQpkYlEgZGUgMQp4eFEgeGUgMQpEamMgY2ggMQp5Z0sgbmcgMQpSaGIgdGggMQp6Z0cgbmcgMQpZa3kga2EgMQpDeGogaWogMQp3V2sga2EgMQpsbVkgbGUgMQpxckIgcXUgMQp5d0sgd2EgMQp4cUkgcXUgMQpUd2ogaWogMQpYZ3EgbmcgMQpkd1ogZGUgMQpuUWwgYW4gMQpHaGMgdGggMQpwbkggYW4gMQp2bVUgdmEgMQpxcUsgcXUgMQpjakIgY2ggMQpnelMgbmcgMQpSd3ogc3ogMQpnWXIgbmcgMQpGZ3ggbmcgMQp3ZEsgZGUgMQpoeFogdGggMQp4VXggeGUgMQp3bVQgbWUgMQp5WWsga2EgMQpmY0QgY2ggMQpoVnYgdGggMQpTZ3YgbmcgMQp6UG4gYW4gMQp2WWIgdmEgMQpiekUgc3ogMQp3aFYgdGggMQpxTnogcXUgMQp3dFMgdGggMQp2aFkgdGggMQpuTGYgYW4gMQpMZncgd2EgMQpnVmMgY2ggMQpna1MgbmcgMQpKcWIgcXUgMQpoV3ggdGggMQp6Z08gbmcgMQp0Z1ggdGggMQpqUGIgaWogMQpXeGIgYmUgMQpncXcgbmcgMQpDZncgd2EgMQp3b1Ugb24gMQp5Y0ogY2ggMQprd0Qga2EgMQpTYnAgcHIgMQpxY3cgY2ggMQpId3IgZXIgMQpibUwgbWUgMQpnd1ogbmcgMQp5S2ogaWogMQpmWHYgdmEgMQppS3ggaW4gMQpsUnogbGUgMQpjSGogY2ggMQpmRnQgdGggMQpzSnYgc3ogMQp4bUkgbWUgMQpjQ2QgY2ggMQppWWQgaW4gMQp5ZlkgbnkgMQp4YlkgYmUgMQpibUUgbWUgMQpmQnYgdmEgMQpkSHcgZGUgMQp5Y1IgY2ggMQp3dkwgdmEgMQpyakwgZXIgMQpzWXYgc3ogMQpXcG4gYW4gMQp6eEIgc3ogMQp5QnEgcXUgMQpnZEogbmcgMQpZam8gb24gMQpmcFEgcHIgMQpxT3EgcXUgMQpXamYgaWogMQpxY1QgY2ggMQpMZmggdGggMQpjRmogY2ggMQpsTXEgcXUgMQp3U2Ygd2EgMQp3UWMgY2ggMQp6RHkgc3ogMQpxcmwgcXUgMQpwWXcgcHIgMQpWbmYgYW4gMQpIY2ogY2ggMQp6ZFUgc3ogMQpidlAgdmEgMQpZZmogaWogMQpRa24gYW4gMQp3SG0gbWUgMQpxVnYgcXUgMQpna1YgbmcgMQp2cHEgcXUgMQpoRmsgdGggMQpmV2YgZm8gMQpwWXEgcXUgMQpkTnYgZGUgMQpXd2ogaWogMQpGbXggbWUgMQptRGwgbGUgMQpqTWcgbmcgMQpmWmsga2EgMQpqTnAgaWogMQpxaGYgdGggMQpWYmcgbmcgMQpsS3ggbGUgMQppWnggaW4gMQpzalQgc3ogMQppalkgaW4gMQpxdFYgdGggMQp5VGsga2EgMQpIcHogc3ogMQppR3EgcXUgMQp5cVcgcXUgMQpoZ0YgdGggMQptRmsga2EgMQpPcXcgcXUgMQpkWGEgYW4gMQpaYnEgcXUgMQpsS20gbGUgMQpTdnogc3ogMQp6S2MgY2ggMQpWbXogc3ogMQptSXggbWUgMQpnS2ogbmcgMQpnVHQgdGggMQp2ZkMgZm8gMQpoS2cgdGggMQpoU3ggdGggMQpvS2cgbmcgMQpuUXMgYW4gMQp5aUcgaW4gMQpxZ00gbmcgMQprUWcgbmcgMQpDamQgZGUgMQpqUHkgaWogMQpYcWUgcXUgMQpQenkgc3ogMQpGdHEgdGggMQpmY0UgY2ggMQpta0wga2EgMQpIemogc3ogMQpiVG4gYW4gMQpxWHkgcXUgMQpkbU0gZGUgMQpkVnggZGUgMQpUcW4gYW4gMQp4V2ogaWogMQpxeFEgcXUgMQpmUXggZm8gMQp2TGwgbGUgMQpQZ2sgbmcgMQpnSGsgbmcgMQpoeFYgdGggMQp0SnogdGggMQpmTXogc3ogMQpJeGIgYmUgMQpDeXkgbnkgMQpwWGYgcHIgMQpwTGwgbGUgMQpUd3EgcXUgMQpEdHcgdGggMQp3Um4gYW4gMQp1WGwgcXUgMQp6aHEgdGggMQp3SXYgdmEgMQpjakwgY2ggMQpxeEggcXUgMQpsRG0gbGUgMQp0WHYgdGggMQpnakMgbmcgMQpaemQgc3ogMQp0Z1QgdGggMQpoblAgdGggMQpLamMgY2ggMQpnVncgbmcgMQp4YkkgYmUgMQpacGMgY2ggMQpiZk8gYmUgMQptU3ggbWUgMQpxYUYgYW4gMQphUWggdGggMQpIamQgZGUgMQpxWGogcXUgMQpmcUEgcXUgMQpidlIgdmEgMQpxU24gYW4gMQpjZFYgY2ggMQpwVGYgcHIgMQpLemMgY2ggMQpxdEkgdGggMQplZ1kgbmcgMQpSeHQgdGggMQpiaFkgdGggMQpwR2ggdGggMQpqRGcgbmcgMQpmb1kgb24gMQpkS3Mgc3ogMQpxSnQgdGggMQpYd3ogc3ogMQpJeGcgbmcgMQpyTXQgdGggMQp6WHUgcXUgMQpzUXkgc3ogMQpOcHogc3ogMQpRZnogc3ogMQpyTG0gZXIgMQp6R20gc3ogMQp3SHogc3ogMQp2Y1kgY2ggMQprcVogcXUgMQpqRGggdGggMQpxZ0cgbmcgMQpEcXEgcXUgMQpmbU8gbWUgMQpxZFcgcXUgMQpkTncgZGUgMQpyWGogZXIgMQpKd2MgY2ggMQptRGIgbWUgMQp3TXcgd2EgMQpZamcgbmcgMQpmalkgaWogMQppSmIgaW4gMQpjZEMgY2ggMQpZeHEgcXUgMQpWYmsga2EgMQpGcHggcHIgMQp6aEQgdGggMQpoQ3MgdGggMQpkWHcgZGUgMQprRGQgZGUgMQp1cVQgdW4gMQpCeHcgd2EgMQpCanEgcXUgMQpqR3ggaWogMQpmWGIgYmUgMQp5YkYgYmUgMQpkdEEgdGggMQpjVnYgY2ggMQpDYmQgZGUgMQp3dEggdGggMQpLZGogZGUgMQprUHMgc3ogMQpadmsga2EgMQp4UHYgdmEgMQp3b0ggb24gMQpYcHogc3ogMQpxWGUgcXUgMQpwVGogaWogMQprd1Ega2EgMQprWmYga2EgMQpVcWogcXUgMQp5SmggdGggMQpoQ3EgdGggMQpqTWogaWogMQpwaFkgdGggMQprYkIga2EgMQpHcHogc3ogMQpzR3ogc3QgMQpmd0Ugd2EgMQpUdGYgdGggMQpHcW0gcXUgMQpiek4gc3ogMQpma08ga2EgMQp1elcgcXUgMQpveFEgb24gMQpWZ20gbmcgMQpxbUQgcXUgMQp4cW4gYW4gMQp2UmwgbGUgMQpUbnIgYW4gMQp6alcgc3ogMQp2d3EgcXUgMQpqdFcgdGggMQpxbkwgYW4gMQp5RHggbnkgMQp4ZlEgZm8gMQp3eEogd2EgMQpueEUgYW4gMQp2UW4gaW4gMQpXa2ggdGggMQp5d0Qgd2EgMQpwRmYgcHIgMQpsYksgbGUgMQp2SHkgdmEgMQpnVmogbmcgMQpPcWggdGggMQpiY04gY2ggMQp0V20gdGggMQp3TWMgY2ggMQpud1EgYW4gMQpxbk0gYW4gMQpadHggdGggMQpuUWogYW4gMQpWeHQgdGggMQpVeGMgY2ggMQpwV3YgdmEgMQp5UnggbnkgMQpxS3UgdW4gMQpqWGcgbmcgMQpqcFggaWogMQpka0cgZGUgMQpCbmYgYW4gMQpZa2Yga2EgMQpnYlcgbmcgMQprbFggbGUgMQp2a0gga2EgMQpkS2QgZGUgMQpLcHEgcXUgMQpncU0gbmcgMQp5Qnogc3ogMQpyUGogZXIgMQpIenYgc3ogMQp3WXogc3ogMQpxR2EgYW4gMQpqSXMgc3ogMQpiVWogaWogMQpyVHQgdGggMQpucUkgYW4gMQpqZlAgaWogMQpoUnQgdGggMQp5UnIgZXIgMQpqaksgaWogMQp0ZkUgdGggMQpRc3cgc3QgMQpGY20gY2ggMQpiSm0gbWUgMQp0WHEgdGggMQpmUmwgbGUgMQpncUUgbmcgMQp3R2cgbmcgMQpnS2MgY2ggMQp5WGMgY2ggMQp6Qnkgc3ogMQpsVGQgbGUgMQpXcWMgY2ggMQpGdGYgdGggMQp3ZEIgZGUgMQp4blggYW4gMQpCcWMgY2ggMQp6cU8gcXUgMQpRZGwgbGUgMQpvakogb24gMQpxWm4gYW4gMQpoelcgdGggMQp5bFEgbGUgMQpaYncgd2EgMQptdkwgdmEgMQpMamIgaWogMQpHcWUgcXUgMQptZkUgbWUgMQp4UXEgcXUgMQpmTHYgdmEgMQp4THQgdGggMQp3QmogaWogMQpqVW0gaWogMQpwZEwgZGUgMQptSnYgdmEgMQpkeFUgZGUgMQp4cU4gcXUgMQpmcEcgcHIgMQp0bE8gdGggMQp3aEwgdGggMQprRHgga2EgMQpScWIgcXUgMQp1dlggcXUgMQp2alkgaWogMQpjclEgY2ggMQp4eVkgbnkgMQp5aFEgdGggMQp5WWMgY2ggMQpMbWcgbmcgMQpKc3EgcXUgMQpHYmogaWogMQphUGIgYW4gMQpkd0ogZGUgMQpYeXYgdmEgMQp1Y0ogY2ggMQpkVGYgZGUgMQpsQmIgbGUgMQpoS3ogdGggMQpqY1IgY2ggMQplUWMgY2ggMQpxWWkgaW4gMQpWdGIgdGggMQpDY2cgY2ggMQp6QWUgZXIgMQpneEogbmcgMQp1dkMgcXUgMQpCaG0gbWEgMQpaZ3ggbmcgMQp5ekogc3ogMQpjdkogY2ggMQp4VGsga2EgMQpxZEsgcXUgMQp2d0cgdmEgMQpZbXggbWUgMQpvWXcgb24gMQpqWHggaWogMQp5d2Ygd2EgMQp2VnggdmkgMQpSd20gbWUgMQpEdmsga2EgMQp4S3QgdGggMQpxTHAgcXUgMQpZeXYgdmkgMQpDcWEgYW4gMQp4UmYgZm8gMQpRcWsgcXUgMQpKcWUgcXUgMQp5WmcgbmcgMQp2cUcgcXUgMQpoYk8gdGggMQp1VnEgcXUgMQpSbG0gbGUgMQp1WmMgY2ggMQpQcHYgdmEgMQpwVmQgZGUgMQp5VmQgZGUgMQp6SmwgbGUgMQpZemcgbmcgMQpDdnEgcXUgMQpwd1MgcHIgMQpLa3cga2EgMQpXdnYgdmEgMQpGZHkgZGUgMQpwcFggcHIgMQpodkMgdGggMQppd0cgaW4gMQpyQmcgbmcgMQpoQnEgdGggMQpuWXMgYW4gMQprY08gY2ggMQpxRWUgcXUgMQpZYnYgdmEgMQpRc24gYW4gMQpzdkMgc3QgMQpxa0QgcXUgMQpRaXcgaW4gMQpHdGogdGggMQpxQWggdGggMQp3Vnkgd2EgMQpieFQgYmUgMQpRaHMgdGggMQp0bFggdGggMQpoYkEgdGggMQpRZmIgYmUgMQp4V2wgbGUgMQp4ZVYgZXIgMQpycUcgcXUgMQp2cVogcXUgMQpqS3YgaWogMQppVGYgaW4gMQprd1Uga2EgMQppRnEgaW4gMQptalogaWogMQp4Z0ogbmcgMQp6THAgc3ogMQpxc1IgcXUgMQp6RGogc3ogMQpwZEYgZGUgMQp3eE4gd2EgMQp3R2sga2EgMQpkVXEgcXUgMQpkSncgZGUgMQpmQ2IgYmUgMQpEaHogdGggMQp5SXEgcXUgMQphUW0gYW4gMQpZenMgc3QgMQp2SGYgdmEgMQpialYgaWogMQp6U3EgcXUgMQpXcXMgcXUgMQpqclcgZXIgMQpIenEgcXUgMQp3V3Mgc3QgMQpNa2cgbmcgMQp6Z0YgbmcgMQpDbmsgYW4gMQpyRGcgbmcgMQpmekIgc3ogMQpmT20gbWUgMQp1VnQgdGggMQpRZmkgaW4gMQpNaGogdGggMQp1WWogcXUgMQpScXggcXUgMQpoa1kgdGggMQp3WWIgd2EgMQp0cVAgdGggMQpKcGIgcHIgMQpiR3cgd2EgMQp4RmggdGggMQpYd2Igd2EgMQpLZ3QgdGggMQpJcWMgY2ggMQpwSm0gbWUgMQpRa3EgcXUgMQpiVmggdGggMQp5VHEgcXUgMQp6WmcgbmcgMQpjRHogY2ggMQpxZm0gcXUgMQphZlEgYW4gMQpRd2MgY2ggMQpiZEogZGUgMQpxVHUgdW4gMQpVY3ggY2ggMQpIbnggYW4gMQpIYmggdGggMQpneUggbmcgMQp0VHogdGggMQp0eFYgdGggMQpiZFMgZGUgMQpXZ2cgbmcgMQpvcVAgcXUgMQpScmYgZXIgMQpnWXkgbmcgMQpmTXMgc3QgMQpmS2QgZGUgMQpIeXggbnkgMQpNeHogc3ogMQpxSGsgcXUgMQp0Zk0gdGggMQpoZ1EgdGggMQp6bU8gc3ogMQp3elMgc3ogMQpqd1EgaWogMQpGaGMgaWMgMQp4SXkgbnkgMQpmSGcgbmcgMQp3cVkgcXUgMQpiRnAgcHIgMQpRZHEgcXUgMQpiaFYgdGggMQpiQ2cgbmcgMQpIZ3IgbmcgMQp4cUwgcXUgMQpxZ1MgbmcgMQpOcWcgbmcgMQpmUXYgdmEgMQpRencgc3ogMQpJeGQgZGUgMQpDeG0gbWUgMQpteE4gbWUgMQp2UWkgaW4gMQpjQXEgY2ggMQplQ3ggZXIgMQptcVggcXUgMQpycVkgcXUgMQpmVnAgcHIgMQpxb1AgcXUgMQpHeGMgY2ggMQp2elggc3ogMQpmWGYgZm8gMQpRdGMgdGggMQpvaFEgdGggMQpZZ3kgbmcgMQpYbmIgYW4gMQpjV20gY2ggMQpqWHcgaWogMQpnV2ogbmcgMQpLbWcgbmcgMQp2dkggdmEgMQpVZXcgZXIgMQpxSmsgcXUgMQpIa2QgZGUgMQp4bVAgbWUgMQpzbFIgaXMgMQpVYXEgYW4gMQp6Ykcgc3ogMQp2TnYgdmEgMQpjVmIgY2ggMQpiR2cgbmcgMQppd1UgaW4gMQpDbncgYW4gMQpyWGQgZXIgMQp2V3ogc3ogMQp0R2YgdGggMQpmYlkgYmUgMQpoenAgdGggMQp1V3ogcXUgMQpiTWIgYmUgMQpqelcgc3ogMQpnTGggdGggMQprWmMgY2ggMQprSGcgbmcgMQpWd2Ygd2EgMQp2dFkgdGggMQpxZUEgcXUgMQpjeEcgY2ggMQp1UXogcXUgMQpqR2MgY2ggMQpjdkEgY2ggMQpvVG0gb24gMQpwalkgaWogMQpiVW8gb24gMQpqd1UgaWogMQpKZ20gbmcgMQp0ZlogdGggMQp4ZU8gZXIgMQpxQnAgcXUgMQpwQnogc3ogMQpxU2IgcXUgMQpqeVAgaWogMQpGa3EgcXUgMQpualMgYW4gMQpqdEEgdGggMQpabWYgbWUgMQpZdG0gdGggMQpQcWMgY2ggMQpid0ogd2EgMQpvV2Ygb24gMQpreEoga2EgMQpqSHggaWogMQpnY1AgY2ggMQpnQnMgbmcgMQpia0sga2EgMQp2ZFEgZGUgMQpwalogaWogMQpWZ2YgbmcgMQpzdkcgc3QgMQprR2ogaWogMQpXamcgbmcgMQpRbWsga2EgMQpHbHYgbGUgMQp0bVkgdGggMQprbFkgbGUgMQpQY2ogY2ggMQpmUXcgd2kgMQp4YU8gYW4gMQpqZk4gaWogMQpxR3ggcXUgMQpxdkIgcXUgMQpod0EgdGggMQpYbXEgcXUgMQpYdnQgdGggMQpCcHEgcXUgMQpvSnEgcXUgMQp2bVogdmEgMQpuSnAgYW4gMQp6cUogcXUgMQpxSGYgcXUgMQptUWcgbmcgMQp5R3ogc3ogMQpoUW0gdGggMQptQnAgbWUgMQp0cEogdGggMQpRa2ogaWogMQp1VWcgbmcgMQp0ZEogdGggMQpKZm4gYW4gMQpMdmogaWogMQppWGMgY2ggMQpwT3EgcXUgMQpiaEsgdGggMQpiTWsga2EgMQpGc3cgc3QgMQpxQXQgdGggMQp4d0ogd2EgMQpmUG0gbWUgMQpEZnkgbnkgMQpaYnAgcHIgMQpCZ3cgbmcgMQpwUXAgcHIgMQprUXAga2EgMQpxb1YgcXUgMQpVcWQgcXUgMQpqWW8gb24gMQpzRGYgc3QgMQp4dUogcXUgMQp2Umsga2EgMQpRc2cgbmcgMQp5VGQgZGUgMQpReHIgZXIgMQpIdmMgY2ggMQpoWnQgdGggMQpxRHUgdW4gMQpmeEEgZm8gMQp4UGYgZm8gMQp3WGMgY2ggMQpqSmIgaWogMQpwZEsgZGUgMQpncFcgbmcgMQpRZ3ggbmcgMQpreEcga2EgMQpkTHggZGUgMQpCd3ogc3ogMQpWZHggZGUgMQp5UWggdGggMQpXc3ggc3QgMQpmU2IgYmUgMQpVa2cgbmcgMQpQanogc3ogMQpyRmcgbmcgMQpmalAgaWogMQprV3Yga2EgMQpLaGYgdGggMQp5R3YgdmEgMQpwbkQgYW4gMQpqWWYgaWogMQptZ1IgbmcgMQpyakMgZXIgMQpYamwgbGUgMQprekUgc3ogMQpRZ3EgbmcgMQp6Z2IgbmcgMQptaEQgdGggMQp2a08ga2EgMQp1d1YgcXUgMQpyUHAgZXIgMQp3WGQgZGUgMQpnQW8gbmcgMQprdkcga2EgMQp2Y1ggY2ggMQp4T3ogc3ogMQpYenEgcXUgMQpGbXUgcXUgMQp4R2cgbmcgMQpqalIgaWogMQpxa0kga3UgMQpwcUggcXUgMQpjbkggYW4gMQpkaFQgdGggMQptZFIgZGUgMQpkRGYgZGUgMQpxSXEgcXUgMQp4Q2ogaWogMQpxUmsgcXUgMQprS2MgY2ggMQpJdXUgcXUgMQpqcVIgcXUgMQpxRWsgcXUgMQpoZk8gdGggMQpxdUogdW4gMQpuUnAgYW4gMQp0eEkgdGggMQp5ZlogbnkgMQpvcVQgaG8gMQpjZ1ggY2ggMQpwYkwgcHIgMQpYbXggbWUgMQpWanIgZXIgMQp5bFkgbGUgMQpkZksgZGUgMQp4Z0QgbmcgMQp1d0wgcXUgMQpiUG0gbWUgMQpxQ3kgcXUgMQpScHEgcXUgMQp5cWggdGggMQp4SnQgdGggMQpselEgbGUgMQpmZ00gbmcgMQpZbGMgY2ggMQpmVHogc3ogMQpSamYgaWogMQpSZ2ogam8gMQpHa3QgdGggMQpmeEcgZm8gMQptdEcgdGggMQpsZ0ogbmcgMQp0ZFIgdGggMQppSGsgaW4gMQpHcXYgcXUgMQpsRGogbGUgMQp3elogc3ogMQpkRnAgZGUgMQpxVHQgdGggMQpXdGcgdGggMQpjYlQgY2ggMQpkdksgZGUgMQpDdHcgdGggMQptZEcgZGUgMQp2S2ogaWogMQpDbGYgbGUgMQp3clUgZXIgMQpnbVQgbmcgMQpiWHggYmUgMQp6T3ggc3ogMQpYbmYgYW4gMQpyelEgZXIgMQp2UWogaWogMQprcFQga2EgMQpmWWggdGggMQp6THIgZXIgMQpYZ2QgbmcgMQpjWmwgY2ggMQpsRnkgbGUgMQpabmcgYW4gMQphWGcgYW4gMQpxYkUgcXUgMQp6Y1kgY2ggMQpzcUsgcXUgMQpCbHggbGUgMQpvcUogcXUgMQpqUHYgaWogMQpxWmQgcXUgMQpmZFogZGUgMQpCcW0gcXUgMQpjcEcgY2ggMQp4ZFAgZGUgMQpmdUYgcXUgMQp2YnEgcXUgMQpkaEggdGggMQpKd20gbWUgMQpxa08ga28gMQpnc1kgbmcgMQpxR2ggdGggMQpKa3Yga2EgMQp6cGcgbmcgMQpyd0sgZXIgMQpMaHEgdGggMQp6dVYgcXUgMQpicVYgcXUgMQpRY3YgY2ggMQptV2QgZGUgMQpjbkYgYW4gMQpsV3cgbGUgMQp0eFMgdGggMQp6bkUgYW4gMQpmVGogaWogMQpsRnEgcXUgMQp3ZEogZGUgMQplVmsgZXIgMQp6alogc3ogMQpmUHEgcXUgMQpjcVEgY2ggMQpQY2cgY2ggMQpZZGsgZGUgMQpzdkUgc3QgMQpXcWIgcXUgMQpiY1YgY2ggMQpuSHggb24gMQp3QXggd2EgMQpoZkIgdGggMQphTXYgYW4gMQpwd08gcHIgMQpZd3ggd2EgMQpjYkggY2ggMQpvalogb24gMQpzdVUgcXUgMQpqY1UgY2ggMQpzcVkgcXUgMQpqTXIgZXIgMQpweEcgcHIgMQpyQnEgcXUgMQp2bFkgbGUgMQpoeVkgdGggMQpDdncgdmEgMQpUcWUgcXUgMQpmU2ogaWogMQpmVnMgc3QgMQpFcWMgY2ggMQp4bkQgYW4gMQpPd3AgcHIgMQp4VGIgYmUgMQp3akwgaWogMQpSeHYgdmEgMQpuV2YgYW4gMQp2SHAgdmEgMQp2Qmsga2EgMQpOcXYgcXUgMQpMemYgc3ogMQpid1Mgd2EgMQpDYnkgYmUgMQp6UnIgZXIgMQpxd0ogcXUgMQp4bkIgYW4gMQpxSWMgY2ggMQpjR2sgY2ggMQpZamkgaW4gMQpnVmggdGggMQpsRGMgY2ggMQpReXIgZXIgMQpmY0ggY2ggMQpueEIgYW4gMQpkdncgZGUgMQpnUWMgY2ggMQptclIgZXIgMQpmbksgYW4gMQpIbHIgbGUgMQpEbnEgYW4gMQpiblUgYW4gMQpxQ2UgcXUgMQpUanYgaWogMQpFcHEgcXUgMQp3TGYgd2EgMQpwWmogaWogMQpndlIgbmcgMQprcUsgcXUgMQp2bEcgbGUgMQp2dk4gdmEgMQpnYk0gbmcgMQpiTmsga2EgMQpqekwgc3ogMQpXbHEgcXUgMQphWXEgYW4gMQp6ZFkgZGUgMQpzZkcgc3QgMQpxZlcgcXUgMQprQnYga2EgMQpidEcgdGggMQpNcWIgcXUgMQpsckMgZXIgMQp2dUUgcXUgMQpmeUogbnkgMQpxbVogcXUgMQpKa3EgcXUgMQpDbWogaWogMQpiWHkgYmUgMQpZbXkgbWUgMQpxeFkgcXUgMQpjTmwgY2ggMQpmelUgZm8gMQpSdnQgdGggMQp5bEkgbGUgMQp4TXMgc3QgMQpRaG0gdGggMQpkSHEgcXUgMQpkd0wgZGUgMQp2WXIgZXIgMQpReHUgcXUgMQpkTmggdGggMQp6TmMgY2ggMQpqbVAgaWogMQpQYnEgcXUgMQpmcWogcXUgMQpmVXcgd2EgMQpIeXEgcXUgMQpRZHggZGUgMQp6U2wgbGUgMQpjV3QgdGggMQpGa2UgZXIgMQpadHogdGggMQp1VXEgcXUgMQpuQm0gYW4gMQp6Snkgc3ogMQpwZEkgZGUgMQpuVGQgYW4gMQpZamIgaWogMQpRam4gYW4gMQp5WGogaWogMQp4d0Igb3cgMQprbHEgcXUgMQpoZlkgdGggMQpwRGcgbmcgMQp6WmQgZGUgMQptcU8gcXUgMQpoWnIgdGggMQpjbVkgY2ggMQpnTGsgbmcgMQpRY2ogY2ggMQp1S2ogcXUgMQpucUQgYW4gMQp5S3cgd2EgMQpiZlIgYmUgMQpScXogcXUgMQpqaFEgdGggMQp2TmogaWogMQpUY2YgY2ggMQpIYm4gYW4gMQpMd3YgdmEgMQp3Y1ogY2ggMQpjZEsgY2ggMQpicFIgcHIgMQpsV20gbGUgMQp3TnEgcXUgMQpwQWogaWogMQpnclYgbmcgMQpxbWsgcXUgMQpjTGYgY2ggMQppd0IgaW4gMQplcVYgcXUgMQpXcXogcXUgMQpRbmogYW4gMQp1b0ogcXUgMQpmVmogaWogMQpjYlUgY2ggMQpxcFQgcXUgMQpwZFogZGUgMQpkelcgZGUgMQpXZncgd2EgMQpacW0gcXUgMQprSmQgZGUgMQp6V2Ygc3ogMQpiWWcgbmcgMQpyalEgZXIgMQpkd0IgZGUgMQpWbHggbGUgMQp6S2QgZGUgMQpMeHcgd2EgMQpIcHcgcHIgMQptdlIgdmEgMQpxTXQgdGggMQpwV2IgcHIgMQpkY1cgY2ggMQp6RWggdGggMQpYcnMgZXIgMQpGdHogdGggMQpxeUwgcXUgMQpqU24gYW4gMQpXemggdGggMQpQemYgc3ogMQp6a1cgc3ogMQp5d1kgd2EgMQpvR2Igb24gMQpqQncgaWogMQpRcHogc3ogMQpyV20gZXIgMQpzbVEgc3QgMQp1R2sgcXUgMQp4a1Yga2EgMQp3SmYgd2EgMQpjalcgY2ggMQp3Tnggd2EgMQp3alIgaWogMQp3RGQgd2EgMQpsckIgZXIgMQpxaEogdGggMQpqS3AgaWogMQprTm4gYW4gMQp0cVUgdGggMQpKbWogaWogMQpiSnYgdmEgMQpmck4gZXIgMQp1QmogcXUgMQpVdXYgcXUgMQpNenYgc3ogMQpEanEgcXUgMQpRZ2wgbGUgMQpoZEMgdGggMQptRmggdGggMQp2alUgaWogMQpwclggZXIgMQpLdmMgY2ggMQpyeVkgZXIgMQp2elEgc3ogMQpPamggdGggMQpRZm4gYW4gMQpWcWcgbmcgMQphUXYgYW4gMQpoSHggdGggMQp1SWcgbmcgMQpLcHYgdmEgMQpkUWsga28gMQpHaHEgdGggMQpjWnMgY2ggMQpudkggYW4gMQpqd0ogaWogMQpkTW0gZGUgMQpnakkgbmcgMQpsUGcgbmcgMQpxQnMgcXUgMQpWaHEgdGggMQpxTHQgdGggMQpoQmQgdGggMQpWY3UgY2ggMQpjUWQgY2ggMQp5cFggcHIgMQptUXYgdmEgMQp2bVIgdmEgMQp4ZkggZm8gMQpwcVkgcXUgMQpYdGIgdGggMQpWY3ggY2ggMQp0V2IgdGggMQpQeGEgYW4gMQpRbXIgZXIgMQptZFggZGUgMQpCeHQgdGggMQpqWnYgaWogMQpoTnAgdGggMQp5Yk4gYmUgMQpia1oga2EgMQpuVmYgYW4gMQpsS3EgcXUgMQpvSmogb24gMQpwQnYgdmEgMQpoZ0EgdGggMQpxeEUgcXUgMQpudkogYW4gMQpYY2YgY2ggMQpGZGIgZGUgMQp6QW8gb24gMQp3UWsga2EgMQp0bVggdGggMQpwdlogdmEgMQpmTncgd2EgMQp6S2sgc3ogMQpoUnggdGggMQpUbGogbGUgMQppUWogaW4gMQpqbVUgaWogMQp0YlcgdGggMQp3VmggdGggMQpUdmggdGggMQpuVmcgYW4gMQpMeHAgcHIgMQp2Z08gbmcgMQpkZkUgZGUgMQpuVm0gYW4gMQpxS3kgcXUgMQplcVogcXUgMQpUY2MgY2ggMQpjVGsgY2ggMQpmS3ogc3ogMQpXa3ogc3ogMQpsdlogbGUgMQpyR3AgZXIgMQprS3ogc3ogMQpDYmYgYmUgMQpqUWQgZGUgMQpaZmMgY2ggMQpodlggdGggMQp4Z04gbmcgMQpLcGUgZXIgMQpoek0gdGggMQpqeFogaWogMQp5cUwgcXUgMQpwZ0MgbmcgMQpGcWQgcXUgMQp0TWIgdGggMQpualEgYW4gMQp0ZkIgdGggMQpnak4gbmcgMQp3TmMgY2ggMQpQemogc3ogMQptaE8gdGggMQpxVW0gcXUgMQpGaGggdGggMQpTamQgZGUgMQpoV2ogdGggMQp5aEwgdGggMQpsR3AgbGUgMQpkdFggdGggMQpod1ggdGggMQpzcksgZXIgMQp2cUUgcXUgMQpiY08gY2ggMQp4UWwgbGUgMQpRcWYgcXUgMQprSmcgbmcgMQpwWHogc3ogMQp5dUogcXUgMQpHbnAgYW4gMQpEbGMgY2ggMQpNeGYgZm8gMQp5TnIgZXIgMQpibVYgbWUgMQpmWG8gb24gMQptd1cgbWUgMQpsSWogbGUgMQpGdnEgcXUgMQpVdHEgdGggMQpqR2sgaWogMQp3WXcgd2EgMQp3Vm0gbWUgMQpiVHEgcXUgMQpJanAgaWogMQp6bk0gYW4gMQp4bU8gbWUgMQpnUXggbmcgMQpkS3cgZGUgMQpkVWYgZGUgMQpjU2IgY2ggMQp6VmIgc3ogMQpjY1kgY2ggMQp4akUgaWogMQpwWXQgdGggMQpWcnEgcXUgMQpreksgc3ogMQp6ZkMgc3ogMQpZYmggdGggMQpkZ1MgbmcgMQp4Y1YgY2ggMQp4Tm0gbWUgMQpYa3cga2EgMQpUcHcgcHIgMQpCd2QgZGUgMQpod1QgdGggMQpnUWwgbmcgMQpjRHMgY2ggMQp6WXIgZXIgMQp4VHAgcHIgMQpxV20gcXUgMQp4alQgaWogMQpoaksgdGggMQp1RGMgY2ggMQp4aFMgdGggMQpiV2QgZGUgMQp2Q3cgdmEgMQpqeUIgaWogMQp1V2QgcXUgMQpObnEgcXUgMQpRdmIgdmEgMQpqelYgc3ogMQp6Qnggc3ogMQp3SWogaWogMQpxUnQgdGggMQpxckogcXUgMQp6Wmogc3ogMQprUnIgZXIgMQpOenYgc3ogMQpRZncgd2EgMQpOanQgdGggMQpiRnkgYmUgMQpsaFkgdGggMQplV2ogZXIgMQpqYk0gaWogMQpYc2cgbmcgMQpSc2QgZGUgMQpmbEYgbGUgMQpQaHogdGggMQp4V3Mgc3QgMQpiQ3cgd2EgMQpnZkogbmcgMQpxVm8gcXUgMQplUWggdGggMQp2Y1AgY2ggMQptRGogaWogMQpxVHMgcXUgMQpYZ3MgbmcgMQpWdXEgcXUgMQp1Zk4gcXUgMQp4QnMgc3QgMQpwVGsga2EgMQpmU3EgcXUgMQptYkQgbWUgMQpWd3ogc3ogMQpoaFEgdGggMQprZlAga2EgMQpQd3EgcXUgMQpkaEcgdGggMQpxWmogcXUgMQp5UmogaWogMQp5Q3Mgc3QgMQpmak4gaWogMQpScWcgbmcgMQpqSmggdGggMQpkbFIgbGUgMQpYbWIgbWUgMQpKanQgdGggMQpncUkgbmcgMQpmcU0gcXUgMQppVmcgbmcgMQpIZ3UgbmcgMQppSHcgaW4gMQplUXYgZXIgMQptekUgc3ogMQpmalogaWogMQpxTm4gYW4gMQp3bEUgbGUgMQprR3Aga2EgMQpJcXYgcXUgMQprQm4gYW4gMQp4WmQgZGUgMQpEa2MgY2ggMQp6bEggbGUgMQp0eEIgdGggMQp0UXIgdGggMQp1T3ggcXUgMQpwSmkgaW4gMQp6Ykwgc3ogMQp4a0Qga2EgMQpzY1YgY2ggMQpxWGggdGggMQprSXEgcXUgMQp4Tm4gYW4gMQpnSmYgbmcgMQp0bUIgdGggMQp0Y0sgdGggMQprd1oga2EgMQp1WmogcXUgMQpzblEgYW4gMQp1S3EgcXUgMQpjclggY2ggMQpoWHkgdGggMQpaY2MgY2ggMQpQZnogc3ogMQpkd00gZGUgMQpxSXkgcXUgMQp4dVAgcXUgMQp3RHcgd2EgMQpIanIgZXIgMQpkUWYgZGUgMQp3dkogd2EgMQp0SG0gdGggMQpZZHcgZGUgMQp3eEkgd2EgMQpwT3YgdmEgMQpXbXEgcXUgMQpkaEQgdGggMQpxcHcgcXUgMQpibUMgbWUgMQp3Y1ggY2ggMQp3akggaWogMQpiV2YgYmUgMQpHZHAgZGUgMQpMZHcgZGUgMQpTYnEgcXUgMQp2WnYgdmEgMQpLd2Igd2EgMQpxaFQgdGggMQp5UmYgbnkgMQpod0MgdGggMQpucEogYW4gMQpqbVYgaWogMQp2R2cgbmcgMQp4cUYgcXUgMQpQaG0gdGggMQpwV2MgY2ggMQpWeGsga2EgMQpzSHogc3QgMQpXYnggYmUgMQpiZksgYmUgMQpKZ2wgbmcgMQprVGIga2EgMQpLYmYgYmUgMQprekMgc3ogMQpwS3EgcXUgMQp6d0Igc3ogMQp1WmcgbmcgMQpidEkgdGggMQp6WGogc3ogMQp1elMgcXUgMQp2V2sga2EgMQp4ckggZXIgMQpvUWMgY2ggMQp6bFQgbGUgMQpkZkkgZGUgMQpRbWYgbWUgMQpzZ0UgbmcgMQpZc3ggc3QgMQpSemQgZGUgMQp4TGQgZGUgMQpxc1ggcXUgMQprcUogcXUgMQprQ20ga2EgMQpiRm0gbWUgMQppZ1EgbmcgMQpzUnEgcXUgMQpqR20gaWogMQpTenMgc3QgMQpZdnogc3ogMQprWHogc3ogMQpHbnogYW4gMQptV2MgY2ggMQp0RHEgdGggMQpncXogbmcgMQpuSGIgbmcgMQp0ZE0gdGggMQpPdnggdmEgMQpabmwgYW4gMQp3dUUgcXUgMQp6THQgdGggMQpvZlEgb24gMQp2WWogaWogMQpqeUggaWogMQp6cUEgcXUgMQpjSnkgY2ggMQpXYmYgYmUgMQpsVHQgdGggMQprbFcgbGUgMQpYeGEgYW4gMQpmQ3ogc3ogMQpsS2YgbGUgMQpxd1QgcXUgMQpySGsgZXIgMQpkYk4gZGUgMQp1VXkgcXUgMQp6Z04gbmcgMQpQeGcgbmcgMQpwTmMgY2ggMQpjeUogY2ggMQpqcEggaWogMQpWdGYgdGggMQpzakogc3QgMQpRbGggdGggMQp0d1YgdGggMQp5R3EgcXUgMQp0VnAgdGggMQprc1Egc3QgMQp4blQgYW4gMQpycEogZXIgMQp3ekkgc3ogMQpaaHAgdGggMQphRGYgYW4gMQpVeGogaWogMQpjUGcgY2ggMQpxU3EgcXUgMQptS3EgcXUgMQp2Qnogc3ogMQp5UGogaWogMQpWa3ogc3ogMQpxaUIgcXUgMQp0a0ogdGggMQpPdXEgcXUgMQp6b0ggb24gMQpxVnQgdGggMQpHeHMgc3QgMQpqekYgc3ogMQpzd0ggc3QgMQpuQmIgYW4gMQp6aFEgdGggMQp5Um4gYW4gMQpmblggYW4gMQpxb1EgcXUgMQpteFAgbWUgMQpid1Igd2EgMQpnSmogbmcgMQpxbmsgYW4gMQp0TWsgdGggMQpkeE8gZGUgMQpyelYgZXIgMQp2cFAgdmEgMQpOdnogc3ogMQpOZnAgcHIgMQpDbnogYW4gMQpvVGQgb24gMQpkcUcgcXUgMQpIbXggbWUgMQpwc1ggc3QgMQpzd00gc3QgMQpkcUMgcXUgMQpWd3ggd2EgMQpuWGYgYW4gMQp3a1kga2EgMQp3ZkMgd2EgMQpxU3IgcXUgMQpxVmMgY2ggMQprRG4gYW4gMQpZdmIgdmEgMQp6cUggcXUgMQpxeEogcXUgMQp6S2ogc3ogMQpqY04gY2ggMQp0V2sgdGggMQpScnogZXIgMQpibUcgbWUgMQpzclogZXIgMQp3V3EgcXUgMQpDZmggdGggMQpsTnQgdGggMQpoY1YgdGggMQpabmYgYW4gMQpKaHYgdGggMQpxSXAgcXUgMQp2U3ogc3ogMQpmZVUgZXIgMQp4SWkgaW4gMQpabXEgcXUgMQplR2YgZXIgMQpiUWsga2EgMQpYY2IgY2ggMQpubEsgYW4gMQp0bUogdGggMQpqbEwgbGUgMQptd0MgbWUgMQpxanIgcXUgMQp6QmIgc3ogMQpmaFUgdGggMQpzUHEgcXUgMQpzQmYgc3QgMQp1WHkgcXUgMQpMa3gga2EgMQpyR3ogZXIgMQpoWHogdGggMQp6dVcgcXUgMQpSdnggdmEgMQpiY0ogY2ggMQpFb2ogb24gMQppVnQgaW4gMQp5aEggdGggMQp4VnYgdmEgMQpwTXIgZXIgMQp2WmQgZGUgMQpWdm4gYW4gMQppQ3YgaW4gMQp2UXAgdmEgMQp2bEIgbGUgMQp3VnQgdGggMQpVZ2sgbmcgMQprdFEgdGggMQpqQ3IgZXIgMQpxdnogcXUgMQpiVmYgYmUgMQpyUHYgZXIgMQp3Zkggd2EgMQpoYlUgdGggMQpwakYgaWogMQpvWGcgbmcgMQp6U3IgZXIgMQp3UmIgd2EgMQpIY3UgY2ggMQp5eEogbnkgMQpsVGMgY2ggMQpiWWIgYmUgMQpXeHogc3ogMQp2ckUgZXIgMQp6R3kgc3ogMQpKcW0gcXUgMQpyekkgZXIgMQp4Z1YgZ2kgMQpSdncgdmEgMQpWbnggYW4gMQp1SmcgbmcgMQpoRnEgdGggMQpUZ3ogbmcgMQphUWMgYW4gMQp4ekogc3ogMQp0TmMgdGggMQpqZkEgaWogMQp5Y08gY2ggMQpXa2ogaWogMQp5QnAgcHIgMQpoZ0QgdGggMQppU3ggaW4gMQp4Q20gbWUgMQp5alggaWogMQp1SWggdGggMQpxZ3EgbmcgMQpUemogc3ogMQp5ak8gaWogMQp5clkgZXIgMQpibVogbWUgMQp6cVQgcXUgMQptQmQgZGUgMQpxdksgcXUgMQp6Y0EgY2ggMQp4clggZXIgMQptSm0gbWUgMQpYcWYgcXUgMQpQeGsga2EgMQphRGIgYW4gMQpxWGcgbmcgMQplR3cgZXIgMQpoakQgdGggMQp0VHggdGggMQpvTWQgb24gMQpmS2cgbmcgMQpOcG4gYW4gMQprcVUgcXUgMQpsYkYgbGUgMQpIdmogaWogMQpxWmUgcXUgMQpsUWogbGUgMQpka1kgZGUgMQpkWmwgbGUgMQp6WmggdGggMQpxeU0gcXUgMQpkbUogZGUgMQprZksga2EgMQppUHEgcXUgMQp6d1Ugc3ogMQpwdlMgdmEgMQppaEogdGggMQp1Y1cgY2ggMQpKanogc3ogMQptTWQgZGUgMQp2cHcgdmEgMQp4Q2cgbmcgMQpoS3MgdGggMQp2bEkgbGUgMQpObWMgY2ggMQp4elYgc3ogMQpnWnMgbmcgMQpyUnAgZXIgMQpVZmQgZGUgMQpmcEYgcHIgMQpmd1kgd2EgMQpHeHIgZXIgMQp4THIgZXIgMQp2ekUgc3ogMQpqUmYgaWogMQpiclIgZXIgMQpna1ogbmcgMQpkVXkgZGUgMQpYamkgaW4gMQpLZGIgZGUgMQpqcEMgaWogMQpvVWogb24gMQpxbWggdGggMQpxakwgcXUgMQp3UnMgc3ogMQpqaE0gdGggMQpSaHIgdGggMQpidE4gdGggMQpQanEgaWogMQp4d1Ugd2EgMQpxeUUgcXUgMQpKeGQgZGUgMQpQcXIgcXUgMQpsUmQgbGUgMQpqcUkgcXUgMQpxRnMgcXUgMQpNd2sga2EgMQpqRWIgaWogMQpOeHkgbnkgMQpQem0gc3ogMQp0ZkwgdGggMQp2RmMgY2ggMQpqUWcgbmcgMQpCbnggYW4gMQpsTXYgbGUgMQp0S3EgdGggMQplVnEgcXUgMQpUeXEgcXUgMQpkckogZXIgMQpvSHcgb24gMQpsRmsgbGUgMQpqcFcgaWogMQpRancgaWogMQpjTnggY2ggMQpCaHogdGggMQpiaEIgdGggMQpwRHggcHIgMQp4cFkgcHIgMQp0bkggdGggMQpkZkwgZGUgMQpoekwgdGggMQp6Tmsgc3ogMQpsQm0gbGUgMQpsWGwgbGUgMQp5UHYgdmEgMQpaY2wgY2ggMQpoTXEgdGggMQpySmogcmkgMQphWHcgYW4gMQp6c1Egc3ogMQpjUW0gY2ggMQpTcWMgY2ggMQp0S20gdGggMQpodk8gdGggMQpoR2QgdGggMQpXYm4gYW4gMQp2Q2YgdmEgMQpsR2cgbmcgMQp2RGggdGggMQp3RHEgcXUgMQp4UnkgbnkgMQp2WGkgaW4gMQpxaVEgcXUgMQpjRnMgY2ggMQpMaHAgdGggMQp4RXAgcHIgMQpmUXQgdGggMQpjSnYgY2ggMQpsek8gbGUgMQpGeGsga2EgMQp0RGQgdGggMQpYbnggYW4gMQp0eEMgdGggMQp0R2IgdGggMQp6dkcgc3ogMQpncEMgbmcgMQpweEQgcHIgMQpaZnAgcHIgMQpvV3QgdGggMQp2dlYgdmEgMQpHd2Ygd2EgMQpZY3YgY2ggMQpnY1ogY2ggMQptTXcgbWUgMQp5UWwgbGUgMQp1R3AgcXUgMQpsTmogbGUgMQpZY20gY2ggMQp2SXggdmEgMQp5THAgcHIgMQptUnggbWUgMQpucksgYW4gMQpaeWggdGggMQpOY3QgdGggMQpRbWwgbGUgMQp6UGQgZGUgMQpkV3EgcXUgMQpFZ3ggbmcgMQp2TnMgc3QgMQpzTmwgbGUgMQpwZFcgZGUgMQpTbmggdGggMQp5clAgZXIgMQpmSmwgbGUgMQp0VmcgdGggMQpqdkMgaWogMQp5aE4gdGggMQpxZEMgcXUgMQpwbVQgbWUgMQpMYmcgbmcgMQp4cEogcHIgMQptWXQgdGggMQpid1Ygd2EgMQp3akQgaWogMQpmcUMgcXUgMQp4VWYgZm8gMQpkaFUgdGggMQpiWmIgYmUgMQp0d0QgdGggMQpiYk0gYmUgMQpoZ0MgdGggMQpkS2IgZGUgMQp2Sm0gdmEgMQp3RXEgcXUgMQpPZnEgcXUgMQpjWGwgY2ggMQp3cFYgcHIgMQp0cU0gdGggMQpwVWYgcHIgMQpUd3ggd2EgMQpNZ3EgbmcgMQp2UW8gb24gMQp5alQgaWogMQphVmQgYW4gMQplSHAgZXIgMQp2R3YgdmEgMQpzckcgZXIgMQpxVmIgcXUgMQp0bE0gdGggMQpuclQgYW4gMQp6UmggdGggMQpjTHIgY2ggMQpsckggZXIgMQp3VGwgbGUgMQpjdkkgY2ggMQprcU4gcXUgMQpJeHAgcHIgMQp4ZVEgZXIgMQpjTnkgY2ggMQprUmggdGggMQpydVkgcXUgMQpYY3EgY2ggMQpLemIgYmkgMQpXeGggdGggMQpwak0gaWogMQpqZE8gZGUgMQpKZnkgbnkgMQpiVnogc3ogMQpkUW8gb24gMQpuY1EgYW4gMQpwVncgcHIgMQpTeGogaWogMQpVYnAgcHIgMQp3dkMgdmEgMQpraEcgdGggMQpjcUYgY2ggMQpOeGogaWogMQp3RG0gbWUgMQp5RGQgZGUgMQppeUkgaW4gMQplWHEgcXUgMQpocVAgdGggMQpLeHIgZXIgMQp2c1kgc3QgMQpUd2Igd2EgMQpmcXcgcXUgMQp3bUMgbWUgMQp2RnggdmEgMQp2bkMgYW4gMQpuV3EgYW4gMQpoekIgdGggMQpLZmsga2EgMQp0UWUgdGggMQpqdVcgcXUgMQpxbFggcXUgMQpoR3cgdGggMQpPcWQgcXUgMQpOcHcgcHIgMQpoZ1cgdGggMQpmeE0gZm8gMQpqU3kgaWogMQpmSnQgdGggMQptakcgaWogMQp0Z1YgdGggMQpPZ3ggbmcgMQpIYnggYmUgMQpMamwgbGUgMQppdlogaW4gMQpibVkgbWUgMQpRZnAgcHIgMQp3ZlEgd2EgMQpoQ2cgdGggMQp2dVUgcXUgMQp5ZFogZGUgMQp2Vmsga2EgMQptWmYgbWUgMQpsT3EgcXUgMQpxSXYgcXUgMQp4WmIgYmUgMQp4cWsgcXUgMQpXbXkgbWUgMQpKcWkgcXUgMQpjeEwgY2ggMQpadHEgdGggMQp0ZFQgdGggMQp1V3QgdGggMQp4R3ogc3ogMQpXd2sga2EgMQpwQmsga2EgMQp5cWcgbmcgMQpjWWwgY2ggMQp5blcgYW4gMQp3eUogd2EgMQpxR3kgcXUgMQpmTnAgcHIgMQpoRnMgdGggMQpZeHUgcXUgMQprdkoga2EgMQpGeHogc3ogMQp0d0cgdGggMQpxdkcgcXUgMQp2UnAgdmEgMQpRcWkgcXUgMQpnekUgbmcgMQpwTmwgbGUgMQp6cFcgc3ogMQpkY1AgY2ggMQpjUHggY2ggMQp3Y1EgY2ggMQpwUWMgY2ggMQpxeUYgcXUgMQp6Y1ggY2ggMQp3cWsgcXUgMQprbVkga2EgMQpxbEcgcXUgMQp4RXogc3ogMQpwcVYgcXUgMQpPaHAgdGggMQp4ZE0gZGUgMQpmTHAgcHIgMQpxQWUgcXUgMQpYd3YgdmEgMQpMemkgaW4gMQpxT2sgcXUgMQpjWG4gYW4gMQpLZHMgZGUgMQpndlUgbmcgMQpmUGsga2EgMQpuWnIgYW4gMQpIeHEgcXUgMQpmQ20gbWUgMQpxZkQgcXUgMQpXZnYgdmEgMQpxZmIgcXUgMQpqcUMgcXUgMQpmdVggcXUgMQpxZkEgcXUgMQpSbHQgdGggMQp4akQgaWogMQp3dEYgdGggMQpYbXogc3ogMQpwV3AgcHIgMQpReHYgdmEgMQp6VmYgc3ogMQpnbVogbmcgMQpxZFUgcXUgMQpqcVYgcXUgMQpnWGMgY2ggMQpxbUsgcXUgMQpHZmogaWogMQpjUXIgY2ggMQpZaHIgdGggMQp2dlMgdmEgMQp1RGIgcXUgMQpjZEIgY2ggMQpidkUgdmEgMQp4dlMgdmEgMQpqUnEgcXUgMQpydkQgZXIgMQpYeXkgbnkgMQpKZmkgaW4gMQphQncgYW4gMQpuV2MgYW4gMQp4QnEgcXUgMQprZ1kgbmcgMQpiR2IgYmkgMQpnakUgbmcgMQpSbHcgbGUgMQp3clQgZXIgMQpiUXIgZXIgMQpsalkgbGUgMQpxdlUgcXUgMQpmS20gbWUgMQpwVHQgdGggMQp6VHcgc3ogMQpxblYgYW4gMQpyV3ggZXIgMQpuV2QgYW4gMQpuS2YgYW4gMQprTWYga2EgMQpma0cga2EgMQpid1ggd2EgMQpjd1YgY2ggMQp1d0sgcXUgMQpyTHYgZXIgMQp6TWIgc3ogMQp6cFogc3ogMQpyTXEgcXUgMQpUdGogdGggMQpndk8gbmcgMQpKY3ogY2ggMQpDeXggbnkgMQpualggYW4gMQphVnggYW4gMQpxWG4gYW4gMQpVcXMgcXUgMQpkVnogZGUgMQpSY3AgY2ggMQplS2cgbmcgMQpYem4gaW4gMQp2eUYgdmEgMQpLbGMgY2ggMQp4ZEkgZGUgMQpIcWIgcXUgMQp4RWUgZXIgMQpxcEkgcXUgMQpnRHggbmcgMQpKaGYgdGggMQpxdUsgdW4gMQp2Z1UgbmcgMQpyV3YgZXIgMQpQbm0gYW4gMQpuTG0gYW4gMQpCaGogdGggMQpiUHQgdGggMQpqcEkgaWogMQp0THogdGggMQp2cFMgdmEgMQpGeGogaWogMQpxRHMgcXUgMQp3ek0gc3ogMQpnd0ogbmcgMQp6Qncgc3ogMQpxR3YgcXUgMQpyTGggdGggMQpCamwgbGUgMQpoZkggdGggMQpjbFcgY2ggMQpSZ2sgbmcgMQpHc2cgbmcgMQpVdnggdmEgMQpRZ3YgbmcgMQpnZlggbmcgMQpyUXYgZXIgMQp4dkcgdmEgMQpranggaWogMQpkR2YgZGUgMQpmY0EgY2ggMQpFaHEgdGggMQp6Qnogc3ogMQpHcGsga2EgMQp0QnYgdGggMQpYZmcgbmcgMQp5Sm0gbWUgMQpzcVQgcXUgMQpwclkgZXIgMQpEcW8gcXUgMQpKemcgbmcgMQpxTXAgcXUgMQp5Zk0gbnkgMQpHeGYgZm8gMQp3elAgc3ogMQp6Tm0gc3ogMQp3S2cgbmcgMQpScmQgZXIgMQpIdncgdmEgMQpnZkQgbmcgMQpXbXogc3ogMQpjSm4gYW4gMQpuVGYgYW4gMQp1dlcgcXUgMQp1UGYgcXUgMQp2d1IgdmEgMQpiTWYgYmUgMQp3SXUgcXUgMQpreFkga2EgMQpnWmsgbmcgMQpxRmQgcXUgMQpiTWwgbGUgMQp3SGwgbGUgMQp3VmcgbmcgMQp3bFggbGUgMQpmc0wgc3QgMQpwUmYgcHIgMQp6c1ggc3QgMQpxQmsgcXUgMQpYenAgc3ogMQpqZFIgZGUgMQpabHogbGUgMQpXZmMgY2ggMQpSanYgaWogMQp2Rnogc3ogMQp0a1YgdGggMQpYYncgd2EgMQp4UWMgY2ggMQpLeHkgbnkgMQp4Q3YgdmEgMQpucVYgYW4gMQpXd3ggd2EgMQprZFcgZGUgMQpwa0kga2EgMQpvaFMgdGggMQpaZGMgY2ggMQptQ2cgbmcgMQpzeEwgc3QgMQpRcnggZXIgMQpxWHcgcXUgMQp3cVEgcXUgMQppaksgaW4gMQpzRnogc3QgMQpIbHcgbGUgMQpHcW4gYW4gMQp4UGsga2EgMQp3WnEgcXUgMQpqcW0gcXUgMQpMenAgc3ogMQpCZHogZGUgMQp3UWwgbGUgMQp3dEogdGggMQpVeWkgaW4gMQpXY3kgY2ggMQp3cUggcXUgMQpCbnMgYW4gMQpjRHQgdGggMQp4SnYgdmEgMQpXZnogc3ogMQp4aFAgdGggMQpjV3AgY2ggMQpycVogcXUgMQpia0Iga2EgMQpXdGwgdGggMQpnemYgbmcgMQpiTXIgZXIgMQpweE4gcHIgMQp2aFYgdGggMQprcVggcXUgMQpLZHEgcXUgMQp2UWwgbGUgMQp5a0Mga2EgMQp6TWggdGggMQpFcXogcXUgMQpsWHEgcXUgMQp6bVogc3ogMQpxcEIgcXUgMQp2R2ogaWogMQpUanggemogMQp0dksgdGggMQpnWWMgY2ggMQpsRmMgY2ggMQppSnQgdGggMQpQa3gga2EgMQpjRHYgY2ggMQpZeWQgZGUgMQpWY3EgY2ggMQpYaHEgdGggMQp6TmYgc3ogMQp2Y0QgY2ggMQpiblcgYW4gMQp1dlEgcXUgMQpaemogc3ogMQpnUGogbmcgMQpqd0QgaWogMQpqcE8gaWogMQpiRHggYmUgMQp2RWkgaW4gMQpaY3QgdGggMQp3clggZXIgMQpkaFMgdGggMQp6akogc3ogMQpkRGsgZGUgMQpzckogZXIgMQphV2cgYW4gMQptdkogdmEgMQpZdGMgdGggMQpqaVEgaW4gMQp0RnogdGggMQpzSmwgbGUgMQp2WnEgcXUgMQp4VWQgZGUgMQpvcUIgcXUgMQp4RGggdGggMQpoZkUgdGggMQptU2IgbWUgMQpqbVIgaWogMQpyRnAgZXIgMQpYankgaWogMQpiUHAgcHIgMQppcVEgdGkgMQptZnEgcXUgMQp0eEwgdGggMQpqQmQgZGUgMQpYdnEgcXUgMQpkdlkgZGUgMQpzZE0gZGUgMQp4Z1kgbmcgMQpyWWggdGggMQp2bEEgbGUgMQpwRmIgcHIgMQp5Rnogc3ogMQpnY0sgY2ggMQp4ZlogZm8gMQpqRGMgY2ggMQp5TnYgdmEgMQp0S3QgdGggMQp3dFUgdGggMQpiSGsga2EgMQpxQ3cgcXUgMQpaY2EgYW4gMQprRHcga2EgMQpZd2MgY2ggMQpwWHMgc3QgMQp5TW0gbWUgMQpHd3EgcXUgMQptWXYgdmEgMQp3Q3ggd2EgMQpqWnggaWogMQpvUWQgb24gMQpGemsgc3ogMQpsd0YgbGUgMQpYemsgc3ogMQpOanggaWogMQp5b0kgb24gMQpzSm0gc3QgMQp3S2sga2EgMQpRdGggY2ggMQpMbHogbGUgMQpnVmYgZ2kgMQpwUHEgcXUgMQpsR3kgbGUgMQpnelIgbmcgMQpyWGcgbmcgMQpOcGYgcHIgMQp3dlIgdmEgMQp5WHMgc3QgMQptTWwgbGkgMQpiWXggYmUgMQpmelogc3ogMQp2ckcgZXIgMQpLZGsgZGUgMQp5cXcgcXUgMQpMa3EgcXUgMQpqS3Mgc3QgMQpacXggcXUgMQpQZm0gbWUgMQpybFcgZXIgMQpoUHYgdGggMQpPanggaWogMQpHdHEgdGggMQp2dEogdGggMQpXbHkgbGUgMQp5SGQgZGUgMQprUWIga2EgMQpMZGMgZGUgMQpzVXggc3QgMQpjSmcgY2ggMQpmTGQgZGUgMQpNanEgcXUgMQpDam0gaWogMQphd1ggYW4gMQpHdGwgdGggMQp3ek4gc3ogMQpicXggcXUgMQpmQXEgcXUgMQplelggZXIgMQpjQnggY2ggMQpjc1ggY2ggMQpjVWYgY2ggMQpxc0ogcXUgMQpoc1ogdGggMQpxemcgbmcgMQpRZ2sgbmcgMQpOeGcgbmcgMQpIcWEgYW4gMQpyWGwgZXIgMQpubFAgYW4gMQphVmcgYW4gMQp5aEcgdGggMQprZkEga2EgMQpWbWsgbUcgMQpqS20gaWogMQpoUGQgdGggMQphUGQgYW4gMQpiWXkgYmUgMQpiblogYW4gMQpHc2ogc3QgMQpreFEga2EgMQp2a0Yga2EgMQpqelMgc3ogMQpmV20gbWUgMQpRY3UgY2ggMQpyWmYgZXIgMQpqYlogaWogMQphUWogYW4gMQpiek8gc3ogMQpmWnEgcXUgMQpsck4gZXIgMQpma0wga2EgMQpEcXYgcXUgMQp6a0Mgc3ogMQpzTHcgc3QgMQpOdnIgZXIgMQpOYnkgYmUgMQplTWggdGggMQp3RmMgY2ggMQpDeHogc3ogMQppWnAgaW4gMQpkdlogZGUgMQp2SWggdGggMQpxQ2wgcXUgMQpQem8gb24gMQp2TnEgcXUgMQp6cUsgcXUgMQpMbXggbWUgMQp4VnQgdGggMQpnbEQgbmcgMQpHYmYgYmUgMQpKdnEgcXUgMQp6Rncgc3ogMQp0TXEgdGggMQp2a0oga2EgMQpTeHUgcXUgMQphZlUgYW4gMQptSGIgbWUgMQpqeFUgaWogMQpjSmwgY2ggMQp1cUUgcXUgMQpOcXEgcXUgMQp4R3QgdGggMQpjekcgY2ggMQpLZmcgbmcgMQp6V2ggdGggMQp5WG0gbWUgMQpmbkQgYW4gMQpKcmQgZXIgMQpveFogb24gMQpoWG4gdGggMQpmcUkgcXUgMQp3QW8gb24gMQppR2sgaW4gMQp4RXcgd2EgMQpmVnEgcXUgMQp5dFUgdGggMQpiaEcgdGggMQpvUXogb24gMQpwZ08gbmcgMQpZcW0gcXUgMQpiSmkgaW4gMQprY1YgY2ggMQprbk0gYW4gMQpDd3IgZXIgMQpXZ2QgbmcgMQpicFQgcHIgMQpKZGogZGUgMQpOYnEgcXUgMQp0d0ogdGggMQpRZXAgZXIgMQpLZGMgY2ggMQprUXEgcXUgMQpyUHEgcXUgMQpsV3AgbGUgMQpGYnEgcXUgMQpiVmsga2EgMQp6bEkgbGUgMQpCenAgc3ogMQpqZksgaWogMQpZdm0gdmEgMQpGdG0gdGggMQphTWogYW4gMQp6elYgc3ogMQp6T2EgYW4gMQptSGMgY2ggMQp4V24gYW4gMQpmRmggdGggMQpzRHYgc3QgMQp2bUQgdmEgMQp4akwgaWogMQppQnEgcXUgMQpqcVQgcXUgMQpoc1IgdGggMQpReG8gb24gMQpqc0cgc3QgMQpjWGIgY2ggMQpZYmogaWogMQp4ZUogZXIgMQpvUHEgcXUgMQp5WHQgdGggMQp4dkwgdmEgMQpqY0YgY2ggMQprRmIga2EgMQpqWHYgaWogMQpBb3ggb24gMQp6a1Egc3ogMQpmUGQgZGUgMQpGdnggdmEgMQpmYlggYmUgMQpvQ2Ygb24gMQpZamQgZGUgMQpQcGYgcHIgMQpOanMgc3QgMQpjWmggdGggMQp2bkcgYW4gMQpjd0ogY20gMQpxSmwgcXUgMQpnTmYgbmcgMQpUZnYgdmEgMQp2d0sgdmEgMQpaY3MgY2ggMQplQnYgZXIgMQpxTGYgcXUgMQpZcXQgdGggMQpjckQgY2ggMQpJY2ogY2ggMQpxQmwgcXUgMQpnelggbmcgMQp1akYgcXUgMQp2eFUgdmEgMQprWnQgdGggMQpMZGggdGggMQpiZk0gYmUgMQptUW0gUU8gMQp6bFEgbGUgMQpqYlUgaWogMQpLdnogc3ogMQpVeHcgd2EgMQpwalMgaWogMQpYdnYgdmEgMQprakkgaWogMQpjWWkgY2ggMQpuSm4gYW4gMQpReHogc3ogMQphTncgYW4gMQpKZnAgcHIgMQpiTnogc3ogMQp4ZFEgZGUgMQpCemsgc3ogMQpxWnogcXUgMQpZY3AgY2ggMQpwR3Mgc3QgMQprQ2Yga2EgMQpnd1AgbmcgMQp3YlYgd2EgMQpFcXQgZXEgMQpYaG4gdGggMQpvVWYgb24gMQpkS2MgY2ggMQpzeE4gc3QgMQpPZnogc3ogMQpnQ3AgbmcgMQpiaEkgdGggMQpoZ1UgdGggMQprblUgYW4gMQpralQgaWogMQpmc1ogc3QgMQpsR3YgbGUgMQp3TWQgZGUgMQp1a1EgcXUgMQpHaGsgdGggMQprUncga2EgMQp6UmMgY2ggMQpnd0sgbmcgMQp2SnAgdmEgMQp0VmMgdGggMQpwcVQgcXUgMQppWWwgaW4gMQp4THYgdmEgMQpYZHEgcXUgMQp6Y08gY2ggMQpwbE0gbGUgMQpiRHogc3ogMQpObXggbWUgMQpkS3YgZGUgMQpoUGsgdGggMQpUankgaWogMQp3WXMgc3QgMQpuZkogYW4gMQp0ZkMgdGggMQp6SnQgdGggMQpsS3AgbGUgMQpJeWMgY2ggMQp4dUIgcXUgMQplS3ggZXIgMQpzWmYgc3QgMQp6cFEgc3ogMQpzZkwgc3QgMQptalQgaWogMQp6WHcgc3ogMQp5S3QgdGggMQpyd1YgZXIgMQpwakIgaWogMQpxWWIgcXUgMQpiWXogc3ogMQpxcVkgZXEgMQp1SWYgcXUgMQpqVGMgY2ggMQpzcUMgcXUgMQp1SmMgY2ggMQpkR3ggZGUgMQpzd0Ygc3QgMQpIZm4gYW4gMQpIdGIgdGggMQpwZlcgaFcgMQppeUcgaW4gMQp6UGMgY2ggMQp5elYgc3ogMQpwVnogc3ogMQpzUGcgbmcgMQpmS2ogaWogMQplRmIgZXIgMQpRamkgalMgMQptdEggdGggMQp3Z1ogbmcgMQpoSGQgdGggMQpmVHQgdGggMQpneFogbmcgMQpLdGcgdGggMQpoV2QgdGggMQpmV3EgcXUgMQp3U3YgdmEgMQpGem4gYW4gMQpnaEggdGggMQpucFcgYW4gMQpqdlAgaWogMQp1WWsgcXUgMQpVeG4gYW4gMQpTcWcgbmcgMQp6Y0ogY2ggMQpkTXIgZXIgMQpaZ2MgY2ggMQpxR3AgcXUgMQpvVnEgcXUgMQpvVWEgYW4gMQpvcVYgcXUgMQpqR3Mgc3QgMQpZYnEgcXUgMQpxUmYgcXUgMQpiclogZXIgMQpxVHYgcXUgMQp3WmYgd2EgMQpnT2ogbmcgMQpKamkgaW4gMQpQcHggcHIgMQpxd0IgcXUgMQpxY0ogY2ggMQpmRnogc3ogMQp3d1kgd2EgMQprVGMgY2ggMQp1R24gYW4gMQplUXEgcXUgMQpxR2sgcXUgMQpkcFYgZGUgMQp2VG0gdmEgMQpPanEgcXUgMQpkcFggZGUgMQpiWWYgYmUgMQp0alYgdGggMQpMem4gTEcgMQpZam0gaWogMQp1WXcgcXUgMQpaZGcgbmcgMQpoWHMgdGggMQpJd3AgcHIgMQpoSncgdGggMQpUZmQgZGUgMQpjeE8gY2ggMQpRcXkgcXUgMQpsRHYgbGUgMQp6c08gc3QgMQptckcgZXIgMQpjakogY2ggMQpkZ0QgbmcgMQpjVXcgY2ggMQp6ZEIgZGUgMQpqbFUgbGUgMQpiQmYgYmUgMQpxYkogcXUgMQpxbFIgcXUgMQpjV2MgY2ggMQpYZ2IgbmcgMQp6clUgZXIgMQpiZ0kgbmcgMQp3akogaWogMQptdlUgdmEgMQpyQ3AgR0MgMQpuVnggYW4gMQp4YkcgYmUgMQp0ZE4gdGggMQp5alIgaWogMQp3UWogaWogMQp4elogc3ogMQpxVWsgcXUgMQp4alkgaWogMQpKeHogc3ogMQp4WnMgc3QgMQp2WnggdmEgMQpsUnMgbGUgMQp2d3AgdmEgMQp3cGogaWogMQpzd1Mgc3QgMQpFcXggcXUgMQp2RXcgdmEgMQp0a1EgdGggMQp2Z1ggbmcgMQpSd2Igd2EgMQpzalcgc3QgMQpkWG0gZGUgMQpmdlkgdksgMQpsck8gZXIgMQpMZHggZGUgMQpjeFYgY2ggMQpxRmggdGggMQpxVncgcXUgMQpQeWYgbnkgMQpLeHogc3ogMQpod0ogdGggMQpjcEwgY2ggMQpIZ2UgbmcgMQpXYmggdGggMQpsUXEgcXUgMQpoRGwgdGggMQpacGggdGggMQp3WmogaWogMQpacXQgdGggMQp4bVUgbWUgMQp0VWYgdGggMQpxV28gcXUgMQpMcmQgZXIgMQpwUXMgc3QgMQpyWnYgZXIgMQptakkgaWogMQp4UXkgbnkgMQp2R3kgdmEgMQpqd1kgaWogMQpjTm4gYW4gMQp6cFAgc3ogMQp2S2QgZGUgMQp3Vmsga2EgMQp0TWggY2ggMQpLdGQgdGggMQp0cEcgdGggMQppRGYgaW4gMQpxS2wgcXUgMQpqTGMgY2ggMQpKamwgbGUgMQpoY1EgdGggMQpUcWcgcXUgMQpiR2sga2EgMQpqeFYgaWogMQpmY0MgY2ggMQpGd3ggd2EgMQpxUHkgcXUgMQpqbUUgaWogMQp4bVQgbWUgMQpseEMgR0MgMQpsUnIgZXIgMQpRa2wgbGUgMQppaEYgdGggMQpMbHQgdGggMQpLcWUgcXUgMQpIaGYgdGggMQpuUHEgYW4gMQp6dlEgUU8gMQpqR3kgaWogMQpsTWsgbGUgMQp1T2ogcXUgMQpmZFQgZGUgMQpxdkggcXUgMQpwY1ogY2ggMQpxa2MgY2ggMQpjYkogY2ggMQpnZksgbmcgMQpwTXQgdGggMQp2cEYgdmEgMQpkZ1AgbmcgMQpteEYgbWUgMQpyWnAgZXIgMQpjR2QgY2ggMQpzUHggc3QgMQpyR2QgZXIgMQpnYlEgbmcgMQpEZnogc3ogMQpzakMgc3QgMQp6U3ggc3ogMQpxSW8gcXUgMQpkSXcgZGUgMQprcEYga2EgMQplVXcgZXIgMQpIeGMgY2ggMQp5dkcgdmEgMQp2VWYgdmEgMQpmakYgaWogMQprTHEgcXUgMQpaanQgdGggMQpmTHEgcXUgMQp5ZFMgZGUgMQp6d0sgc3ogMQpoSHkgdGggMQpTc3cgc3QgMQpoakcgdGggMQpEZHAgZGUgMQpiUHMgc3QgMQpXcHEgcXUgMQpjclcgY2ggMQpYcGogaWogMQpvWHIgZXIgMQp2aksgaWogMQpWemYgc3ogMQpsWWQgbGUgMQpPZHggZGUgMQpoVnQgdGggMQpnUmMgY2ggMQpadGYgdGggMQpoVmogdGggMQpKamYgaWogMQpqRmIgaWogMQpMaGYgdGggMQpqbE8gbGUgMQpqdkIgaWogMQpnYk4gbmcgMQp2UG0gdmEgMQp0UWQgdGggMQpWdmogaWogMQpycVggcXUgMQp6RW8gb24gMQpqc0Igc3QgMQpxbUggcXUgMQpidEUgdGggMQpXZGQgZGUgMQpEbWogaWogMQp5d0kgd2EgMQpqcFEgaWogMQp1WHMgcXUgMQpiWW0gbWUgMQpvRnogb24gMQp0QmcgdGggMQpjQ24gY2ggMQpkWmcgbmcgMQp3ckwgZXIgMQpKcnkgZXIgMQppS2QgaW4gMQp2Y04gY2ggMQp6TnAgc3ogMQpuUmYgYW4gMQpkY0ggY2ggMQpxYU8gYW4gMQp1YVEgYW4gMQpqeEwgaWogMQptVWYgbWUgMQp2T2sga2EgMQpQeHQgdGggMQpmdVEgcXUgMQpzZk4gc3QgMQpRbHYgbGUgMQpiWnkgYmUgMQp2RXEgdksgMQpYdmcgbmcgMQpKeGIgYmUgMQp6R3ogc3ogMQpDcWYgcXUgMQpzUHAgc3QgMQp2QXEgcXUgMQprV2QgZGUgMQpyY1ogY20gMQpsRHMgbGUgMQp4RGQgZGUgMQpwU2ogaWogMQp2d1MgdmEgMQprZ1EgbmcgMQpjclQgY2ggMQpmS3Mgc3QgMQpxaGMgdGggMQpnTWwgbmcgMQp6S3QgdGggMQpqZEYgZGUgMQpjZk4gY2ggMQpzZE8gc3QgMQprSGggdGggMQp4dkUgdmEgMQpiUGYgYmUgMQpyelggZXIgMQp2U2ogaWogMQpkRmYgZGUgMQp2WGwgbGUgMQpiUnYgdmEgMQpaeHcgd2EgMQpYencgc3ogMQp2clIgZXIgMQp4SGIgYmUgMQpxZUUgcXUgMQpqclEgZXIgMQp2a0kga2EgMQpmclkgZXIgMQpqcUwgcXUgMQpjWmogY2ggMQpUbWcgbmcgMQptSHcgbWUgMQpkcVMgcXUgMQpxbEkgcXUgMQpadmIgdmEgMQpLbHggbGUgMQpnYlMgbmcgMQpzYlEgc3QgMQpxdUYgdW4gMQpxelQgcXUgMQpxYUkgYW4gMQpWbWQgZGUgMQpxYVEgYW4gMQpRa2Iga2EgMQpYamIgaWogMQpvQ3EgR0MgMQpxUWggUU8gMQpjd08gY2ggMQp0TWYgdGggMQp6cksgZXIgMQp3S3kgd2EgMQp3S2Igd2EgMQpjcVMgY2ggMQppR3YgaW4gMQp4WHcgd2EgMQpmTXggZm8gMQpabXYgdmEgMQpZcXEgcXUgMQprRGggdGggMQpKeHkgbnkgMQp5eUUgbnkgMQpzVXYgc3QgMQpjVnIgY2ggMQpicUggcXUgMQpXZ3EgcXUgMQp1cVEgcXUgMQpiVGcgbmcgMQppTXYgaW4gMQpxV2sgcXUgMQpmZFYgZGUgMQpvUXEgcXUgMQpuWnAgYW4gMQp6b1kgb24gMQpqUmsgaWogMQpxUGogcXUgMQp1cUwgcXUgMQpjcVggY2ggMQpsQnEgcXUgMQpmcFggcHIgMQpiWXcgd2EgMQpZZXEgcXUgMQpoak4gdGggMQp0cVcgdGggMQpqaFQgdGggMQpjdkYgY2ggMQpZY3ggY2ggMQpqRnMgc3QgMQpIZHkgZGUgMQpsclogZXIgMQpmWnYgdmEgMQpUZncgd2EgMQp6ckkgZXIgMQpkRHYgZGUgMQp4ZUggZXIgMQpsekggbGUgMQpzTHIgZXIgMQppS3EgcXUgMQpGemMgY20gMQp4UmQgZGUgMQpmU2QgZGUgMQpxd0YgcXUgMQp3eFkgd2EgMQpZa3cga2EgMQpvVnAgb24gMQpjZ0IgY2ggMQpiRmggdGggMQpualQgYW4gMQpkWnogZGUgMQpiaFMgdGggMQpGenUgcXUgMQpmSG0gbWUgMQp2Tnogc3ogMQpxbEYgcXUgMQpMdmYgdmEgMQp6cFUgc3ogMQpqdEwgdGggMQpjUXEgY2ggMQptS20gbWUgMQpSd2MgY2ggMQpqck8gZXIgMQpucEIgYW4gMQpRdHggdGggMQpNcWogcXUgMQpPcXggcXUgMQpEenAgc3ogMQpoVmcgdGggMQpwVG4gYW4gMQpnUWogbmcgMQptVG4gYW4gMQp0UXYgdGggMQpsWmggdGggMQprSmogaWogMQpjclAgY2ggMQptcUMgcXUgMQpEd2wgbGUgMQp2VmogaWogMQpocVQgdGggMQptSncgbWUgMQp0eFQgdGggMQp3Wm0gbWUgMQpYbnEgYW4gMQpoZlUgdGggMQprVnIgZXIgMQpnVnAgbmcgMQpuQnAgYW4gMQp4blogYW4gMQpqcUEgcXUgMQpQemsgc3ogMQpmSnEgcXUgMQpHbmYgYW4gMQpLeHAgcHIgMQpkWGwgWG0gMQpod0wgdGggMQpScm4gYW4gMQprbEwgbGUgMQpmT2cgbmcgMQpRd3ggd2EgMQpDbXggbWUgMQpGYmYgYmUgMQpoV3EgdGggMQpiU3cgd2EgMQpCeHIgZXIgMQp6Y0IgY2ggMQpsdlggbGUgMQpLa3gga2EgMQpxZkkgcXUgMQp1S2cgcXUgMQpZa3UgcXUgMQpqSnogc3ogMQp1SXAgcXUgMQpxQWQgcXUgMQpwZkggcHIgMQpRd2Ygd2EgMQp3YlUgd2EgMQp2RHYgdmEgMQpnSm4gYW4gMQp6bFIgbGUgMQptWHIgZXIgMQpySHggZXIgMQpvVnogb24gMQpndEcgdGggMQpscksgSEsgMQpXeGUgZXIgMQpwbkogYW4gMQpGcXkgcXUgMQpqVmwgbGUgMQpjYlAgY2ggMQpHamMgalMgMQpqUXMgc3QgMQp0dlYgdGggMQpIemsgc3ogMQpqeVcgaWogMQpYYmYgYmUgMQpxZlMgcXUgMQpXdnAgdmEgMQp3Ykwgd2EgMQpta08ga2EgMQplcUIgcXUgMQpkdlMgZGUgMQp6R2ggdGggMQp2V3UgcXUgMQpmbFggbGUgMQp4SnEgcXUgMQpxTGsgcXUgMQp2TmwgbGUgMQprelEgc3ogMQpDenYgc3ogMQprblYgYW4gMQpSamIgaWogMQpiTnEgcXUgMQp6UG0gc3ogMQpxeEIgcXUgMQpMaGggdGggMQpVdnQgdGggMQp4ZlUgZm8gMQppTnAgaW4gMQp5WWcgbmcgMQpvUGIgb24gMQpxaVcgcXUgMQp5Y0QgY2ggMQp3Vnogc3ogMQp3R3EgcXUgMQpoUmIgdGggMQp4YkIgYmUgMQpzWmwgbGUgMQpneE8gbmcgMQp3Rmsga2EgMQpNeGQgZGUgMQpkeFAgZGUgMQpsUnEgcXUgMQpoYlogdGggMQpFYW8gYW4gMQp6Z0EgbmcgMQpxY1cgY2ggMQp2bVEgdmEgMQpZcWYgcXUgMQp3aU8gaW4gMQp4T2UgZXIgMQpIZnkgbnkgMQpiZlMgYmUgMQpRaG4gdGggMQpDbWsga2EgMQpsWXMgbGUgMQpOcXQgdGggMQpxZUogcXUgMQp6dEogdGggMQpwTXYgdmEgMQp1aFcgdGggMQpqU2IgaWogMQpkWWggdGggMQpjZlcgY2ggMQpnU3ggbmcgMQpxU3YgcXUgMQpqQ3Mgc3QgMQpwd0MgcHIgMQpHeHEgcXUgMQpmTXEgcXUgMQpra0Mga2EgMQp1cUkgcXUgMQp6Qmsgc3ogMQp6c1cgc3QgMQpmWmIgYmUgMQp4amIgaWogMQp2SHEgcXUgMQpmd04gd2EgMQp2TXcgdmEgMQpIaHEgdGggMQpjc0ogY2ggMQpickogZXIgMQp4dk0gdmEgMQptWG4gYW4gMQpxV3cgd2EgMQpkeFogZGUgMQpzVmogc3QgMQp4ckYgZXIgMQpwYlUgcHIgMQpUZnogc3ogMQp3cVQgcXUgMQp2Y0YgY2ggMQpuclMgYW4gMQpXaHogdGggMQprZ1ggbmcgMQp5WGsga2EgMQprSmIga2EgMQpyWmsgZXIgMQpwQmMgY2ggMQpnVXYgbmcgMQpIcWUgcXUgMQpLcWogcXUgMQpvRmogb24gMQp4Yk4gYmUgMQpwbksgYW4gMQpMYncgd2EgMQpkTWIgZGUgMQpxU3AgcXUgMQpac3Ygc3QgMQp3clYgZXIgMQp1S2YgcXUgMQptbFkgbGUgMQpneEYgbmcgMQp0akwgdGggMQpYcmMgY2ggMQpydkYgZXIgMQptTHEgcXUgMQpqcksgZXIgMQpRbHogbGUgMQp6eEQgc3ogMQpmZFkgZGUgMQpqdkQgaWogMQp4UWcgbmcgMQpxRnUgdW4gMQpzZkogc3QgMQpwSWYgcHIgMQpoeEogdGggMQpjTmMgY2ggMQpJZHEgcXUgMQp5SGYgbnkgMQpxWG0gcXUgMQp5bEQgbGUgMQp6RnEgcXUgMQpqV3AgaWogMQplS3AgZXIgMQp4aGYgdGggMQp5YlYgYmUgMQp4WHMgc3QgMQpZaGsgdGggMQpmd1ggd2EgMQpicUsgcXUgMQpudlkgYW4gMQp4dmsga2EgMQpyYlAgZXIgMQpzWGwgbGUgMQpVd3QgdGggMQp3bVcgbWUgMQpweFYgcHIgMQpualogYW4gMQpUcWsgcXUgMQp6bUUgc3ogMQpScXUgdW4gMQpxcU0gcXUgMQpkaFEgdGggMQp1SnogcXUgMQpWcWQgcXUgMQp5Q2sga2EgMQpwV3UgcXUgMQpWZHkgZGUgMQppUnggaW4gMQpWY20gY2ggMQp3SWcgbmcgMQpYYmggdGggMQp2Y0cgY2ggMQpqalggaWogMQpubU8gYW4gMQpkUWogZGUgMQpkZlYgZGUgMQpkYksgZGUgMQpncWsgcXUgMQpuRmQgYW4gMQpvV3Ygb24gMQpuSHAgYW4gMQprbksgYW4gMQpieFogYmUgMQp3bUggbWUgMQpmZ1ggbmcgMQpnekggbmcgMQpaYnYgdmEgMQp2Z00gbmcgMQpkbUsgZGUgMQpjdkIgY2ggMQplUXMgZXIgMQpjSG0gY2ggMQpzQnQgdGggMQpiSHggYmUgMQp2cWQgcXUgMQpOcHkgcHIgMQp4ekwgc3ogMQpnTXggbmcgMQp2d1UgdmEgMQpwZlggcHIgMQpuRmcgYW4gMQpzRnMgc3QgMQpWcWggdGggMQpFbXEgcXUgMQp0WHkgdGggMQp1VmQgcXUgMQpZdmogaWogMQpxSG8gcXUgMQpwV20gbWUgMQp4Y0sgY2ggMQpwVXYgdmEgMQpwTG4gYW4gMQp1Vm4gYW4gMQpGc3EgcXUgMQpjR2ogY2ggMQpYd3kgd2EgMQpnelQgbmcgMQpkTnEgcXUgMQpqclUgZXIgMQpxdEEgdGggMQpncVQgcXUgMQpwd00gcHIgMQpsclAgZXIgMQpqbUMgaWogMQpwbVAgbWUgMQp5aVkgaW4gMQpwVHMgc3QgMQpad2ogaWogMQpxcEYgcXUgMQpmaEogY2ggMQpmT3YgdmEgMQp3Y0sgY2ggMQprcWsgcXUgMQpVZ3ogbmcgMQp4ZkYgZm8gMQpjVHYgY2ggMQpncFggbmcgMQpMZnggZm8gMQpnd1UgbmcgMQpEenggc3ogMQprRGMgY2ggMQpQdmggdGggMQprZFkgZGUgMQp3V3YgdmEgMQpzUXEgcXUgMQptalkgaWogMQp5Q2IgYmUgMQpyU3EgcXUgMQpTZnYgdmEgMQpmWmggdGggMQpkTWQgZGUgMQpkTnMgc3QgMQpqVHYgaWogMQp0bVcgdGggMQpjeEogY2ggMQp1QW8gcXUgMQptSHggbWUgMQpmZ0EgbmcgMQpSaHggdGggMQp3V3QgdGggMQpwZlUgcHIgMQpvSWogb24gMQpsaFEgdGggMQp2RGsga2EgMQp2SmQgZGUgMQpzRHAgc3QgMQpxaVUgcXUgMQpZZnMgc3QgMQpxeFcgcXUgMQpzRmggdGggMQp2aFAgdGggMQpWamogaWogMQp0bVEgdGggMQp3bU0gbWUgMQpjVnkgY2ggMQpLencgc3ogMQp0ZkEgdGggMQpnalIgaWogMQp4eVEgbnkgMQptQnYgdmEgMQpmUXkgbnkgMQpkWmMgY2ggMQplVmggdGggMQpOdmMgY2ggMQpxRmIgcXUgMQpxaGwgdGggMQpaY24gY2ggMQpxd1cgcXUgMQp4WnEgcXUgMQpqaEwgdGggMQpsV2YgbGUgMQpqSnggaWogMQpZenQgdGggMQpFb3EgcXUgMQpOam0gaWogMQpaZ2QgbmcgMQpwR3EgcXUgMQpzZ1kgbmcgMQpqeUUgaWogMQpqekUgc3ogMQp1aksgcXUgMQpxYm0gcXUgMQpXc2Ygc3QgMQptUW4gYW4gMQpzUXMgc3QgMQp5WGcgbmcgMQp2WWUgZXIgMQplUHYgZXIgMQphQ3YgYW4gMQpwVm0gbWUgMQp6eE8gc3ogMQpqalcgaWogMQp2Z0kgbmcgMQp0WmMgdGggMQpRdGcgdGggMQp2TXQgdGggMQprVHQgdGggMQpNeGogaWogMQpmYkkgYmUgMQpxQXUgdW4gMQp3ZlQgd2EgMQpmY0YgY2ggMQpwZksgcHIgMQpiT3EgcXUgMQpodVggdGggMQpjSm0gY2ggMQpYcGcgbmcgMQp0cUogdGggMQpPdmYgdmEgMQpYbGogbGUgMQpOcmwgZXIgMQpmeFcgZm8gMQpTd3EgcXUgMQpxdkUgcXUgMQpxcFkgcXUgMQpvTncgb24gMQprWWMgY2ggMQpqWGIgaWogMQpRZmsga2EgMQplRHAgZXIgMQpWcWIgcXUgMQpzS3ogdXMgMQpxanAgcXUgMQpVeGwgbGUgMQpMa3kga2EgMQp6Rnkgc3ogMQpuTWwgYW4gMQp5WWkgaW4gMQpjUWUgY2ggMQpvWWogb24gMQp0YkIgdGggMQpZYmcgbmcgMQpuVmsgbmQgMQpiWGMgY2ggMQpMcW4gYW4gMQptZEsgZGUgMQpwZFAgZGUgMQp0cVMgdGggMQpaamYgaWogMQprY0MgY2ggMQpxWnEgcXUgMQphU2QgYW4gMQpDbWggdGggMQpoekcgdGggMQp3UW0gbWUgMQpHcWcgcXUgMQp5V3AgcHIgMQpYcncgZXIgMQp5SnkgbnkgMQpzcUQgcXUgMQpkV2IgZGUgMQpuYlEgYW4gMQppd1AgaW4gMQpsV3MgbGUgMQpUc2cgbmcgMQpkSHogZGUgMQp0Y0YgdGggMQpRa3QgdGggMQpCZGQgZGUgMQpNeHEgcXUgMQpwalYgaWogMQprUXIgZXIgMQpkbkkgYW4gMQpmeVkgbnkgMQphRnEgYW4gMQpZbHggbGUgMQpZeW0gbWUgMQpqYlYgaWogMQpxY1YgY2ggMQpwelggc3ogMQpxUmggdGggMQpkakEgZGUgMQpibkkgYW4gMQpMbHYgbGUgMQp0bVogdGggMQpoUW8gdGggMQp6dFcgdGggMQpSeHogc3ogMQpkeFcgZGUgMQpxdFcgdGggMQprcU8gcXUgMQpsSGMgY2ggMQpsUmogbGUgMQpoTmYgdGggMQpHaXEgcXUgMQpjWXEgY2ggMQpZZHAgZGUgMQpxV24gYW4gMQp4a0Iga2EgMQpreEMga2EgMQpsakEgbGUgMQpRd3AgcHIgMQptQ3AgbWUgMQpmSmQgZGUgMQp2Q3QgdGggMQpWY3ogY2ggMQp2QmYgdmEgMQpjWXggY2ggMQpmSHcgd2EgMQprdlcga2EgMQpKbXogc3ogMQpoUWogdGggMQpyYlEgZXIgMQp2eFggdmEgMQp3RmggdGggMQpUanogc3ogMQpoeFIgdGggMQp2ZFkgZGUgMQpwbUYgbWUgMQpzRGwgbGUgMQpyVmggdGggMQp3RGMgY2ggMQpnQncgbmcgMQpjSGYgY2ggMQpwelEgc3ogMQpsVnAgbGUgMQpnZkggbmcgMQpvR2MgY2ggMQp0dkogdGggMQpjTXYgY2ggMQp4blMgYW4gMQp2UXggdmEgMQp1b00gcXUgMQp6a1ggc3ogMQp6SHAgc3ogMQp5dVcgcXUgMQpRYnYgdmEgMQp6d0cgc3ogMQpjcFggY2ggMQpScHYgdmEgMQp6S3EgcXUgMQp3VWIgd2EgMQpxbkogYW4gMQpScHkgcHIgMQpiY1MgY2ggMQpxeEsgcXUgMQpxakQgcXUgMQpsUWcgbmcgMQprclggZXIgMQpGY2cgY2ggMQpvVnggb24gMQp2SmYgdmEgMQpCdmsga2EgMQpkbVggZGUgMQpXZGogZGUgMQpZenAgc3ogMQpZY2QgY2ggMQpqS3ggaWogMQprckggZXIgMQpMbm0gYW4gMQp6Q20gc3ogMQpVd2ogaWogMQpVdmsga2EgMQpNZmogaWogMQp5cUogcXUgMQpMZnEgcXUgMQp5SHogc3ogMQprZ0ogbmcgMQphR3EgYW4gMQp0akggdGggMQpaa2MgY2ggMQp3SHYgdmEgMQpOenAgc3ogMQpjWnggY2ggMQpqdksgaWogMQpjbEYgY2ggMQp4bUQgbWUgMQpZcHogc3ogMQpwRnkgcHIgMQpodkYgdGggMQptdFcgdGggMQpocUcgdGggMQprdk4ga2EgMQp0Y1ogdGggMQp0a1IgdGggMQpwZEggZGUgMQpxRXMgcXUgMQpaY3cgY2ggMQpWd3UgdW4gMQpnWHogbmcgMQptV2ogaWogMQptV3YgdmEgMQpKcXggcXUgMQpvU2ogb24gMQpsd1kgbGUgMQpUa2Yga2EgMQpwY0MgY2ggMQpvaEcgdGggMQpkekcgZGUgMQpmZE4gZGUgMQp4clMgZXIgMQpoSGsgdGggMQpGanogc3ogMQp2YlogdmEgMQpVZHggZGUgMQp3elggc3ogMQp1TnEgcXUgMQp3Zlogd2EgMQpzd0Igc3QgMQpkbVEgZGUgMQpkY0EgY2ggMQpxelAgcXUgMQpqSmogaWogMQpxV3EgcXUgMQp0VmsgdGggMQpnd0IgbmcgMQpiSXcgd2EgMQpicFUgcHIgMQpid00gd2EgMQpma0Ega2EgMQp4VWMgY2ggMQp4VGQgZGUgMQpmS2wgbGUgMQpseFMgbGUgMQp4YVMgYW4gMQp5dlEgdmEgMQpkaFYgdGggMQptZFcgZGUgMQp3Zkogd2EgMQpXcXEgcXUgMQpzWmogc3QgMQpMeHkgbnkgMQp4WHkgbnkgMQpxRG0gcXUgMQpnS3EgcXUgMQpRdmogaWogMQprZkgga2EgMQphUXAgYW4gMQp4Rnogc3ogMQpualcgYW4gMQpScG4gYW4gMQpNbW4gYW4gMQpmaEQgdGggMQpqS2sgaWogMQp6QXEgcXUgMQpxZkwgcXUgMQp5d04gd2EgMQpxcHogcXUgMQpoeFAgdGggMQpHZHEgcXUgMQp0TXggdGggMQpqd0wgaWogMQprQmIga2EgMQpmQXcgd2EgMQpTZHggZGUgMQpKbXYgdmEgMQpiZ1ggbmcgMQp4V3AgcHIgMQpoSHQgdGggMQpHd3cgd2EgMQpGYmIgYmUgMQp6b1Qgb24gMQp5akcgaWogMQpSbGcgbmcgMQp2Rm4gYW4gMQp6Y0sgY2ggMQp4ZEMgZGUgMQp3dk8gdmEgMQpvUWwgbGUgMQpuSXcgYW4gMQp3ekEgc3ogMQpSemogc3ogMQpRem4gYW4gMQpZanQgdGggMQp4a1Ega3UgMQpscnEgcXUgMQpud1ogYW4gMQpwR2sga2EgMQptbkwgYW4gMQpSbHEgcXUgMQpjY0QgY2ggMQpyUmQgZXIgMQpPZmogaWogMQpGamggdGggMQp1dU8gcXUgMQp6Wnggc3ogMQpOYmogaWogMQp6blcgYW4gMQpqYkggaWogMQpyRHggZXIgMQpRbWMgY2ggMQpkd1YgZGUgMQpPcXYgcXUgMQpacWUgcXUgMQpmd0kgd2EgMQpualAgYW4gMQpPcXEgcXUgMQpwVnYgdmEgMQpmcXggcXUgMQpnZk8gbmcgMQpocVUgdGggMQpnRGogbmcgMQpUbWogaWogMQp2Y0sgY2ggMQpxbVYgcXUgMQpzVnggc3QgMQpXZmggdGggMQptSmsga2EgMQpmdUsgcXUgMQpiZk4gYmUgMQpxZlQgcXUgMQpGbWogaWogMQp0Yk4gdGggMQprak4gaWogMQp5aFogdGggMQpOeGsga2EgMQp3eFUgd2EgMQp6WGIgc3ogMQpOemQgZGUgMQpvaEwgdGggMQpwVnQgdGggMQpac3ggc3QgMQpacWogcXUgMQp3VWogaWogMQp5akMgaWogMQprVG4gYW4gMQp2cVYgcXUgMQpGeWMgY2ggMQpJY2QgY2ggMQpzdk4gc3QgMQpKanYgaWogMQpiVnAgcHIgMQpmZEkgZGUgMQpuYlggYW4gMQpjZlUgY2ggMQpsR20gbGUgMQpPdmcgbmcgMQp6RGMgY2ggMQpqZ3EgcXUgMQpsWXIgZXIgMQpoalIgdGggMQpxUG0gcXUgMQppUnEgcXUgMQpacnggZXIgMQp3cFQgcHIgMQp4c0Igc3QgMQpxeFQgcXUgMQpnRnggbmcgMQpxb0ogcXUgMQpzbUQgc3QgMQpsYk0gbGUgMQp3Q2MgY2ggMQp3Rm0gbWUgMQpYbHYgbGUgMQp6eVUgc3ogMQp2Rmsga2EgMQp0alIgdGggMQppWXggaW4gMQp1SmsgcXUgMQpRZWggdGggMQpYcnYgZXIgMQpCcXEgcXUgMQpWZGIgZGUgMQp6blIgYW4gMQpwbUwgbWUgMQp0dkggdGggMQpUbWQgZGUgMQpEZ2IgbmcgMQpvek8gb24gMQpmUWIgYmUgMQpQcWIgcXUgMQpxWW4gYW4gMQp4UG0gbWUgMQpnV2YgbmcgMQpjQ3YgY2ggMQpxZVAgcXUgMQpxWm0gcXUgMQpkZ1ogbmcgMQptak8gaWogMQpnQ3cgbmcgMQpzdlEgc3QgMQpScXEgcXUgMQpRYnQgdGggMQpMa2ogaWogMQpGemEgYW4gMQpqbEIgbGUgMQppV2ogaW4gMQpaeGkgaW4gMQpLeHcgd2EgMQpqY0ogaWogMQp1Q2YgcXUgMQpjQXggY2ggMQpWancgaWogMQp2VXMgc3QgMQpNbnEgYW4gMQpqak0gaWogMQp2VXggdmEgMQp1WnIgcXUgMQp0d1UgdGggMQpZdHYgdGggMQpoUnAgdGggMQprelYgc3ogMQptdlkgdmEgMQpqRmogaWogMQpqQnAgaWogMQprR3ogc3ogMQpxVXEgcXUgMQpxZ1IgcXUgMQpsV2IgbGUgMQp3d1Agd2EgMQp3dkUgdmEgMQpGc3ggc3QgMQpJenggc3ogMQpid0Mgd2EgMQpGbXEgcXUgMQpjTGQgY2ggMQpiUmwgbGUgMQppWGYgaW4gMQp5TXEgcXUgMQpjcVAgY2ggMQpqc0wgc3QgMQpqSXEgcXUgMQp3dUcgcXUgMQpMYnYgdmEgMQpFcWYgcXUgMQpPZ2YgbmcgMQprR3Yga2EgMQpwaksgaWogMQp2Y1EgY2ggMQpYemggdGggMQpqVXYgaWogMQp3R2QgZGUgMQpobVggdGggMQp5cW0gcXUgMQpxa0UgcXUgMQp6Z1ggbmcgMQp2d08gdmEgMQp3bVMgbWUgMQp2aFQgdGggMQpzeVggc3QgMQpuYkMgYW4gMQp6Z1cgbmcgMQp2cU0gcXUgMQpkV2YgZGUgMQpjd0YgY2ggMQpkbkYgYW4gMQpxRGkgcXUgMQpxU3cgcXUgMQpqUWYgaWogMQpjclogY2ggMQpxR2wgcXUgMQpXeHUgcXUgMQpnclcgbmcgMQpnbFggbmcgMQp2RmQgZGUgMQpwYkYgcHIgMQpiTmYgYmUgMQpRY2YgY2ggMQpmVnggZm8gMQpwUGYgcHIgMQpwVnEgcXUgMQp4bEcgbGUgMQpEd2ogaWogMQp4UWogaWogMQpsa1EgbGUgMQpzcUggcXUgMQpZeXggbnkgMQp2Rm0gdmEgMQp0UW8gdGggMQp6bFUgbGUgMQp2bFcgbGUgMQpnbFcgbmcgMQpxbVcgcXUgMQphV2wgYW4gMQp6bVYgc3ogMQpnTG0gbmcgMQpnbEIgbmcgMQp0cUEgdGggMQpoZ0ogdGggMQpjR2IgY2ggMQpxd0UgcXUgMQpGZnkgbnkgMQp3bUwgbWUgMQp4TGggdGggMQpzYkUgc3QgMQpiUWwgbGUgMQp4a1Iga2EgMQp5RmQgZGUgMQpPbXEgcXUgMQpYZmogaWogMQp3SmogaWogMQpMd3Mgc3QgMQp3ZlUgd2EgMQp6Zmsgc3ogMQpsTnYgbGUgMQp5a1Ega2EgMQp4RHQgdGggMQpqRHcgaWogMQp6Ynggc3ogMQp2UXMgc3QgMQp2dk0gdmEgMQpYcXEgcXUgMQpqTHEgcXUgMQp6a1ogc3ogMQpxQWcgcXUgMQpYancgaWogMQpjRncgY2ggMQpyd1EgZXIgMQptV2sga2EgMQpZcnggZXIgMQplVW8gZXIgMQp1RG0gcXUgMQpNaHcgdGggMQpmR3AgcHIgMQpScHogc3ogMQpzYkYgc3QgMQpuZlggYW4gMQpXZnUgcXUgMQpNd3EgcXUgMQpxRGogcXUgMQpXcHcgcHIgMQp6RnYgc3ogMQpxWGMgY2ggMQpxc1QgcXUgMQpwWmggdGggMQpsTGMgY2ggMQpwcUIgcXUgMQpYam8gb24gMQprRGsga2EgMQpKeGYgZm8gMQpWcXogcXUgMQpIdnEgcXUgMQpacXcgcXUgMQprUmMgY2ggMQp0dlIgdGggMQpkTnggZGUgMQpqV3EgcXUgMQpuUncgYW4gMQpyR2IgZXIgMQp2Wnogc3ogMQpYdHogdGggMQprWm4gYW4gMQpWbWogaWogMQpkTXAgZGUgMQpjUHkgY2ggMQp1elIgcXUgMQp5akUgaWogMQpnekYgbmcgMQp0Q3AgdGggMQpxZkMgcXUgMQp2Y3EgY2ggMQpaZmcgbmcgMQprd0Mga2EgMQpma00ga28gMQp2SmggdGggMQplQ3EgcXUgMQp3UHAgcHIgMQpxSnkgcXUgMQpkbVkgZGUgMQp1TWogcXUgMQpmS2ggdGggMQpzcVUgcXUgMQp2TnAgdmEgMQpDcmogZXIgMQpoc0ggdGggMQpWd24gYW4gMQpTZHkgZGUgMQpGcHcgcHIgMQpXY3EgY2ggMQpwalcgaWogMQpkd1cgZGUgMQpnalggbmcgMQp5Wmsga2EgMQpjS2cgY2ggMQp4ZFIgZGUgMQp3cVcgcXUgMQpraEQgdGggMQp2Z0cgbmcgMQp2TWwgbGUgMQpxblEgYW4gMQpoSnQgdGggMQpmdkMgdmEgMQpjcFIgY2ggMQpXdHQgdGggMQp1eVggcXUgMQpjWGYgY2ggMQp1S3YgcXUgMQpnVnYgbmcgMQp4emcgbmcgMQpjUHEgY2ggMQpmVG4gYW4gMQpzRmogc3QgMQptelggc3ogMQpnTXEgcXUgMQpyeEkgZXIgMQplWWYgZXIgMQprd0Iga2EgMQplUWsgZXIgMQpqQnEgcXUgMQpsYkggbGUgMQpxQ3QgdGggMQpXbnYgYW4gMQpnWWQgbmcgMQpaeGUgZXIgMQpmWmogaWogMQpIZ2ogbmcgMQpiUmogaWogMQpmcFIgcHIgMQpjYlIgY2ggMQpscVQgcXUgMQpjTXQgdGggMQp0UXkgdG8gMQp2eEcgdmEgMQpncEIgbmcgMQpHa3cga2EgMQp6cVggcXUgMQp0UHcgdGggMQpmbk4gYW4gMQpHa3Aga2EgMQptdlEgdmEgMQpoSGYgdGggMQp3ZlMgd2EgMQpxQ3ggcXUgMQptcUggcXUgMQpoZ1IgdGggMQpNd2cgbmcgMQpicVEgcXUgMQpGa3ogc3ogMQpvRnYgb24gMQpEZHEgcXUgMQp1SW8gcXUgMQpZZmggdGggMQp5Z1EgbmcgMQpmeGggdGggMQpacWQgcXUgMQpIdG4gdGggMQpHdnogc3ogMQp6Uncgc3ogMQp2Q2IgdmEgMQpyalQgcm8gMQpyakQgZXIgMQpRcG0gbWUgMQpYZGIgZGUgMQpMa2Yga2EgMQpBanggaWogMQpZbHogbGUgMQpRdGIgdGggMQpiSHogc3ogMQpiRGcgbmcgMQpMcXggcXUgMQp5aFcgdGggMQp6THYgc3ogMQp4Z0sgbmcgMQplV3EgcXUgMQpzalMgc3QgMQpxVmUgcXUgMQpPa3EgcXUgMQpFd2ogaWogMQpEc3Ygc3QgMQpqaEkgdGggMQp4R2YgZm8gMQpPa3gga2EgMQpGcXggcXUgMQpkUHYgZGUgMQp6c0sgc3QgMQpxTG4gYW4gMQpma0Iga2EgMQpjQ2IgY2ggMQpnTnAgbmcgMQpRd2QgZGUgMQp6VGYgc3ogMQpQcXEgcXUgMQpyRnYgcm8gMQpSd3QgdGggMQp1S2MgY2ggMQpocU4gdGggMQprbUsga2EgMQp3dUMgcXUgMQpwblogYW4gMQp0Z00gdGggMQpRZHMgc3QgMQpBeHEgcXUgMQp4d08gd2EgMQplUWcgbmcgMQptRmogaWogMQpEcG0gbWUgMQpwUW0gbWUgMQphRnAgYW4gMQptZkIgbWUgMQpmcEEgcHIgMQpqZ1ogbmcgMQpsR2sgbGUgMQp4Y0EgY2ggMQpnV3cgbmcgMQpsekYgbGUgMQp4c1Egc3QgMQpiUXggYmUgMQp3amMgY2ggMQpiRGMgY2ggMQpXcHogc3ogMQpyZlYgZXIgMQpaYnMgc3QgMQpoS3EgdGggMQpxWGEgYXIgMQp3akEgaWogMQp2elMgc3ogMQpjV3kgY2ggMQpnaksgbmcgMQp5UmIgYmUgMQpxZ1UgcXUgMQpwcUYgcXUgMQpxblUgYW4gMQpacWMgY2ggMQpYcWcgcXUgMQp6THEgcXUgMQpnelYgbmcgMQpLcXMgcXUgMQp6Z1ogbmcgMQpqcUcgcXUgMQpwcUogcXUgMQpJZXEgcXUgMQpoakggdGggMQp2bU4gdmEgMQppdUYgcXUgMQp3R3kgd2EgMQpLZGggdGggMQpoUWIgdGggMQpqV3IgZXIgMQpDeHkgbnkgMQpLcXogcXUgMQp3WHIgZXIgMQp4b1Egb24gMQp3QmggdGggMQpxeUkgcXUgMQpxaEMgdGggMQpWcHkgcHIgMQpuSmIgYW4gMQp1R3cgcXUgMQpoaFggdGggMQptalMgaWogMQpTY3YgY2ggMQpoRncgdGggMQpiS2cgbmcgMQpYbW4gYW4gMQpiZFQgZGUgMQpzSnEgcXUgMQp4VG0gbWUgMQpxanogcXUgMQpNcXAgcXUgMQpkSHAgZGUgMQpyUm4gYXIgMQpYbGYgbGUgMQpjTnMgY2ggMQpYcWwgcXUgMQppRnogaW4gMQpObGsgbGUgMQpzUHcgc3QgMQp2V3EgcXUgMQp3WHQgdGggMQpGbnEgYW4gMQpvekogb24gMQp6SWcgbmcgMQpsU2YgbGUgMQp3UmMgY2ggMQpCdnAgdmEgMQpXd3IgZXIgMQpwV2cgcHIgMQpwTGsga2EgMQprckogZXIgMQpaZnYgdmEgMQp5SXggbnkgMQpvS3ggb24gMQpxTGIgcXUgMQpkSGogZGUgMQpvcUsgcXUgMQpjeEMgY2ggMQp3SmggdGggMQp3WmQgZGUgMQpjV3ogY2ggMQp5cVMgcXUgMQprWHEgcXUgMQpmWWQgZGUgMQpkR3kgZGUgMQpkRHQgdGggMQpwS2cgbmcgMQpYamQgZGUgMQpzak0gc3QgMQpzZkMgc3QgMQpkTWggdGggMQpkWnAgZGUgMQp3Y0QgY2ggMQpRb2ogb24gMQpneEMgbmcgMQpaZm4gYW4gMQpoWXYgdGggMQp4V3EgcXUgMQpnWncgbmcgMQpwUWkgaW4gMQpYbGIgbGUgMQpnUXogbmcgMQpuYlogYW4gMQpFenggc3ogMQp3TmcgbmcgMQpYcmogZXIgMQpjeFggY2ggMQpkUXAgZGUgMQpZcG4gYW4gMQpwTnAgcHIgMQpwYlEgcHIgMQpnTXYgbmcgMQpxZUYgcXUgMQp1VnYgcXUgMQpkVmsgZGUgMQp1TXYgcXUgMQpqUW4gYW4gMQptaFAgdGggMQppVGIgaW4gMQpQdncgdmEgMQp6Q3cgc3ogMQp3Y1IgY2ggMQpzdlUgc3QgMQpuTXogYW4gMQpjakUgY2ggMQpqbUggaWogMQpRemMgY2ggMQptcWMgY2ggMQpxbFUgcXUgMQpadnAgdmEgMQp4SGwgbGUgMQpncUIgcXUgMQp4c04gc3QgMQprQ2ogaWogMQpPbHggbGUgMQpHeHcgd2EgMQp4d1Ygd2EgMQpmUGIgYmUgMQpSaHYgdGggMQpwZ1YgbmcgMQpRZHAgZGUgMQp6RnMgc3QgMQprbFEgbGUgMQp5SmQgZGUgMQpyeEUgZXIgMQp1SHYgcXUgMQp3S2wgbGUgMQp3cEogcHIgMQpDanIgZXIgMQp0WWcgdGggMQpWcHogc3ogMQpaeGggdGggMQpwUWwgbGUgMQpGeGUgZXIgMQpRb2sgb24gMQpwbEsgbGUgMQpscFggbGUgMQpqZFAgZGUgMQpacXkgcXUgMQp5Unogc3ogMQpuRGcgYW4gMQprcUwgcXUgMQp1Z1cgcXUgMQpNYmYgYmUgMQpLcWwgcXUgMQpOcXcgcXUgMQpKencgc3ogMQpzR24gYW4gMQp3RHYgdmEgMQpKamsgaWogMQp6dFEgdGggMQpod1AgdGggMQp3RHAgcHIgMQpnZkcgbmcgMQpxaEwgdGggMQpjVXYgY2ggMQpXYmsga2EgMQpma0Yga28gMQpQcXYgcXUgMQpuYksgYW4gMQpxU3ogcXUgMQp2d0kgdmEgMQpjRmMgY2ggMQpxZkcgcXUgMQpyaEYgdGggMQp4emwgbGUgMQpkTmMgY2ggMQp6d1Igc3ogMQp3eksgc3ogMQpiUWEgYW4gMQpoTHEgdGggMQpmVXYgdmEgMQpySGcgbmcgMQp1SmogcXUgMQpGaHogdGggMQpOem0gc3ogMQpnUnogbmcgMQpxWGYgcXUgMQpUem0gc3ogMQpaa3gga2EgMQpoTHggdGggMQpVa2QgZGUgMQpmTWYgZm8gMQp2R3AgdmEgMQpqdEkgdGggMQpoeEUgdGggMQpqckggZXIgMQpGZ2ggdGggMQpkbEYgbGUgMQpqY08gamEgMQpzQ3cgc3QgMQpCcWggdGggMQprWnkga2EgMQpmT2ggdGggMQpySmIgZXIgMQpyalYgZXIgMQpLd3EgcXUgMQpIY3cgY2ggMQptQ3cgbWEgMQpoeE0gdGggMQpqVGIgaWogMQptbVEgbWUgMQpwalIgaWogMQpjZFAgY2ggMQpaanMgc3QgMQpqcUYgcXUgMQp2TW4gYW4gMQpNcXMgcXUgMQpzdlggc3QgMQppWG4gYW4gMQpud1IgYW4gMQp5dFIgdGggMQpWamIgaWogMQpDamwgbGUgMQpwWGQgZGUgMQpHd3UgcXUgMQpxSWogcXUgMQprUW4gYW4gMQpmWW0gbWUgMQp2dFogdGggMQpVc3ggc3QgMQpuZlAgYW4gMQpkUXggZGUgMQpvWGYgb24gMQpmRXcgd2EgMQpzZ1ggbmcgMQpjUHAgY2ggMQp5YlcgYmUgMQprY1cgY2ggMQprSGYga2EgMQp2Y1UgY2ggMQp0WG8gdGggMQpLemggdGggMQpDZnEgcXUgMQpVankgaWogMQpGeGEgYW4gMQpoeFMgdGggMQp0V3ggdGggMQptbEsgbGUgMQpuWmogYW4gMQpxT3YgcXUgMQpYa3QgdGggMQpGemYgc3ogMQp1VGQgcXUgMQpxclMgcXUgMQpQdHcgdGggMQpkRHMgc3QgMQpyTm0gZXIgMQpFd2Ygd2EgMQpoSmsgdGggMQpIZHEgcXUgMQpKdHcgdGggMQprcWMgY2ggMQpuSHEgYW4gMQpyaEggdGggMQpvcUggcXUgMQp2cFogdmEgMQpEZ2QgbmcgMQpxeFYgcXUgMQpDeHYgdmEgMQpwbFYgcHIgMQprSWkgaW4gMQpLaGMgdGggMQpqc1kgc3QgMQpmTGggdGggMQpZa3EgcXUgMQpRbXggbWUgMQp6dkkgc3ogMQp5aFMgdGggMQpxZmcgcXUgMQp3eFogd2EgMQpqVnkgaWogMQprUXcga2EgMQp6WHYgc3ogMQpMaHMgdGggMQpNa3EgcXUgMQpqa1UgaWogMQpZaHEgdGggMQp6ckggZXIgMQp2aEcgdmEgMQpkckQgZXIgMQpQc2ogc3QgMQpnRGYgbmcgMQpYamogaWogMQpwTG0gbWUgMQprbEMgbGUgMQpoVHggdGggMQp6ckogZXIgMQpYZ2sgbmcgMQpXeGYgZm8gMQpmZEQgZGUgMQpqSHAgaWogMQp5RHcgd2EgMQprUHYga2EgMQpSa20ga2EgMQptemcgbmcgMQpsSHogbGUgMQp2cFIgdmEgMQp3WnQgdGggMQpwQmQgZGUgMQpxUGYgcXUgMQpoTncgdGggMQpOdmogaWogMQpweVUgcHIgMQpTamggdGggMQpLenggc3ogMQpvUXAgb24gMQp4ZEwgZGUgMQpkblogYW4gMQpxZkIgcXUgMQprSmMgY2ggMQpmV24gYW4gMQpYbWMgY2ggMQpyR3ggZXIgMQpzRmYgc3QgMQpWd3YgdmEgMQp0S2QgdGggMQpzUXggc3QgMQpvTm0gb24gMQp1WGogcXUgMQpYc3EgcXUgMQp5V2MgY2ggMQpoZkMgdGggMQpJamQgZGUgMQpka1cgZGUgMQpOeG4gYW4gMQpqdUMgcXUgMQpiUHkgYmUgMQpsS3MgbGUgMQphTHEgYW4gMQpqUHAgaWogMQp3cFogcHIgMQpmakUgaWogMQp6TnQgdGggMQptaE4gdGggMQpiUW4gYW4gMQpieEIgYmUgMQpmZFggZGUgMQpKY3YgdmEgMQpGZHAgZGUgMQp3Vnggd2EgMQp0bVUgdGggMQpuakogYW4gMQpxeksgcXUgMQpqdEQgdGggMQpiY1ggY2ggMQpHaHggdGggMQp4WmogaWogMQp2S3cgdmEgMQpwdk8gdmEgMQpnWHMgbmcgMQp3UnYgdmEgMQpoZ04gdGggMQpncE8gbmcgMQpoV2MgdGggMQpVcHEgcXUgMQp2d0QgdmEgMQpteEUgbWUgMQpadm0gdmEgMQpvek0gb24gMQpmYkogYmUgMQp0cFEgdGggMQp5ZVYgZXIgMQpabmIgYW4gMQp3WHYgdmEgMQpiY1kgY2ggMQpzZ1ogbmcgMQpxZk0gcXUgMQpmY0wgY2ggMQptWGwgbGUgMQp1QnEgcXUgMQpqeFcgaWogMQptdFUgdGggMQpxZ0ogcXUgMQpkQXEgcXUgMQpqQnYgaWogMQpHdHkgdGggMQpKZm0gbWUgMQp4cVEgcXUgMQpjQnAgY2ggMQpYcWQgcXUgMQpmdk0gdmEgMQp1V20gcXUgMQpyU2IgZXIgMQpYcWogcXUgMQpxVGQgcXUgMQpsTGcgbmcgMQpKcnAgZXIgMQpvSmIgb24gMQpwWHkgcHIgMQp6clEgZXIgMQpjblQgY2ggMQpxc0UgcXUgMQpwWmMgY2ggMQpiVnkgYmUgMQpxSXogcXUgMQpkZ1IgbmcgMQptTHYgdmEgMQpoVmwgdGggMQpxUmogcXUgMQpmaEEgdGggMQp6TGMgY2ggMQpTZ3EgcXUgMQpwTGMgY2ggMQpUeHEgcXUgMQp5cFkgcHIgMQp0WHogdGggMQpkY0MgY2ggMQppWWYgaW4gMQpXd20gbWUgMQprWmsga2EgMQpZd3IgZXIgMQpnRnYgbmcgMQpGbXogc3ogMQp1UXEgcXUgMQp4d1Igd2EgMQpZZmMgY2ggMQphSW8gYW4gMQpzQnEgcXUgMQpHemIgc3ogMQpqd0kgaWogMQpjRmYgY2ggMQphV3YgYW4gMQpFYXcgYW4gMQp2a1cga2EgMQpOZmggdGggMQpmbE4gbGUgMQpMcG0gbWUgMQp5bEsgbGUgMQpabnIgYW4gMQptY1EgY2ggMQprZkUga2EgMQpJeWYgbnkgMQpxclYgcXUgMQpmUHggZm8gMQpmZ0ogbmcgMQpqSWkgaW4gMQpiUHcgd2EgMQpReXggbnkgMQpRbmIgYW4gMQpXZG0gZGUgMQpuSnQgdGggMQpxQ2QgcXUgMQpnWmwgbmcgMQpObHogbGUgMQpad2ggdGggMQppV2wgaW4gMQpiVXUgcXUgMQpsYkogbGUgMQpzTnEgcXUgMQpxalUgcXUgMQp3YlQgd2EgMQp5TmMgY2ggMQpteE0gbWUgMQpwSGsga2EgMQpSZHEgcXUgMQpna0UgbmcgMQpoYk4gdGggMQpUZ3EgcXUgMQpnalYgbmcgMQpHancgaWogMQpncVggcXUgMQpxWHggcXUgMQp2UXEgcXUgMQpwTmIgcHIgMQpmSnkgbnkgMQp5dlogdmEgMQp6TmwgbGUgMQp6RGIgc3ogMQpsVXogbGUgMQpEeHkgbnkgMQpXd24gYW4gMQpoUG4gdGggMQprTmIga28gMQpXZGIgZGUgMQp6WHQgdGggMQpwakwgaWogMQp0SmcgdGggMQpqbU0gaWogMQpiWGcgbmcgMQpoVHYgdGggMQpZc2Ygc3QgMQpobVEgdGggMQpWeXEgcXUgMQpGcGQgZGUgMQp5UXcgd2EgMQpQYm4gYW4gMQp4VmogaWogMQp3aFAgdGggMQpmU2cgbmcgMQpHeHogemUgMQpEZncgd2EgMQpyTXggZXIgMQp6TWYgc3ogMQp2SncgdmEgMQp4SmwgbGUgMQp4Zk4gZm8gMQpkUXcgZGUgMQpmdUQgcXUgMQp4akIgaWogMQpsUGogbGUgMQptcUEgcXUgMQptZk0gbWUgMQprd0cga2EgMQplYVkgYW4gMQpWbW0gbWUgMQp6ZlMgc3ogMQpGbXkgbWUgMQpzcVAgcXUgMQpmS2sga2EgMQpRZHYgZGUgMQpkalogZGUgMQpxclIgcXUgMQp0eEsgdGggMQpieEggYmUgMQpqUmIgaWogMQpjakQgY2ggMQpTeHcgd2EgMQpTeGggdGggMQp2clogZXIgMQp4bUggbWUgMQpkZkggZGUgMQpmSncgd2EgMQptd1ogbWUgMQp2Um0gdmEgMQp4d2ogaWogMQpYcXIgZXIgMQpHdmogaWogMQpoekYgdGggMQp4bksgYW4gMQp4aFUgdGggMQpObHMgbGUgMQp6YlYgc3ogMQpmVHEgcXUgMQpXeHYgdmEgMQp1cEcgcXUgMQpxQW8gcXUgMQprS3gga2EgMQp6bEQgbGUgMQpoVGwgdGggMQpHcXIgcXUgMQpHeG0gbWUgMQp6UGogc3ogMQpidlogdmEgMQpqSGMgY2ggMQppWGcgbmcgMQpLZ3ogbmcgMQpKeWkgaW4gMQp2RmggdGggMQp5dFcgdGggMQpxQmQgcXUgMQpYanEgcXUgMQpkZ08gbmcgMQptak4gaWogMQpEamcgbmcgMQp6SWogc3ogMQp1RHggcXUgMQpxSmYgcXUgMQpmQXggZm8gMQpGc2ogc3QgMQp5RGYgbnkgMQp4alYgaWogMQpoZEIgdGggMQpkd0cgZGUgMQpzbFcgbGUgMQp6WWIgc3ogMQp2ek8gc3ogMQp2cU8gcXUgMQpKenYgc3ogMQp4bUcgbWUgMQpLZHcgZGUgMQp4VnEgcXUgMQpqdEUgdGggMQprSnkga2EgMQp4alcgaWogMQptd1IgbWUgMQp6Vnggc3ogMQp0TWogdGggMQpxcWIgcXUgMQpubFEgbGUgMQpieFEgYmUgMQpoSnYgdGggMQpqblkgYW4gMQp5ZlMgbnkgMQpNZHcgZGUgMQp6WmMgY2ggMQp5c0ogc3QgMQpRcXYgcXUgMQp6eGwgbGUgMQpqQXEgcXUgMQpsSncgbGUgMQprd0oga2EgMQpzeEMgc3QgMQpoSnIgdGggMQp4R3AgcHIgMQpjY0YgY2ggMQp2R3EgcXUgMQpxU2MgY2ggMQpmcXEgcXUgMQpra1Yga2EgMQpnVnEgcXUgMQpXcWcgcXUgMQprSnAga2EgMQpXbHIgZXIgMQpKd3ogc3ogMQpxRWEgYW4gMQprckwgZXIgMQp0cUUgdGggMQplSnogZXIgMQpXaHggdGggMQp2V3cgdmEgMQpRemggdGggMQpwY0YgY2ggMQpWbXggbWUgMQpkdkMgZGUgMQpxalogcXUgMQpwa0Yga2EgMQpjdk8gY2ggMQpReXYgdmEgMQpoTnMgdGggMQpzbkogYW4gMQp5alUgaWogMQpZZnEgcXUgMQp4THcgd2EgMQpyVnogZXIgMQpnT3cgbmcgMQpmeEwgZm8gMQpzblcgYW4gMQp5V2sga2EgMQp3Z0sgbmcgMQphVGYgYW4gMQplVmYgZXIgMQp2WnAgdmEgMQp1VnAgcXUgMQpWamggdGggMQp6d1Qgc3ogMQp3U24gYW4gMQpuTnAgYW4gMQpnZkYgbmcgMQpoY1cgdGggMQpnVGYgbmcgMQpxYUogYW4gMQprelkgc3ogMQpsalggbGUgMQp3TW0gbWUgMQpidEIgc3QgMQp6ZkUgc3ogMQpieE8gYmUgMQp3UGMgY2ggMQpmZ0sgbmcgMQpmelcgc3ogMQpkY1ggY2ggMQpxcVIgcXUgMQpranEgcXUgMQp2TWggdGggMQpnWmogbmcgMQpxdHcgdGggMQp2a1kga2EgMQpsQ2IgbGUgMQpkcE8gZGUgMQptWG0gbWUgMQp2V2MgY2ggMQpmT3EgcXUgMQpWZ3kgbmcgMQpka0QgZGUgMQpmUWggdGggMQp2SXEgcXUgMQpsWnIgZXIgMQp6S24gYW4gMQpWcHQgdGggMQpEbXcgbWUgMQpOd2Ygd2EgMQprWWwgbGUgMQpqcEogaWogMQpxWGkgcXUgMQpCbmogYW4gMQp4ZksgZm8gMQpmQ2MgY2ggMQp2UGQgZGUgMQpRbnAgYW4gMQp5cFcgcHIgMQp1d0ogcXUgMQpQdmIgdmEgMQpjbkMgY2ggMQpodkEgdGggMQpoR3ogdGggMQpuWnggYW4gMQprYlMga2EgMQpTd3ggd2EgMQpodlAgdGggMQprcUcgcXUgMQpiTHEgcXUgMQpxalAgcXUgMQpzVW8gb24gMQpsRHEgcXUgMQpabHAgbGUgMQpkd1EgZGUgMQpkbE4gbGUgMQpmVGwgbGUgMQpOcHYgdmEgMQpiTW4gYW4gMQpkTnogc3ogMQplZlYgZXIgMQphQ3cgYW4gMQphV2YgYW4gMQpMcW8gcXUgMQpmelQgc3ogMQpKanIgZXIgMQp6dksgc3ogMQpud1QgYW4gMQpmWHIgZXIgMQpjR20gY2ggMQpsdlMgbGUgMQpxRHEgcXUgMQpxUm0gcXUgMQp2WXQgdGggMQppUXYgaW4gMQpma0gga2EgMQpmY08gY2ggMQpyTm4gYW4gMQpxbVMgcXUgMQprelIgc3ogMQpEZmMgY2ggMQpxVXMgcXUgMQp4cVAgcXUgMQpzWGsgc3QgMQpYeXQgdGggMQpwV3QgdGggMQpqYkwgaWogMQpqWWQgaWogMQprcVYgcXUgMQpGcW0gcXUgMQp4b1ggb24gMQp6dVggcXUgMQp4VXEgcXUgMQpjZ0MgY2ggMQp3QnEgcXUgMQpnUXAgbmcgMQpqbkUgYW4gMQp5WnMgc3QgMQpma0Qga2EgMQpzVmsgc3QgMQpxeVggcXUgMQpjQmYgY2ggMQpDankgaWogMQpkUHEgcXUgMQp3RGcgbmcgMQpkeEIgZGUgMQpEa20ga2EgMQprUHAga2EgMQpoV3ogdGggMQpCanYgaWogMQpJemYgc3ogMQpIbmsgYW4gMQpyUWMgY2ggMQpKd3UgcXUgMQpmYlAgYmUgMQpmclEgZXIgMQpBb3Ygb24gMQp5cVEgcXUgMQpqZlkgaWogMQp4c0ggc3QgMQp6eGggdGggMQpKYmogaWogMQpNanogc3ogMQpnUnAgbmcgMQpHdncgdmEgMQptekYgc3ogMQpvcUYgcXUgMQplalUgZXIgMQp4bVEgbWUgMQpoT3EgdGggMQpwd1ggcHIgMQp6Z0sgbmcgMQp3TGsga2EgMQpmcWMgY2ggMQpkUG0gZGUgMQp0Q2cgdGggMQpxckYgcXUgMQpwV2wgbGUgMQpyRGYgZXIgMQpZbncgYW4gMQpqblEgYW4gMQp0RmIgdGggMQpycFUgZXIgMQpwUGogaWogMQp5ak0gaWogMQpqbVkgaWogMQpDcHogc3ogMQp1RG4gYW4gMQp1cVkgcXUgMQpQanggaWogMQpxRnYgcXUgMQpLdGYgdGggMQpKY2ogY2ggMQprcE8gcHIgMQpwZ1ogbmcgMQprZk8ga2EgMQp0WnYgdGggMQpqSHEgcXUgMQpjUnEgY2ggMQp6RG0gc3ogMQpsUG0gbGUgMQpzdlAgc3QgMQpxa3ggcXUgMQpiTnAgcHIgMQpLanEgcXUgMQp2cVMgcXUgMQpmUXAgcHIgMQp0eFIgdGggMQpIcGYgcHIgMQppUWcgbmcgMQp2dlAgdmEgMQppR2YgaW4gMQp0akkgdGggMQpwV24gYW4gMQpRcWcgcXUgMQpxaUYgdGkgMQpaenIgZXIgMQphWWYgYW4gMQp6akEgc3ogMQprd1Iga2EgMQpna00gbmcgMQpDamYgaWogMQp6Z00gbmcgMQpSeGsga2EgMQpiQ2QgZGUgMQpZcHYgdmEgMQp3eUUgd2EgMQppeUIgaW4gMQpoUXAgdGggMQppcFEgaW4gMQpVY2ogY2ggMQpxa1cgcXUgMQprcksgZXIgMQpIcHAgcHIgMQp4bk4gYW4gMQpqd0IgaWogMQpaZG0gZGUgMQptWWogaWogMQp0UXggdGggMQpxd1MgcXUgMQpIeG8gb24gMQpxRHggcXUgMQpjWGQgY2ggMQpnZE8gbmcgMQphRW8gYW4gMQpUd2QgZGUgMQphdlEgYW4gMQpsaFogdGggMQpselYgbGUgMQpiSGYgYmUgMQpiSm4gYW4gMQpVcXogcXUgMQp1RnkgcXUgMQpqTmwgbGUgMQp4QnAgcHIgMQpkUmIgZGUgMQpubFQgYW4gMQp3ck8gZXIgMQpselcgbGUgMQpmWWYgZm8gMQptUncgbWUgMQpyWHkgZXIgMQpxeVIgcXUgMQpmR3YgdmEgMQpVd2sga2EgMQprWG0ga2EgMQpoSnkgdGggMQpYZ3YgbmcgMQp4WXYgdmEgMQp5WWQgZGUgMQp4ekMgc3ogMQpnakIgbmcgMQpqekkgc3ogMQp6ck8gZXIgMQp0cUYgdGggMQp2d00gdmEgMQp6Q3EgcXUgMQpsakwgbGUgMQp2blogYW4gMQplRHEgcXUgMQpRdnEgcXUgMQpwZkwgcHIgMQppUmIgaW4gMQpnZFIgbmcgMQpxQXYgcXUgMQp2bkwgYW4gMQpta1Qga2EgMQpwVmsga2EgMQp4S2ggdGggMQpqTmsgaWogMQpqTHQgdGggMQpjTnAgY2ggMQp0bVAgdGggMQp2VnQgdGggMQpxZlAgcXUgMQpVcW8gcXUgMQpEbnAgYW4gMQp5R2IgYmUgMQpzSGQgc3QgMQpwd0YgcHIgMQpmUHkgbnkgMQpEcnEgcXUgMQpiSmggdGggMQpzUXAgc3QgMQpJd3Mgc3QgMQp1Q3cgcXUgMQpMd2ogaWogMQpyRncgZXIgMQpzSnAgc3QgMQp4aUkgaW4gMQpScXYgcXUgMQpia1Ega2EgMQpxTnAgcXUgMQpkWWwgbGUgMQpWbWYgbWUgMQpsWWMgY2ggMQpvUHcgb24gMQprak8gaWogMQptS2IgbWUgMQpmRGYgZm8gMQpmRmIgYmUgMQpWaHYgdGggMQpIanEgcXUgMQpxZksgcXUgMQpLanAgaWogMQp2VGcgbmcgMQpwQnEgcXUgMQpIdGQgdGggMQpwTmQgZGUgMQpiUXYgdmEgMQphU3ggYW4gMQpqd3ggaWogMQpVeXggbnkgMQp3VmogaWogMQpJb3EgcXUgMQpOaG0gdGggMQpIcWggdGggMQpyVXEgcXUgMQpiQnggYmUgMQpHcWIgcXUgMQpDY3cgY2ggMQpoWncgdGggMQpRYmwgbGUgMQp4RnYgdmEgMQpzWnYgc3QgMQpxelkgcXUgMQpwRGIgcHIgMQpjZlIgY2ggMQpycWsgcXUgMQpmelAgc3ogMQpocU8gdGggMQpwekggc3ogMQpxU2ogcXUgMQpweEogcHIgMQp4YnEgcXUgMQpzWGYgc3QgMQp5YlQgYmUgMQpzSG4gYW4gMQp2VHogc3ogMQpQZ2YgbmcgMQpoS3cgdGggMQpqUGogaWogMQp3VHggd2EgMQpqU2ogaWogMQpGZ3ogbmcgMQpiS2sga2EgMQplVWogZXIgMQpjRGYgY2ggMQp4RmcgbmcgMQpjblcgYW4gMQp0VXkgdGggMQpKZ3ggbmcgMQp5dUYgcXUgMQp2eVEgdmEgMQp4Q3ogc3ogMQpqUmggdGggMQpjWHggY2ggMQprR2sga2EgMQpYbmggdGggMQpxUGggdGggMQpsZlogbGUgMQpxVmEgYW4gMQp4d3Mgc3QgMQpEenQgdGggMQp4ZkcgZm8gMQpmWGggdGggMQpqZ1YgbmcgMQp2SmogaWogMQpiWGogaWogMQpjZ0cgY2ggMQp2dVcgcXUgMQp0eEcgdGggMQpaeHogc3ogMQpmTmMgY2ggMQpvQnEgcXUgMQpXZ3YgbmcgMQpId3ogc3ogMQpvYVcgYW4gMQp2UmcgbmcgMQp1WHogcXUgMQpmelEgc3ogMQpiY0IgY2ggMQpCbncgYW4gMQpndkIgbmcgMQpyUW0gZXIgMQpjdlUgY2ggMQp4aFIgdGggMQp6eFIgc3ogMQpidFogdGggMQpLa2Yga2EgMQp6Sncgc3ogMQp1d3EgcXUgMQpwU3ggcHIgMQp5UnYgdmEgMQpuQ3EgYW4gMQp0R3YgdGggMQp3Z1QgbmcgMQprTnogc3ogMQpvSGsgb24gMQpXencgc3ogMQpodlUgdGggMQpza1ggc3QgMQp2WXogc3ogMQpqb1ogb24gMQpuR3EgYW4gMQpxbU0gcXUgMQpCbXIgZXIgMQpzVmcgbmcgMQp1Q3YgcXUgMQppWHogaW4gMQp2S3AgdmEgMQpsRXcgbGUgMQpoaEYgdGggMQppd1MgaW4gMQpxeVUgcXUgMQpqalkgaWogMQpZZ20gbmcgMQp3SmQgZGUgMQplUXAgZXIgMQpZZmIgYmUgMQpXcGcgbmcgMQpqZFMgZGUgMQp2bUcgdmEgMQptZFQgZGUgMQpnclogbmcgMQp5cU4gcXUgMQpwQnAgcG8gMQpma1oga2EgMQpxZUIgcXUgMQpjR3MgY2ggMQpFcWcgcXUgMQpjZk8gY2ggMQp1U3ggcXUgMQpEaGYgdGggMQpRanIgZXIgMQp4cVogcXUgMQp5UWYgbnkgMQpucFkgYW4gMQp4RGMgY2ggMQpibVEgbWUgMQprTWIga2EgMQphcUMgYW4gMQpqWWwgbGUgMQp3a0Qga2EgMQpjV3MgY2ggMQp5eUogbnkgMQp3dlYgdmEgMQpsWWIgbGUgMQpxclcgcXUgMQpicXogcXUgMQp3akMgaWogMQp2S3kgdmEgMQp2akQgaWogMQpzRHMgc3QgMQpmS2YgZm8gMQp6c1Qgc3QgMQpqWWMgY2ggMQpZd3QgdGggMQpIancgaWogMQp3SXkgd2EgMQpmZlUgZm8gMQpXbnggYW4gMQplSHEgcXUgMQpmV3kgbnkgMQpOd3YgdmEgMQp5U2ogaWogMQpqZkMgaWogMQp4WHEgcXUgMQpnckkgbmcgMQpvVmYgb24gMQpWZnkgbnkgMQpqZ1kgbmcgMQpIanAgaWogMQp6cUMgcXUgMQpxeUggcXUgMQprY1EgY2ggMQp6c0Ugc3QgMQpwQ3ggcHIgMQprd1Aga2EgMQpqZlEgaWogMQp3WmcgbmcgMQpWeG0gbWUgMQpKdmIgdmEgMQpzRXcgc3ogMQpqTGwgbGUgMQpkT3ggZGUgMQp3cFMgcHIgMQp5SW8gb24gMQp0R3QgdGggMQp2SHogc3ogMQp4R2ogaWogMQpndlEgbmcgMQpwTnIgZXIgMQpncVkgcXUgMQpzZksgc3QgMQpkWWQgZGUgMQpzTW0gc3QgMQpvQnggb24gMQpxc0YgcXUgMQpibUkgbWUgMQp0bUMgdGggMQp3bFcgbGUgMQpUd2cgbmcgMQpzclYgZXIgMQpyTnogZXIgMQpVdWMgY2ggMQpHamcgbmcgMQpualkgYW4gMQp2T2ggdGggMQpRbWggdGggMQpGbmYgYW4gMQp5dlkgdmEgMQpwR2YgcHIgMQpsSHAgYWwgMQpxZ1ogcXUgMQpqYlMgaWogMQp4UWkgaW4gMQp0cUcgdGggMQpud0kgYW4gMQpxa1kgcXUgMQpXeHkgbnkgMQpoRG0gdGggMQpxUWUgcXUgMQppSnAgaW4gMQp4ck4gZXIgMQpkR2cgbmcgMQprUXgga2EgMQpKcWcgcXUgMQpoTWsgdGggMQpsalQgbGUgMQpYa24gYW4gMQp6dHEgdGggMQpxTmQgcXUgMQpzdVkgcXUgMQpVb2EgYW4gMQpkalIgZGUgMQptRmYgbWUgMQpqenEgcXUgMQp6alIgc3ogMQpObmwgYW4gMQp0SnAgdGggMQpnWnIgbmcgMQpCd3ggd2EgMQpkV3ogc3ogMQpsd00gbGUgMQpJcWsgcXUgMQp0d1ogdGggMQpNd3QgdGggMQpralkgaWogMQp6QnYgc3ogMQppd0YgaW4gMQpySHogZXIgMQpTcWggdGggMQpvS3EgcXUgMQpxak8gcXUgMQpodFEgdGggMQpjS3ggY2ggMQpicVcgcXUgMQprWWggdGggMQp0QnEgdGggMQpnbUogbmcgMQplWXggZXIgMQpoR3YgdGggMQpoUWQgdGggMQpwblggYW4gMQpidkogdmEgMQpzeE0gc3QgMQpxTnQgdGggMQpXbGogbGUgMQprcUQgcXUgMQpxZFogcXUgMQptaFkgdGggMQp0bEMgdGggMQpwcUkgcXUgMQp5YkQgYmUgMQp4QWUgZXIgMQpwTHQgdGggMQpsSGIgbGUgMQp4VmMgY2ggMQpkaE4gdGggMQpxeFUgcXUgMQpkVmYgZGUgMQpaa20ga2EgMQprcEQga2EgMQpwakggaWogMQp5R20gbWUgMQppeVAgaW4gMQp3bUsgbWUgMQptSnogc3ogMQpmbUwgbWUgMQpjQnYgY2ggMQpWdmYgdmEgMQpFcWwgcXUgMQpvaFYgdGggMQpsQ3ggbGUgMQpvV2MgY2ggMQpuelggYW4gMQpmSWogaWogMQprUHQgdGggMQpwWW0gbWUgMQp6aEcgdGggMQpjcU4gY2ggMQp1bVEgcXUgMQp3WHMgc3QgMQpsWmogbGUgMQpTeHMgc3QgMQpLcWQgcXUgMQp0V2MgdGggMQpLY2MgY2ggMQpwdkIgcG8gMQp0Z1IgdGggMQp5ck4gZXIgMQp4UXIgZXIgMQpYdnogc3ogMQpsSmggdGggMQpYZmsga2EgMQpGdnIgZXIgMQpmVWIgYmUgMQpsWmIgbGUgMQpnZEkgbmcgMQpqb0kgb24gMQp5S3EgcXUgMQp0d3ogdGggMQpxSmogcXUgMQp2eE0gdmEgMQpWenMgc3QgMQpmalIgaWogMQpLbXogc3ogMQpxSXcgcXUgMQpqeUQgaWogMQpxYlUgcXUgMQpxa1ogcXUgMQpqVmcgbmcgMQpGaGogdGggMQpxSnEgcXUgMQp3UHEgcXUgMQpVZW8gZXIgMQp6WGQgc3ogMQpnRmIgbmcgMQpqSnkgaWogMQpOc2ogc3QgMQpsTWIgbGUgMQp5UW4gYW4gMQpkbk0gYW4gMQp5UmcgbmcgMQpGamMgY2ggMQpkS2cgbmcgMQpncVYgbmcgMQpnQ2sgbmcgMQpzT3ogc3QgMQpobE8gdGggMQpxYk4gcXUgMQpzak4gc3QgMQpVanogc3ogMQpyVm0gZXIgMQpXanMgc3QgMQpibU0gbWUgMQpWenggc3ogMQpoWmcgdGggMQp6RnQgdGggMQp5aEogdGggMQp2Tmsga2EgMQp6YlQgc3ogMQp4bUogbWUgMQpGY3MgY2ggMQp5VGMgY2ggMQpjU2cgY2ggMQpxbVAgcXUgMQptRnogc3ogMQpiZEkgZGUgMQpqbEsgbGUgMQpibkIgYW4gMQpxeVEgcXUgMQpWamsgaWogMQpoelUgdGggMQpxZ3AgcXUgMQpscVcgcXUgMQpmTm4gYW4gMQpUanAgaWogMQp2bFYgbGUgMQpyVnAgZXIgMQpiTGQgZGUgMQp5ZFEgZGUgMQpnWWcgbmcgMQpxaEUgdGggMQpHc3EgcXUgMQpnV3ogbmcgMQpRdGsgdGggMQpIencgc3ogMQprSW8gaG8gMQprZkMga2EgMQp6QmcgbmcgMQpqSnAgaWogMQplSXEgcXUgMQp2dUIgcXUgMQpXYmcgbmcgMQpKanAgaWogMQpsWGsgbGUgMQpUZnggZm8gMQp6TGwgbGUgMQpkcVQgcXUgMQpvWnEgcXUgMQpKZnUgcXUgMQpRaGggdGggMQpxa0sgcXUgMQpFamMgY2ggMQp6d04gc3ogMQp5UXEgcXUgMQpkRHAgZGUgMQpQd3cgd2EgMQp6dEMgdGggMQpqdEggdGggMQp5clggZXIgMQp2d1QgdmEgMQp5UmggdGggMQp3UXQgdGggMQpsWHogbGUgMQpjZkwgY2ggMQpGd2wgbGUgMQpyTncgZXIgMQpCaHggdGggMQpnbFogbmcgMQpnY0QgY2ggMQpTZnMgc3QgMQpVemYgc3ogMQpUZGwgbGUgMQpkUm4gYW4gMQp2WXcgdmEgMQp4Y0QgY2ggMQp4Y0MgY2ggMQpsQnggbGUgMQpnSHEgcXUgMQp3Snkgd2EgMQp5ck8gZXIgMQp2cUYgcXUgMQp0WWIgdGggMQpaancgaWogMQpqTGsgaWogMQpIdmYgdmEgMQpwblMgYW4gMQpwY1QgY2ggMQpzRmsgc3QgMQpkY08gY2ggMQp6UHcgc3ogMQp2TmYgdmEgMQpHZHggZGUgMQpkbFAgbGUgMQpqTHggam8gMQpqWmogaWogMQp3d1Qgd2EgMQp0R3ggdGggMQpmaFMgdGggMQpYdGsgdGggMQp4blcgb24gMQpwa0oga2EgMQp4SW8gb24gMQpaeGIgYmUgMQpuT2ogYW4gMQp3SGogaWogMQpmalMgaWogMQp3ZEwgZGUgMQpqYk4gaWogMQp5a08ga2EgMQp4cUIgcXUgMQpxek4gcXUgMQpRYnEgcXUgMQpGcXcgcXUgMQpqV3cgaWogMQpueE0gYW4gMQp0cFggdGggMQpUdHogdGggMQp6c0ggc3QgMQpmanogc3ogMQp4SWcgbmcgMQp4a1kga2EgMQpGcWEgYW4gMQpvR2sgb24gMQpIbmMgYW4gMQpqUHEgcXUgMQp6bFcgbGUgMQp1UnggcXUgMQp1R3ggcXUgMQpqWXYgaWogMQpLcHogc3ogMQpnUW8gbmcgMQpLd3ggd2EgMQpqTncgaWogMQp0ZEQgdGggMQp5R2ogaWogMQpMYnEgcXUgMQpScmMgY2ggMQpxdlggcXUgMQpoaEsgdGggMQprWngga2EgMQp4RGYgZm8gMQpQamYgaWogMQpjZ0YgY2ggMQp2Q2sga2EgMQpmV3cgb3cgMQptSnAgbWUgMQpmWGUgZXIgMQp1WXAgcXUgMQpqSGsgaWogMQp3ZFAgZGUgMQpxRmsgcXUgMQpqckcgZXIgMQpmZ0QgbmcgMQpmc0cgc3QgMQpWZ2IgbmcgMQp4QWEgYW4gMQpndFogdGggMQp0bHEgdGggMQpUbXcgbWUgMQpneVkgbmcgMQpReHQgdGggMQpVeHogc3ogMQppVnIgaW4gMQp6cUkgcXUgMQpOYncgd2EgMQpEaGQgdGggMQptT3EgcXUgMQppQmQgaW4gMQpjcUIgY2ggMQp6UXEgcXUgMQpXYnYgdmEgMQpRa3Mga2EgMQpxUGEgYW4gMQp0ZkkgdGggMQptWnMgc3QgMQpwRHMgc3QgMQpuSmogYW4gMQp6Y3AgY2ggMQp0V2ogdGggMQpaeHAgcHIgMQp2UHkgdmEgMQpkeEsgZGUgMQpvUHYgb24gMQpyak4gZXIgMQpvUWggdGggMQp2d0ggdmEgMQpRaHAgdGggMQp4c1Ugc3QgMQprR3EgcXUgMQp3alcgaWogMQpQd3ggd2EgMQpCYm4gYW4gMQp4T3EgcXUgMQpxcE4gcXUgMQpuYnEgYW4gMQp6cE0gc3ogMQpqbUIgaWogMQpOcWogcXUgMQp6WWQgc3ogMQpZYmMgY2ggMQp4Y1cgY2ggMQpnUGcgbmcgMQpReXMgc3QgMQpCaHEgdGggMQp5R3ggbnkgMQpxeEwgcXUgMQpKZmQgZGUgMQptYlYgbWUgMQpwa1kga2EgMQpjV2wgY2ggMQp3QmcgbmcgMQp2T3cgdmEgMQpHcGIgcHIgMQpQcHEgcXUgMQpmc1ggc3QgMQp2dFEgdGggMQp5Q2ogaWogMQp5b1kgb24gMQpwd1EgcHIgMQp5R2QgZGUgMQpxdEogdGggMQpuclogYW4gMQplVnggZXIgMQpOcnEgcXUgMQp3dEEgdGggMQpmSGYgZm8gMQpnc1EgbmcgMQpobEMgdGggMQpkTGMgY2ggMQp6akMgc3ogMQpqdlkgaWogMQp0SWogdGggMQpwdkwgdmEgMQpIaGcgdGggMQp5TXYgdmEgMQp4TW4gYW4gMQp0WXggdGggMQp2VnAgdmEgMQpZbmIgYW4gMQp2bVggdmEgMQpxalEgcXUgMQp2UXIgZXIgMQpoUXogdGggMQptTmYgbWUgMQp6Zlkgc3ogMQp4alMgaWogMQpqQm0gaWogMQpqcHEgcXUgMQpuSnEgYW4gMQpLbnogYW4gMQpnR2YgbmcgMQpwWnggcHIgMQpHcWwgcXUgMQpVcW0gcXUgMQplV3YgZXIgMQpmR2cgbmcgMQpxc0EgcXUgMQp1aFkgdGggMQp4aEggdGggMQp5eFMgbnkgMQpyeEsgZXIgMQpoTmMgdGggMQpWd2ggdGggMQphTnYgYW4gMQpRenYgc3ogMQpmUW4gYW4gMQpqekggc3ogMQpSdmggdGggMQpRcHQgdGggMQpxWHYgcXUgMQpwaFEgdGggMQpRbGIgbGUgMQpiblEgYW4gMQpuaksgYW4gMQpKanMgc3QgMQp0SnggdGggMQppd1ggaW4gMQpuVmQgYW4gMQprekEgc3ogMQp1d0UgcXUgMQpUc3EgcXUgMQpocU0gdGggMQpSbnEgYW4gMQpyRG4gYW4gMQp5TmIgYmUgMQp1cU4gcXUgMQpmS3cgd2EgMQpJcW4gYW4gMQp4SGMgY2ggMQpXd3EgcXUgMQpnTXcgbmcgMQp5V2YgbnkgMQp2Y08gY2ggMQpHa20ga2EgMQpmUmggdGggMQpkTWMgbmQgMQpaaHggdGggMQpxbEggcXUgMQpxVWwgcXUgMQp6SGYgc3ogMQp3Q2sga2EgMQpRZmogaWogMQpRa3cga2EgMQptWWggdGggMQpkY1UgY2ggMQpqVGYgaWogMQpyakYgZXIgMQpoeFEgdGggMQp3TmYgd2EgMQpMZ2cgbmcgMQpGZHUgcXUgMQp0SncgdGggMQp5Y1EgY2ggMQp4WGYgZm8gMQp3d1Egd2EgMQpldlEgZXIgMQpGY2ogY2ggMQpDeXEgcXUgMQp0cEYgdGggMQpBeGogaWogMQp6R2cgbmcgMQpRYmIgYmUgMQp2ZlkgdmEgMQpvWGQgb24gMQp3QXEgcXUgMQpYYmsga2EgMQp3bVIgbWUgMQpyek4gZXIgMQpmY0IgY2ggMQpCd2MgY2ggMQp4Z1MgbmcgMQpkUXIgZXIgMQprSncga2EgMQpiZ3ggbmcgMQpwWnMgc3ogMQp3ZkEgd2EgMQpqbVggaWogMQpkTnAgZGUgMQpWeHIgZXIgMQpSdmIgdmEgMQp3WmwgbGUgMQp3Z0EgbmcgMQpXcnEgcXUgMQpKY3EgY2ggMQpsalcgbGUgMQpxUHQgdGggMQpnalkgbmcgMQpqVW8gb24gMQptSWogaWogMQpIcHkgcHIgMQpNcGogaWogMQpia08ga2EgMQpBdnogc3ogMQp2S2sga2EgMQpCZnogc3ogMQp5WWogaWogMQpFZ3EgcXUgMQp3eEggd2EgMQp6SGggdGggMQpzdkEgc3QgMQp6Y1AgY2ggMQpCeG8gb24gMQpoU3YgdGggMQpMeHQgdGggMQpoQnogdGggMQpjV2sgY2ggMQp4QnYgdmEgMQpod04gdGggMQpta0oga2EgMQpvTmogb24gMQpVZ3EgcXUgMQpqWnEgcXUgMQp4ZlAgZm8gMQpiWXYgdmEgMQpxeEYgcXUgMQpkY0kgY2ggMQpkaFkgdGggMQpjdlAgY2ggMQpxVXkgcXUgMQpteEMgbWUgMQp6UHggc3ogMQpOcWwgcXUgMQpZZncgd2EgMQpXZ3AgbmcgMQpqZ0QgbmcgMQpRZnEgcXUgMQpsY1cgY2ggMQpxeHkgcXUgMQpYcHEgcXUgMQp3ckQgZXIgMQpiRW8gb24gMQpielYgc3ogMQpmd1Mgd2EgMQptTGogaWogMQp3TXIgZXIgMQp2RmIgdmEgMQp6ZlQgc3ogMQpuUmsgYW4gMQprSmggdGggMQpSbXcgbWUgMQpucVIgYW4gMQpxcE8gcXUgMQpiSGIgYmUgMQpUa3EgcXUgMQpzakcgc3QgMQpxYVQgYW4gMQpQcWwgcXUgMQpobFEgdGggMQprelcgc3ogMQp5RmMgY2ggMQp1QnYgcXUgMQp2eE8gdmEgMQpxdkMgcXUgMQpZcXggcXUgMQpqQ2IgaWogMQpRamsgaWogMQpmQmggdGggMQp2S3EgcXUgMQpyTWcgbmcgMQpoUncgdGggMQp5a1Uga2EgMQpiVXEgcXUgMQp2WXYgdmEgMQpQZHggZGUgMQpvR3Ygb24gMQpqTHkgaWogMQpkdVkgcXUgMQpXY3AgY2ggMQpvR3ggb24gMQp2R2wgbGUgMQpKZHogc3ogMQppakggaW4gMQptbFggbGUgMQpqTnIgZXIgMQprQ3EgcXUgMQpHaGggdGggMQpyTXYgZXIgMQpCZ3AgbmcgMQpiRnQgdGggMQp1V2wgcXUgMQpkWGcgbmcgMQpXY2YgY2ggMQpkYkkgZGUgMQpiR3ggYmUgMQpleFEgZXIgMQpqV2ogam8gMQpwUWIgcHIgMQpqY0ggY2ggMQpxT2wgcXUgMQptdEwgdGggMQpjckMgY2ggMQpwQmggdGggMQpXbHogbGUgMQpuSG4gYW4gMQpIZnAgcHIgMQpYcGMgY2ggMQpVeHAgcHIgMQpLc3EgcXUgMQp4V2sga2EgMQpucVogYW4gMQpDeGQgZGUgMQp6Snggc3ogMQpyV3EgcXUgMQpDYnEgcXUgMQpxcVAgcXUgMQpsaFUgdGggMQpVZnYgdmEgMQpVeGcgbmcgMQpoSmYgdGggMQpudlEgYW4gMQpkaEYgdGggMQpDdmIgdmEgMQphUGYgYW4gMQpKeGogaWogMQpEd3AgcHIgMQpJeHcgd2EgMQprZlMga2EgMQpyWm0gZXIgMQpmbUUgbWUgMQpzTHEgcXUgMQpibVIgbWUgMQp1Q3MgcXUgMQprRm0ga2EgMQpLcWsgcXUgMQp4UWsga2EgMQpTZm4gYW4gMQpmZ1UgbmcgMQp2dlQgdmEgMQptUWUgZXIgMQpHYnQgdGggMQp0YlkgdGggMQpsUWsgbGUgMQpjSWggdGggMQpUanEgcXUgMQpuUWcgYW4gMQp5WXAgcHIgMQpxUHcgcXUgMQp4T2EgYW4gMQpwTncgcHIgMQpmSnogc3ogMQp6SGIgc3ogMQprQmggdGggMQpmZEUgZGUgMQp3UGcgbmcgMQpsVnYgbGUgMQptUHcgbWUgMQpSbWcgbmcgMQp4b0Ugb24gMQpobkogdGggMQp1dkUgcXUgMQpXb3EgcXUgMQp1Y1ggY2ggMQpubUQgYW4gMQpwY1ggY2ggMQpoRHcgdGggMQpkZ0kgbmcgMQp2VmQgZGUgMQp0RGggY2ggMQpqSG4gYW4gMQpoa1ggdGggMQpweFQgcHIgMQp4WXogc3ogMQpyVHAgZXIgMQpVYnogc3ogMQpMbG0gbGUgMQp5alogaWogMQpRc3Mgc3QgMQpjZk0gY2ggMQpqYkcgYmUgMQpKZnogc3ogMQptV2IgbWUgMQpqRHAgaWogMQpsV3ogbGUgMQpjWHkgY2ggMQpvUXIgZXIgMQp1Y1ogY2ggMQpjdk4gY2ggMQpjdksgY2ggMQp6RGsgc3ogMQpiTHIgZXIgMQpkRGwgbGUgMQpoaEQgdGggMQp2bUsgdmEgMQpoTHQgdGggMQptcVcgcXUgMQpCZnMgc3QgMQpBY2ogY2ggMQpkY0cgY2ggMQp5SmMgY2ggMQptZlMgbWUgMQpkckwgZXIgMQpxeUsgcXUgMQp0UXogdGggMQpqckwgZXIgMQpjY0ogY2ggMQp3cFggcHIgMQpaemYgc3ogMQpzblUgYW4gMQpxRXcgcXUgMQp0UWIgdGggMQptUGQgZGUgMQp2SnEgcXUgMQp2cFUgdmEgMQp2ek0gc3ogMQp1WmIgcXUgMQp5d1Ugd2EgMQpSanMgc3QgMQpoS3QgdGggMQpCZmIgYmUgMQp3dVEgcXUgMQpidk0gdmEgMQp5aVcgaW4gMQpocUMgdGggMQppVXEgcXUgMQpsQmQgbGUgMQpaeGogaWogMQp3cFcgcHIgMQpySG0gZXIgMQptaFEgdGggMQpmTWIgYmUgMQp2V2YgdmEgMQpGZHEgcXUgMQpqR2IgaWogMQpEaHcgdGggMQpjalIgY2ggMQprdkQga2EgMQpxdkQgcXUgMQpYbWsga2EgMQpDamogaWogMQpra1gga2EgMQpxa0YgcXUgMQp2V2cgbmcgMQpNc3EgcXUgMQpuTnYgYW4gMQpIenUgcXUgMQp6clkgZXIgMQpoZ0IgdGggMQpwd0IgcHIgMQpKeGMgY2ggMQp2Y0ogY2ggMQpzWXcgc3QgMQpUcXggcXUgMQplSmYgbGUgMQpjekogY2ggMQpReWggdGggMQpidlYgdmEgMQpYeWggdGggMQpmanEgcXUgMQpkWWMgY2ggMQpwQnggcHIgMQpqdlIgaWogMQpnYkggbmcgMQp5Z0ggbmcgMQpoYlYgdGggMQpsd1UgbGUgMQp0SmsgdGggMQpwSXcgcHIgMQpWamwgbGUgMQpEZ20gbmcgMQpudlIgYW4gMQp5UnAgcHIgMQpmT2ogaWogMQpFY2YgY2ggMQpacmYgZXIgMQpteEQgbWUgMQpJcWYgcXUgMQp6Qmogc3ogMQp0VHMgdGggMQpscUIgcXUgMQprQ3Yga2EgMQpuVmggdGggMQpqR3EgcXUgMQpjZ1EgY2ggMQpQcGQgZGUgMQpKY2QgY2ggMQpoaFAgdGggMQpzTGcgbmcgMQp4WXQgdGggMQpRcHMgc3QgMQpzZkUgc3QgMQp3eFIgd2EgMQpwRnAgcHIgMQpZbWYgbWUgMQpKZ3kgbmcgMQp5dkkgdmEgMQpOY3ogY2ggMQp3QmYgd2EgMQpyVnggZXIgMQpqdlggaWogMQpuWXAgYW4gMQpuTmIgYW4gMQpjUWkgY2ggMQpRd3kgd2EgMQp2UGYgdmEgMQpxdmQgcXUgMQpoa0QgdGggMQpXbXIgZXIgMQpnZFkgbmcgMQpLamogaWogMQpxc04gcXUgMQp2SmcgbmcgMQptRGMgY2ggMQprdkYga2EgMQprV3gga2EgMQp4WXUgcXUgMQplTXEgcXUgMQptWXkgbWUgMQpIeHQgdGggMQpwYk0gcHIgMQpId2QgZGUgMQptV3UgcXUgMQp6TnMgc3QgMQpRamggdGggMQphcUQgYW4gMQpHY2QgY2ggMQpidFggdGggMQpacWwgcXUgMQpVancgaWogMQp5dk0gdmEgMQpIaHcgdGggMQp6V2Qgc3ogMQpwWWogaWogMQp4V3QgdGggMQp5bE8gbGUgMQpjblggY2ggMQpjTWYgY2ggMQpwS2IgcHIgMQp3b1Ygb24gMQpmekcgc3ogMQpMcWIgcXUgMQplT2ogZXIgMQpHdGIgdGggMQpjbFggY2ggMQprZEMgZGUgMQpjZnEgY2ggMQpoS2sgdGggMQpjSmkgY2ggMQp1U2IgcXUgMQpqZ1QgbmcgMQp0Y0cgdGggMQpxTnYgcXUgMQpmcEIgcHIgMQp2UHcgdmEgMQpqbUEgaWogMQpkeEkgZGUgMQpqR2cgbmcgMQpCdmcgbmcgMQpxckMgcXUgMQpuUHggYW4gMQpRbW4gYW4gMQpjcUMgY2ggMQprRmggdGggMQpKdGYgdGggMQpDcXogcXUgMQpyQ2QgZXIgMQpabXMgc3QgMQpkVnEgcXUgMQpHd2cgbmcgMQpjd1AgY2ggMQp3VnUgcXUgMQpkTmcgbmcgMQpqWGMgY2ggMQpNYnogc3ogMQp3dkcgdmUgMQpWcHcgcHIgMQp5WHEgcXUgMQpobEsgdGggMQpwWXYgdmEgMQpGYmQgZGUgMQp6Y1YgY2ggMQpyUWsgZXIgMQp3dE4gdGggMQpxZUkgcXUgMQplR3QgdGggMQprTXEgcXUgMQprcVMgcXUgMQpjcWQgY2ggMQpwTGYgcG8gMQp4dk8gdmEgMQpyZkggZXIgMQpnSXEgcXUgMQpQcWsgcXUgMQp4Q24gYW4gMQpkVnMgc3QgMQppcVkgcXUgMQpic0ogc3QgMQpWd3cgd2EgMQpabm0gYW4gMQpZcnogZXIgMQpSdnogc3ogMQpkeksgZGUgMQp6Ylcgc3ogMQp0a3ggdGggMQp4a1Aga2EgMQprelMgc3ogMQpnWHEgcXUgMQpMeGYgZm8gMQpGd3IgZXIgMQpsSHMgbGUgMQp6ckIgZXIgMQpqTmIgaWogMQpIeHkgbnkgMQpHZncgd2EgMQpFZ3cgbmcgMQpKeHcgd2EgMQp0Vm0gdGggMQpid1Egd2EgMQpnSXggbmcgMQpXcXUgdW4gMQpqdkkgaWogMQpjR2MgY2ggMQprU2Iga2EgMQpoeEcgdGggMQp6SG0gc3ogMQpKcGsga2EgMQpmVmIgYmUgMQpVa2Yga2EgMQpyeEYgZXIgMQpkVnUgcXUgMQpzZFggc3QgMQptak0gaWogMQp4d3EgcXUgMQpPZ2sgbmcgMQpxaHIgdGggMQp2ZkEgdmEgMQpxYkEgcXUgMQpMZnUgcXUgMQpoelkgdGggMQppSGYgaW4gMQpqeGIgaWogMQp2bVAgdmEgMQpidkkgdmEgMQpmbUggbWUgMQpxdHggdGggMQpidlEgdmEgMQpxelggcXUgMQpiVm4gYW4gMQpYbXQgdGggMQpxWG8gcXUgMQpwZkQgcHIgMQpmQ2QgZGUgMQp2YnggdmEgMQpaaHogdGggMQpLd2cgbmcgMQpyY0ogY2ggMQpqbFQgbGUgMQpqek0gc3ogMQpycFAgZXIgMQp0bUEgdGggMQphWXcgYW4gMQp6QnEgcXUgMQp4aFQgdGggMQp5THEgcXUgMQpjS2YgY2ggMQpxZFAgcXUgMQpZYnggYmUgMQpkSHMgc3QgMQpqaEggdGggMQpCc3Ygc3QgMQpyWnQgdGggMQptaEogdGggMQpad3EgcXUgMQprWGYga2EgMQp6dlQgc3ogMQp5aUMgaW4gMQpna1QgbmcgMQpuSncgYW4gMQp6cFYgc3ogMQp0UHEgdGggMQpjVnQgdGggMQpkQmcgbmcgMQpjUmYgY2ggMQp2UnEgcXUgMQpqZ0EgbmcgMQpiTXogc3ogMQpoSmggdGggMQptSGQgZGUgMQpDa3EgcXUgMQpxY2ogY2ggMQp5SWIgYmUgMQp3cUUgcXUgMQpwTWggdGggMQpIcWogcXUgMQpqWnUgcXUgMQppcU8gcXUgMQp0cUMgdGggMQpxb0sgcXUgMQpLbnEgYW4gMQpiUW0gbWUgMQp1dVggcXUgMQpXemMgY2ggMQpQeHkgbnkgMQpRZ2YgbmcgMQpzRncgc3QgMQpnSGYgbmcgMQprZ04gbmcgMQpyQ3cgZXIgMQpZankgaWogMQpwblYgYW4gMQpmYlMgYmUgMQppSHogaW4gMQprR3gga2EgMQprd1Mga2EgMQpzRG0gc3QgMQpWaGsgdGggMQpwaE4gdGggMQpKYmYgYmUgMQpwV3ogc3ogMQp2dlEgdmEgMQp2Tm0gdmEgMQpsWXcgbGUgMQp6SHggc3ogMQpaemMgY2ggMQpiRHQgdGggMQpGY3YgY2ggMQpkSmcgbmcgMQpRd2Igd2EgMQpxRncgcXUgMQp3bU8gbWUgMQpCdnkgdmEgMQpxZ1kgcXUgMQp2WXMgc3QgMQp4d0Ygd2EgMQpxd1AgcXUgMQp1RWMgY2ggMQptV3EgcXUgMQpmek8gc3ogMQpiUGcgbmcgMQpwblcgYW4gMQpoR3ggdGggMQpWa2sga2EgMQpYcnggZXIgMQpnSmQgbmcgMQpMbHEgcXUgMQpWcXUgdW4gMQpmZ0ggbmcgMQpWY3kgY2ggMQpoVmMgdGggMQpyd1ogZXIgMQpYbGMgY2ggMQp4SmQgZGUgMQpGbm4gYW4gMQpZcGogaWogMQpsaEogdGggMQphVWogYW4gMQpsQnAgcHIgMQpkbFcgbGUgMQpwdlYgdmEgMQpNd3IgZXIgMQpad2MgY2ggMQp3Y1UgY2ggMQpjVnEgY2ggMQp5Y1UgY2ggMQpMY3EgY2ggMQpydlEgZXIgMQplWW0gZXIgMQpxQ24gYW4gMQpkQnggZGUgMQpJd3EgcXUgMQpnTXQgdGggMQpiaEMgdGggMQpiRHMgc3QgMQpWaHogdGggMQprSnogc3ogMQpPaHogdGggMQprRHogc3ogMQpoVG4gdGggMQplcUcgcXUgMQpnSnIgbmcgMQpacHogc3ogMQpod1EgdGggMQpmZ1kgbmcgMQpzZFYgc3QgMQpsalYgbGUgMQp5R2cgbmcgMQp1V2cgcXUgMQpzYk8gc3QgMQpxZEQgcXUgMQp5SmogaWogMQpud3EgYW4gMQpBcHEgcXUgMQpjY0sgY2ggMQpRd2wgbGUgMQpveVEgb24gMQpsUHcgbGUgMQpjWXQgdGggMQpickcgZXIgMQp4a1Qga2EgMQpkVWogZGUgMQpyaFIgdGggMQp4UHcgd2EgMQp4b0Ygb24gMQpoWWogdGggMQpoWXcgdGggMQpsUG4gYW4gMQp6Q2cgbmcgMQpzSnQgdGggMQp3RHMgc3QgMQpmVmggdGggMQp6d1cgc3ogMQp5TGogaWogMQphQnggYW4gMQpEdnYgdmEgMQp0S2IgdGggMQpqZkcgaWogMQp4TW0gbWUgMQpiTHAgcHIgMQp4d1cgd2EgMQpiekggc3ogMQpjSXcgY2ggMQp6ZE4gc3ogMQpHZ3YgdmEgMQpsd1YgbGUgMQpxeVYgcXUgMQp2QnYgdmEgMQpPd20gbWUgMQpMdHggdGggMQptcUUgcXUgMQpYamMgY2ggMQpwelkgc3ogMQpKZHMgc3QgMQprTWwgbGUgMQpEZGogZGUgMQp0ZlggdGggMQpjcVQgY2ggMQpidUcgcXUgMQpvSGIgcG8gMQp2UnggdmEgMQpxeXEgcXUgMQprcFkga2EgMQp2cU4gcXUgMQpqTnEgcXUgMQpjV2IgY2ggMQpnYkogbmcgMQpvWncgb24gMQpjQnogY2ggMQpQdnYgdmEgMQpsakkgbGUgMQpodlEgdGggMQprd1kga2EgMQpoQmcgdGggMQprZE4gZGUgMQp5eEggbnkgMQpmeEggZm8gMQp0WGogdGggMQp1QnggcXUgMQp1Sm0gcXUgMQpHeGggdGggMQpmaksgaWogMQpncU8gcXUgMQpkTXQgdGggMQpsVnggbGUgMQpSaHAgdGggMQpjRG4gY2ggMQpYa3Yga2EgMQp6bUIgc3ogMQpxYVkgYW4gMQpJdnEgcXUgMQp3bVAgbWUgMQpianEgcXUgMQpjbVUgY2ggMQpzbEMgbGUgMQpLcnggZXIgMQppVnYgaW4gMQpad3ogc3ogMQp5UGQgZGUgMQpxVXYgcXUgMQpQZHogc3ogMQpRemsgc3ogMQp6b1Ugb24gMQp4SmYgZm8gMQpVZHEgcXUgMQpRd2ogaWogMQpLdmQgZGUgMQp2UXcgdmEgMQpSZGsgZGUgMQpzSWogc3QgMQpHZ3QgdGggMQpsTncgbGUgMQpxdnIgcXUgMQp5cUQgcXUgMQpmWGwgbGUgMQpqcWcgcXUgMQpxbUEgcXUgMQpUZ2QgbmcgMQp6cE8gcG8gMQp0RXogdGggMQpCcXogcXUgMQp3Zkwgd2EgMQp2WXUgcXUgMQpEeHcgd2EgMQpxV2wgcXUgMQpSemMgY2ggMQptUW8gb24gMQpUdGMgdGggMQp0VnYgdGggMQpScW4gYW4gMQpXY24gY2ggMQpOd3UgcXUgMQp4b0ogb24gMQp2RGYgdmEgMQpwaEggdGggMQpmSnMgc3QgMQpQeG0gbWUgMQpyRmIgZXIgMQpobE0gdGggMQpta1gga2EgMQpublEgYW4gMQpYZm4gYW4gMQpzYlogc3QgMQpZeWYgbnkgMQpCancgaWogMQpJbHggbGUgMQpxcEEgcXUgMQpNcWMgY2ggMQpncVogcXUgMQpzTnYgc3QgMQpadnEgcXUgMQprU3gga2EgMQp2QmQgZGUgMQp3dlogdmEgMQpVb2UgZXIgMQpGankgaWogMQp6S2Igc3ogMQpwdkkgdmEgMQpabGwgbGUgMQpoZEUgdGggMQpGcHYgdmEgMQpsaFYgdGggMQpycVEgcXUgMQp3akcgaWogMQpwTHEgcXUgMQpicEogcHIgMQp3elYgc3ogMQpIZ3EgbmcgMQp6aFcgdGggMQpMdnEgcXUgMQpYaHIgdGggMQpxdVkgdW4gMQpqcVogcXUgMQp2dUggcXUgMQpGemogc3ogMQpnekcgbmcgMQp0RmMgdGggMQp2ZkUgdmEgMQpJZ3ggbmcgMQpmcVkgcXUgMQpnWWIgbmcgMQpsSmcgbmcgMQp3Y08gY2ggMQpRdmsga2EgMQpUcXEgcXUgMQpiZFkgZGUgMQp3dVQgcXUgMQpsSHcgbGUgMQp6Um0gc3ogMQpIZ3cgbmcgMQp0UGsgdGggMQpKcXYgcXUgMQp0S3ggdGggMQp4cEEgcHIgMQpia0kga2EgMQpiU2ogaWogMQpteFcgbWUgMQptalIgaWogMQpPaXAgaW4gMQp3eVkgd2EgMQpkRmMgY2ggMQpxRGcgcXUgMQp3WHAgcHIgMQpWYnAgcHIgMQpqeU4gaWogMQp5dlAgdmEgMQp5VnIgZXIgMQphV20gYW4gMQpHamsgaWogMQpBcHcgcHIgMQpac3cgc3QgMQpqUXYgaWogMQpqYlQgaWogMQpiZEIgZGUgMQprY1kgY2ggMQpycUMgcXUgMQpieEQgYmUgMQp2bHggbGUgMQprakogaWogMQp4cVcgcXUgMQp6eEUgc3ogMQpzSGYgc3QgMQpqdUYgcXUgMQprd1gga2EgMQpvcVcgcXUgMQpxV3QgdGggMQpmSGMgY2ggMQpjSGMgY2ggMQpKam0gaWogMQp4YkEgYmUgMQpScWogcXUgMQpJankgaWogMQp2U3ggdmEgMQpwVmogaWogMQpyUXggZXIgMQpmbUsgbWUgMQpmbkEgYW4gMQpQaHYgdGggMQpiaE4gdGggMQpIeHAgcHIgMQpWanEgcXUgMQpscUMgcXUgMQpXaGQgdGggMQp6c0Ygc3QgMQp0WXQgdGggMQpKenEgcXUgMQpOZmYgZm8gMQpxWHMgcXUgMQp4SmogaWogMQpsWG4gYW4gMQpacHYgdmEgMQpxVGggdGggMQpucEggYW4gMQprWXgga2EgMQpiQnMgc3QgMQp2RWEgYW4gMQpwanEgcXUgMQpxSWkgcXUgMQpGZGsgZGUgMQpmTnggZm8gMQpPZmggdGggMQp3WGUgZXIgMQptdlogdmEgMQpDanMgc3QgMQpGbW0gbWUgMQpwa1Iga2EgMQp6Zlogc3ogMQpacG0gbWUgMQpjYkEgY2ggMQp0dlkgdGggMQpMbXAgbWUgMQpnRmQgbmcgMQpiRnggYmUgMQpGam0gaWogMQp3akYgaWogMQpianYgaWogMQpkYlQgZGUgMQpqbVEgaWogMQp4Rncgd2EgMQpjRGsgY2ggMQpoRnogdGggMQp1R20gcXUgMQpZaHggdGggMQpWdGwgdGggMQphelYgYW4gMQp4SnMgc3QgMQpNeHcgd2EgMQp2Z0sgbmcgMQpjd1EgY2ggMQpHbnggYW4gMQpsYlAgbGUgMQprZFMgZGUgMQprRHQgdGggMQpQdnEgcXUgMQp5SHMgc3QgMQpMZ3EgcXUgMQpYbWogaWogMQpwdkEgdmEgMQp2VXUgcXUgMQpRanUgcXUgMQpxRGYgcXUgMQpHeGogaWogMQpHZnogc3ogMQpnYlkgbmcgMQpTamYgaWogMQpPZ3cgbmcgMQpoR3QgdGggMQpidFQgdGggMQpnd0ggbmcgMQpNd2ogaWogMQpmdlUgdmEgMQpmckcgZXIgMQpjTXggY2ggMQpZZHYgZGUgMQp4a1oga2EgMQpmakwgaWogMQp5UHggbnkgMQpkclggZXIgMQpqeFIgaWogMQpoWXEgdGggMQp4SG4gYW4gMQpqclAgZXIgMQp0Y0ogdGggMQpxSnogcXUgMQp6VWQgc3ogMQpqWGogaWogMQpxRGQgcXUgMQpCamggdGggMQpxRnogc3ogMQpteEcgbWUgMQp4T2QgZGUgMQpoZ0wgdGggMQpjcEQgY2ggMQpqaFMgdGggMQpacXAgcXUgMQp5TnEgcXUgMQpwSHEgcXUgMQpyWnEgcXUgMQpXankgaWogMQpUZmIgYmUgMQpOd2Igd2EgMQp6UWsgc3ogMQpSa2MgY2ggMQpRdncgdmEgMQp3bEogbGUgMQpjRnAgY2ggMQpvRGIgb24gMQpsc1kgbGUgMQpaYm4gYW4gMQp3Q2QgZGUgMQp6eE4gc3ogMQpiUWYgYmUgMQpLankgaWogMQpPdmsga2EgMQpjeEEgY2ggMQpIcXcgcXUgMQpod1kgdGggMQpzR3Ygc3QgMQpSd24gYW4gMQp6dkggc3ogMQp5Vncgd2EgMQp6bVggc3ogMQpxZE0gcXUgMQpkSnYgZGUgMQp3RGogaWogMQpWaG0gdGggMQpmTHQgdGggMQpidkMgdmEgMQp4Vm4gYW4gMQpIZnggZm8gMQp0UWwgdGggMQpsaFcgdGggMQpvcVMgcXUgMQpReWEgYW4gMQpnWmYgbmcgMQpiS3kgYmUgMQp0alggdGggMQpWa2MgY2ggMQp5anYgaWogMQpiZ04gbmcgMQpsTm0gbGUgMQpKemwgbGUgMQpMd3ggd2EgMQp2Y0wgY2ggMQp5WGggdGggMQp6dFogdGggMQp5SnggbnkgMQpucFYgYW4gMQpzd0cgc3QgMQpzWG4gYW4gMQplSmIgZXIgMQpkY1IgY2ggMQpacmcgbmcgMQpQZ3YgbmcgMQp4WXIgZXIgMQpqbEkgbGUgMQpGbWYgbWUgMQpHcWsgcXUgMQp2bFogbGUgMQpDc3EgcXUgMQp1UWogcXUgMQpsTG0gbGUgMQpod0sgdGggMQpjUXYgY2ggMQpxZkggcXUgMQpyUncgZXIgMQphVW8gYW4gMQpxcEUgcXUgMQpsUGMgY2ggMQpkSGQgZGUgMQpncUwgcXUgMQp6V3Agc3ogMQpiQnEgYmUgMQp3V3AgcHIgMQpjZksgY2ggMQpmV3ggZm8gMQpydlYgZXIgMQp6aFIgdGggMQpLbGggdGggMQpjYlEgY2ggMQpKbWcgbmcgMQpmUGcgbmcgMQpRbm4gYW4gMQpzTXEgcXUgMQphRnogYW4gMQpzSnMgc3QgMQpQd2ogaWogMQpqY0wgY2ggMQpnbVEgbmcgMQpZcXIgcXUgMQpDZ3ogbmcgMQp3cXogcXUgMQpmbkkgbnQgMQpxT3QgdGggMQp2eVUgdmEgMQp3UXogc3ogMQp2VWEgYW4gMQp4QnQgdGggMQpkTm0gZGUgMQpFd3ggd2EgMQp5cEQgcHIgMQp3eEwgd2EgMQpxZU4gcXUgMQp2a0Iga2EgMQpqQmogaWogMQpnVWogbmcgMQprUWsga2EgMQpmd08gd2EgMQpxUXQgdGggMQpRcmwgZXIgMQpkVHggZGUgMQpmV2QgZGUgMQpqeEsgaWogMQpmSGwgbGUgMQpqY1kgY2ggMQpvSnMgb24gMQpzUnggc3QgMQp1UWcgcXUgMQpoaFkgdGggMQpzZE4gc3QgMQpteFIgbWUgMQpYc3Ygc3QgMQpQY3EgY2ggMQpwa1oga2EgMQp6RGwgbGUgMQpySWggdGggMQpIbnYgYW4gMQpqcEEgaWogMQpoWmogdGggMQpabmQgYW4gMQpoWmQgdGggMQpxck8gcXUgMQpTYnggYmUgMQp0V3AgdGggMQpIcGQgZGUgMQpIanogc3ogMQp6Y1MgY2ggMQprUHogc3ogMQpIdHEgdGggMQpnY0cgY2ggMQpYcXggcXUgMQptWmMgY2ggMQpYenYgc3ogMQpLZ3cgbmcgMQphVWYgYW4gMQpZbXEgcXUgMQp3Y1kgY2ggMQpvVmggdGggMQpwZE0gZGUgMQp2eksgc3ogMQpsclggZXIgMQp5ZFYgZGUgMQp1cVAgcXUgMQpmbU4gbWUgMQpPY2cgY2ggMQpmTGsga2EgMQpjSnMgY2ggMQp1R2YgcXUgMQpjTWsgY2ggMQpnVHggbmcgMQp4TmMgY2ggMQpiSGwgbGUgMQp1V3AgcXUgMQpkeEwgZGUgMQp6eEcgc3ogMQpkVm4gYW4gMQpOYmggdGggMQpDeHMgc3QgMQpjdkcgY2ggMQp3Q2Ygd2EgMQprakMgaWogMQpjZlkgY2ggMQp6Y2YgY2ggMQpkcFcgZGUgMQpQcXkgcXUgMQp0bE4gdGggMQpzSWkgaW4gMQpxeEMgcXUgMQpLam0gaWogMQp6Wmsgc3ogMQpGa3Mgc3QgMQpnV2IgbmcgMQp0cUsgdGggMQpKbHYgbGUgMQprQ2sga2EgMQp3aFQgdGggMQpPd3YgdmEgMQp6S20gc3ogMQpqcWwgcXUgMQp0R3ogdGggMQpkQ3cgZGUgMQp5bVEgbWUgMQp4bkYgYW4gMQp3dUYgcXUgMQpwRnEgcXUgMQpqeVMgaWogMQpwalggaWogMQpsT2ogbGUgMQpKbWQgZGUgMQpadnogc3ogMQpqcU0gcXUgMQpqVGQgZGUgMQpxT2kgcXUgMQpvSmcgbmcgMQpNanggaWogMQpUcGIgcHIgMQpXdHYgdGggMQpqeE8gaWogMQpkQnMgc3QgMQp0TnYgdGggMQpxVGIgcXUgMQp2blUgYW4gMQp6RHggc3ogMQpwU3EgcXUgMQp4Um0gbWUgMQpxVWYgcXUgMQptQmIgbWUgMQpxakkgcXUgMQpzSXkgc3QgMQpkQ2cgbmcgMQpxSXggcXUgMQpwWnAgcHIgMQpxRHQgdGggMQp4ck0gZXIgMQp1T2UgcXUgMQp4Z08gbmcgMQpnclggbmcgMQpQZ2cgbmcgMQp5VnEgcXUgMQpxRXUgdW4gMQprQmMgY2ggMQpTZ3ogbmcgMQpoalggdGggMQpnT3EgcXUgMQpwbVcgbWUgMQpHbncgYW4gMQp4WmwgbGUgMQpoVGQgdGggMQpHZnEgcXUgMQpzTGYgc3QgMQpQZ2ogbmcgMQp0d0YgdGggMQptRGsga2EgMQpxZFkgcXUgMQp2c1ogc3QgMQp2Y0MgY2ggMQpEY2ogY2ggMQp3VWggdGggMQpxSWQgcXUgMQpxclogcXUgMQpjYlMgY2ggMQpYemMgY2ggMQp2V2ogaWogMQpwdkMgdmEgMQpKcncgZXIgMQp5eEkgbnkgMQpkcUkgcXUgMQp1Q20gcXUgMQp2WGQgZGUgMQpXZHAgZGUgMQpEemMgY2ggMQpoZFYgdGggMQpxYk8gcXUgMQpKd2sga2EgMQpXcW0gcXUgMQppWHcgaW4gMQpmWWwgbGUgMQpxdVEgdW4gMQprakQgaWogMQptSWggdGggMQp4V3cgd2EgMQpvQ3cgb24gMQpaY3YgY2ggMQpqZE4gZGUgMQp1WWIgcXUgMQpTcnggZXIgMQpwZ1UgbmcgMQpyUWcgbmcgMQptSGYgbWUgMQpmQnQgdGggMQpqVnggaWogMQp2WWMgY2ggMQpWZ2ogbmcgMQpxYVMgYW4gMQpweFcgcHIgMQptbkogYW4gMQpCd3cgd2EgMQpUcXogcXUgMQpqRnYgaWogMQp4d00gd2EgMQpEcXcgcXUgMQptd0kgbWUgMQp2aFcgdGggMQpzcVggcXUgMQp0bFIgdGggMQphQmggdGggMQpxblogYW4gMQpnWGcgbmcgMQpzQ2ogc3QgMQpnck4gbmcgMQp0WXYgdGggMQpXd2cgbmcgMQpmWWkgaW4gMQpidEYgdGggMQp3UW4gYW4gMQpabHQgdGggMQpjSnogY2ggMQpYYm4gYW4gMQp0TG0gdGggMQpabHggbGUgMQpObWogaWogMQpoY0cgdGggMQpXcmsgZXIgMQpOaGMgdGggMQp2cUQgcXUgMQp1alkgcXUgMQppSmQgaW4gMQpkTGYgZGUgMQpjUW4gY2ggMQpXZnggZm8gMQpoa1ogdGggMQptaEMgdGggMQp6TXEgcXUgMQp6THogc3ogMQpYZ3QgdGggMQpxS3IgcXUgMQp5akogaWogMQpySm0gZXIgMQpWeGMgY2ggMQpCeG4gYW4gMQpjblEgY2ggMQpxa1EgcXUgMQpObHcgbGUgMQpoV3YgdGggMQp3ZFUgZGUgMQpxdEIgdGggMQpxSWUgcXUgMQpxZVkgcXUgMQpacnAgZXIgMQpOaGQgdGggMQpmRHAgcG8gMQpDbmogYW4gMQpreFUga2EgMQpCcXYgcXUgMQp2WHIgZXIgMQprQngga2EgMQpmQm4gYW4gMQpwTXggcHIgMQpreFIga2EgMQpMemcgbmcgMQpqQmggdGggMQpGam4gYW4gMQp3cEMgcHIgMQpmS3kgbnkgMQpod0QgdGggMQpmcWYgcXUgMQpxQnkgcXUgMQpZY3EgY2ggMQpObnMgYW4gMQpqbVogaWogMQpnS3cgbmcgMQpkcUEgcXUgMQpCamcgbmcgMQpmR3ggZm8gMQpMbnAgYW4gMQp3aFUgdGggMQpxUGQgcXUgMQp5TXggbnkgMQp3RWogaWogMQprbUoga2EgMQpRc3ggc3QgMQpsQ3cgbGUgMQpRcWIgcXUgMQpodkogdGggMQp4a04ga2EgMQp1VmcgcXUgMQpzUW0gc3QgMQp1SnAgcXUgMQpZem4gYW4gMQpjWGggdGggMQpzckkgZXIgMQp0QnogdGggMQpjUmogY2ggMQp5SXcgd2EgMQpqSGcgbmcgMQp4RnAgcHIgMQp3SnEgcXUgMQpxZEYgcXUgMQp2S3YgdmEgMQpzSGMgY2ggMQpoQmYgdGggMQpqRHkgaWogMQpHanggaWogMQpGa2QgZGUgMQpIaHogdGggMQp4U2cgbmcgMQpqRmYgaWogMQpxdk0gcXUgMQpvUncgb24gMQp4Z1ggbmcgMQpnakYgbmcgMQpxRHogcXUgMQpZY2YgY2ggMQpYY3cgY2ggMQpuZlEgYW4gMQpxR3MgcXUgMQprR3Mgc3QgMQpmeFYgZm8gMQppUGogaW4gMQpxZ1AgcXUgMQpqSXYgaWogMQpWaHUgdGggMQpCemogc3ogMQpKdmcgbmcgMQpWamYgaWogMQp3VHEgcXUgMQpwRHcgcHIgMQpZc3Ygc3QgMQp6dFYgdGggMQptdFogdGggMQpqRnkgaWogMQpncUMgcXUgMQpWc2cgbmcgMQpnalMgbmcgMQp2WHogc3ogMQpicEsgcHIgMQpuRHEgYW4gMQpzS3ggc3QgMQp4WWcgbmcgMQpmWmQgZGUgMQpweGYgcHIgMQpqcVMgcXUgMQpoVGIgdGggMQpOa3EgcXUgMQpxcEggcXUgMQp2RXogc3ogMQp2cVAgcXUgMQp2SHcgdmEgMQpEa3Aga2EgMQpjcVkgY2ggMQptcVMgcXUgMQpzVnQgdGggMQpQeGggdGggMQpoeE4gdGggMQp5VGYgbnkgMQp3Q2ogaWogMQpxUXcgcXUgMQpWZnYgdmEgMQp5UWQgZGUgMQpnVWMgY2ggMQp3c1Egc3QgMQpmR3cgd2EgMQp3S2Ygd2EgMQp3d0Igd2EgMQp2RnQgdGggMQp0d1EgdGggMQpuckIgYW4gMQpscFkgbGUgMQp4bFIgbGUgMQpmZEsgZGUgMQplRnogZXIgMQpqeVEgaWogMQpsd1QgbGUgMQp4Q3cgd2EgMQpjZ00gY2ggMQp3dFYgdGggMQphcUogYW4gMQpiWHUgcXUgMQpxZFEgcXUgMQpZeGQgZGUgMQp4Y1MgY2ggMQpubVYgYW4gMQpyUWQgZXIgMQpHbGsgbGUgMQpxRW0gcXUgMQp1dk8gcXUgMQpzdkYgc3QgMQpzSnggc3QgMQpReWcgbmcgMQptWGggdGggMQpidEQgdGggMQp3R2MgY2ggMQpmWm8gb24gMQpFdnggdmEgMQp2ekQgc3ogMQp1ZkMgcXUgMQpQeHEgcXUgMQpxZHQgdGggMQpyS3ogZXIgMQpKaGggdGggMQpDeGsga2EgMQpxeFIgcXUgMQpnVGwgbmcgMQpxR2YgcXUgMQp3WWggdGggMQpjRWggdGggMQpielUgc3ogMQp6V3EgcXUgMQpyV2IgZXIgMQpXcnAgZXIgMQpzTGMgY2ggMQpKcHUgcXUgMQpKa2Yga2EgMQp2Z0UgbmcgMQpCcWsgcXUgMQpvUXMgb24gMQprYloga2EgMQpyVmYgZXIgMQpxTHcgcXUgMQpMcmMgY2ggMQp4c1Igc3QgMQpod0IgdGggMQpRbmsgYW4gMQpjUHogY2ggMQpVY3EgY2ggMQplZ0ogbmcgMQpReXEgcXUgMQpYd3IgcHIgMQp4ZkQgZm8gMQp3eUggd2EgMQpsQncgbGUgMQpNZHggZGUgMQpRc3kgc3QgMQp6cVYgcXUgMQp2cFkgdmEgMQpzbFkgbGUgMQp3Z0wgbmcgMQpzbk4gYW4gMQpoVmQgdGggMQp5S3ggbnkgMQpiZFcgZGUgMQpscUwgcXUgMQp5aEQgdGggMQp0TnogdGggMQp6SmcgbmcgMQprSXgga2EgMQpmSHAgcHIgMQp5ckogZXIgMQpsclIgZXIgMQp3elkgc3ogMQpwZ0IgcHIgMQptZkMgbWUgMQpxa0wgcXUgMQpqVXUgcXUgMQpxQ2ggdGggMQp6bE4gbGUgMQpCZ2ogbmcgMQpnY0UgY2ggMQp6Unggc3ogMQpqaE4gdGggMQplR3ogZXIgMQpGcHEgcXUgMQpXdmkgaW4gMQptQmYgbWUgMQpoaFcgdGggMQpvVXEgcXUgMQpkeFEgZGUgMQpXaHEgdGggMQpyTWsgZXIgMQpsV2QgbGUgMQp4V3ogc3ogMQpvUW4gYW4gMQptV3ggbWUgMQpudVYgYW4gMQp3V3ogc3ogMQpodlIgdGggMQpad2QgZGUgMQpzbUogc3QgMQpIbGggdGggMQpzSmggdGggMQp6bVkgc3ogMQpoWm4gdGggMQpWamcgbmcgMQpKaHogdGggMQptcVIgcXUgMQpoY08gdGggMQpkcUwgcXUgMQpCZmggdGggMQpwa1Yga2EgMQp0QnggdGggMQpIa2MgY2ggMQpLcW0gcXUgMQpxV3YgcXUgMQpsWHkgbGUgMQp5UmQgZGUgMQptakggaWogMQpxekEgcXUgMQpxeG0gcXUgMQpRdm0gdmEgMQpnY00gY2ggMQp4cXggcXUgMQprS3Yga2EgMQp5b1ggcG8gMQp4clQgZXIgMQpjV3EgY2ggMQpqcVcgcXUgMQpzV2ogc3QgMQpTZHcgZGUgMQpkZlIgZGUgMQpLcW4gYW4gMQpHamQgZG8gMQpRYmQgZGUgMQp5eUsgbnkgMQp4bVggbWUgMQp4dUYgcXUgMQp5VmcgbmcgMQpxb08gcXUgMQpHbHEgcXUgMQpNa3gga2EgMQp4TGIgYmUgMQpnTXIgbmcgMQpzQ3Agc3QgMQpiR2ggdGggMQpjWG8gY2ggMQp6VHogc3ogMQpxa0MgcXUgMQpoVHAgdGggMQpxTmYgcXUgMQptWGsga2EgMQp4Y1ogY2ggMQpqVm0gaWogMQpiSWkgaW4gMQpxbkggYW4gMQpud0MgYW4gMQpkU2cgbmcgMQpxb0QgcXUgMQp0RHggdGggMQpqZFUgZGUgMQpYbXcgbWUgMQprTmggdGggMQpqWXIgZXIgMQpZZ3AgbmcgMQpibEogbGUgMQptRnYgdmEgMQpTeHIgZXIgMQpGemwgbGUgMQpqVHEgcXUgMQpjSXAgcHIgMQphalkgYW4gMQp5WWIgYmUgMQpyS2IgZXIgMQpwekIgc3ogMQplSXkgZXIgMQp3Zksgd2EgMQpGbWggdGggMQp1ZkwgcXUgMQpYbG0gbGUgMQpDemcgbmcgMQpsUHEgcXUgMQp0cVYgdGggMQp3Rnkgd2EgMQpiUWMgY2ggMQprVncga2EgMQpuTWggdGggMQpjQ2ogY2ggMQpvZUUgZXIgMQp3SGYgd2EgMQpmTmYgZm8gMQptWHYgdmEgMQpOa2cgbmcgMQpqV2MgY2ggMQp6Rmogc3ogMQpLZnggZm8gMQpiZ1kgbmcgMQpsWXogbGUgMQpjZ0QgY2ggMQpwZ00gbmcgMQpmaEggdGggMQpqckQgZXIgMQpqd0EgaWogMQpqeU0gaWogMQp2ekMgc3ogMQpsUWQgbGUgMQp6Y0ggY2ggMQpsYlggbGUgMQp2ekcgc3ogMQptU3IgZXIgMQp4WWYgZm8gMQpxZ0IgcXUgMQpqWWsgaWogMQpkSXEgcXUgMQp3cEcgcHIgMQpoVmsgdGggMQpUamIgaWogMQp6dlAgc3ogMQpiWmcgbmcgMQpiRmcgbmcgMQprZlUga2EgMQpTeHogc3ogMQpmd0Ygd2EgMQpRd2cgbmcgMQpmV2IgYmUgMQpqcVEgaWogMQpWZnggZm8gMQpjSmogY2ggMQp6d0ogc3ogMQp4QmcgbmcgMQpEZG0gZGUgMQpiV3YgdmEgMQp6cEcgc3ogMQp4clEgZXIgMQpoY1MgdGggMQp3SG4gYW4gMQpoSXkgdGggMQpZeGogaWogMQpzZEMgc3QgMQp5VnUgcXUgMQpxamYgcXUgMQpUenkgc3ogMQpGZm4gYW4gMQp6elggc3ogMQpIZHggZGUgMQpnTGcgbmcgMQpZcWcgcXUgMQpmTGIgYmUgMQpsUWMgY2ggMQp2akcgaWogMQp3cEwgcHIgMQpjSnIgY2ggMQphSnEgYW4gMQpZbnEgYW4gMQpXdmMgY2ggMQpsS3kgbGUgMQplWXEgcXUgMQpreEwga2EgMQpnQ2IgbmcgMQpzUmQgc3QgMQpyTWQgZXIgMQpCdmggdGggMQprS2cgbmcgMQp3bEsgbGUgMQptRGQgZGUgMQp6a0ogc3ogMQp2UmMgY2ggMQpYbGggdGggMQpwUmsga2EgMQp4dk4gdmEgMQpueEkgYW4gMQpmQ3ggZm8gMQpZYnQgdGggMQpFYnEgcXUgMQpia04ga2EgMQpiUXkgYmUgMQpyRHcgZXIgMQpkakogZGUgMQp0bU0gdGggMQpud0ggYW4gMQpoSnogdGggMQpsY00gY2ggMQpvelYgb24gMQptTGQgZGUgMQpiS2MgY2ggMQplWmYgZXIgMQpGaGcgdGggMQpaY2ogY2ggMQpwTHIgZXIgMQp3cXMgcXUgMQpiWGkgaW4gMQp0Z0QgdGggMQpoUWMgdGggMQp6RHAgc3ogMQpvRGcgbmcgMQpzZ00gbmcgMQpibkQgYW4gMQpnSHAgbmcgMQpXa2Yga2EgMQpxSXMgcXUgMQp3TGQgZGUgMQp6dE4gdGggMQpnZFEgbmcgMQp3Q20gb3cgMQp2VmYgdmEgMQpKbXcgbWUgMQpoYkMgdGggMQpzclcgZXIgMQpueE4gYW4gMQpwVnMgc3QgMQp1V3EgcXUgMQpoZ00gdGggMQpsQmMgY2ggMQp3VW8gb24gMQpmbEggbGUgMQp5V2cgbmcgMQpqak4gaWogMQpVd24gYW4gMQpuWWogYW4gMQptdE4gdGggMQpQZ3AgbmcgMQp6RmMgY2ggMQpvWHogb24gMQppQ2cgbmcgMQpMcGMgY2ggMQpHcWQgcXUgMQpyWWMgY2ggMQp2cUEgcXUgMQpWaGMgdGggMQp6bUYgc3ogMQpCcGMgY2ggMQpKZnEgcXUgMQpvWHYgb24gMQpsZ1ggbmcgMQpKZnggZm8gMQp6cFMgc3ogMQpnY08gY2ggMQp4d1Egd2EgMQpwa1Ega2EgMQp3T2MgY2ggMQpXZ20gbmcgMQpjT2ogY2ggMQpOZnQgdGggMQpwcU4gcXUgMQpxc0IgcXUgMQp5ZEggZGUgMQpxUnMgcXUgMQp5a1gga2EgMQpjRHEgY2ggMQptZlUgbWUgMQp4ek0gc3ogMQp2R3QgdGggMQpmdVcgcXUgMQpscUcgcXUgMQpUcXAgcXUgMQp6dkQgc3ogMQp3V2Igd2EgMQpGemkgaW4gMQpxcEsgcXUgMQpveXEgcXUgMQpnUWUgbmcgMQpabXcgbWUgMQpxWXAgcXUgMQpXdmYgdmEgMQphUWwgYW4gMQpvcU8gcXUgMQplcUogcXUgMQpudlQgYW4gMQpmVWsga2EgMQppYkggaW4gMQpqdlogaWogMQpXd3ogc3ogMQpsZ1kgbmcgMQplRnAgZXIgMQpYZ3ggbmcgMQpmWXMgc3QgMQprWnMgc3QgMQp2cEQgdmEgMQpxY1ogY2ggMQpCcW8gcXUgMQpqTGIgaWogMQpyd1ggZXIgMQpmeUsgbnkgMQpTeHYgdmEgMQpzeFogc3QgMQp3a0sga2EgMQp5SnAgcHIgMQp0alQgdGggMQpxUHYgcXUgMQp5WmogaWogMQpScm0gZXIgMQpuaEogdGggMQp2cUogcXUgMQp5eFkgbnkgMQp2c0Ugc3QgMQpma0sga2EgMQpmdVkgcXUgMQp6UW8gb24gMQpYdnIgZXIgMQptTXEgcXUgMQpPcW0gcXUgMQpEeHMgc3QgMQpMcWEgYW4gMQpXbmggdGggMQpqbUcgaWogMQpXcWEgYW4gMQptaFQgdGggMQpiZ1ogbmcgMQp2bU8gdmEgMQp6Rm0gc3ogMQpLaGsgdGggMQp5cUIgcXUgMQpuVnYgYW4gMQpSZnQgdGggMQp6bUwgc3ogMQpoZEQgdGggMQpuV3AgYW4gMQp2dk8gdmEgMQpkWXAgZGUgMQpvaFggdGggMQpxb1UgcXUgMQpyakIgZXIgMQpEd2MgY2ggMQphV3EgYW4gMQpjbEQgY2ggMQpWZGsgZGUgMQp0d00gdGggMQpmWnogc3ogMQp3UXAgcHIgMQpkd0QgZGUgMQppWXYgaW4gMQpBd3YgdmEgMQpwZ0cgbmcgMQpYb3EgcXUgMQprclEgZXIgMQpWeGcgbmcgMQpsd0IgbGUgMQpQeHcgd2EgMQpKd2Ygd2EgMQp6TGggdGggMQpidEggdGggMQpwd1kgcHIgMQpNamQgZGUgMQpYcmggdGggMQpxWHUgdW4gMQpFcXkgcXUgMQpCcHkgcHIgMQp6blkgYW4gMQpScWQgcXUgMQpuUWYgYW4gMQpadncgdmEgMQp6ak8gc3ogMQp3TmQgZGUgMQpsSXEgcXUgMQp2TXEgcXUgMQpHcXQgdGggMQpsTWYgbGUgMQpKcW4gYW4gMQpmVncgd2EgMQpxdlEgcXUgMQplSGsgZXIgMQpqYksgaWogMQpmV3Mgc3QgMQpxVGsgcXUgMQp6bkYgYW4gMQp5eE8gbnkgMQpGcXIgcXUgMQpuRmIgYW4gMQpvRHAgb24gMQpqVWMgY2ggMQpxSGcgcXUgMQpnR3EgcXUgMQpxUHMgcXUgMQpqSHYgaWogMQpJd2ogaWogMQp2elYgc3ogMQp5VXEgcXUgMQpqUXQgdGggMQpzRmIgc3QgMQpMdmcgbmcgMQp6VHQgdGggMQpidksgdmEgMQpDY3ggY2ggMQpqeUEgaWogMQp5RWogaWogMQp6ZEcgc3ogMQp0cVQgdGggMQpxYkggcXUgMQpuSGQgYW4gMQpIaGogdGggMQpqVmIgaWogMQp1SHcgdW4gMQpaY2sgY2ggMQpnUHEgcXUgMQpteHEgcXUgMQp3SHMgc3QgMQpmRHkgbnkgMQp0bFYgdGggMQpMc3Ygc3QgMQp6dkYgdmEgMQptcXggcXUgMQpucUYgYW4gMQp4Z00gbmcgMQpneXEgcXUgMQpnckogbmcgMQpqU3EgcXUgMQpNbXcgbWUgMQpDZ3ggbmcgMQpSbHIgZXIgMQptdkcgdmEgMQpmdUEgcXUgMQp1VmggdGggMQpzTXogc3QgMQp3V3IgZXIgMQpxcEQgcXUgMQpoUXcgdGggMQp4QmMgY2ggMQpmY1cgY2ggMQpoeEwgdGggMQpyZksgZXIgMQptRm4gYW4gMQpRbncgYW4gMQp0akIgdGggMQpSa3gga2EgMQpzckUgZXIgMQpkckcgZXIgMQpDZnkgbnkgMQp5Wncgd2EgMQpXeHcgd2EgMQp6Q3Agc3ogMQpqWnQgdGggMQpOcWYgcXUgMQpqZ08gbmcgMQpmV2MgY2ggMQpxck4gcXUgMQpOemogc3ogMQpIankgaWogMQpVeHkgbnkgMQpvSXkgb24gMQpyZlggZXIgMQpvQncgb24gMQp5eVYgbnkgMQpRaXYgaW4gMQpkS2ggdGggMQpxRGsgcXUgMQp0Z1EgdGggMQp4Tncgd2EgMQpxZEwgcXUgMQpvdlkgb24gMQpmYlogYmUgMQpxaUkgcXUgMQpidlQgdmEgMQpqWXEgcXUgMQprYksga2EgMQpNZm4gYW4gMQpScGQgZGUgMQpwSGIgcHIgMQpxcU8gcXUgMQp2a1Yga2EgMQpzV3Agc3QgMQprUGYga2EgMQpxTHkgcXUgMQpxb0UgcXUgMQp3TGggdGggMQp6aFYgdGggMQpicEwgcHIgMQpUcWYgcXUgMQpwekcgc3ogMQprY1QgY2ggMQp3alggaWogMQprUHkga3UgMQpmZEIgZGUgMQpReHMgc3QgMQpnWWYgbmcgMQpZcHggcHIgMQp6U2sgc3ogMQp0RGcgdGggMQp4YkogYmUgMQp5Zk8gbnkgMQp1UWYgcXUgMQpicFEgcHIgMQpkWGMgY2ggMQpsd1AgbGUgMQp2VHMgc3QgMQpKbHEgcXUgMQpDcXcgcXUgMQpiV3kgYmUgMQpjVXEgY2ggMQpZYmsga2EgMQp3eXEgcXUgMQpqaHEgdGggMQp4VXkgbnkgMQpOY2ogY2ggMQprTWggdGggMQp2WnkgdmEgMQp6Y3EgY2ggMQpRc3IgZXIgMQpMaHggdGggMQpHY2ogY2ggMQp1UXQgdGggMQp3WW4gYW4gMQpkWW0gZGUgMQpRdnggdmEgMQpSY2cgY2ggMQpxR3ogcXUgMQpieEogYmUgMQpqRmcgbmcgMQp4THAgcHIgMQpsRG4gYW4gMQp3cVMgcXUgMQpiSXEgcXUgMQp0Qm0gdGggMQpiUXMgc3QgMQp6SmIgc3ogMQpqZkogaWogMQpxVGMgY2ggMQprYlgga2EgMQpIbHogbGUgMQpwdVEgcXUgMQpoS2IgdGggMQpyQmIgZXIgMQp2cFcgdmEgMQpZamsgaWogMQpXbm0gYW4gMQpwWnIgZXIgMQpsZFogbGUgMQpnTW0gbmcgMQpwWmYgcGkgMQplWXAgZXIgMQp2VHAgdmEgMQpHa2MgY2ggMQpDZ3kgbmcgMQpxRHcgcXUgMQpneFcgbmcgMQpDd3ogc3ogMQpqaFkgdGggMQpGdmsga2EgMQpuZkggYW4gMQp6Y1cgY2ggMQp6Z0MgbmcgMQpEZmsga2EgMQp2cEogdmEgMQpXcGogaWogMQpzQ2Igc3QgMQpmZ0YgbmcgMQp0UHggdGggMQpvQ3Agb24gMQpOcnggZXIgMQpId20gbWUgMQpmUnAgcHIgMQphZVggYW4gMQpqZEkgZGUgMQpzQnYgc3QgMQp2T3YgdmEgMQpnUXQgdGggMQpXbWsga2EgMQpQcWogcXUgMQpraFYgdGggMQpIa2ogaWogMQpoYkIgdGggMQp2ekYgc3ogMQpZYnogc3ogMQpzWGIgc3QgMQp5UXIgZXIgMQpoaFYgdGggMQp0Z1cgdGggMQpiWG8gb24gMQpOeHAgcHIgMQphT3ggYW4gMQp6ZmIgc3ogMQpReHAgcHIgMQpxd1EgcXUgMQpmalYgaWogMQpoalkgaWogMQp3dFggdGggMQpqZ1UgbmcgMQpuTXEgYW4gMQpOd3ggd2EgMQp2UGcgbmcgMQpYZmggdGggMQp5RmYgbnkgMQpmSHogc3ogMQpuWmYgYW4gMQpqUHQgdGggMQpKZ2IgbmcgMQp4QmIgYmkgMQpzak8gc3QgMQp3RHggd2EgMQpuak4gYW4gMQpvaEYgdGggMQpwcVIgcXUgMQpGencgc3ogMQpxclUgcXUgMQpjakcgY2ggMQprRnYga2EgMQp6UWQgc3ogMQp2YkUgdmkgMQpVanQgdGggMQpxSWIgcXUgMQpjRnQgdGggMQpidlkgdmEgMQpTenEgcXUgMQp3bEggbGUgMQpxY1kgY2ggMQpnRXcgbmcgMQp4aEwgdGggMQprVmcgbmcgMQpiZkggYmUgMQpOcnogZXIgMQpzSm4gYW4gMQpiV24gYW4gMQpudksgYW4gMQpxaUggcXUgMQpxYlMgcXUgMQp2eEIgdmEgMQp0dlQgdGggMQpOcmggdGggMQpsWXggbGUgMQp0a1ggdGggMQpHenggc3ogMQp2Q3ggdmkgMQpaYmogaWogMQptV3AgbWUgMQpEcXggcXUgMQpwZkUgcHIgMQpodlcgdGggMQpFb3ggb24gMQpkYlogZGUgMQpsTmIgbGUgMQpyVGQgZXIgMQpsalEgbGUgMQpWdnAgdmEgMQpnSncgbmcgMQp1cVcgcXUgMQpHamYgaWogMQpwRGQgZGUgMQpzZ1EgbmcgMQpoa1EgdGggMQpmSmMgY2ggMQptZEkgZGUgMQpHY3AgY2ggMQpwWGEgYW4gMQpwUWogaWogMQpiZ0UgbmcgMQpLenYgc3ogMQpjUGIgY2ggMQpIY3ogY2ggMQpkalEgZGUgMQpwR2QgZGUgMQpmeUUgbnkgMQpkQmIgZGUgMQplUGogZXIgMQpmZ08gbmcgMQp4UnEgcXUgMQp4cUsgcXUgMQpwS3AgcHIgMQp4bVkgbWUgMQpoZ08gdGggMQp3ZEcgZGUgMQpodlogdGggMQpzckYgZXIgMQpCdmYgdmkgMQp5dkQgdmEgMQp4VmcgbmcgMQpmWWcgbmcgMQpicWQgcXUgMQplRnEgcXUgMQpjd1ogY2ggMQpjcUcgY2ggMQpzS3Agc3QgMQpoSnEgdGggMQp2TGQgZGUgMQpoZEsgdGggMQpwY04gY2ggMQp0TmYgdGggMQp4bEsgbGUgMQpySnggZXIgMQpxYU4gYW4gMQp6S2Ygc3ogMQpzTmYgc3QgMQpxUHogcXUgMQpiekwgc3ogMQpKZHcgZGUgMQpuUmIgYW4gMQpqTnMgc3QgMQp0blYgdGggMQp5bkkgYW4gMQp0WnAgdGggMQpmWnAgcHIgMQp3TXEgcXUgMQpPbnEgYW4gMQp6SWggdGggMQpidkggdmEgMQpVdmMgY2ggMQp6eEogc3ogMQpWbXEgcXUgMQp1UG0gcXUgMQptd0QgbWUgMQpqUWMgY2ggMQpnUGsgbmcgMQp2ZlYgdmEgMQpUcWwgcXUgMQpiSmwgbGUgMQpsd08gbGUgMQp3Ykcgd2EgMQpmVGQgZGUgMQpYdHEgdGggMQpoelggdGggMQpQenYgc3ogMQpQbXggbWUgMQp4Wm0gbWUgMQpqQ3AgaWogMQpiS20gbWUgMQpUbXEgcXUgMQpIbmYgYW4gMQpralggaWogMQp2Z0ggbmcgMQpmU20gbWUgMQp5bE4gbGUgMQpndnEgcXUgMQpqVHogc3ogMQp0V3cgdGggMQp5d0Igd2EgMQpiQ3EgcXUgMQpkTmsgZGUgMQp5Q3EgcXUgMQpSeGogaWogMQpuVHEgYW4gMQpnRnMgbmcgMQpYd3EgcXUgMQpnSmwgbmcgMQp2Y1IgY2ggMQpmYlQgYmUgMQpGY2QgY2ggMQpXeG0gbWUgMQpxd3YgcXUgMQpTZmggdGggMQpsY0sgY2ggMQpzYlYgc3QgMQpmU2YgZm8gMQpsYkIgbGUgMQpPY3cgY2ggMQpqZ00gbmcgMQpuYkkgYW4gMQpxc0sgcXUgMQpYeWYgbnkgMQpweHYgdmEgMQptUmMgY2ggMQpPZ3EgcXUgMQp6dVkgcXUgMQpmWHUgcXUgMQpXYmogaWogMQpUYncgd2EgMQp6clIgZXIgMQpnbVAgbmcgMQpjQ20gY2ggMQpndFEgdGggMQpwaEcgdGggMQpxalYgcXUgMQp5Z0cgbmcgMQp3RmIgd2EgMQpycUwgcXUgMQpxU3ggcXUgMQp5YksgYmUgMQptcUogcXUgMQpRcnEgcXUgMQpxZEkgcXUgMQpiY0cgY2ggMQppRmIgaW4gMQptY1ogY2ggMQp2Q3ogc3ogMQp4SHogdHogMQpoak0gdGggMQpxdEwgdGggMQp0bUggdGggMQpzbEQgbGUgMQp2Unogc3ogMQpnQ2QgbmcgMQpYeGMgY2ggMQpxS2MgY2ggMQpzSXcgc3QgMQpmc1kgc3QgMQp4ckogZXIgMQp0TnMgdGggMQpnYkQgbmcgMQp3TGwgbGUgMQpoRmYgdGggMQpOeGkgaW4gMQpmUmIgYmUgMQpKcmIgZXIgMQpqRXEgcXUgMQpod00gdGggMQp1VncgcXUgMQpmZ04gbmcgMQptQW8gb24gMQpQamIgaWogMQpucFAgaW4gMQpKY3kgY2ggMQp5SmIgYmkgMQpqeEkgaWogMQpLa2MgY2ggMQprd1Yga2EgMQpnUmYgbmcgMQpXZm0gbWUgMQpUZHAgcG8gMQp3RXogc3ogMQpMdmsga2EgMQpEcW4gYW4gMQp0cUwgdGggMQpqSnEgcXUgMQp2ZEMgZGUgMQpoeFUgdGggMQp4VWUgZXIgMQp0UWMgdGggMQpMemsgc3ogMQpkVGogZGUgMQpUbHogbGUgMQp4UXcgd2EgMQpGY3EgY2ggMQp3Z0UgbmcgMQpDa2QgZGUgMQp5S3Mgc3QgMQp4d1Mgd2EgMQp3UnQgdGggMQpna0sgbmcgMQpoUXYgdGggMQpzTHAgc3QgMQpqQWkgaW4gMQpkbUcgZGUgMQpqS24gYW4gMQpxVWIgcXUgMQp3WHkgd2EgMQpiekogc3ogMQpnekogbmcgMQpoTnogdGggMQp5Z1kgbmcgMQpxaFUgdGggMQphZlggYW4gMQpqWncgaWogMQpYZHggZGUgMQpUZHggZGUgMQpqTm4gYW4gMQp2WGYgdmEgMQpxY0UgY2ggMQpNbncgYW4gMQpxRGggdGggMQpUZGogZGUgMQpkZ0ogbmcgMQpzZFIgc3QgMQpxR24gYW4gMQpNamogaWogMQpzeEggc3QgMQpQcHogc3ogMQpnZlYgbmcgMQpmT3kgbnkgMQpOdnggdmkgMQpxYVYgYW4gMQp4amwgbGUgMQp4Z1ogbmcgMQpjR3YgY2ggMQpaeHUgcXUgMQpNZnAgcHIgMQp6RnAgc3ogMQpqZ0ogbmcgMQpicEcgcHIgMQp2S3ogc3ogMQpocUkgdGggMQpRZ3cgbmcgMQpReXkgbnkgMQpqbUkgaWogMQpWZ2QgbmcgMQp4Q3QgdGggMQp5VnMgc3QgMQp1RXEgcXUgMQpkY04gY2ggMQpCemIgc3ogMQpnVmwgbmcgMQpzWGcgbmcgMQprUWYga2EgMQpsclkgZXIgMQpWdGQgdGggMQpuSHMgYW4gMQp3ak4gaWogMQpyekogZXIgMQpzWXkgc3QgMQp3eFEgd2EgMQpadGIgdGggMQp0V2YgdGggMQp0Q3ggdGggMQphRmIgYW4gMQpscWYgcXUgMQpmZVogZXIgMQpmUHogc3ogMQpjalkgY2ggMQp3S2ggdGggMQpRaHkgdGggMQpkQ2ogZGUgMQpia0gga2EgMQp5akQgaWogMQpqVHMgc3QgMQpoeEkgdGggMQpsdksgdmkgMQpMd3ogc3ogMQpzd1Egc3QgMQpkVGsgZGkgMQpmc08gc3QgMQpsakUgbGUgMQp3ak0gaWogMQp1UWsgcXUgMQp4UGcgbmcgMQp2bUMgdmEgMQpxc0QgcXUgMQpnRHcgbmcgMQp3Smsga2EgMQpacHEgcXUgMQpZaGcgdGggMQprTmMgY2ggMQpiV2wgbGUgMQpGd2ggdGggMQpmSHggZm8gMQpGbnYgYW4gMQpmZEwgZGUgMQpvcUQgcXUgMQphWXggYW4gMQpWcXggcXUgMQp2S2YgdmEgMQpDYncgd2EgMQp2eXEgcXUgMQpjcVogY2ggMQpSZmggdGggMQpTd2MgY2ggMQpxTmkgcXUgMQpxb1cgcXUgMQpqaEQgdGggMQprSnEgcXUgMQpnZEYgbmcgMQpwdkYgdmEgMQpjcFYgY2ggMQpxdEMgdGggMQpnV20gbmcgMQpnUGMgY2ggMQpqQnMgc3QgMQpybFYgZXIgMQpnWmMgY2ggMQprVGsga2EgMQpoZkogdGggMQpTdnYgdmEgMQprbUcga2EgMQpzRHEgcXUgMQpoR2IgdGggMQpCbHEgcXUgMQpRcnkgZXIgMQpoSHogdGggMQp5THggbnkgMQpscUYgcXUgMQp3YkIgYmkgMQppWXIgaW4gMQp3RHogdHogMQp4c0ogc3QgMQpielkgc3ogMQpwTXcgcHIgMQpVdWogcXUgMQpoeEsgdGggMQpYdmYgdmEgMQprclogZXIgMQpmd1Ygd2EgMQpnUHcgbmcgMQpxVm4gYW4gMQpRbnEgYW4gMQpnRGIgbmcgMQpoVnIgdGggMQp6S2ggdGggMQpGeHkgbnkgMQpvWmogb24gMQp6QXkgc3ogMQpqTW0gaWogMQptdkkgdmEgMQpGd20gbWUgMQp6cWwgcXUgMQplVnYgZXIgMQp5V3EgcXUgMQpMd2sga2EgMQpMbXcgbWUgMQp2WGIgdmEgMQpYaHMgdGggMQpobFIgdGggMQpRcXcgcXUgMQp6Yksgc3ogMQpQeGwgbGUgMQpuUG0gYW4gMQp3UW8gb24gMQpEY2IgY2ggMQpoalQgdGggMQpyakogZXIgMQpiTWMgY2ggMQppWWIgaW4gMQpGcWogcXUgMQpVb3EgcXUgMQpYdnAgdmEgMQpMd2Igd2EgMQpKcGQgZGUgMQpxVWcgcXUgMQpsSnggbGUgMQpYd2QgZGUgMQp4S2YgZm8gMQpabnEgYW4gMQpxQ2IgcXUgMQpaYnogc3ogMQpRdXggcXUgMQpxTnEgcXUgMQpmdlYgdmEgMQpRcXogcXUgMQpIZGYgZGUgMQp5U3ggbnkgMQpxU20gcXUgMQpMaGIgdGggMQpNdmYgdmEgMQpjRHAgY2ggMQpiSHEgcXUgMQpXbWcgbmcgMQp5dEcgdGggMQpkYkogZGUgMQpGZmcgbmcgMQpodk0gdGggMQpXcXkgcXUgMQpnWGQgbmcgMQp1RmcgcXUgMQpqcFIgaWogMQpYY2MgY2ggMQpUYnAgcHIgMQpRd3EgcXUgMQp0UHAgdGggMQpmTWggdGggMQpxaVYgcXUgMQpkY0IgY2ggMQpkRnggZGUgMQpZbWogaWogMQpMZHEgcXUgMQpseFYgbGUgMQpjQ2sgY2ggMQpoVnggdGggMQpkbFQgbGUgMQpraFAgdGggMQpxVmcgcXUgMQpMamogaWogMQp6Q3Ygc3ogMQp5d1Ygd2EgMQp5YlogYmUgMQp2R2ggdGggMQpCdmogaWogMQpacXEgcXUgMQpHd2sga2EgMQpxTHEgcXUgMQpma1gga2EgMQpOYnogc3ogMQpiWG0gbWUgMQpkUWggdGggMQp1WWQgcXUgMQp4WXMgc3QgMQp6U3Mgc3QgMQp5Y1ogY2ggMQpsblUgYW4gMQp0Q2ogdGggMQp4blkgYW4gMQpwdFEgdGggMQpzd08gc3QgMQpoWHUgdGggMQptQncgbWIgMQp3bUYgbWUgMQp4SnggeGUgMQpkWGogZGUgMQplcWcgcXUgMQpuQmYgYW4gMQpYYmQgZGUgMQpmY1EgY2ggMQp4a1Mga2EgMQp0T3EgdGggMQp1UWIgcXUgMQpjdlYgY2ggMQpzQmggdGggMQpkQ2sgZGUgMQpjS3YgY2ggMQpjVmYgY2ggMQp3Wnggd2EgMQpCdm0gdmEgMQpscUogcXUgMQpmeFIgZm8gMQp2bUYgdmEgMQp4bnEgYW4gMQpiQmcgbmcgMQp0UGQgdGggMQpmTnMgc3QgMQpGa3Aga2EgMQpZeWUgZXIgMQpVYnEgcXUgMQp4elAgc3ogMQpmbVEgbWUgMQpxY0EgY2ggMQp5S2MgY2ggMQp4dlogdmEgMQpjYk4gY2ggMQp5WWwgbGUgMQpQbXcgbWUgMQp3Rnggd2EgMQpoUmggdGggMQpxcFMgcXUgMQpWcWYgcXUgMQpHaGcgdGggMQpXdnEgcXUgMQp4a0Mga2EgMQp5dE0gdGggMQpMbmggdGggMQpkeEQgZGUgMQpiTXcgd2EgMQp4dlUgdmEgMQpRenggc3ogMQpzck0gZXIgMQp2TGcgbmcgMQpjR3EgY2ggMQpWbXkgbWUgMQpoY0wgdGggMQpwS3ggcHIgMQpKeHMgc3QgMQpibFcgbGUgMQpwUW8gb24gMQpiRXEgcXUgMQpmV3QgdGggMQpzWW0gc3QgMQpuS3cgYW4gMQpkdEYgdGggMQprVHogc3ogMQplcFggZXIgMQpmQ3AgcHIgMQpiRmsga2EgMQpSemIgc3ogMQp2cUkgcXUgMQpaaGMgdGggMQpIdnYgdmEgMQptVnQgdGggMQpJd3ggd2EgMQpwaFIgdGggMQp3TmIgd2EgMQpmUmMgY2ggMQpsanEgcXUgMQpsdlkgbGUgMQpqY0EgY2ggMQpkR3cgZGUgMQpDcW4gYW4gMQptQnggbWUgMQpNbXggbWUgMQpWeGEgYW4gMQpYaHcgdGggMQplcUsgcXUgMQp0Q3cgdGggMQp6dlUgc3ogMQpseFEgbGUgMQp2TXYgdmEgMQpncUEgcXUgMQpKYm4gYW4gMQpnQ2ogbmcgMQpvVGYgb24gMQprYlcga2EgMQpxalkgcXUgMQpScWYgcXUgMQpoWWggdGggMQp5aEUgdGggMQpnWWogbmcgMQpqY0kgY2ggMQpxdkogcXUgMQpxb0MgcXUgMQpxRmMgY2ggMQpxcUggcXUgMQpOeHEgcXUgMQp3Vm8gb24gMQp6SHYgc3ogMQp5YlMgYmUgMQpId2MgY2ggMQpNeGEgYW4gMQp4a0wga2EgMQpxbU8gcXUgMQpxYlIgcXUgMQpaZnkgbnkgMQpSa2Yga2EgMQp2Z1YgbmcgMQpoQncgdGggMQpwWHggcHIgMQpiclEgZXIgMQpmdk8gdmEgMQpoRGMgdGggMQp4UWEgYW4gMQp3ZkYgd2EgMQpoWnggdGggMQpKZ3ogbmcgMQpxblkgYW4gMQpxWGwgbGUgMQplTmIgZXIgMQpmeFMgZm8gMQpzTmsgc3QgMQptRmMgY2ggMQpVdXggcXUgMQpZZGcgbmcgMQpvelcgb24gMQpYemQgZGUgMQpKZmUgZXIgMQpGdHggdGggMQp2elIgc3ogMQp3Wmsga2EgMQpvSHogb24gMQpxdlQgcXUgMQpxb0EgcXUgMQpTZHEgcXUgMQp0eFcgdGggMQpFZ2YgbmcgMQpkTWYgZGUgMQpSaGggdGggMQp2Um4gYW4gMQp1alggcXUgMQpmUmogaWogMQpnakEgbmcgMQpnRGcgbmcgMQpzbVogc3QgMQpqSWQgZGUgMQpxa00gcXUgMQpiS3ogc3ogMQpzQ2cgbmcgMQp1VHAgcXUgMQpsVnMgbGUgMQp1UW8gcXUgMQpKZnMgc3QgMQp2S20gdmEgMQpqUWggdGggMQpmVWYgZm8gMQp1VGYgcXUgMQpCbnYgYW4gMQp0ZFUgdGggMQpkeFkgZGUgMQpoZ1YgdGggMQpaZGYgZGUgMQpocVMgdGggMQplSmcgbmcgMQpxR3UgdW4gMQp2bUUgdmEgMQpnS3ogbmcgMQptVWcgbmcgMQpWankgaWogMQp1dkogcXUgMQptSHIgZXIgMQpNaHYgdGggMQp6c1ogc3QgMQpWenkgc3ogMQpqS2IgaWogMQp6UHAgc3ogMQpxZ0QgcXUgMQpYaGYgdGggMQpPZ3AgbmcgMQpqd1ggaWogMQpsWXkgbGUgMQpxekQgcXUgMQp3WGogam8gMQpLcHggcHIgMQp5ZFkgZGUgMQp2QnEgcXUgMQpacHAgcHIgMQpiRGQgZGUgMQpGamsgaWogMQprZEEgZGUgMQp6V3QgdGggMQp3U2QgZGUgMQprRmQgZGUgMQpTeGwgbGUgMQpGdmggdGggMQpwYlIgcHIgMQpxckQgcXUgMQp2WnMgc3QgMQp2VW0gdmEgMQp3RXkgd2EgMQpqakggam8gMQpzRGcgbmcgMQpVamMgY2ggMQprbkkgYW4gMQpmT2EgYW4gMQpDamcgbmcgMQp0YlYgdGggMQpncWQgcXUgMQplUHggZXIgMQp3Um0gbWUgMQpwdkcgdmEgMQpReWwgbGUgMQpjd0cgY2ggMQpEdHEgdGggMQpQYnogc3ogMQpSZ3EgcXUgMQpmalUgaWogMQpqSmYgaWogMQpSeHEgcXUgMQpKdHggdGggMQpxdlogcXUgMQprS20ga2EgMQpoRm0gdGggMQprY1ggY2ggMQpmTm0gbWUgMQpicEIgcHIgMQp4cVkgcXUgMQpoWXkgdGggMQpnR3AgbmcgMQpWZnMgc3QgMQp3RHQgdGggMQpiVHMgc3QgMQpoZlYgdGggMQpxenAgcXUgMQp5VXYgdmEgMQpxR2MgY2ggMQpWZGwgbGUgMQpYanQgdGggMQprTWogaWogMQpoVGcgdGggMQpIbGMgY2ggMQp0S3ogdGggMQpXdnQgdGggMQpsTXogbGUgMQpNd3ggd2EgMQpXbHYgbGUgMQp4ekcgc3ogMQpnbUQgbmcgMQp6T2kgaW4gMQpiYkkgYmUgMQpicEkgcHIgMQpmUWcgbmcgMQpwUXYgdmEgMQp2RWIgdmEgMQpqRnogc3ogMQpXaGYgdGggMQpqdlEgaWogMQpxWXggcXUgMQpyeE0gZXIgMQp2UHAgdmEgMQpmakQgaWogMQpWd3kgd2EgMQpZcWMgY2ggMQp0Y1cgdGggMQpqWWcgbmcgMQpnSmIgbmcgMQpUa2MgY2ggMQpxaGogdGggMQpqeEYgaWogMQpGcHogc3ogMQprWGggdGggMQpsZ1ogbmcgMQp6bkkgYW4gMQpxeU4gcXUgMQp2QmogaWogMQpqU3ggaWogMQpjcUkgY2ggMQpxWXYgcXUgMQpacnIgZXIgMQpzSHIgZXIgMQp2cksgZXIgMQpwYkggcHIgMQp6VmggdGggMQpkUWIgZGUgMQpseEYgbGUgMQpzZ1cgbmcgMQpHaGYgdGggMQp4cHEgcXUgMQpxaE4gdGggMQpGc2Ygc3QgMQpRZ2EgYW4gMQpSZHAgZGUgMQpmdksgdmEgMQpZZHogZGUgMQp3dlcgdmEgMQpjUG0gY2ggMQpjUXkgY2ggMQp5d0Ygd2EgMQpZcHEgcXUgMQpSc2ogc3QgMQpZZ3cgbmcgMQp4VnAgcHIgMQp5eEwgbnkgMQpZd2wgbGUgMQpqTWMgY2ggMQp6VGwgbGUgMQphSXEgYW4gMQpxUWkgcXUgMQp0cUkgdGggMQpIdnAgdmEgMQp3UWQgZGUgMQpoZkcgdGggMQpjVGQgY2ggMQpiZlEgYmUgMQpLZmQgZGUgMQpjWHMgY2ggMQp2WXggdmEgMQpRb2Mgcm8gMQp2ckwgZXIgMQpwWmsga2EgMQpjZFggY2ggMQpZZ24gYW4gMQpsbk8gYW4gMQptZlkgbWUgMQpmblYgYW4gMQptYlogbWUgMQpnYkUgbmcgMQp4alogaWogMQpGcHkgcHIgMQpucEUgYW4gMQpSeHkgbnkgMQpvV3Agb24gMQpoVmggdGggMQp5SmYgbnkgMQpzUWQgc3QgMQpadmcgbmcgMQpiRG0gbWUgMQpwTHYgdmEgMQp3d0Ygd2EgMQp4QmggdGggMQpxS20gcXUgMQp3WHggd2EgMQpJdXggcXUgMQpkZ0IgbmcgMQpnSnAgbmcgMQpxZ3ggcXUgMQpmTmggaG8gMQpjdkUgY2ggMQpjZ0ggY2ggMQpsTnMgbGUgMQp2RGogaWogMQp6Y0cgY2ggMQpmWm4gb24gMQp1VXggcXUgMQpjbFEgbGUgMQpmZEggZGUgMQplWmogZXIgMQpWcWMgY2ggMQpSY3ggY2ggMQpqR2ggdGggMQpxek0gc3ogMQpRcHcgcHIgMQpTcHggcHIgMQpjR3ggY2ggMQpjcUEgY2ggMQp2YksgdmEgMQp4ZVcgZXIgMQp2a0Mga2EgMQp4ekIgc3ogMQp4dVIgcXUgMQpPeXEgcXUgMQpNcXggcXUgMQpxcWogcXUgMQp5cVkgcXUgMQpjd0wgY2ggMQpwUHQgdGggMQpkU3ggZGUgMQpkUGsgZGUgMQp1ekggcXUgMQpmdkggdmEgMQpwY0ggY2ggMQpobFkgbGUgMQpxdFggdGggMQpOdnMgc3QgMQpodkwgdGggMQp6Umsgc3ogMQp0TmogdGggMQpEYnYgdmEgMQpqS2MgY2ggMQpkS3kgZGUgMQp5Vnogc3ogMQppcUogcXUgMQp6Z0ogbmcgMQplSnMgZXIgMQp3T3ggd2EgMQpyWGggdGggMQpIcXAgcXUgMQp2V3ggdmEgMQpiVHQgdGggMQpmQ3kgbnkgMQphT3EgYW4gMQpvQ2cgbmcgMQpwbkUgYW4gMQpGd2MgY2ggMQp6clQgZXIgMQp4SHMgc3QgMQp5ZFggZGUgMQpka1YgZGUgMQpScXkgcXUgMQpaeXEgcXUgMQprWGwgbGUgMQpvSnQgdGggMQpzeEkgc3QgMQpxWncgcXUgMQp6cXggcXUgMQpjbFogY2ggMQpzd1ggc3ogMQphSHcgYW4gMQpyV2MgY2ggMQpjUXAgY2ggMQpKd2ogaWogMQpxZVYgcXUgMQpzUWogc3QgMQpScGIgcHIgMQptWnEgcXUgMQpyQnggZXIgMQpteFYgbWUgMQpNdnkgbnkgMQpjUmwgY2ggMQpGenYgc3ogMQpwQnMgc3ogMQpqV3Mgc3QgMQp2cUsgcXUgMQpJeGwgbGUgMQp5aHcgdGggMQp3eVEgd2EgMQp1Q2IgcXUgMQp6ckYgc3ogMQppeVEgaW4gMQpxc1AgcXUgMQpoTHIgZXIgMQpjdlggY2ggMQpTY3EgY2ggMQp6ckwgZXIgMQplY1UgY2ggMQpWeHogc3ogMQpmQ3EgcXUgMQpvdlggb24gMQpVcW4gYW4gMQpzVncgc3QgMQpzcFggc3QgMQpRa3Yga2EgMQpmeVcgbnkgMQpyQmMgY2ggMQptZEMgZGUgMQpXamsgaWogMQpqWWggdGggMQpoWHEgdGggMQp4a20ga2EgMQpoaFUgdGggMQpEdnogc3ogMQp0Y3EgdGggMQp3Wnkgd2EgMQpqdEMgdGggMQpxbkQgYW4gMQp2bUIgdmEgMQprakIgaWogMQpjZEcgY2ggMQpWa3QgdGggMQpoTnEgdGggMQpKZnQgdGggMQppV3YgaW4gMQpXdG4gdGggMQpsZkUgbGUgMQpkWmIgZGUgMQplcVEgcXUgMQpnVXEgcXUgMQpxd0wgcXUgMQpoVXEgdGggMQpoR2MgdGggMQpud1ggYW4gMQpOYnQgdGggMQpqalAgaWogMQpzcUogcXUgMQpsUWYgbGUgMQpqWnogc3ogMQp3V24gYW4gMQpNeHUgcXUgMQpxRmkgcXUgMQptalggaWogMQp2RHggdmEgMQp2RG4gYW4gMQp3VWMgY2ggMQp6aFUgdGggMQp6SHcgc3ogMQpUamwgbGUgMQp4dVggcXUgMQpqWnAgaWogMQp3VmMgY2ggMQpnRnAgbmcgMQpHeXEgcXUgMQpKbGggdGggMQpCa2Yga2EgMQpoaEogdGggMQp0dlcgdGggMQpiSXkgbnkgMQpMbGcgbmcgMQp6Snogc3ogMQpxZVEgcXUgMQpubFggYW4gMQp0Y1EgdGggMQpxdFUgdGggMQpma1cga2EgMQpnSmsgbmcgMQpnUXkgbmcgMQpzUHogc3QgMQpibU8gbWUgMQpZdHggdGggMQp5cUYgcXUgMQppQmsgaW4gMQp1elYgcXUgMQp4TnAgcHIgMQp6Unogc3ogMQpxSHEgcXUgMQp5dVkgcXUgMQpqcWggdGggMQp4QmQgZGUgMQp2dkEgdmEgMQplVmogZXIgMQp6R3Agc3ogMQp2Y0IgY2ggMQprcEgga2EgMQptRHcgbWUgMQp2dUcgcXUgMQp2VnkgbnkgMQptelMgc3ogMQpqdk0gaWogMQpzZlYgc3QgMQpoUXEgdGggMQp3VG0gbWUgMQpQbHEgcXUgMQpmeEogZm8gMQpxUXEgcXUgMQpGbncgYW4gMQpxSm8gcXUgMQpOc2cgbmcgMQpManggaWogMQpzUmIgc3QgMQpwY1kgY2ggMQp2Vm0gdmEgMQpzUWcgbmcgMQpZd3ogc3ogMQpocUogdGggMQpzaksgc3QgMQpaa3Mgc3QgMQpNanQgdGggMQpEd2ggdGggMQp3Yk4gd2EgMQptdksgdmEgMQpyTHAgZXIgMQpMYm0gbWUgMQp3ak8gaWogMQpsUXogbGUgMQpLd2Ygd2EgMQpxbUIgcXUgMQpYYnYgdmEgMQpjS3EgY2ggMQpocVIgdGggMQp5VmIgYmUgMQp4Y0YgY2ggMQpFd3YgdmEgMQpHcHEgcXUgMQpHYmggdGggMQp5SGogaWogMQpnWGsgbmcgMQpxT3ggcXUgMQpLYncgd2EgMQpxSHggcXUgMQp3alAgaWogMQpqUWwgbGUgMQpGZnEgcXUgMQpvWWIgb24gMQpGcW8gcXUgMQp3WHogc3ogMQpmSXAgcHIgMQpwTWYgcHIgMQpucVAgYW4gMQpiYlogYmUgMQpoc1ggdGggMQpXanIgZXIgMQpacW4gYW4gMQpQeGIgYmUgMQpCenMgc3QgMQpwYkkgcHIgMQpZdnAgdmEgMQpqeE0gaWogMQpqeVogaWogMQptekogc3ogMQp2WWcgbmcgMQpxTW0gcXUgMQpmaEwgdGggMQpxT2cgcXUgMQpNbnAgYW4gMQpJZnYgdmEgMQpxWW0gcXUgMQpneHYgbmcgMQp6Zkcgc3ogMQpmcUcgcXUgMQpsTHEgcXUgMQpoa0sgdGggMQpvWWsgb24gMQpsUmcgbGUgMQpsT3ggbGUgMQpWeHYgdmEgMQpxQXMgcXUgMQp0S2sgdGggMQpsaEYgdGggMQpkQ3YgZGUgMQp3dlkgdmEgMQp3aVYgaW4gMQpjckYgY2ggMQpmRXAgcHIgMQpScmwgZXIgMQpaankgaWogMQpxYlkgcXUgMQprTXcga2EgMQp2WmkgaW4gMQpGeGkgaW4gMQp6a1Mgc3ogMQp2S2IgdmEgMQp6Ykkgc3ogMQp1SGcgcXUgMQpxekcgcXUgMQpqTWsgaWogMQpGa2MgY2ggMQpkS20gZGUgMQpuSGggdGggMQp4R2MgY2ggMQpxcFUgcXUgMQpyY1UgY2ggMQphV3ggYW4gMQp4ZFMgZGUgMQpxaFYgdGggMQphSGMgY2ggMQp2bUkgdmEgMQpXY2MgY2ggMQp6Qm4gYW4gMQprUWUgZXIgMQphd0ogYW4gMQp4ZEQgZGUgMQp5WnggbnkgMQpLa2QgZGUgMQp3Qnogc3ogMQpsekEgbGUgMQp5eVQgbnkgMQpxZUsgcXUgMQp6cEUgc3ogMQp6Rm4gYW4gMQp5eUcgbnkgMQpsTHcgbGUgMQpidlMgdmEgMQptdlggdmEgMQpobFcgdGggMQpwZ1ggbmcgMQpsUXQgdGggMQp5bVkgbWUgMQptakogaWogMQptVmMgY2ggMQpYcXMgcXUgMQpiS3IgZXIgMQpiSHQgdGggMQpqUnYgaWogMQpMcHcgcHIgMQp6UGIgc3ogMQp3a1Iga2EgMQpreFMga2EgMQpqV2YgaWogMQpOa3gga2EgMQpLY2ogY2ggMQpiSmIgYmUgMQp4d1ogd2EgMQpScWMgY2ggMQpRemcgbmcgMQpqd0ggaWogMQpEcWQgcXUgMQp2TGYgdmEgMQpoWGQgdGggMQpjZkQgY2ggMQpzalggc3QgMQpoekkgdGggMQpxVWQgcXUgMQp0U3ggdGggMQpoeEEgdGggMQpneEsgbmcgMQpoVm0gdGggMQp5elggc3ogMQpVY3MgY2ggMQpxYUggYW4gMQpZZnkgbnkgMQpzSmcgbmcgMQppSHAgaW4gMQppeUMgaW4gMQpUamYgaWogMQpkSnAgZGUgMQpKZ3YgbmcgMQp1SmYgcXUgMQpuTmwgYW4gMQp6ZEEgc3ogMQp4SXEgcXUgMQpxaksgcXUgMQp2elkgc3ogMQp3cXYgcXUgMQpYdnggdmEgMQpmSnIgZXIgMQpucUggYW4gMQpxR2QgcXUgMQp2UWcgbmcgMQppUXogaW4gMQp0TG4gdGggMQpsVmogbGUgMQp2cVcgcXUgMQp6ck4gZXIgMQp4S3ogc3ogMQp3YVYgYW4gMQpZZHEgcXUgMQpka3EgcXUgMQpmQ24gYW4gMQpYY3kgY2ggMQpwSWwgbGUgMQpoWGwgdGggMQphRnMgYW4gMQppd00gaW4gMQpHd3ggd2EgMQpYbHAgbGUgMQpRZnUgcXUgMQpqcUUgcXUgMQpscVAgcXUgMQprVnEgcXUgMQp4cUogcXUgMQpNemYgc3ogMQptTncgbWUgMQpXc3Ygc3QgMQpmbk0gYW4gMQp1U2YgcXUgMQpoQ2YgdGggMQp6akggc3ogMQptVHMgc3QgMQpqV3ogc3ogMQpEeGsga2EgMQpadGQgdGggMQpSdnYgdmEgMQpnQnggbmcgMQpMenggc3ogMQplelUgZXIgMQpqcUggcXUgMQpSamggdGggMQpEY2cgY2ggMQpiQmggdGggMQpmaE8gdGggMQpocEggdGggMQpacWEgYW4gMQprQ3gga2EgMQpyUnYgZXIgMQpka1ogZGUgMQpHZ3ggbmcgMQpwUWggdGggMQpHY3YgY2ggMQpTY2cgY2ggMQp2RGIgdmEgMQpwYkQgcHIgMQp2RWggdGggMQp2bEUgbGUgMQpSamwgbGUgMQpsRncgbGUgMQp6cU4gcXUgMQphUHEgYW4gMQpnakQgbmcgMQpqY0UgY2ggMQp3U3cgd2EgMQpEZ2ogbmcgMQpodVogdGggMQpnUHYgbmcgMQpwSmogaWogMQpjUWggdGggMQptd3EgcXUgMQp2cEEgdmEgMQpoR2YgdGggMQpjWHogY2ggMQpMY2IgY2ggMQpmSm0gbWUgMQpRenkgc3ogMQp6UW0gc3ogMQpIaG4gdGggMQp4ZFkgZGUgMQp1WWwgcXUgMQpYa2ogaWogMQpqdkEgaWogMQpKdnAgdmEgMQppd1ogaW4gMQp6a3EgcXUgMQpOaGIgdGggMQprbVYga2EgMQpxS2QgcXUgMQpCY3EgY2ggMQpwZlkgcHIgMQpxVWogcXUgMQpncVIgcXUgMQpnd08gbmcgMQpnWG0gbmcgMQpqSGggdGggMQpyQm4gYW4gMQp1UHcgcXUgMQpwSmsga2EgMQpJcGogaWogMQp5cU0gcXUgMQpZcW4gYW4gMQpLYnogc3ogMQp2ZkwgdmEgMQpucFogYW4gMQpvcVkgcXUgMQpacWYgcXUgMQpqelUgc3ogMQp2TnggdmEgMQpoWGYgdGggMQpmQ2cgbmcgMQpuekogYW4gMQptS2ogaWogMQp3bUIgbWUgMQpXanEgcXUgMQpEYnEgcXUgMQp6WHkgc3ogMQp4WXcgd2EgMQpmUWYgZm8gMQpkcVAgcXUgMQpLeHEgcXUgMQpqZFogZGUgMQpxclggcXUgMQpMeGIgYmUgMQp5ZkwgbnkgMQp5WW0gbWUgMQpzYkggc3QgMQp3bFYgbGUgMQp1S3AgcXUgMQpoaE4gdGggMQpYeHEgcXUgMQpqTGcgbmcgMQpuUWggdGggMQpXcXAgcXUgMQpOcWQgcXUgMQpqZkQgaWogMQpKbnEgYW4gMQpCem4gYW4gMQptSnIgZXIgMQpxYVggYW4gMQpwSncgcHIgMQpqSHogc3ogMQp5YVggYW4gMQpXaHMgdGggMQpoWXIgdGggMQp0bVMgdGggMQpGaHkgdGggMQpHZ2QgbmcgMQpYbXkgbWUgMQpScWggdGggMQpGc24gYW4gMQpxaEEgdGggMQpmaFggdGggMQpIcXggcXUgMQp3SW8gb24gMQpJYnggYmUgMQpjRnggY2ggMQpkUmcgbmcgMQpzblYgYW4gMQprcXogcXUgMQplcU8gZXIgMQpHa3ogc3ogMQpObnogYW4gMQp5cUUgcXUgMQpjSmggdGggMQp4dkEgdmEgMQpxTXggcXUgMQpkd1MgZGUgMQp5QWogaWogMQp4Q3EgcXUgMQpnbUUgbmcgMQpiaFAgdGggMQpyd0UgZXIgMQpYbnogYW4gMQpVaHcgdGggMQp4blIgYW4gMQpuZlogYW4gMQpRcHggcHIgMQpxeE8gcXUgMQpsR3QgdGggMQpxUmMgY2ggMQpSd3ggd2EgMQp0Y00gdGggMQpmQmQgZGUgMQpSamMgY2ggMQpkZlkgZGUgMQpoaFIgdGggMQpiQ2ogaWogMQpmcUwgcXUgMQpselMgbGUgMQpMcm0gZXIgMQplcUUgcXUgMQp2Z0wgbmcgMQp3UXIgZXIgMQpid0Igd2EgMQpsR2YgbGUgMQpOd3EgcXUgMQpzZFUgc3QgMQpaeHYgdmEgMQp5RG0gbWUgMQpMc3cgc3QgMQpjTnEgY2ggMQpEcWMgY2ggMQp2THogc3ogMQpkV3YgZGUgMQpma1Ega2EgMQp6akQgc3ogMQp5WXYgdmEgMQpxZVQgcXUgMQpjdkwgY2ggMQp3a0Ega2EgMQpOdmIgdmEgMQpkak0gZGUgMQpoZ0sgdGggMQpwWGIgcHIgMQpUbHcgbGUgMQpSaHogaGEgMQp3a1Aga2EgMQp3RGsga2EgMQplRmMgY2ggMQplaFUgdGggMQpYbHkgbGUgMQp3eEsgd2EgMQpkUHcgZGUgMQpzRmQgc3QgMQp2Y0kgY2ggMQpGeGQgZGUgMQpmdlIgdmEgMQpqcXMgcXUgMQpyTWogZXIgMQpxYlcgcXUgMQprcFAga2EgMQpCdncgdmEgMQpUbWsga2EgMQpoYlAgdGggMQpoTXggdGggMQpqZ0wgbmcgMQplZlUgZXIgMQpjUWIgY2ggMQptY0EgY2ggMQpFd3EgcXUgMQp4bVYgbWUgMQpRY3EgY2ggMQptekcgc3ogMQpwS20gbWUgMQpGd3EgcXUgMQpsUm4gYW4gMQpqUGsgaWogMQpqTWIgaWogMQptek8gc3ogMQpvRncgb24gMQpoSmIgdGggMQpzVnEgcXUgMQppVnogaW4gMQpvcVUgcXUgMQpiaFcgdGggMQpPeHEgcXUgMQptUWsga2EgMQpYZmIgYmUgMQpjTncgY2ggMQpmZ1ogbmcgMQpUdmYgdmEgMQpzSXggc3QgMQp1WnMgcXUgMQp4elggc3ogMQpZbHEgcXUgMQpvSGYgb24gMQpjc1UgY2ggMQpRenMgc3QgMQpCZnEgcXUgMQp5Sm4gYW4gMQpwZ1EgbmcgMQp3eGsga2EgMQpUbncgYW4gMQpiS3ggYmUgMQpicVggcXUgMQpRanMgc3QgMQpwRmggdGggMQpYdmwgbGUgMQprZkIga2EgMQptWmwgbGUgMQpDc2cgbmcgMQp2ckogZXIgMQpHZnkgbnkgMQpqYlAgaWogMQpZdmwgbGUgMQpIeGIgYmUgMQpsckQgZXIgMQpxVGwgcXUgMQphQmMgY2ggMQpmR2IgYmUgMQptaFMgdGggMQp6VHAgc3ogMQprUmQgZGUgMQpXcGggdGggMQpOcGogaWogMQpsd1MgbGUgMQptR20gbWUgMQpucVQgYW4gMQpVam4gYW4gMQp4ak8gaWogMQpkTXogc3ogMQp3S2ogaWogMQp5WnIgZXIgMQpOamIgaWogMQpZbHIgZXIgMQptVmYgbWUgMQpnWmcgbmcgMQpIY2IgY2ggMQp4Y0IgY2ggMQprTW0ga2EgMQpsd0MgbGUgMQpEbmYgYW4gMQpoalcgdGggMQpyVGsgZXIgMQpWemogc3ogMQpWeHkgbnkgMQp3bFEgbGUgMQpOcnYgZXIgMQpwalAgaWogMQpmd1ogd2EgMQp0blcgdGggMQpvSncgb24gMQprSngga2EgMQpWcGogaWogMQpxQXcgcXUgMQpRaHQgdGggMQpiQ24gYW4gMQp2clUgZXIgMQpoUmMgdGggMQpjbEMgY2ggMQpyRmQgZXIgMQp0d0ggdGggMQprQ3cga2EgMQptU2QgZGUgMQpYbncgYW4gMQpmWG0gbWUgMQpUd2Ygd2EgMQpGd2ogaWogMQpiakogaWogMQpsYlEgbGUgMQprdlMga2EgMQpTbXogc3ogMQpmQnAgcHIgMQpOenogc3ogMQpiUXAgcHIgMQp2THggdmEgMQpoVmYgdGggMQp5VWogaWogMQpjWmQgY2ggMQpnSXkgZWcgMQpoVnEgdGggMQphUXggYW4gMQpRZnYgdmEgMQpsS2IgbGUgMQp6aE4gdGggMQpaYm0gbWUgMQpHY3EgY2ggMQpnYlQgbmcgMQpwWWsga2EgMQpYdmQgZGUgMQp4TWwgbGUgMQp1SGIgcXUgMQpiWGYgYmUgMQpzTmMgY2ggMQpxVnkgcXUgMQpjcE8gY2ggMQpGZ2IgbmcgMQplV2wgZXIgMQprS2QgZGUgMQpDYmogaWogMQptZkggbWUgMQpxSWEgYW4gMQpzZlggc3QgMQpzbkggYW4gMQpIamcgbmcgMQpMbWYgbWUgMQp4Z2YgbmcgMQpFdncgdmEgMQp3T2sga2EgMQpIamYgaWogMQp6dUogcXUgMQpmWm0gbWUgMQpsTnEgcXUgMQp4VWcgbmcgMQpuTHMgYW4gMQpqa1MgaWogMQpHdnAgdmEgMQpqUGQgZGUgMQp5d1Egd2EgMQpxckcgcXUgMQpiYkggYmUgMQpnaEogdGggMQptTWggdGggMQpZdnQgdGggMQp4THEgcXUgMQpCZHEgcXUgMQp6SmQgc3ogMQp4UnMgc3QgMQp2Z1AgbmcgMQpIaGIgdGggMQpucEwgYW4gMQp2RnAgdmEgMQpoU2ogdGggMQpiZEMgZGUgMQprR2cgbmcgMQprVmYga2EgMQpxdlAgcXUgMQprd08ga2EgMQpKcXQgdGggMQp6V3ggc3ogMQpzUWsgc3QgMQpoblYgdGggMQpyckQgZXIgMQpqVmggdGggMQp2dlkgdmEgMQpiZkkgYmUgMQpmU3ogc3ogMQpDemYgc3ogMQprV2wgbGUgMQpqSmMgY2ggMQpHd2ogaWogMQpsRmggdGggMQpWcGYgZm8gMQpma1Yga2EgMQpjWWogY2ggMQptclcgZXIgMQpoQmIgdGggMQpoSnggdGggMQp3SXEgcXUgMQpjZEEgY2ggMQp3UXkgd2EgMQp3Q3EgcXUgMQp3cVogcXUgMQpqZlggaWogMQpqdEcgdGggMQp4a0oga2EgMQpRemYgc3ogMQpnS3MgbmcgMQpRem8gb24gMQpid0kgd2EgMQpUc2Igc3QgMQp2dlggdmEgMQpqbFIgbGUgMQpxbFEgcXUgMQpkYlggZGUgMQpIZmMgY2ggMQpCc2ogc3QgMQpZcWsgcXUgMQpYbmMgY2ggMQpielogc3ogMQpkR3QgdGggMQpYZ2cgbmcgMQpqd0Ugd2EgMQpPeWMgY2ggMQpwUWQgZGUgMQpqUnkgaWogMQpwbVggbWUgMQpsWnggbGUgMQpnRnEgcXUgMQptSmQgZGUgMQpzS3EgcXUgMQpJa2ogaWogMQp6a0cgc3ogMQp3R2Ygd2EgMQpxUnAgcXUgMQp4RG4gYW4gMQpndkwgbmcgMQptR3ggbWUgMQppSWogaW4gMQpHemQgc3ogMQpiTHggYmUgMQpqVWwgbGUgMQpRdmMgY2ggMQptVmggdGggMQp1aEYgdGggMQpmVmsga2EgMQpjbk0gY2ggMQp1RmggdGggMQptWGYgbWUgMQpyQ2IgZXIgMQpuTHcgYW4gMQp2ZkggZm8gMQppcVYgcXUgMQpxaEQgdGggMQpzSHggc3QgMQpZd3kgd2EgMQptRHggbWUgMQpjQnQgdGggMQpCbXEgcXUgMQp4UmMgY2ggMQpiU3ogc3ogMQp2Q2ogaWogMQpUY3YgY2ggMQphWnEgYW4gMQpKY3ggY2ggMQpuYkYgYW4gMQpRemIgc3ogMQp2a1Ega2EgMQpoekQgdGggMQp4SHAgcHIgMQpocVggdGggMQpmRXYgdmEgMQp5akYgaWogMQpQamsgaWogMQpzZlUgc3QgMQpiR2MgY2ggMQptY1ggY2ggMQpwWGMgY2ggMQp5dlMgdmEgMQpwTWwgbGUgMQp3SnMgc3QgMQpWd3EgcXUgMQp5Q3cgd2EgMQpxZHMgcXUgMQpyUmogZXIgMQpRaHYgdGggMQp1Y0cgY2ggMQpvRWggdGggMQp3UWkgaW4gMQpsU2cgbmcgMQpMcXQgdGggMQpubEggYW4gMQp1cUcgcXUgMQpPYW8gYW4gMQpobFggdGggMQpmUHcgd2EgMQp0SWIgdGggMQp6SXEgcXUgMQpxbUcgcXUgMQp4Sm0gbWUgMQpWZ3cgbmcgMQpVa3gga2EgMQp6dEggdGggMQpsaFAgdGggMQpKdGsgdGggMQpIemQgc3ogMQp5eFEgbnkgMQpuclAgYW4gMQpmSGggdGggMQpZY3QgdGggMQpHcWEgYW4gMQpGZ3kgbmcgMQpvQm4gYW4gMQp2dUMgcXUgMQpCbnogYW4gMQp2UHUgcXUgMQp4RmYgZm8gMQpqZEogZGUgMQpmR2YgZm8gMQpZanEgcXUgMQpRanAgaWogMQp4VGogaWogMQp2T3EgcXUgMQp2THcgdmEgMQpzTWYgc3QgMQpvVmwgb24gMQpjd04gY2ggMQpzZ1IgbmcgMQpqalEgaWogMQp3elIgc3ogMQp6aFkgdGggMQp2YlIgdmEgMQp3Z1cgbmcgMQpxd1ggcXUgMQpOeHcgd2EgMQplUW8gZXIgMQptUXAgbWUgMQpLcWggdGggMQp0dkEgdGggMQpkbEogbGUgMQp5VnggbnkgMQpzUGYgc3QgMQpkUXogc3ogMQpzWmIgc3QgMQp6aFMgdGggMQprV2Iga2EgMQptcVAgcXUgMQpGZmsga2EgMQp4cWwgcXUgMQpncUggcXUgMQpUbHkgbGUgMQprcEwga2EgMQpxRWcgcXUgMQpiTWcgbmcgMQp4UmogaWogMQp4c0Mgc3QgMQpqbFMgbGUgMQpsek0gbGUgMQpQZmIgYmUgMQp1SnYgcXUgMQp5VmYgbnkgMQpaZ3EgcXUgMQp4YlMgYmUgMQpvRmggdGggMQp4dmIgdmEgMQpoY1UgdGggMQp3d1Ugd2EgMQp5Q2cgbmcgMQptUHogc3ogMQpzSmQgc3QgMQpibU4gbWUgMQp1VmMgY2ggMQpxZFMgcXUgMQpWd3AgcHIgMQpWbWwgbGUgMQpIcXkgcXUgMQpMZnogc3ogMQpBeWogaWogMQp5eEsgbnkgMQpId3YgdmEgMQpnSXAgbmcgMQpaZ3QgdGggMQpYdHcgdGggMQpoTGYgdGggMQpOa2QgZGUgMQpqTXMgc3QgMQp4RnQgdGggMQp4Qncgd2EgMQp3SGQgZGUgMQpRenogc3ogMQpnWXQgdGggMQpQdmsga2EgMQpwdlkgdmEgMQpKeHQgdGggMQp1Z1EgcXUgMQpMcXEgcXUgMQp4bEwgbGUgMQp3TWIgd2EgMQpTYnogc3ogMQp2RXYgdmEgMQpxZnogcXUgMQpnY1MgY2ggMQp0Q3EgdGggMQp5SHAgcHIgMQp6a0Ygc3ogMQp4dUsgcXUgMQpUYmYgYmUgMQpJcGcgbmcgMQpZemsgc3ogMQpRd3ogc3ogMQpwRmogaWogMQpqUG0gaWogMQpEcHEgcXUgMQpwSnogc3ogMQp3cE4gcHIgMQp3ekUgc3ogMQpncUQgcXUgMQpYd20gbWUgMQpvUXggb24gMQpsQ3AgbGUgMQpNaGsgdGggMQpkVHEgcXUgMQp4VXcgd2EgMQpoZ0UgdGggMQpnY0IgY2ggMQpocEogdGggMQptcUsgcXUgMQpnQm4gYW4gMQpoSXYgdGggMQpscUQgcXUgMQp3UHggd2EgMQpzTXQgdGggMQp5WHcgd2EgMQpqS3EgcXUgMQpMcnogZXIgMQpId2ogaWogMQp5ZlcgbnkgMQpZeXUgcXUgMQpxWXMgcXUgMQp5dlIgdmEgMQpzUnogc3QgMQpLeXggbnkgMQpueFIgYW4gMQpjZEogY2ggMQpOd2MgY2ggMQp0YkUgdGggMQpvZVogZXIgMQpiY1EgY2ggMQpTd2Igd2EgMQpJa3EgcXUgMQpCdnogc3ogMQp6aEYgdGggMQpYcXkgcXUgMQprS2Iga2EgMQpXZGsgZGUgMQp3cFAgcHIgMQprUXkga2EgMQpCcWUgcXUgMQpxZlogcXUgMQpwUHcgcHIgMQpBb2ggdGggMQpwbEogbGUgMQpZbnYgYW4gMQpqTWggdGggMQpiUWcgbmcgMQphZk0gYW4gMQpqdk8gaWogMQplSGYgZXIgMQpoUWcgdGggMQprcVkgcXUgMQp6SnEgcXUgMQpwWWggdGggMQpxZU0gcXUgMQpLcGsga2EgMQprZlcga2EgMQpXZHMgc3QgMQpiTmMgY2ggMQp2QnggdmEgMQpzdUogcXUgMQpxRXggcXUgMQpyZlogZXIgMQpvSGcgbmcgMQplRncgZXIgMQpmUHAgcHIgMQprRGIga2EgMQp0Wm4gdGggMQpkY0sgY2ggMQp5V3YgdmEgMQpVeHYgdmEgMQp5UWUgZXIgMQpaanEgcXUgMQpXanYgaWogMQp5Z08gbmcgMQpvalEgb24gMQpLd2MgY2ggMQpwRmcgbmcgMQpzTWQgc3QgMQpNZnEgcXUgMQpNenkgc3ogMQpOd3AgcHIgMQp5d1Qgd2EgMQp3THEgcXUgMQpIcW0gcXUgMQpxc0MgcXUgMQpiTm4gYW4gMQpiVXYgdmEgMQpuUmMgY2ggMQpSbGsgbGUgMQpCcXAgcXUgMQpjZkkgY2ggMQptVnEgcXUgMQpxR2ogcXUgMQp2bFggbGUgMQprZkcga2EgMQp3VmQgZGUgMQpjZEUgY2ggMQpoekUgdGggMQpEaHYgdGggMQpiemogc3ogMQp2dkwgdmEgMQpielEgc3ogMQp3VmIgd2EgMQpaeGwgbGUgMQp6THcgc3ogMQpoVHEgdGggMQpWcXAgcXUgMQpobVcgdGggMQpmbEQgbGUgMQpLY2QgY2ggMQpwRHEgcXUgMQprdlkga2EgMQpjUWwgY2ggMQpJeGsga2EgMQpzR2Ygc3QgMQpnRmggdGggMQpSa2QgZGUgMQpxSGwgcXUgMQpyQ2cgbmcgMQpxQm4gYW4gMQpzSncgc3QgMQpjV2ogY2ggMQp6WHAgc3ogMQpIaGwgdGggMQpoalAgdGggMQpxbFogcXUgMQpIeHIgZXIgMQp6ckUgZXIgMQpna0ggbmcgMQp1SGsgcXUgMQpHem0gc3ogMQpjQmMgY2ggMQp6ZmYgc3ogMQp6THMgc3QgMQpVcXkgcXUgMQp2a0Qga2EgMQpmcVggcXUgMQpoTGogdGggMQpmWXUgcXUgMQpqS3cgaWogMQpqSWIgaWogMQpuclUgYW4gMQpmRnAgcHIgMQpzYkMgc3QgMQptR3YgdmEgMQpmWHAgcHIgMQpQa3Yga2EgMQpDcWUgcXUgMQpjQ3ggY2ggMQpyTnEgcXUgMQpad2Ygd2EgMQpKZ2MgY2ggMQp4bFEgbGUgMQpnQnogbmcgMQpjSXggY2ggMQpvZFEgb24gMQpRbnogYW4gMQpVenggc3ogMQpKcHQgdGggMQpneFggbmcgMQpaa2QgZGUgMQpYa2sga2EgMQpoUnYgdGggMQp5Y1YgY2ggMQp6TW0gc3ogMQplQnEgcXUgMQpnSGQgbmcgMQpieFUgYmUgMQp4ZEsgZGUgMQptUWMgY2ggMQp0WWogdGggMQpobEYgdGggMQpjUnogY2ggMQpsR3ogbGUgMQp6RnogemUgMQpxT3AgcXUgMQpHZ2MgY2ggMQpvR20gb24gMQpYbnAgYW4gMQp3WWcgbmcgMQp3dUogcXUgMQpzTnMgc3QgMQp6cVUgcXUgMQprQ3Aga2EgMQpXaHcgdGggMQpuUXggYW4gMQp2d0EgdmEgMQpWY2cgY2ggMQprV2ogaWogMQpIcWQgcXUgMQpDcHkgcHIgMQp6Y0wgY2ggMQpjZkYgY2ggMQprWG4gYW4gMQphWGogYW4gMQpTd2sga2EgMQpmaHEgdGggMQpWeGkgaW4gMQpHcXUgdW4gMQpVeGQgZGUgMQp6ZEsgc3ogMQpoWnEgdGggMQptd0ogbWUgMQpjdkQgY2ggMQpsYlogbGUgMQpQemwgbGUgMQpoZE8gdGggMQpoSm4gdGggMQpxV3AgcXUgMQpkWHkgZGUgMQpmdVUgcXUgMQpmWHkgbnkgMQp4bkwgYW4gMQpnTWYgbmcgMQpyTmYgZXIgMQp4UWggdGggMQprcUggcXUgMQpyRnogZXIgMQp2cFQgdmEgMQpOd3kgd2EgMQp5cUEgcXUgMQp2aE8gdGggMQprVmggdGggMQpuWWIgYW4gMQpqdk4gaWogMQpiSWYgYmUgMQpxcVMgcXUgMQpqYkYgaWogMQpnTWsgbmcgMQpiVGQgZGUgMQpSaGQgdGggMQp0V3EgdGggMQpnTHogbmcgMQpmc0Qgc3QgMQp1TXQgdGggMQp5SHEgcXUgMQpYZ2ogbmcgMQpMbW0gbWUgMQp2a1Uga2EgMQpsQXggbGUgMQpLemQgc3ogMQpoS20gdGggMQprUWQgZGUgMQpnRmMgY2ggMQp3eVggd2EgMQp6ZlUgc3ogMQp4cFUgcHIgMQp5d0ogd2EgMQpBeXEgcXUgMQpnSXUgcXUgMQp6dVEgcXUgMQpWZm4gYW4gMQp2Qm4gYW4gMQpIdHkgdGggMQpnUnYgbmcgMQpwVGIgcHIgMQpVcXggcXUgMQp2VG4gYW4gMQp2SmMgY2ggMQpVaXcgaW4gMQpKbHAgbGUgMQp6UHEgcXUgMQpyQ3ggZXIgMQpscVMgcXUgMQp6bFogbGUgMQp6T3cgc3ogMQprbEsgbGUgMQprZlEga2EgMQp1SnggcXUgMQpwa1Aga2EgMQpHcXogcXUgMQpKbGMgY2ggMQp5eUQgbnkgMQpqaFggdGggMQpjclYgY2ggMQpEd3cgd2EgMQp5ancgaWogMQpxcFggcXUgMQpRbWQgZGUgMQp5V3ogc3ogMQp3UGQgZGUgMQpVcWsgcXUgMQpuYlIgYW4gMQpZZGMgY2ggMQpxUWwgcXUgMQpwbUQgbWUgMQpKa2oga2EgMQpqVGsga2EgMQp3WWYgd2EgMQpaenggc3ogMQpya1EgZXIgMQpiRHAgcHIgMQpxU3MgcXUgMQpnWHIgbmcgMQpjWmIgY2ggMQpOZ3AgbmcgMQpocVEgdGggMQpXdncgdmEgMQpXYncgd2EgMQp3dksgdmEgMQpjSmYgY2ggMQpNd2QgZGUgMQpkZEogZGUgMQppd0UgaW4gMQpieFggYmUgMQpqeFQgaWogMQpZY24gY2ggMQp3TWYgd2EgMQpicUQgcXUgMQp5cUkgcXUgMQpkUmogZGUgMQp3WXkgd2EgMQpUeHogc3ogMQp2ck4gZXIgMQpxVnUgdW4gMQptUmogaWogMQpGanggaWogMQpmeVEgbnkgMQp4ZUkgZXIgMQpXcWYgcXUgMQpKbHkgbGUgMQpqRGIgaWogMQpZenUgcXUgMQpCeG0gbWUgMQp3TGogaWogMQpicWMgY2ggMQpzZ0sgbmcgMQprcVcgcXUgMQpac24gYW4gMQpGcXEgcXUgMQpyWHogZXIgMQpsSnEgcXUgMQpqRWggdGggMQpuQ2IgYW4gMQpYcmQgZXIgMQpSemggdGggMQpnZlcgbmcgMQpYdGwgdGggMQptVHggbWUgMQp1ZkEgcXUgMQp3alEgaWogMQp4bFcgbGUgMQpkcUggcXUgMQp4aE0gdGggMQpYd3QgdGggMQpkblcgYW4gMQpSZnogc3ogMQpmS3AgcHIgMQprRncga2EgMQpRdXYgcXUgMQptWHcgbWUgMQpWa3cga2EgMQp0RmggY2ggMQpoSXUgdGggMQpsVGYgbGUgMQpNd3YgdmEgMQp3dlQgdmEgMQprS3Aga2EgMQp0UnYgdGggMQp3WG8gb24gMQp2ekwgc3ogMQpKY2YgY2ggMQpUYnEgcXUgMQpqZFEgZGUgMQpSYnggYmUgMQpKcm0gZXIgMQpzUmogc3QgMQp6V3ogc3ogMQpxbkUgYW4gMQpLY2YgY2ggMQpRcW0gcXUgMQpmcEkgcHIgMQppTncgaW4gMQp1akUgcXUgMQpxSHYgcXUgMQpKdnggdmEgMQpoSGMgdGggMQpmdkogdmEgMQpucVkgYW4gMQp3cEUgd2EgMQpId3Mgc3QgMQp4ekkgc3ogMQpDZ2cgbmcgMQpjV2QgY2ggMQpxdVYgdW4gMQpiak4gaWogMQp4UXAgcHIgMQpieEUgYmUgMQp1VmsgcXUgMQpXcmwgZXIgMQpMcnggZXIgMQpJd2wgbGUgMQphcUIgYW4gMQpWY3AgY2ggMQpXd3QgdGggMQphR3ggYW4gMQpmUG4gYW4gMQptRnEgcXUgMQpxZ2QgcXUgMQpac2Qgc3QgMQpWeHMgc3ogMQpLaHEgdGggMQp3U3Mgc3QgMQpvR3EgcXUgMQpZenYgc3ogMQpkcVggcXUgMQptcFEgbWUgMQpLY3AgY2ggMQpzd0Qgc3QgMQpyWmcgbmcgMQpqWW0gaWogMQp1SmwgcXUgMQp2V3YgdmEgMQpzdk8gc3QgMQpwRmQgZGUgMQpZanggaWogMQp0cEkgdGggMQpkVnQgdGggMQpzTm0gc3QgMQpsS3QgdGggMQpudlUgYW4gMQpIeGYgZm8gMQpwdVcgcXUgMQp3SmcgbmcgMQpneFIgbmcgMQpmQWcgbmcgMQpZcWUgcXUgMQpQd3ogc3ogMQpobUMgdGggMQp5bEogbGUgMQptcVQgcXUgMQpjQ2YgY2ggMQpwWmcgbmcgMQphRnggYW4gMQpvWXEgcXUgMQpmUGogaWogMQpkSnQgdGggMQp4d24gYW4gMQpDY2IgY2ggMQp3Rm4gYW4gMQp3clkgZXIgMQpDZGggdGggMQpoTGMgdGggMQpaeGcgbmcgMQpNeGMgY2ggMQpoY1kgdGggMQp6Vncgc3ogMQpoa1YgdGggMQp0eEUgdGggMQp5dlQgdmEgMQpNbHcgbGUgMQp6dEYgdGggMQpmR2QgZGUgMQp6akUgc3ogMQpnak0gbmcgMQpqd1AgaWogMQpLeHQgdGggMQp5RmcgbmcgMQpXY2cgY2ggMQp0aFogY2ggMQpoelEgdGggMQpKdGcgdGggMQp5dksgdmEgMQp6Vnogc3ogMQpQd2Igd2EgMQp4cUQgcXUgMQp1eVEgcXUgMQpnQ20gbmcgMQp6alUgc3ogMQp4R3EgcXUgMQpNcXkgcXUgMQpPY3ggY2ggMQpzcU0gcXUgMQpsUmIgbGUgMQp0ZlUgdGggMQp2WmcgbmcgMQpmWmMgY2ggMQpncFogbmcgMQpGcGYgcHIgMQpxdFEgdGggMQptaFogdGggMQpicUYgcXUgMQpmZ0cgbmcgMQp3b1Qgb24gMQp6U2Igc3ogMQp3eFMgd2EgMQpXcmYgZXIgMQpPcWsgcXUgMQp4TGMgY2ggMQpRemogc3ogMQp3WGsga2EgMQp0ZFggdGggMQpKcWMgY2ggMQpmWGsga2EgMQprQmQgZGUgMQppcVcgcXUgMQpPY2IgY2ggMQpmVW8gb24gMQpqWGsgaWogMQpoYkkgdGggMQpaY2cgY2ggMQp6d1Mgd2EgMQpjVm0gY2ggMQp2d2ogaWogMQpnd0cgbmcgMQp6c00gc3QgMQpQcW8gcXUgMQpoUGogdGggMQpmd0cgd2EgMQpYd2ggdGggMQpXd2ggdGggMQpWcXcgcXUgMQp2bVkgdmEgMQp1dkYgcXUgMQp0ZksgdGggMQpYYmcgbmcgMQpOZm4gYW4gMQp3cEggcHIgMQp5SnEgcXUgMQp3cU8gcXUgMQpuY1YgY2ggMQp3Z00gbmcgMQpmUWsga2EgMQpodksgdGggMQpxTHIgcXUgMQpXY2UgY2ggMQprRm4gYW4gMQpyQm0gZXIgMQptZFYgZGUgMQpqRmMgY2ggMQprblggYW4gMQpuTWYgYW4gMQpzQ2MgY2ggMQpwQ3EgcXUgMQp1SnQgdGggMQpDZmsga2EgMQpDeGIgYmUgMQpmT3cgd2EgMQphSnogYW4gMQpnTHQgdGggMQpibVggbWUgMQpZZm8gb24gMQpkSmYgZGUgMQpFYXkgYW4gMQpxU2QgcXUgMQptalEgaWogMQpwTmsga2EgMQpOdmggdGggMQp4a1gga2EgMQpKd3ggd2EgMQpqdkwgaWogMQpmcEggcHIgMQpweE8gcHIgMQp2UHggdmEgMQpkV3UgcXUgMQpoYlIgdGggMQp3b0Ugb24gMQpndFggdGggMQpiZkYgYmUgMQptdlcgdmEgMQp4c00gc3QgMQp3THYgdmEgMQp3SGggdGggMQpzQ24gYW4gMQpwTHcgcHIgMQprWHcga2EgMQp4VmwgbGUgMQpoQ2MgdGggMQpvVWsgb24gMQp6Y0YgY2ggMQpzTXYgc3QgMQpkclogZXIgMQp3Zk8gd2EgMQp5RnYgdmEgMQpoWGEgdGggMQpxTXUgdW4gMQpmQ3YgdmEgMQpmd0Mgd2EgMQpvVGcgbmcgMQpGa20ga2EgMQplUXQgdGggMQpQeGQgZGUgMQprakcgaWogMQp0R3MgdGggMQpkcUIgcXUgMQpmbVggbWUgMQp4WWkgaW4gMQprSWsga2EgMQp2RGQgZGUgMQprdkMga2EgMQpxdFogdGggMQpmUGMgY2ggMQpkcE4gZGUgMQpoTnIgdGggMQpabmogYW4gMQpIa2UgZXIgMQpJcXAgcXUgMQp3Zk4gd2EgMQpWaHggdGggMQpEZ2sgbmcgMQpta1Ega2EgMQpXeGQgZGUgMQpJY3ggY2ggMQp5WXQgdGggMQp0cXggdGggMQpadmYgdmEgMQpzeFUgc3QgMQpMcWsgcXUgMQpuZkkgYW4gMQpqeXEgcXUgMQpXdm4gYW4gMQpTZHYgZGUgMQp1WWMgY2ggMQpRZ20gbmcgMQpjWGEgY2ggMQp3Qnggd2EgMQpwWXggcHIgMQpqV2wgbGUgMQpLZncgd2EgMQpxakogcXUgMQpQamogaWogMQphalggYW4gMQpzWGQgc3QgMQp4SGcgbmcgMQp4aEEgdGggMQpyR20gZXIgMQpRdG0gdGggMQpzclkgZXIgMQpxUHggcXUgMQp3Unogc3ogMQp3T2cgd2EgMQpmTGcgbmcgMQpoUXQgdGggMQpqaFcgdGggMQpDd2sga2EgMQp6V2wgbGUgMQp3SmMgY2ggMQpQeHYgdmEgMQpucEkgYW4gMQpsblcgYW4gMQprcXkgcXUgMQp5d2cgbmcgMQpzQ2Qgc3QgMQpxZkYgcXUgMQpxcGcgcXUgMQpNYnggYmUgMQpud04gYW4gMQp3THMgc3QgMQpXY3YgY2ggMQpWdnIgZXIgMQpWa3gga2EgMQpkbVUgZGUgMQpmR3Mgc3QgMQpnSnogbmcgMQpkRnogc3ogMQpxQ2YgcXUgMQpsdlcgbGUgMQpTdmIgdmEgMQp4SnIgZXIgMQp1WmYgcXUgMQpUamMgY2ggMQpwSWogaWogMQpiVmcgbmcgMQp2ZE8gZGUgMQpsVHEgcXUgMQpiTWggdGggMQpuRG0gYW4gMQpUemIgc3ogMQpwQ3cgcHIgMQpRa2cgbmcgMQpmcFkgcHIgMQp5UWogaWogMQpxaUMgcXUgMQptUWkgaW4gMQp3VXEgcXUgMQprVmogaWogMQp0alEgdGggMQptWGogaWogMQpYZmQgZGUgMQpjZ0kgY2ggMQpQa2ogaWogMQpqakYgaWogMQpqckogZXIgMQpxd1ogcXUgMQpSdHogdGggMQpmSGIgYmUgMQpIZ3ggbmcgMQpEemYgc3ogMQpjYkUgY2ggMQpYZnMgc3QgMQpSam0gaWogMQpmbVkgbWUgMQp3WWogaWogMQp1RnAgcXUgMQp2V20gdmEgMQp5VmMgY2ggMQpjZ0wgY2ggMQp6bVIgc3ogMQp6ZkIgc3ogMQp6bkggYW4gMQpoZ0cgdGggMQp4dUUgcXUgMQpCc2wgbGUgMQpvV3ggb24gMQpQamwgbGUgMQpKZGYgZGUgMQpYbXAgbWUgMQpzZ08gbmcgMQpoQ2ogdGggMQp3dFIgdGggMQpmRHMgc3QgMQpiUWIgYmUgMQpxdU0gdW4gMQpmTGwgbGUgMQpOaHAgdGggMQp6blUgYW4gMQpzZFMgc3QgMQp3V3UgcXUgMQp0RnEgdGggMQpjRnEgY2ggMQpXd2wgbGUgMQpMcXkgcXUgMQpucVEgYW4gMQp6bUQgc3ogMQpHeXggbnkgMQpia1Iga2EgMQpsUXcgbGUgMQpQcW0gcXUgMQpGd2sga2EgMQp0SHQgdGggMQpqeUwgaWogMQpxeEEgcXUgMQptckMgZXIgMQpxekwgcXUgMQpqSmcgbmcgMQpqZlMgaWogMQpxTWggdGggMQptbFYgbGUgMQpia0oga2EgMQprbkggYW4gMQpVcXQgdGggMQpjdUYgY2ggMQppWXEgcXUgMQpmVWUgZXIgMQpzQmIgc3QgMQpOaHggdGggMQpyaFAgdGggMQpkV3AgZGUgMQpZdmYgdmEgMQpSeHIgZXIgMQprekcgc3ogMQp4dVogcXUgMQp4dkQgdmEgMQpmd3EgcXUgMQpoakogdGggMQprWnIgZXIgMQp2Sm4gYW4gMQp4bk8gYW4gMQp2Y0EgY2ggMQptZksgbWUgMQp2alMgaWogMQpOdnAgdmEgMQpkZkIgZGUgMQpRc2Igc3QgMQpkWHAgcHIgMQp6UmwgbGUgMQpFanEgcXUgMQphR3ogYW4gMQpuSGcgYW4gMQpidkEgdmEgMQpCZmQgZGUgMQp6VmcgbmcgMQp6c1kgc3QgMQpoVnogdGggMQpQam0gaWogMQpzWGkgaW4gMQppS2ogaW4gMQpxYUUgYW4gMQpDZmogaWogMQp6TWMgY2ggMQptZ1ogbmcgMQp2Z0EgbmcgMQppd0ogaW4gMQp2R3ggdmEgMQp0ZlkgdGggMQpsakggbGUgMQp6R2ogc3ogMQpibUsgbWUgMQpuVXEgYW4gMQp6UnQgdGggMQp0R2ogdGggMQp6VmQgc3ogMQpqU3IgZXIgMQpmTnEgcXUgMQp4VGcgbmcgMQpucUUgYW4gMQpXbmcgYW4gMQp6VnYgc3ogMQpnVnMgbmcgMQpmTmQgZGUgMQpxTncgcXUgMQpabmMgY2ggMQp1SnMgcXUgMQp5dkogdmEgMQp4bE0gbGUgMQpKemMgY2ggMQp2UmggdGggMQpmY0sgY2ggMQp3Vm4gYW4gMQpyV3cgZXIgMQpjSGsgY2ggMQp2T3ggdmEgMQppVWEgYW4gMQpuV24gYW4gMQp6cVogcXUgMQp4RmogaWogMQpuQ2cgYW4gMQpmWWogaWogMQpWc3ggc3QgMQptdE0gdGggMQptaEcgdGggMQpqdE4gdGggMQpoY0MgdGggMQpOd2sga2EgMQpkWHUgcXUgMQptSnEgcXUgMQp4c08gc3QgMQpxUm4gYW4gMQpSbmogYW4gMQprbVAga2EgMQpYdGcgdGggMQpHdmggdGggMQpqcXYgcXUgMQpjVmwgY2ggMQpjZEkgY2ggMQp6ZEUgc3ogMQpoWmsgdGggMQpCZHggZGUgMQpoSG4gdGggMQpoa0cgdGggMQp2eEogdmEgMQpsckEgZXIgMQpsclQgZXIgMQpoalYgdGggMQpxYkkgcXUgMQptVGcgbmcgMQpmbVYgbWUgMQpyRGsgZXIgMQpkTmQgZGUgMQpHemogc3ogMQphVmogYW4gMQp2TnIgZXIgMQprWGEgYW4gMQpyR3MgZXIgMQp4YVggYW4gMQpjckcgY2ggMQpxSmEgYW4gMQpqRHQgdGggMQpNZnggZm8gMQp4RWEgYW4gMQpRdnogc3ogMQp3UmcgbmcgMQpwRmMgY2ggMQpDcHYgdmEgMQpySmsgZXIgMQpmYlEgYmUgMQpYemcgbmcgMQpxRnkgcXUgMQpaZmogaWogMQp0d0UgdGggMQpPYXEgYW4gMQp5c1kgc3QgMQp3ZFogZGUgMQpnbU8gbmcgMQp3R24gYW4gMQp3Umsga2EgMQpncVMgcXUgMQpBZ3EgcXUgMQpUd3YgdmEgMQpRbnYgYW4gMQpiVnYgdmEgMQpjRHcgY2ggMQp0R3EgdGggMQpmYnEgcXUgMQpUdncgdmEgMQptTnYgdmEgMQpkdEUgdGggMQpwelAgc3ogMQpWc3cgc3ogMQpxR3EgcXUgMQpxUGMgY2ggMQpxeUMgcXUgMQpueEYgYW4gMQpqRGwgbGUgMQpqSHQgdGggMQpmeFogZm8gMQpzUWMgY2ggMQpubUggYW4gMQp4ckQgZXIgMQpoTWggdGggMQp2SGsga2EgMQpobVMgdGggMQpYZHQgdGggMQpYd2wgbGUgMQp1SnIgcXUgMQpzUGsgc3QgMQpYanAgaWogMQpVcWkgcXUgMQprZ0QgbmcgMQpqZ0kgbmcgMQp1RncgcXUgMQp4TmQgZGUgMQpkaEkgdGggMQpMeG8gb24gMQpTZnEgcXUgMQp6UnAgc3ogMQp4d0sgd2EgMQpmbUIgbWUgMQp2clYgZXIgMQpxU2YgcXUgMQpqUG4gYW4gMQpIYnAgcHIgMQpiSnQgdGggMQpscVEgcXUgMQp4U2QgZGUgMQpkTWsgZGUgMQp2Vnogc3ogMQp2a0sga2EgMQpYZHMgZGUgMQp5YkIgYmUgMQpncEUgbmcgMQpxY0MgY2ggMQpweEwgcHIgMQpnUG0gbmcgMQpCcGQgZGUgMQpkcEIgZGUgMQpqbEogbGUgMQpwa0Mga2EgMQp5cFAgcHIgMQpOcW0gcXUgMQp0Z1ogdGggMQpFcW8gcXUgMQpkUmsgZGUgMQpVYmMgY2ggMQp4aFkgdGggMQpsSmQgbGUgMQpwdk4gdmEgMQpRZmMgY2ggMQpEYncgd2EgMQpzRmMgY2ggMQp3a1gga2EgMQp4cFIgcHIgMQpwakogaWogMQpna1EgbmcgMQpyTWYgZXIgMQpKc24gYW4gMQp4T3cgd2EgMQpEcXUgdW4gMQpuYkogYW4gMQpndkYgbmcgMQpGbnAgYW4gMQpqcFYgaWogMQpxdEQgdGggMQp1RWogcXUgMQp5aFkgdGggMQpPaHEgdGggMQpuWHkgYW4gMQpwZFUgZGUgMQptRHogc3ogMQppVmsgaW4gMQpIcXEgcXUgMQp4cFogcG8gMQphZVUgYW4gMQpzalogc3QgMQpzR3Agc3QgMQpXcW4gYW4gMQp4cVMgcXUgMQpKamMgY2ggMQpxUHAgcXUgMQpzWHogc3QgMQp4dlAgdmEgMQpXYnEgcXUgMQp0aksgdGggMQpsaEggdGggMQpocVYgdGggMQpkWWYgZGUgMQpwRmsga2EgMQpzRnEgcXUgMQp1SHEgcXUgMQp2aEEgdGggMQpqbEUgbGUgMQpzcUIgcXUgMQpxbnIgYW4gMQpGeHEgcXUgMQp6SG4gYW4gMQpwZEIgZGUgMQp3SGMgY2ggMQpQeGogaWogMQpnSHggbmcgMQpucUogYW4gMQpvcVggcXUgMQpYYnkgYmUgMQp0YkkgdGggMQprU2Yga2EgMQp2aEQgdGggMQpxSGogcXUgMQpOcHggcHIgMQpRenAgc3ogMQp4aVUgaW4gMQpyalogZXIgMQp3alUgaWogMQpqdEIgdGggMQpZZ3EgcXUgMQphUWYgYW4gMQp4V3UgcXUgMQphVmYgYW4gMQpwUXggcHIgMQpMbncgYW4gMQpxV2EgYW4gMQp1SHAgcXUgMQpMdnAgdmEgMQpKeHAgcHIgMQp6SGsgc3ogMQp3dlUgdmEgMQpXcWggdGggMQpoVnMgdGggMQpYZ3kgbmcgMQpkWmogZGUgMQp1Q3EgcXUgMQpHeGwgbGUgMQpIbGcgbmcgMQpXcWQgcXUgMQpEeHogc3ogMQpoZE4gdGggMQpwdk0gdmEgMQpXeGsga2EgMQpxV2QgcXUgMQpmaU8gaW4gMQpmRHcgd2EgMQpiSGogaWogMQppVmggdGggMQpQbWcgbmcgMQpmWGMgY2ggMQp4ZkwgZm8gMQp5R2MgY2ggMQp5Qm4gYW4gMQpoQ2sgdGggMQpMbGsgbGUgMQp5TWggdGggMQpxclkgcXUgMQpnZFggbmcgMQpxeEcgcXUgMQpabXQgdGggMQpSencgc3ogMQpuQmQgYW4gMQptV2wgbGUgMQp4dUkgcXUgMQpqeUYgaWogMQpiVnUgcXUgMQp5Z1AgbmcgMQpkRnEgcXUgMQpqRm0gaWogMQpSbWwgbGUgMQprbEggbGUgMQpWZmYgZm8gMQpLemsgc3ogMQpMaHYgdGggMQpjU2ogY2ggMQpRcmggdGggMQp1QncgcXUgMQpzQ2sga2EgMQpxeVMgcXUgMQpjWHUgY2ggMQp3Zk0gd2EgMQprZEsgZGUgMQpjWGogY2ggMQpjdFogdGggMQpmakkgaWogMQpjZ1MgY2ggMQptd0wgbWUgMQprelUgc3ogMQpjWnIgY2ggMQpmcVUgcXUgMQpxSmkgcXUgMQpnRGQgbmcgMQpiS3EgcXUgMQphVXcgYW4gMQpzeEUgc3QgMQpteFUgbWUgMQpjd1kgY2ggMQpmcEMgcHIgMQpzUncgc3QgMQpLa3EgcXUgMQp3eEEgd2EgMQpnUWYgbmcgMQpwUGIgcHIgMQpId3Uga3UgMQpzdVggcXUgMQpscVkgcXUgMQpzeFcgc3QgMQphRmggdGggMQpsV3EgcXUgMQpwYlogcHIgMQpicW0gcXUgMQprSmsga2EgMQpxdFQgdGggMQp6TWQgc3ogMQpoR3MgdGggMQp4bEggbGUgMQpkbXEgcXUgMQpYcmsgZXIgMQpPY2YgY2ggMQptS2MgY2ggMQp6ckEgZXIgMQpneEUgbmcgMQpxV3UgdW4gMQp4UWYgZm8gMQpYb3ogb24gMQpmbVAgbWUgMQprZEQgZGUgMQpiQnogc3ogMQp3cEEgcHIgMQpuTWIgYW4gMQp0SHEgdGggMQpqTXQgdGggMQpTdnEgcXUgMQpqTWwgbGUgMQp3QmMgY2ggMQp5bVggbWUgMQpoY0IgdGggMQpiclUgZXIgMQpwYVggYW4gMQpoZEcgdGggMQpGd3AgcHIgMQpzYlkgc3QgMQptaEIgdGggMQpwZlogcHIgMQpWbWggdGggMQpzQ3EgcXUgMQpaZncgd2EgMQpMam0gaWogMQpwcUcgcXUgMQpkcEsgZGUgMQp0ZkcgdGggMQppalIgaW4gMQppSnkgaW4gMQpxZk4gcXUgMQpjclMgY2ggMQpjZ1QgY2ggMQp3T3QgdGggMQpmbkUgYW4gMQpoV3AgdGggMQpacHcgcHIgMQp3ZE8gZGUgMQp2WXkgdmEgMQpxckkgcXUgMQpkbUYgZGUgMQpqaEogdGggMQp3SHIgZXIgMQpKemIgc3ogMQpmRXkgbnkgMQpoaFogdGggMQp3cFEgcHIgMQpxWWcgcXUgMQpxdFkgdGggMQpLZHggZGUgMQpxZmogcXUgMQpSYnYgdmEgMQpiYk8gYmUgMQpYY24gY2ggMQprQ2QgZGUgMQpHY3ggY2ggMQp6bUMgc3ogMQp3SmwgbGUgMQpxRGMgY2ggMQpKenIgZXIgMQpZcncgZXIgMQpLc3ggc3QgMQp1S3ggcXUgMQpqU2MgY2ggMQpManogc3ogMQp4ZEIgZGUgMQp6V2Igc3ogMQp2d1kgdmEgMQp2TWQgZGUgMQpkYkggZGUgMQpRc3UgcXUgMQp3SHEgcXUgMQpnSmggdGggMQp3WnAgcHIgMQpidE8gdGggMQpYbXYgdmEgMQpxcGQgcXUgMQpKbncgYW4gMQp2bEQgbGUgMQp4Y1ggY2ggMQpZdnYgdmEgMQpaZnQgdGggMQpIcXogcXUgMQp4cU0gcXUgMQpIdGggY2ggMQp6dEwgdGggMQppT2ogaW4gMQpjSXogY2ggMQpoaEMgdGggMQp0dlggdGggMQpGZ2sgbmcgMQptakMgaWogMQpPanAgaWogMQprdkkga2EgMQp6cWIgcXUgMQpxcVcgcXUgMQppSGcgbmcgMQpqeEogaWogMQpHYnogc3ogMQpuUWMgY2ggMQpwWHEgcXUgMQpqRGQgZGUgMQpxUXIgcXUgMQp2SnggdmEgMQp6Ylkgc3ogMQpmUm0gbWUgMQpxRWwgcXUgMQpvYVogYW4gMQp2akYgaWogMQpscVggcXUgMQpwU2QgZGUgMQpiWHEgcXUgMQpqSnYgaWogMQpXcnYgZXIgMQpLcHcgcHIgMQp4YVkgYW4gMQpqQ3YgaWogMQpmYlIgYmUgMQpwVHAgcHIgMQp3ZEkgZGUgMQpxZlEgcXUgMQpScnEgcXUgMQpkYkYgZGUgMQpiekYgc3ogMQpxd08gcXUgMQp2clkgZXIgMQp0d0kgdGggMQp6TGYgc3ogMQpiVmMgY2ggMQpYbmwgYW4gMQpXZ2IgbmcgMQpmdVMgcXUgMQp2SWYgdmEgMQpUd3QgdGggMQpuS2QgYW4gMQpEa2ggdGggMQp1QmQgcXUgMQprT3oga2EgMQp6T2ogc3ogMQpuekUgYW4gMQpaYmggdGggMQpxTWcgcXUgMQpnZkMgbmcgMQp2Z0QgbmcgMQp5dEMgdGggMQptcU0gcXUgMQpLam4gYW4gMQp4YlggYmUgMQp6Zkggc3ogMQptd0ggbWUgMQp6UWIgc3ogMQpHemsgc3ogMQpxc1cgcXUgMQprTnMgc3QgMQpMcXogcXUgMQpubVcgYW4gMQpxTnggcXUgMQp6Y1EgY2ggMQpxTXogcXUgMQp3R3ogc3ogMQp1Q2QgcXUgMQpCcHYgcHIgMQpxTmUgcXUgMQpicFAgcHIgMQpsWGYgbGUgMQpjTHEgY2ggMQpwZFggZGUgMQpxelUgcXUgMQpLeGQgZGUgMQpqdkYgaWogMQpyRm4gYW4gMQpFdHEgdGggMQp6WWggdGggMQpLc3Ygc3QgMQpmSmsga2EgMQpma0Mga2EgMQpteEsgbWUgMQpmYnogc3ogMQp2clcgZXIgMQptUHEgcXUgMQp5QnQgdGggMQppQ2YgaW4gMQpzckggZXIgMQpoakIgdGggMQpmY0cgY2ggMQpGdGcgdGggMQp1QnAgcXUgMQp5cVQgcXUgMQpkakYgZGUgMQp0Z1UgdGggMQpXcmogZXIgMQp4RmMgY2ggMQp5Y0MgY2ggMQplcUEgcXUgMQpwYkcgcHIgMQpDd2ggdGggMQpmRGsga2EgMQp3VHogc3ogMQp4clcgZXIgMQprUXMgc3QgMQp3TWwgbGUgMQp5Q24gbmQgMQplR3AgZXIgMQp1UHYgcXUgMQpXcWUgcXUgMQp5aUkgaW4gMQpycUYgcXUgMQpLanMgc3QgMQpsd0sgbGUgMQpmalEgaWogMQp1SXEgcXUgMQpkeFIgZGUgMQpHcWogcXUgMQpuTGIgYW4gMQpnUmQgbmcgMQpxeXYgcXUgMQp3dFogdGggMQpjUmsgY2ggMQppS2YgaW4gMQpoYksgdGggMQpycVQgcXUgMQp4bUYgbWUgMQp2SHQgdGggMQp0cU4gdGggMQp2THYgdmEgMQp4dkogdmEgMQpiZ0ogbmcgMQpRanEgcXUgMQpMdmIgdmEgMQpIeGcgbmcgMQp0VnEgdGggMQpyaFogdGggMQpzbEwgbGUgMQprZEggZGUgMQpLZmIgYmUgMQpEZmggdGggMQpDcXEgcXUgMQpuUWsgYW4gMQpXbnogYW4gMQpOamogaWogMQpiSmYgYmUgMQp3UmggdGggMQpEcGIgcHIgMQpzUGogc3QgMQpacG4gYW4gMQptUGogaWogMQpRY2wgY2ggMQp6Q2Qgc3ogMQp5ckMgZXIgMQpoQ2IgdGggMQphQnYgYW4gMQp5dUcgcXUgMQpmY04gY2ggMQpiWnAgcHIgMQpHdGYgdGggMQp3Ylcgd2EgMQp2UHEgcXUgMQpWdGogdGggMQprV3EgcXUgMQpKYm0gbWUgMQpXbWIgbWUgMQpweFkgcHIgMQpoUXggdGggMQp0Tm4gdGggMQpxZHggcXUgMQpjWXYgY2ggMQp6bFggbGUgMQpyd0YgZXIgMQpjWm0gY2ggMQp5YkogYmUgMQpxYUIgYW4gMQp0VmogdGggMQp6VWcgbmcgMQpjZkMgY2ggMQpoeEIgdGggMQpUYnogc3ogMQpvRm4gYW4gMQpiVHAgcHIgMQpoQmsgdGggMQpoUWUgdGggMQpxQmUgZGUgMQpkcEMgZGUgMQprcFcga2EgMQpaa2ogaWogMQpOd24gYW4gMQpnckMgbmcgMQp1WHEgcXUgMQpVb3kgb24gMQpaZnUgcXUgMQp4S2IgYmUgMQpoU2IgdGggMQpiUGMgY2ggMQpxY2cgY2ggMQp4SXUgcXUgMQpnQnYgbmcgMQpnWm0gbWUgMQpxUHUgdW4gMQpCZnAgcHIgMQpyeEMgZXIgMQpzTGsgc3QgMQpoR2ogdGggMQpxdlIgcXUgMQpxcFIgcXUgMQp2Tm4gYW4gMQpEZnQgdGggMQpuUnEgYW4gMQpraFIgdGggMQpwcVAgcXUgMQp0TnAgdGggMQpWd3QgdGggMQp4d0Egd2EgMQp3TW4gYW4gMQpTbnEgYW4gMQpkZkQgZGUgMQp2R3cgdmEgMQpYcWIgcXUgMQpLd3cgd2EgMQpRaHggdGggMQpPeXggbnkgMQpkdkIgZGUgMQpzVmggdGggMQpIY24gY2ggMQpzYlUgc3QgMQpmRncgd2EgMQprZlQga2EgMQpydlcgZXIgMQpZeHcgd2EgMQpuRmsgYW4gMQpMcWQgcXUgMQpob1EgdGggMQpOZmogaWogMQpnckggbmcgMQpjSmsgY2ggMQpQbnYgYW4gMQpOcXggcXUgMQp5ZkUgbnkgMQprbUkga2EgMQpHbXogc3ogMQpieFMgYmUgMQpxdVUgdW4gMQpxWWYgcXUgMQp6S3cgc3ogMQp3aEsgdGggMQpvZlkgb24gMQpwckggZXIgMQpqWHogc3ogMQp2UW0gdmEgMQppV3ggaW4gMQpiekMgc3ogMQpuWXggYW4gMQpxYUsgYW4gMQpHZ2IgbmcgMQp6U2Ygc3ogMQpyUXogZXIgMQpoa1cgdGggMQpWbmwgYW4gMQpHdGQgdGggMQpyTXcgZXIgMQp3dlggdmEgMQpqeVUgaWogMQpRcXAgcXUgMQpIbnEgYW4gMQpiRmIgYmUgMQpxa0ggcXUgMQpXY2sgY2ggMQpmTXcgd2EgMQp6Z0UgbmcgMQpvSnogb24gMQp4dkggdmEgMQpoUXkgdGggMQpjWWYgY2ggMQpjeEQgY2ggMQp5RHMgc3QgMQpxQmggdGggMQpjSnggY2ggMQpkUGogZGUgMQp3V2QgZGUgMQpySG4gYW4gMQppeU0gaW4gMQp5eEQgbnkgMQprUGMgY2ggMQpjWHYgY2ggMQpObWcgbmcgMQp2a04ga2EgMQpsRmogbGUgMQp5bVUgbWUgMQpwWnYgdmEgMQpnWnQgdGggMQpKcXkgcXUgMQpxQXogcXUgMQpCY3kgY2ggMQpwcWogcXUgMQpjcUUgY2ggMQpSd3YgdmEgMQpjck0gY2ggMQpBeHogc3ogMQpaanAgaWogMQp5eEYgbnkgMQp2WmggdGggMQpzUGIgc3QgMQp2Q3Mgc3QgMQpmUXEgcXUgMQpxWXEgcXUgMQpoQnAgdGggMQpKYmsga2EgMQpncUsgcXUgMQprcnEgcXUgMQpDZnogc3ogMQptYkogbWUgMQpmUnEgcXUgMQpJd3YgdmEgMQp1Rm4gYW4gMQpjWXogY2ggMQpxRGIgcXUgMQp4SGQgZGUgMQpxbUkgcXUgMQp5Y0UgY2ggMQpNaGYgdGggMQppdUUgcXUgMQpnWGYgbmcgMQpsUHkgbGUgMQpiUHYgdmEgMQpqWGggdGggMQpnT3ggbmcgMQpObXYgdmEgMQp4RGcgbmcgMQpDd2QgZGUgMQpsalAgbGUgMQp3cVYgcXUgMQpuckUgYW4gMQpLbXcgbWUgMQpnSnQgdGggMQp0Z0IgdGggMQp4elIgc3ogMQp2SnIgZXIgMQphVWkgYW4gMQp5blkgYW4gMQpiWnYgdmEgMQpmRnEgcXUgMQpTeGcgbmcgMQpxQWMgY2ggMQppWnYgaW4gMQpqWHUgcXUgMQpncFIgbmcgMQp3VmwgbGUgMQpkTmogZGUgMQpmQncgd2EgMQpNankgaWogMQpralogaWogMQp0THMgdGggMQppWWogaW4gMQp3Yk8gd2EgMQpxWGIgcXUgMQp1SnEgcXUgMQpxS3QgdGggMQp2ak8gaWogMQp3dUQgcXUgMQpibFEgbGUgMQp5ZkIgbnkgMQpRc2sgc3QgMQpVd20gbWUgMQpacWcgcXUgMQpubVkgYW4gMQpwWHcgcHIgMQp5VmogaWogMQpnSXcgbmcgMQpIeGsga2EgMQpQZ3kgbmcgMQpsUXYgbGUgMQpibksgYW4gMQp4dFogdGggMQpRY2UgY2ggMQpOanEgcXUgMQptdnEgcXUgMQpNd3ogc3ogMQpHdG4gdGggMQpmSmggdGggMQp2Snogc3ogMQpnRGsgbmcgMQpkTHcgZGUgMQpvZVUgZXIgMQpjdlkgY2ggMQpHYmIgYmUgMQpUcWQgcXUgMQphVHAgYW4gMQpZd2cgbmcgMQpqZFQgZGUgMQpXa20ga2EgMQpweEEgcHIgMQp2RGwgbGUgMQpzZkQgc3QgMQpycVYgcXUgMQpjSGIgY2ggMQppVmMgY2ggMQpNZmggdGggMQpzVm0gc3QgMQpuelIgYW4gMQpRdnMgc3QgMQprWmcgbmcgMQpXbncgYW4gMQpxWmIgcXUgMQpHdnEgcXUgMQp2UGsga2EgMQpTeHEgcXUgMQp2TmcgbmcgMQpxckggcXUgMQpmTGMgY2ggMQp3VnMgc3QgMQpxRWggdGggMQp1cUMgcXUgMQp0WnggdGggMQp5aEkgdGggMQp3TmggdGggMQpyRmogZXIgMQp4UHEgcXUgMQpwcVcgcXUgMQpQamMgY2ggMQpqWWogaWogMQpwRnYgdmEgMQp2THIgZXIgMQpscXEgcXUgMQp4SmcgbmcgMQpsVnogbGUgMQpjWmMgY2ggMQpoY0YgdGggMQp1aEogdGggMQpjTGogY2ggMQpxeVcgcXUgMQp6aFQgdGggMQptdEsgdGggMQpwUmIgcHIgMQpiQ3ggYmUgMQpuSmYgYW4gMQpqd0YgaWogMQpQZGogZGUgMQpqeEUgaWogMQpzbFogbGUgMQpMeG4gYW4gMQp6bkwgYW4gMQptelYgc3ogMQpsR3EgbGUgMQpRYncgd2EgMQpqYlkgaWogMQp6U20gc3ogMQpRcXggcXUgMQp5cFIgcHIgMQpnQ2MgY2ggMQpZdnggdmEgMQppaEkgdGggMQpaZnggZm8gMQpuakkgbmQgMQpZcHQgdGggMQpseFQgbGUgMQpmVnYgdmEgMQpKem0gc3ogMQpqeEEgaWogMQpnRGwgbmcgMQpFYXEgYW4gMQpRY24gYW4gMQp6R2Igc3ogMQpqTGggdGggMQpxa1ggcXUgMQp3Yksgd2EgMQpuTnggYW4gMQpzcVcgcXUgMQp3Unggd2EgMQp4clUgZXIgMQpmblEgYW4gMQprekIgc3ogMQpSY24gY2ggMQpxYkwgcXUgMQpzckQgZXIgMQpWeHUgcXUgMQpxdkYgcXUgMQp3SnIgZXIgMQpZeGcgbmcgMQpxaVkgcXUgMQpmTWMgY2ggMQpoYlkgdGggMQpoZ0ggdGggMQpkbVMgZGUgMQpqVG4gYW4gMQpaam0gaWogMQpOamwgbGUgMQpkcVYgcXUgMQpZamggdGggMQpyS3cgZXIgMQpjeFUgY2ggMQpDa2ogaWogMQp6Zkogc3ogMQp5dEYgdGggMQp4clAgZXIgMQpxRWogcXUgMQpyeE8gZXIgMQpyWm4gYW4gMQpiWnEgcXUgMQpjWHEgY2ggMQp3dkQgdmEgMQpoY1ggdGggMQp6a08gc3ogMQpoTnggdGggMQp3RmcgbmcgMQprWHUgcXUgMQpWa24gYW4gMQpHanogc3ogMQpRY2QgY2ggMQp5dkYgdmEgMQp4RnggeGUgMQpkU2ogZGUgMQp4UGIgYmUgMQpvRnAgb24gMQpxQWsgcXUgMQpycVUgcXUgMQpwR3YgdmEgMQpoekMgdGggMQpxSWsgcXUgMQpMaGwgdGggMQpGd2Igd2EgMQpwZ0UgbmcgMQpBd3ogc3ogMQpmQmsga2EgMQp4S2QgZGUgMQpQZncgd2EgMQp1cUsgcXUgMQpwSmMgY2ggMQpiVGMgY2ggMQp0V2cgdGggMQpnZE4gbmcgMQpqck4gZXIgMQprbFMgbGUgMQpxRWkgcXUgMQpzRm4gYW4gMQp0cVIgdGggMQpGbm0gYW4gMQpoWHYgdGggMQpmeE4gZm8gMQpidkwgdmEgMQpvR2Ygb24gMQpoWm0gdGggMQp5ZkggbnkgMQpkY0UgY2ggMQpwZ1cgbmcgMQp3ckIgZXIgMQprV20ga2EgMQpTaHggdGggMQp0d1AgdGggMQpRdmQgZGUgMQpRZ3UgcXUgMQpwSnQgdGggMQp6TnYgc3ogMQpIcGggdGggMQprbEYgbGUgMQp2cXogcXUgMQpzZ0cgbmcgMQprZFogZGUgMQplalggZXIgMQpQeHUgcXUgMQpwdlQgdmEgMQpLcXggcXUgMQpRbWIgbWUgMQp4Rmsga2EgMQp3UWIgd2EgMQpQZ3ggbmcgMQp5cEwgcHIgMQpid0Ugd2EgMQp4SHQgdGggMQprVnogc3ogMQpqbUYgaWogMQpJeHEgcXUgMQpxeVAgcXUgMQpyVnYgZXIgMQpZdHcgdGggMQpxcFogcXUgMQp0cFogdGggMQp6alggc3ogMQpLaGcgdGggMQpxZlYgcXUgMQpKenggc3ogMQprVGogaWogMQpCenEgcXUgMQpualIgYW4gMQpjZ1cgY2ggMQpjbUkgY2ggMQprQ2Iga2EgMQpwWXAgcHIgMQp2a1oga2EgMQp3dmsga2EgMQpWZnEgcXUgMQpubFogYW4gMQpxTmogcXUgMQpyQ3EgcXUgMQprYlYga2EgMQpEcWogcXUgMQpickQgZXIgMQpsYkcgbGUgMQp4aEYgdGggMQpreFoga2EgMQpJdXEgcXUgMQp5RnggbnkgMQpxVmwgcXUgMQpsY0cgY2ggMQp2V3IgZXIgMQphQnEgYW4gMQp5Smsga2EgMQpjekwgY2ggMQpqSXUgcXUgMQp2VWwgbGUgMQpwWnEgcXUgMQp2dFcgdGggMQpReHcgd2EgMQpkWXYgZGUgMQppcUggcXUgMQpYd3Mgc3QgMQpmRGogaWogMQp4Vnogc3ogMQpkS3EgcXUgMQp2ZlEgdmEgMQpodkQgdGggMQp3ZFkgZGUgMQpIenogc3ogMQpjWXMgY2ggMQpGdGogdGggMQpkcFUgZGUgMQpMbGQgbGUgMQpHcXcgcXUgMQprZFIgZGUgMQp2WGcgbmcgMQpxc1kgcXUgMQpqTmYgaWogMQpRamogaWogMQpwVmwgbGUgMQpKbXggbWUgMQpwRGogaWogMQppQmMgY2ggMQprTGogaWogMQp4bkcgYW4gMQp2VGwgbGUgMQpOZGcgbmcgMQpwcVUgcXUgMQpVYXcgYW4gMQpmek4gc3ogMQpnTnEgcXUgMQprak0gaWogMQpsbksgYW4gMQp6eGIgc3ogMQprY1MgY2ggMQpuak0gYW4gMQpHZHcgZGUgMQpsblogYW4gMQpZZ2ogbmcgMQpoS2QgdGggMQpncFQgbmcgMQp5cVAgcXUgMQppalggaW4gMQpqR2YgaWogMQpieEkgYmUgMQp2WHggdmEgMQpWcncgZXIgMQpDd3ggd2EgMQpuQmggdGggMQpxdnkgcXUgMQpzeEIgc3QgMQptVmsga2EgMQpDenggc3ogMQpmeVYgbnkgMQpjWHcgY2ggMQpRbmYgYW4gMQpZcWQgcXUgMQpscUggcXUgMQpkYlkgZGUgMQpTcWIgcXUgMQpLcXcgcXUgMQp6cEogc3ogMQpjYk0gY2ggMQp6RmcgbmcgMQpzS2Igc3QgMQpxcksgcXUgMQp6SmMgY2ggMQpuUm4gYW4gMQpmcU4gcXUgMQpoZkEgdGggMQpxb0cgcXUgMQpPd3ogc3ogMQpubEcgYW4gMQp3SXggd2EgMQpxclAgcXUgMQpOd2cgbmcgMQpxYVcgYW4gMQpoY1QgdGggMQp3a0Iga2EgMQpOZHQgdGggMQpLenEgcXUgMQpneEIgbmcgMQpCanogc3ogMQp2VGYgdmEgMQpqRnEgcXUgMQpxTWUgcXUgMQp1ZlEgcXUgMQpucEcgYW4gMQp1WmsgcXUgMQpxVHcgcXUgMQpHbHcgbGUgMQpLcXEgcXUgMQpDeHIgZXIgMQpqWnMgc3QgMQpTcXYgcXUgMQp5UG0gbWUgMQplUWogZXIgMQphSWggdGggMQpnRHEgcXUgMQpsSXAgbGUgMQpqTmogaWogMQpxT2QgcXUgMQp2a00ga2EgMQp2RnkgdmEgMQpjZlYgY2ggMQpLamggdGggMQpna1AgbmcgMQpySmMgY2ggMQp1UHEgcXUgMQpvelEgb24gMQpEbGsgbGUgMQp2WGggdGggMQprdFkgdGggMQp2V3kgdmEgMQpnUXYgbmcgMQpZd3cgd2EgMQpUcHogc3ogMQpRaGMgdGggMQp4dVQgcXUgMQpuYlMgYW4gMQp6UWcgbmcgMQp2Z1ogbmcgMQpwVW8gb24gMQp1V2IgcXUgMQptTWYgbWUgMQpaY2QgY2ggMQppQnAgaW4gMQpmd3AgcHIgMQp6WWYgc3ogMQp3Q3AgcHIgMQpDcXkgcXUgMQpjakYgY2ggMQpHZmggdGggMQptY1cgY2ggMQpjcVYgY2ggMQp1SmQgcXUgMQppVWogaW4gMQp2a1Iga2EgMQp3Z0kgbmcgMQp2VWcgbmcgMQpXZG4gZGUgMQpzakYgc3QgMQp0UHYgdGggMQp4Um4gYW4gMQprbFYgbGUgMQpzYk0gc3QgMQptZlQgbWUgMQpkYlYgZGUgMQpGbW4gYW4gMQpnZlUgbmcgMQpjYkIgY2ggMQpZeHogc3ogMQpLeGsga2EgMQpEd3EgcXUgMQp3Z1ggbmcgMQpzUHYgc3QgMQp2SGQgZGUgMQpuYkggYW4gMQpjRm4gYW4gMQpxcVggcXUgMQpqRmUgZXIgMQpxRWIgcXUgMQpkRmggdGggMQp1RW8gcXUgMQpsY0kgY2ggMQpiTW0gbWUgMQp6Wncgc3ogMQpoak8gdGggMQpoS3ggdGggMQpqZ0MgbmcgMQpjbkwgYW4gMQpGZGcgbmcgMQpiR2YgYmUgMQpTanogc3ogMQpiTWogaWogMQp2WHcgdmEgMQpHZmYgZm8gMQpDd3cgd2EgMQpqc1Egc3QgMQpaZ3YgbmcgMQpsUGYgbGUgMQpubVEgYW4gMQpWZHEgcXUgMQpsY1ggY2ggMQpnalQgbmcgMQptd0UgbWUgMQpxTG0gcXUgMQpjSHEgY2ggMQpYdG4gdGggMQpOdHEgdGggMQpnV2sgbmcgMQpQcWQgcXUgMQpxcFAgcXUgMQpzUmYgc3QgMQpxcEwgcXUgMQpjbkQgYW4gMQpxcEcgcXUgMQpkelMgc3ogMQp0WmIgdGggMQp5Z00gbmcgMQpieEMgYmUgMQpkZlUgZGUgMQpibUIgbWUgMQpsQnogbGUgMQpnSnggbmcgMQpZa3Yga2EgMQpaZGsgZGUgMQp3blEgYW4gMQp0WmogdGggMQpaem0gc3ogMQpWZmggdGggMQpNd2MgY2ggMQpyVW8gb24gMQpxd3AgcXUgMQp0Y0kgdGggMQp0ZkQgdGggMQp1b1ogcXUgMQpmQ3cgd2EgMQppUXEgcXUgMQpxQmcgcXUgMQpzVmIgc3QgMQpwalUgaWogMQpzY1EgY2ggMQpwcVEgcXUgMQpzdlogc3QgMQpacGogaWogMQpwaVYgaW4gMQprYlAga2EgMQp3cU0gcXUgMQpyVmIgZXIgMQpxWnIgcXUgMQpoeE8gdGggMQp3VG4gYW4gMQpKemYgc3ogMQpRamIgaWogMQp1WXYgcXUgMQpwd0sgcHIgMQpodkggdGggMQpEcWUgcXUgMQpwZkkgcHIgMQptaFYgdGggMQpqZ0UgbmcgMQpyY1EgY2ggMQprbVQga2EgMQpXemogc3ogMQp4TnMgc3QgMQpQYmogaWogMQp6dkIgc3ogMQp4aEogdGggMQpzdnEgcXUgMQpOdm4gYW4gMQpzd1ogc3QgMQpqZ0YgbmcgMQptZkwgbWUgMQp6a0wgc3ogMQpqVnAgaWogMQpEa2ogaWogMQp4dVkgcXUgMQpoSHEgdGggMQpjU2YgY2ggMQpKemQgc3ogMQpscVUgcXUgMQpxTWQgcXUgMQpRZ2ogbmcgMQpmeGsga2EgMQp0UnQgdGggMQp6Rmsgc3ogMQpxRW8gcXUgMQp2b1kgb24gMQpBd2ogaWogMQpUeGogaWogMQpjSWcgY2ggMQp4VXUgcXUgMQpzUnIgZXIgMQpKeG4gYW4gMQppUGYgaW4gMQplalkgZXIgMQpYdHMgdGggMQpwZlQgcHIgMQpQcWEgYW4gMQp6c1Ygc3QgMQp5cEMgcHIgMQp3TXMgc3QgMQpxRWMgY2ggMQp2eFkgdmEgMQpmVWcgbmcgMQpEZmYgZm8gMQpncVEgcXUgMQp6TXYgc3ogMQp2SmkgaW4gMQpmUHYgdmEgMQpkTHogc3ogMQpjZE0gY2ggMQpnTnggbmcgMQphR3YgYW4gMQp2dkQgdmEgMQpkSmggdGggMQpyeFkgZXIgMQpyV2ogZXIgMQpQdnggdmEgMQpyaEQgdGggMQp6UmQgc3ogMQpLZ3YgbmcgMQpYdnkgdmEgMQprWmogaWogMQprcEsga2EgMQpQZm4gYW4gMQp3VWUgZXIgMQp3V3ggd2EgMQpqUHcgaWogMQpnTHEgcXUgMQppSnEgcXUgMQpnUHggbmcgMQpqSGQgZGUgMQp2SmIgdmEgMQp4aEIgdGggMQp4UXYgdmEgMQpFb2EgYW4gMQpwak8gaWogMQp5RmogaWogMQpzWG8gb24gMQp3Ylkgd2EgMQpjak8gY2ggMQptbFogbGUgMQpiTnYgdmEgMQpralAgaWogMQp5WG4gYW4gMQpxVmogcXUgMQpmTnYgdmEgMQpnalcgbmcgMQpuWGogYW4gMQpkcUogcXUgMQpIbmggdGggMQpReWsga2EgMQprdkIga2EgMQpxeUIgcXUgMQptRHQgdGggMQp6Z1AgbmcgMQpaemsgc3ogMQpmTWsga2EgMQp4elkgc3ogMQpxYlQgcXUgMQp4T3QgdGggMQp4c0Egc3QgMQpnTGogbmcgMQp6eEggc3ogMQpjTG0gY2ggMQpEbmsgYW4gMQp6SXUgcXUgMQprcEoga2EgMQp4cksgZXIgMQplSWIgZXIgMQpKYnAgcHIgMQpCcWcgcXUgMQp0WGcgdGggMQpaamsgaWogMQpkUmQgZGUgMQp0alogdGggMQpoUWwgdGggMQppeVcgaW4gMQpKd2QgZGUgMQpxWnQgdGggMQpjSnAgY2ggMQpqQmcgbmcgMQp6ckcgZXIgMQpoV2YgdGggMQpaZHMgc3QgMQpxc1ogcXUgMQpjUXggY2ggMQpjY04gY2ggMQp5d00gd2EgMQpnYlggbmcgMQp0ZlQgdGggMQp2d3QgdGggMQpRYnAgcHIgMQp5ZVkgZXIgMQphVWIgYW4gMQpxSHcgcXUgMQpGaHEgdGggMQpGbmcgYW4gMQpsdkkgbGUgMQpqQ2YgaWogMQpocUggdGggMQp0VHEgdGggMQpzZkkgc3QgMQp2c00gc3QgMQpsRHAgbGUgMQp3SmIgd2EgMQpiaFggdGggMQpyUnEgcXUgMQpxdFMgdGggMQpad3AgcHIgMQpKYmggdGggMQpoSGIgdGggMQpwRHkgcHIgMQpzakQgc3QgMQpPeXAgcHIgMQpxd0QgcXUgMQpqYkQgaWogMQp2cEcgdmEgMQpXamIgaWogMQp2cEIgdmEgMQphWHEgYW4gMQptV3ogc3ogMQpxSGkgcXUgMQpmeU4gbnkgMQptYlEgbWUgMQp5d0Mgd2EgMQpvVmcgbmcgMQp4bVogbWUgMQpzbE8gbGUgMQpmWG4gYW4gMQprWXMgc3QgMQpwVnUgcXUgMQpia1Uga2EgMQpCcnEgcXUgMQpxQ3EgcXUgMQpYY3ggY2ggMQp6TXQgdGggMQpjUncgY2ggMQpnelEgbmcgMQpRYmcgbmcgMQpqdVUgcXUgMQp4U3ogc3ogMQpWZ3ogbmcgMQpvTXcgb24gMQpmcEUgcHIgMQp4alggaWogMQpxQ2cgcXUgMQp6d00gc3ogMQp1UWwgcXUgMQpxUGsgcXUgMQpwakQgaWogMQpRem0gc3ogMQpzSXAgc3QgMQp1b0cgcXUgMQpyVmwgZXIgMQpjYksgY2ggMQpoWG0gdGggMQpLc2Ygc3QgMQprYkYga2EgMQp3Qm0gbWUgMQppWXQgdGggMQpzZ0ggbmcgMQpHenYgc3ogMQp5dkUgdmEgMQp4S3EgcXUgMQpzV2Ygc3QgMQp6QmMgY2ggMQp5a0gga2EgMQp2akggaWogMQp3aEkgdGggMQp2UGogaWogMQpaaHQgdGggMQppSnggaW4gMQpjWnQgdGggMQpkcVUgcXUgMQpoTWQgdGggMQpjVWogY2ggMQp2TWcgbmcgMQpwY0ogY2ggMQpCY20gY2ggMQpqWGkgaW4gMQp4b0kgb24gMQpaa3EgcXUgMQpYenIgZXIgMQp5ek0gc3ogMQpxalggcXUgMQptTnEgcXUgMQpocFggdGggMQpmQnEgcXUgMQp0WGQgdGggMQpYa2kgaW4gMQpIc3EgcXUgMQpicVUgcXUgMQpzZ0YgbmcgMQpkUGMgY2ggMQpKeGkgaW4gMQpVZ3AgbmcgMQpSeGkgaW4gMQpLd20gbWUgMQp6a0Qgc3ogMQpScWwgcXUgMQpwSmIgcHIgMQpmY1YgY2ggMQppVmQgaW4gMQpiQnAgYmUgMQpPancgaWogMQp2WmwgbGUgMQpJeWogaWogMQpma1Uga2EgMQpLY3EgY2ggMQpkQnEgcXUgMQpNcXEgcXUgMQppTWcgbmcgMQpXd3Mgc3QgMQp0cVggdGggMQp4aEQgdGggMQpyTmwgZXIgMQpwV2QgZGUgMQpqclYgZXIgMQpCbWogaWogMQpIbXEgcXUgMQp2bEggbGUgMQpNeGIgYmUgMQp5eVMgbnkgMQpxdlcgcXUgMQpmdlggdmEgMQpWZmUgZXIgMQpDZHcgZGUgMQpLZ2UgbmcgMQpR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2Nja2Nzc3sDg4OLg5OTm4Ojo6ujs7O7g8PDy8PT09vD4+Pr4/Pz+MzFfVGVzc0Z1bmN0aW9uUmVzdWx0Q2FsbGJhY2tfMF8ySUxiMEViUE45dGVzc2VyYWN0NVRGaWxlRVBOUzBfOEZvbnRJbmZvRUUAMTlUZXNzUmVzdWx0Q2FsbGJhY2sySWJQTjl0ZXNzZXJhY3Q1VEZpbGVFUE5TMF84Rm9udEluZm9FRQAzMV9UZXNzRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzJJTGIwRWJQTjl0ZXNzZXJhY3Q1VEZpbGVFUE5TMF83Rm9udFNldEVFADE5VGVzc1Jlc3VsdENhbGxiYWNrMkliUE45dGVzc2VyYWN0NVRGaWxlRVBOUzBfN0ZvbnRTZXRFRQAzMV9UZXNzRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzJJTGIwRWJQOF9JT19GSUxFUktOOXRlc3NlcmFjdDhGb250SW5mb0VFADE5VGVzc1Jlc3VsdENhbGxiYWNrMkliUDhfSU9fRklMRVJLTjl0ZXNzZXJhY3Q4Rm9udEluZm9FRQAzMV9UZXNzRnVuY3Rpb25SZXN1bHRDYWxsYmFja18wXzJJTGIwRWJQOF9JT19GSUxFUktOOXRlc3NlcmFjdDdGb250U2V0RUUAMTlUZXNzUmVzdWx0Q2FsbGJhY2sySWJQOF9JT19GSUxFUktOOXRlc3NlcmFjdDdGb250U2V0RUUATjl0ZXNzZXJhY3QxNVNoYXBlQ2xhc3NpZmllckUATjl0ZXNzZXJhY3QxNFRlc3NDbGFzc2lmaWVyRQBOOXRlc3NlcmFjdDVDVXRpbEUAAAAAAAAAAQAAAAUAAAAEAAAAAAAAAAMAAAACAAAABAAAAAAAAAD/////AgAAAP////8AAAAAAwAAAP////8EAAAAAAAAAP//////////BAAAAAUAAAD/////AgAAAP////9OOXRlc3NlcmFjdDREYXdnRQBOOXRlc3NlcmFjdDEyU3F1aXNoZWREYXdnRQAyOV9UZXNzTWVtYmVyUmVzdWx0Q2FsbGJhY2tfMF8wSUxiMUVQTjl0ZXNzZXJhY3Q0RGF3Z0VOUzBfMTBEYXdnTG9hZGVyRUUAMThUZXNzUmVzdWx0Q2FsbGJhY2tJUE45dGVzc2VyYWN0NERhd2dF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P8EvE/j+/+8/3/og+v7/7z+Arir8/v/vP8pSMP7+/+8/1O8xAP//7z+kjS8C///vPzI0KQT//+8/ZOseBv//7z8QuxAI///vP/6q/gn//+8/5cLoC///7z9uCs8N///vPzOJsQ///+8/vEaQEf//7z+GSmsT///vP/ubQhX//+8/ekIWF///7z9RReYY///vP8Crshr//+8/+Xx7HP//7z8fwEAe///vP0Z8AiD//+8/d7jAIf//7z+pe3sj///vP8jMMiX//+8/srLmJv//7z81NJco///vPxRYRCr//+8/AyXuK///7z+qoZQt///vP6PUNy///+8/esTXMP//7z+vd3Qy///vP7X0DTT//+8/8kGkNf//7z+/ZTc3///vP2hmxzj//+8/L0pUOv//7z9FF947///vP9PTZD3//+8/9IXoPv//7z+1M2lA///vPxvj5kH//+8/G5phQ///7z+hXtlE///vP4s2Tkb//+8/rSfAR///7z/PNy9J///vP61sm0r//+8/+MsETP//7z9WW2tN///vP18gz07//+8/pSAwUP//7z+qYY5R///vP+jo6VL//+8/zbtCVP//7z+835hV///vPw1a7Fb//+8/DzA9WP//7z8FZ4tZ///vPygE11r//+8/pgwgXP//7z+khWZd///vPzt0ql7//+8/e93rX///7z9qxiph///vPwM0Z2L//+8/OCuhY///7z/xsNhk///vPwzKDWb//+8/XntAZ///7z+wyXBo///vP8W5nmn//+8/VVDKav//7z8MkvNr///vP5KDGm3//+8/gSk/bv//7z9riGFv///vP9ukgXD//+8/UoOfcf//7z9FKLty///vPySY1HP//+8/VdfrdP//7z816gB2///vPxjVE3f//+8/SZwkeP//7z8NRDN5///vP5zQP3r//+8/KkZKe///7z/hqFJ8///vP+L8WH3//+8/RkZdfv//7z8eiV9////vP3TJX4D//+8/SQtegf//7z+VUlqC///vP0qjVIP//+8/UAFNhP//7z+LcEOF///vP9L0N4b//+8/+JEqh///7z/JSxuI///vPwUmCon//+8/aiT3if//7z+rSuKK///vP3Wcy4v//+8/bB2zjP//7z8v0ZiN///vP1W7fI7//+8/bd9ej///7z8BQT+Q///vP5DjHZH//+8/l8r6kf//7z+I+dWS///vP9Fzr5P//+8/1zyHlP//7z/6V12V///vP5HIMZb//+8/75EEl///7z9et9WX///vPyQ8pZj//+8/fyNzmf//7z+lcD+a///vP8kmCpv//+8/FUnTm///7z+t2pqc///vP7HeYJ3//+8/N1glnv//7z9TSuie///vPw+4qZ///+8/caRpoP//7z95Eiih///vPyIF5aH//+8/Xn+gov//7z8bhFqj///vP0IWE6T//+8/tTjKpP//7z9R7n+l///vP+s5NKb//+8/Vh7npv//7z9enpin///vP8e8SKj//+8/U3z3qP//7z+836Sp///vP7jpUKr//+8/+Jz7qv//7z8l/KSr///vP+YJTaz//+8/28jzrP//7z+fO5mt///vP8dkPa7//+8/5Ebgrv//7z+C5IGv///vPydAIrD//+8/VVzBsP//7z+HO1+x///vPzfg+7H//+8/1UyXsv//7z/QgzGz///vP5GHyrP//+8/fFpitP//7z/v/vi0///vP0d3jrX//+8/2MUitv//7z/z7LW2///vP+buR7f//+8/+M3Yt///7z9tjGi4///vP4Qs97j//+8/d7CEuf//7z99GhG6///vP8dsnLr//+8/gqkmu///7z/X0q+7///vP+vqN7z//+8/3/O+vP//7z/O70S9///vP9Hgyb3//+8/+shNvv//7z9bqtC+///vP/6GUr///+8/6mDTv///7z8kOlPA///vP6sU0sD//+8/efJPwf//7z+H1czB///vP8i/SML//+8/K7PDwv//7z+esT3D///vPwa9tsP//+8/SdcuxP//7z9IAqbE///vP94/HMX//+8/5JGRxf//7z8x+gXG///vP5V6ecb//+8/3xTsxv//7z/Zyl3H///vP0qezsf//+8/9ZA+yP//7z+apK3I///vP/baG8n//+8/wDWJyf//7z+vtvXJ///vP3VfYcr//+8/wDHMyv//7z87LzbL///vP49Zn8v//+8/YLIHzP//7z9PO2/M///vP/v11cz//+8//+M7zf//7z/yBqHN///vP2lgBc7//+8/9fFozv//7z8lvcvO///vP4PDLc///+8/mAaPz///7z/ph+/P///vP/hIT9D//+8/REuu0P//7z9JkAzR///vP4AZatH//+8/X+jG0f//7z9Z/iLS///vP99cftL//+8/XgXZ0v//7z9B+TLT///vP/A5jNP//+8/0Mjk0///7z9CpzzU///vP6fWk9T//+8/W1jq1P//7z+4LUDV///vPxVYldX//+8/yNjp1f//7z8isT3W///vP3PikNb//+8/Bm7j1v//7z8oVTXX///vPx6Zhtf//+8/LzvX1///7z+cPCfY///vP6aedtj//+8/i2LF2P//7z+EiRPZ///vP8wUYdn//+8/mAWu2f//7z8bXfrZ///vP4gcRtr//+8/DkWR2v//7z/Y19va///vPxHWJdv//+8/4UBv2///7z9vGbjb///vP9xgANz//+8/SxhI3P//7z/aQI/c///vP6bb1dz//+8/yekb3f//7z9bbGHd///vP3Nkpt3//+8/JdPq3f//7z+BuS7e///vP5kYct7//+8/ePG03v//7z8rRffe///vP7sUOd///+8/L2F63///7z+NK7vf///vP9d0+9///+8/Dz474P//7z8ziHrg///vP0JUueD//+8/NaP34P//7z8HdjXh///vP6/NcuH//+8/Iquv4f//7z9TD+zh///vPzX7J+L//+8/tm9j4v//7z/FbZ7i///vP0322OL//+8/OQoT4///7z9xqkzj///vP9vXheP//+8/XZO+4///7z/Z3fbj///vPzC4LuT//+8/QiNm5P//7z/tH53k///vPwyv0+T//+8/edEJ5f//7z8NiD/l///vP6DTdOX//+8/BbWp5f//7z8SLd7l///vP5c8Eub//+8/ZORF5v//7z9KJXnm///vPxMArOb//+8/jXXe5v//7z+AhhDn///vP7UzQuf//+8/831z5///7z//ZaTn///vP5zs1Of//+8/jBIF6P//7z+R2DTo///vP2k/ZOj//+8/0keT6P//7z+I8sHo///vP0ZA8Oj//+8/xTEe6f//7z+8x0vp///vP+ICeen//+8/7OOl6f//7z+Oa9Lp///vP3ma/un//+8/X3Eq6v//7z/u8FXq///vP9UZger//+8/wOyr6v//7z9aatbq///vP0+TAOv//+8/RWgq6///7z/l6VPr///vP9UYfev//+8/uPWl6///7z80gc7r///vP+m79uv//+8/eaYe7P//7z+EQUbs///vP6iNbez//+8/gouU7P//7z+uO7vs///vP8ae4ez//+8/ZbUH7f//7z8jgC3t///vP5f/Uu3//+8/VzR47f//7z/3Hp3t///vPwzAwe3//+8/Jxjm7f//7z/bJwru///vP7jvLe7//+8/THBR7v//7z8mqnTu///vP9Kdl+7//+8/3Uu67v//7z/QtNzu///vPzfZ/u7//+8/mbkg7///7z9+VkLv///vP2ywY+///+8/6MeE7///7z94naXv///vP54xxu///+8/3YTm7///7z+1lwbw///vP6hqJvD//+8/Nf5F8P//7z/ZUmXw///vPxNphPD//+8/XkGj8P//7z823MHw///vPxY64PD//+8/dlv+8P//7z/QQBzx///vP5vqOfH//+8/TVlX8f//7z9djXTx///vPz6HkfH//+8/Zkeu8f//7z9Hzsrx///vP1Mc5/H//+8/+zED8v//7z+wDx/y///vP+G1OvL//+8//SRW8v//7z9yXXHy///vP6xfjPL//+8/Fyyn8v//7z8fw8Hy///vPy4l3PL//+8/rVL28v//7z8GTBDz///vP58RKvP//+8/4aND8///7z8yA13z///vP/YvdvP//+8/kyqP8///7z9t86fz///vP+eKwPP//+8/YvHY8///7z9BJ/Hz///vP+UsCfT//+8/rgIh9P//7z/6qDj0///vPykgUPT//+8/mWhn9P//7z+mgn70///vP61ulfT//+8/CS2s9P//7z8XvsL0///vPy8i2fT//+8/rFnv9P//7z/mZAX1///vPzVEG/X//+8/8vcw9f//7z9ygEb1///vPw3eW/X//+8/FhFx9f//7z/kGYb1///vP8v4mvX//+8/Ha6v9f//7z8uOsT1///vP1Cd2PX//+8/1Nfs9f//7z8L6gD2///vP0bUFPb//+8/1JYo9v//7z8FMjz2///vPyamT/b//+8/hvNi9v//7z9yGnb2///vPzYbifb//+8/Hvab9v//7z92q672///vP4k7wfb//+8/oabT9v//7z8H7eX2///vPwUP+Pb//+8/4wwK9///7z/p5hv3///vP1+dLff//+8/izA/9///7z+0oFD3///vPyDuYff//+8/Exlz9///7z/SIYT3///vP6IIlff//+8/xs2l9///7z+Bcbb3///vPxb0xvf//+8/x1XX9///7z/Vluf3///vP4G39/f//+8/DLgH+P//7z+2mBf4///vP75ZJ/j//+8/ZPs2+P//7z/mfUb4///vP4HhVfj//+8/dCZl+P//7z/8THT4///vP1RVg/j//+8/uj+S+P//7z9pDKH4///vP5y7r/j//+8/jk2++P//7z95wsz4///vP5ca2/j//+8/Ilbp+P//7z9Sdff4///vP194Bfn//+8/g18T+f//7z/0KiH5///vP+naLvn//+8/mm88+f//7z896Un5///vPwdIV/n//+8/L4xk+f//7z/otXH5///vP2jFfvn//+8/5LqL+f//7z+Olpj5///vP5tYpfn//+8/PQGy+f//7z+nkL75///vPwsHy/n//+8/m2TX+f//7z+JqeP5///vPwXW7/n//+8/Qer7+f//7z9s5gf6///vP7fKE/r//+8/UZcf+v//7z9pTCv6///vPy/qNvr//+8/0HBC+v//7z974E36///vP105Wfr//+8/pXtk+v//7z9+p2/6///vPxW9evr//+8/mLyF+v//7z8yppD6///vPw56m/r//+8/WDim+v//7z874bD6///vP+F0u/r//+8/dfPF+v//7z8hXdD6///vPw+y2vr//+8/Z/Lk+v//7z9THu/6///vP/s1+fr//+8/iDkD+///7z8iKQ37///vP/EEF/v//+8/G80g+///7z/JgSr7///vPyEjNPv//+8/SbE9+///7z9pLEf7///vP6SUUPv//+8/I+pZ+///7z8ILWP7///vP3tdbPv//+8/n3t1+///7z+Yh377///vP4yBh/v//+8/nmmQ+///7z/yP5n7///vP6oEovv//+8/67eq+///7z/WWbP7///vP4/qu/v//+8/N2rE+///7z/x2Mz7///vP9421fv//+8/IYTd+///7z/ZwOX7///vPyjt7fv//+8/Lwn2+///7z8OFf77///vP+YQBvz//+8/1fwN/P//7z/92BX8///vP3ylHfz//+8/cWIl/P//7z/8Dy38///vPzyuNPz//+8/TT08/P//7z9QvUP8///vP2IuS/z//+8/oZBS/P//7z8p5Fn8///vPxopYfz//+8/j19o/P//7z+lh2/8///vP3qhdvz//+8/Ka19/P//7z/OqoT8///vP4eai/z//+8/bXyS/P//7z+eUJn8///vPzQXoPz//+8/StCm/P//7z/8e638///vP2MatPz//+8/m6u6/P//7z++L8H8///vP+Wmx/z//+8/KxHO/P//7z+pbtT8///vP3i/2vz//+8/swPh/P//7z9yO+f8///vP85m7fz//+8/34Xz/P//7z++mPn8///vP4Sf//z//+8/SJoF/f//7z8jiQv9///vPyxsEf3//+8/ekMX/f//7z8lDx39///vP0XPIv3//+8/8IMo/f//7z89LS79///vP0LLM/3//+8/F145/f//7z/S5T79///vP4diRP3//+8/T9RJ/f//7z89O0/9///vP2mXVP3//+8/5+hZ/f//7z/ML1/9///vPy9sZP3//+8/I55p/f//7z+9xW79///vPxLjc/3//+8/N/Z4/f//7z9A/339///vP0H+gv3//+8/TvOH/f//7z973oz9///vP9u/kf3//+8/gpeW/f//7z+DZZv9///vP/IpoP3//+8/4uSk/f//7z9llqn9///vP44+rv3//+8/cd2y/f//7z8fc7f9///vP6r/u/3//+8/JoPA/f//7z+k/cT9///vPzVvyf3//+8/7dfN/f//7z/bN9L9///vPxOP1v3//+8/pd3a/f//7z+iI9/9///vPxxh4/3//+8/I5bn/f//7z/Jwuv9///vPx7n7/3//+8/MgP0/f//7z8XF/j9///vP9si/P3//+8/kCYA/v//7z9GIgT+///vPw0WCP7//+8/8wEM/v//7z8K5g/+///vP2DCE/7//+8/BpcX/v//7z8JZBv+///vP3spH/7//+8/aOci/v//7z/inSb+///vP/ZMKv7//+8/s/Qt/v//7z8olTH+///vP2MuNf7//+8/c8A4/v//7z9mSzz+///vP0rPP/7//+8/LkxD/v//7z8ewkb+///vPyoxSv7//+8/XplN/v//7z/J+lD+///vP3dVVP7//+8/d6lX/v//7z/W9lr+///vP6A9Xv7//+8/5H1h/v//7z+tt2T+///vPwnrZ/7//+8/BRhr/v//7z+uPm7+///vPw9fcf7//+8/NXl0/v//7z8ujXf+///vPwWbev7//+8/xqJ9/v//7z9+pID+///vPzigg/7//+8/AZaG/v//7z/khYn+///vP+1vjP7//+8/KFSP/v//7z+gMpL+///vP2ELlf7//+8/d96X/v//7z/rq5r+///vP8tznf7//+8/IDag/v//7z/28qL+///vP1iqpf7//+8/UFyo/v//7z/qCKv+///vPzCwrf7//+8/LVKw/v//7z/r7rL+///vP3WGtf7//+8/1Bi4/v//7z8Vprr+///vPz8uvf7//+8/X7G//v//7z99L8L+///vP6SoxP7//+8/3hzH/v//7z80jMn+///vP7D2y/7//+8/XVzO/v//7z9CvdD+///vP2sZ0/7//+8/4HDV/v//7z+qw9f+///vP9QR2v7//+8/Zlvc/v//7z9qoN7+///vP+fg4P7//+8/6Rzj/v//7z93VOX+///vP5qH5/7//+8/W7bp/v//7z/D4Ov+///vP9sG7v7//+8/qyjw/v//7z87RvL+///vP5Vf9P7//+8/wHT2/v//7z/Fhfj+///vP6uS+v7//+8/fZv8/v//7z9AoP7+///vP/6gAP///+8/v50C////7z+KlgT////vP2eLBv///+8/X3wI////7z94aQr////vP7xSDP///+8/MDgO////7z/dGRD////vP8v3Ef///+8/AdIT////7z+GqBX////vP2F7F////+8/mkoZ////7z85Fhv////vP0TeHP///+8/wqIe////7z+7YyD////vPzYhIv///+8/Odsj////7z/LkSX////vP/REJ////+8/uvQo////7z8joSr////vPzdKLP///+8//O8t////7z95ki/////vP7UxMf///+8/tc0y////7z+AZjT////vPx38Nf///+8/ko43////7z/lHTn////vPxyqOv///+8/PjM8////7z9RuT3////vP1s8P////+8/YrxA////7z9sOUL////vP36zQ////+8/oCpF////7z/Wnkb////vPyYQSP///+8/l35J////7z8u6kr////vP/BSTP///+8/5LhN////7z8OHE/////vP3V8UP///+8/HtpR////7z8PNVP////vP0yNVP///+8/2+JV////7z/CNVf////vPwaGWP///+8/rNNZ////7z+5Hlv////vPzNnXP///+8/Hq1d////7z+A8F7////vP14xYP///+8/vG9h////7z+gq2L////vPw/lY////+8/Dhxl////7z+hUGb////vP82CZ////+8/l7Jo////7z8E4Gn////vPxkLa////+8/2TNs////7z9LWm3////vP3J+bv///+8/U6Bv////7z/yv3D////vP1Tdcf///+8/fvhy////7z90EXT////vPzoodf///+8/1Dx2////7z9IT3f////vP5lfeP///+8/y215////7z/jeXr////vP+WDe////+8/1Yt8////7z+3kX3////vP4+Vfv///+8/Ypd/////7z8zl4D////vPwaVgf///+8/4JCC////7z/EioP////vP7aChP///+8/u3iF////7z/VbIb////vPwlfh////+8/Wk+I////7z/MPYn////vP2Qqiv///+8/JBWL////7z8R/ov////vPy3ljP///+8/fcqN////7z8Ero7////vP8aPj////+8/xm+Q////7z8ITpH////vP48qkv///+8/XwWT////7z973pP////vP+a1lP///+8/pYuV////7z+5X5b////vPycyl////+8/8QKY////7z8c0pj////vP6qfmf///+8/nmua////7z/9NZv////vP8j+m////+8/A8ac////7z+xi53////vP9VPnv///+8/chKf////7z+M05/////vPyWToP///+8/QFGh////7z/hDaL////vPwrJov///+8/voKj////7z8AO6T////vP9PxpP///+8/Oqel////7z83W6b////vP84Np////+8/Ab+n////7z/Tbqj////vP0Ydqf///+8/Xsqp////7z8edqr////vP4cgq////+8/nMmr////7z9hcaz////vP9gXrf///+8/A72t////7z/lYK7////vP4ADr////+8/16Sv////7z/tRLD////vP8XjsP///+8/X4Gx////7z/AHbL////vP+m4sv///+8/3VKz////7z+e67P////vPy+DtP///+8/khm1////7z/KrrX////vP9hCtv///+8/v9W2////7z+CZ7f////vPyL4t////+8/ooe4////7z8EFrn////vP0ujuf///+8/eC+6////7z+Ourr////vP45Eu////+8/fM27////7z9ZVbz////vPyfcvP///+8/6WG9////7z+g5r3////vP09qvv///+8/+Oy+////7z+cbr/////vPz7vv////+8/4G7A////7z+D7cD////vPyprwf///+8/1+fB////7z+MY8L////vP0rewv///+8/E1jD////7z/q0MP////vP9BIxP///+8/x7/E////7z/SNcX////vP/Gqxf///+8/Jh/G////7z91ksb////vP90Ex////+8/YnbH////7z8E58f////vP8ZWyP///+8/qsXI////7z+wM8n////vP9ygyf///+8/LQ3K////7z+neMr////vP0vjyv///+8/G03L////7z8Ytsv////vP0MezP///+8/n4XM////7z8t7Mz////vP+9Rzf///+8/5rbN////7z8UG87////vP3p+zv///+8/GuHO////7z/2Qs/////vPw+kz////+8/ZgTQ////7z/+Y9D////vP9fC0P///+8/8yDR////7z9UftH////vP/ra0f///+8/6DbS////7z8fktL////vP6Ds0v///+8/bUbT////7z+Hn9P////vP+/30////+8/qE/U////7z+xptT////vPw391P///+8/vVLV////7z/Dp9X////vPx/81f///+8/00/W////7z/gotb////vP0j11v///+8/C0fX////7z8smNf////vP6vo1////+8/ijjY////7z/Jh9j////vP2vW2P///+8/cCTZ////7z/acdn////vP6m+2f///+8/3wra////7z9+Vtr////vP4ah2v///+8/+Ova////7z/WNdv////vPyF/2////+8/2sfb////7z8CENz////vP5tX3P///+8/pJ7c////7z8g5dz////vPxAr3f///+8/dHDd////7z9Ptd3////vP6D53f///+8/aD3e////7z+qgN7////vP2bD3v///+8/nQXf////7z9QR9/////vP4CI3////+8/Lsnf////7z9cCeD////vPwlJ4P///+8/OIjg////7z/pxuD////vPx0F4f///+8/1ULh////7z8SgOH////vP9W84f///+8/H/nh////7z/wNOL////vP0tw4v///+8/MKvi////7z+f5eL////vP5kf4////+8/IVnj////7z81kuP////vP9jK4////+8/CgPk////7z/MOuT////vPx9y5P///+8/BKnk////7z973+T////vP4YV5f///+8/Jkvl////7z9agOX////vPyW15f///+8/hunl////7z9/Heb////vPxBR5v///+8/O4Tm////7z//tub////vP1/p5v///+8/Whvn////7z/yTOf////vPyd+5////+8/+a7n////7z9r3+f////vP3wP6P///+8/LT/o////7z+Abuj////vP3Sd6P///+8/Cszo////7z9E+uj////vPyEo6f///+8/o1Xp////7z/Lgun////vP5iv6f///+8/Ddzp////7z8oCOr////vP+wz6v///+8/WV/q////7z9viur////vPzC16v///+8/m9/q////7z+xCev////vP3Qz6////+8/5Fzr////7z8Bhuv////vP8yu6////+8/Rtfr////7z9v/+v////vP0gn7P///+8/0k7s////7z8Nduz////vP/qc7P///+8/mcPs////7z/s6ez////vP/IP7f///+8/rDXt////7z8cW+3////vP0CA7f///+8/G6Xt////7z+sye3////vP/Tt7f///+8/9BHu////7z+tNe7////vPx5Z7v///+8/SHzu////7z8tn+7////vP8zB7v///+8/JuTu////7z87Bu/////vPw0o7////+8/m0nv////7z/nau/////vP/CL7////+8/t6zv////7z89ze/////vP4Lt7////+8/hw3w////7z9MLfD////vP9JM8P///+8/GWzw////7z8ii/D////vP+2p8P///+8/e8jw////7z/L5vD////vP+AE8f///+8/uCLx////7z9VQPH////vP7dd8f///+8/3nrx////7z/Ll/H////vP3+08f///+8/+tDx////7z877fH////vP0UJ8v///+8/FiXy////7z+xQPL////vPxRc8v///+8/QHfy////7z83kvL////vP/is8v///+8/g8fy////7z/a4fL////vP/z78v///+8/6hXz////7z+kL/P////vPyxJ8////+8/gGLz////7z+ie/P////vP5GU8////+8/UK3z////7z/cxfP////vPzje8////+8/ZPbz////7z9fDvT////vPyom9P///+8/xj30////7z8zVfT////vP3Js9P///+8/goP0////7z9kmvT////vPxix9P///+8/n8f0////7z/63fT////vPyj09P///+8/KQr1////7z//H/X////vP6k19f///+8/KUv1////7z99YPX////vP6d19f///+8/por1////7z98n/X////vPym09f///+8/rMj1////7z8G3fX////vPzjx9f///+8/QQX2////7z8jGfb////vP90s9v///+8/b0D2////7z/bU/b////vPyBn9v///+8/P3r2////7z83jfb////vPwqg9v///+8/t7L2////7z8/xfb////vP6LX9v///+8/4en2////7z/7+/b////vP/EN9////+8/wx/3////7z9yMff////vP/5C9////+8/ZlT3////7z+sZff////vP9B29////+8/0Yf3////7z+wmPf////vP26p9////+8/C7r3////7z+Gyvf////vP+Ha9////+8/G+v3////7z80+/f////vPy4L+P///+8/CBv4////7z/CKvj////vP106+P///+8/2Un4////7z81Wfj////vP3Ro+P///+8/lHf4////7z+Whvj////vP3mV+P///+8/QKT4////7z/psvj////vP3TB+P///+8/48/4////7z813vj////vP2rs+P///+8/g/r4////7z+ACPn////vP2EW+f///+8/JyT5////7z/RMfn////vP18/+f///+8/00z5////7z8sWvn////vP2tn+f///+8/j3T5////7z+Ygfn////vP4iO+f///+8/Xpv5////7z8bqPn////vP760+f///+8/SMH5////7z+5zfn////vPxHa+f///+8/Ueb5////7z948vn////vP4f++f///+8/fgr6////7z9dFvr////vPyUi+v///+8/1S36////7z9tOfr////vP+9E+v///+8/WlD6////7z+uW/r////vP+tm+v///+8/EnL6////7z8jffr////vPx2I+v///+8/ApP6////7z/Rnfr////vP4uo+v///+8/L7P6////7z++vfr////vPzjI+v///+8/ntL6////7z/u3Pr////vPyrn+v///+8/UfH6////7z9l+/r////vP2QF+////+8/Tw/7////7z8nGfv////vP+si+////+8/myz7////7z84Nvv////vP8I/+////+8/OUn7////7z+dUvv////vP+9b+////+8/LmX7////7z9abvv////vP3R3+////+8/fID7////7z9yifv////vP1eS+////+8/KZv7////7z/qo/v////vP5qs+////+8/OLX7////7z/Fvfv////vP0HG+////+8/rM77////7z8G1/v////vP1Df+////+8/ief7////7z+y7/v////vP8r3+////+8/0//7////7z/LB/z////vP7MP/P///+8/jBf8////7z9VH/z////vPw8n/P///+8/uS78////7z9UNvz////vP+A9/P///+8/XUX8////7z/KTPz////vPylU/P///+8/elv8////7z+8Yvz////vP+9p/P///+8/FHH8////7z8rePz////vPzN//P///+8/Lob8////7z8bjfz////vP/mT/P///+8/y5r8////7z+Oofz////vP0So/P///+8/7a78////7z+Jtfz////vPxe8/P///+8/mML8////7z8Nyfz////vP3TP/P///+8/z9X8////7z8d3Pz////vP1/i/P///+8/lOj8////7z+87vz////vP9n0/P///+8/6fr8////7z/tAP3////vP+UG/f///+8/0gz9////7z+yEv3////vP4cY/f///+8/UB79////7z8OJP3////vP8Ap/f///+8/Zy/9////7z8CNf3////vP5M6/f///+8/GED9////7z+SRf3////vPwJL/f///+8/ZlD9////7z/AVf3////vPw9b/f///+8/VGD9////7z+OZf3////vP75q/f///+8/42/9////7z/+dP3////vPw96/f///+8/Fn/9////7z8ThP3////vPwaJ/f///+8/7439////7z/Okv3////vP6SX/f///+8/cJz9////7z8yof3////vP+ul/f///+8/mqr9////7z9Ar/3////vP92z/f///+8/cbj9////7z/8vP3////vP33B/f///+8/9sX9////7z9lyv3////vP8zO/f///+8/KtP9////7z9/1/3////vP8zb/f///+8/EOD9////7z9M5P3////vP3/o/f///+8/quz9////7z/M8P3////vP+f0/f///+8/+fj9////7z8D/f3////vPwUB/v///+8//wT+////7z/xCP7////vP9sM/v///+8/vRD+////7z+YFP7////vP2sY/v///+8/Nhz+////7z/6H/7////vP7cj/v///+8/ayf+////7z8ZK/7////vP78u/v///+8/XjL+////7z/2Nf7////vP4Y5/v///+8/ED3+////7z+SQP7////vPw1E/v///+8/gkf+////7z/vSv7////vP1ZO/v///+8/tlH+////7z8PVf7////vP2JY/v///+8/rlv+////7z/zXv7////vPzJi/v///+8/amX+////7z+caP7////vP8hr/v///+8/7W7+////7z8Mcv7////vPyV1/v///+8/OHj+////7z9Ee/7////vP0t+/v///+8/S4H+////7z9FhP7////vPzqH/v///+8/KIr+////7z8Rjf7////vP/SP/v///+8/0ZL+////7z+plf7////vP3uY/v///+8/R5v+////7z8Onv7////vP8+g/v///+8/i6P+////7z9Bpv7////vP/Ko/v///+8/nav+////7z9Drv7////vP+Sw/v///+8/gLP+////7z8Wtv7////vP6e4/v///+8/M7v+////7z+6vf7////vPzzA/v///+8/ucL+////7z8yxf7////vP6XH/v///+8/E8r+////7z98zP7////vP+HO/v///+8/QdH+////7z+c0/7////vP/PV/v///+8/RNj+////7z+R2v7////vP9rc/v///+8/Ht/+////7z9e4f7////vP5nj/v///+8/z+X+////7z8B6P7////vPy/q/v///+8/Wez+////7z9+7v7////vP5/w/v///+8/u/L+////7z/U9P7////vP+j2/v///+8/+Pj+////7z8E+/7////vPwz9/v///+8/EP/+////7z8QAf/////vPwwD/////+8/BAX/////7z/4Bv/////vP+gI/////+8/1Ar/////7z+9DP/////vP6EO/////+8/ghD/////7z9fEv/////vPzkU/////+8/Dhb/////7z/gF//////vP68Z/////+8/ehv/////7z9BHf/////vPwUf/////+8/xSD/////7z+CIv/////vPzsk/////+8/8SX/////7z+jJ//////vP1Ip/////+8//ir/////7z+mLP/////vP0su/////+8/7S//////7z+MMf/////vPycz/////+8/vzT/////7z9UNv/////vP+Y3/////+8/dDn/////7z8AO//////vP4g8/////+8/Dj7/////7z+QP//////vPw9B/////+8/jEL/////7z8FRP/////vP3xF/////+8/70b/////7z9gSP/////vP85J/////+8/OUv/////7z+hTP/////vPwZO/////+8/aU//////7z/JUP/////vPyZS/////+8/gFP/////7z/YVP/////vPy1W/////+8/f1f/////7z/PWP/////vPxxa/////+8/Zlv/////7z+uXP/////vP/Rd/////+8/Nl//////7z93YP/////vP7Vh/////+8/8GL/////7z8pZP/////vP19l/////+8/k2b/////7z/FZ//////vP/Ro/////+8/IWr/////7z9Ma//////vP3Rs/////+8/mm3/////7z++bv/////vP99v/////+8//nD/////7z8bcv/////vPzZz/////+8/TnT/////7z9ldf/////vP3l2/////+8/i3f/////7z+aeP/////vP6h5/////+8/tHr/////7z+9e//////vP8V8/////+8/yn3/////7z/Ofv/////vP89//////+8/z4D/////7z/Mgf/////vP8eC/////+8/wYP/////7z+4hP/////vP66F/////+8/oob/////7z+Th//////vP4OI/////+8/cYn/////7z9eiv/////vP0iL/////+8/MIz/////7z8Xjf/////vP/yN/////+8/347/////7z/Bj//////vP6CQ/////+8/fpH/////7z9akv/////vPzWT/////+8/DZT/////7z/klP/////vP7qV/////+8/jpb/////7z9gl//////vPzCY/////+8//5j/////7z/Mmf/////vP5ia/////+8/Ypv/////7z8qnP/////vP/Gc/////+8/tp3/////7z96nv/////vPz2f/////+8//Z//////7z+9oP/////vP3qh/////+8/N6L/////7z/yov/////vP6uj/////+8/Y6T/////7z8Zpf/////vP86l/////+8/gqb/////7z80p//////vP+Wn/////+8/laj/////7z9Dqf/////vP/Cp/////+8/m6r/////7z9Fq//////vP+6r/////+8/lqz/////7z88rf/////vP+Gt/////+8/hK7/////7z8nr//////vP8iv/////+8/aLD/////7z8Gsf/////vP6Ox/////+8/QLL/////7z/asv/////vP3Sz/////+8/DbT/////7z+ktP/////vPzq1/////+8/z7X/////7z9jtv/////vP/a2/////+8/h7f/////7z8XuP/////vP6e4/////+8/Nbn/////7z/Cuf/////vP066/////+8/2br/////7z9iu//////vP+u7/////+8/c7z/////7z/5vP/////vP3+9/////+8/A77/////7z+Hvv/////vPwm//////+8/i7//////7z8LwP/////vP4rA/////+8/CcH/////7z+Gwf/////vPwPC/////+8/fsL/////7z/5wv/////vP3LD/////+8/68P/////7z9jxP/////vP9rE/////+8/T8X/////7z/Exf/////vPzjG/////+8/q8b/////7z8ex//////vP4/H/////+8//8f/////7z9vyP/////vP97I/////+8/S8n/////7z+4yf/////vPyXK/////+8/kMr/////7z/6yv/////vP2TL/////+8/zcv/////7z81zP/////vP5zM/////+8/As3/////7z9ozf/////vP83N/////+8/Mc7/////7z+Uzv/////vP/bO/////+8/WM//////7z+5z//////vPxnQ/////+8/edD/////7z/X0P/////vPzXR/////+8/k9H/////7z/v0f/////vP0vS/////+8/ptL/////7z8A0//////vP1rT/////+8/s9P/////7z8L1P/////vP2PU/////+8/utT/////7z8Q1f/////vP2XV/////+8/utX/////7z8O1v/////vP2LW/////+8/tdb/////7z8H1//////vP1nX/////+8/qtf/////7z/61//////vP0rY/////+8/mdj/////7z/n2P/////vPzXZ/////+8/g9n/////7z/P2f/////vPxva/////+8/Z9r/////7z+y2v/////vP/za/////+8/Rtv/////7z+P2//////vP9jb/////+8/INz/////7z9n3P/////vP67c/////+8/9Nz/////7z863f/////vP3/d/////+8/xN3/////7z8I3v/////vP0ze/////+8/j97/////7z/S3v/////vPxTf/////+8/Vt//////7z+X3//////vP9ff/////+8/F+D/////7z9X4P/////vP5bg/////+8/1OD/////7z8T4f/////vP1Dh/////+8/jeH/////7z/K4f/////vPwbi/////+8/QuL/////7z994v/////vP7ji/////+8/8uL/////7z8s4//////vP2bj/////+8/n+P/////7z/X4//////vPw/k/////+8/R+T/////7z9+5P/////vP7Xk/////+8/6+T/////7z8h5f/////vP1fl/////+8/jOX/////7z/B5f/////vP/Xl/////+8/Keb/////7z9c5v/////vP4/m/////+8/wub/////7z/05v/////vPybn/////+8/WOf/////7z+J5//////vP7rn/////+8/6uf/////7z8a6P/////vP0no/////+8/eej/////7z+o6P/////vP9bo/////+8/BOn/////7z8y6f/////vP1/p/////+8/jen/////7z+56f/////vP+bp/////+8/Eur/////7z896v/////vP2nq/////+8/lOr/////7z++6v/////vP+nq/////+8/E+v/////7z886//////vP2br/////+8/j+v/////7z+46//////vP+Dr/////+8/COz/////7z8w7P/////vP1fs/////+8/f+z/////7z+l7P/////vP8zs/////+8/8uz/////7z8Y7f/////vPz7t/////+8/Y+3/////7z+I7f/////vP63t/////+8/0u3/////7z/27f/////vPxru/////+8/Pe7/////7z9h7v/////vP4Tu/////+8/p+7/////7z/J7v/////vP+zu/////+8/Du//////7z8v7//////vP1Hv/////+8/cu//////7z+T7//////vP7Tv/////+8/1O//////7z/07//////vPxTw/////+8/NPD/////7z9U8P/////vP3Pw/////+8/kvD/////7z+x8P/////vP8/w/////+8/7fD/////7z8L8f/////vPynx/////+8/R/H/////7z9k8f/////vP4Hx/////+8/nvH/////7z+78f/////vP9fx/////+8/8/H/////7z8P8v/////vPyvy/////+8/R/L/////7z9i8v/////vP33y/////+8/mPL/////7z+z8v/////vP83y/////+8/6PL/////7z8C8//////vPxzz/////+8/NfP/////7z9P8//////vP2jz/////+8/gfP/////7z+a8//////vP7Pz/////+8/y/P/////7z/j8//////vP/zz/////+8/FPT/////7z8r9P/////vP0P0/////+8/WvT/////7z9x9P/////vP4j0/////+8/n/T/////7z+29P/////vP8z0/////+8/4/T/////7z/59P/////vPw/1/////+8/JfX/////7z869f/////vP1D1/////+8/ZfX/////7z969f/////vP4/1/////+8/pPX/////7z+59f/////vP831/////+8/4fX/////7z/29f/////vPwr2/////+8/Hfb/////7z8x9v/////vP0X2/////+8/WPb/////7z9r9v/////vP372/////+8/kfb/////7z+k9v/////vP7f2/////+8/yfb/////7z/c9v/////vP+72/////+8/APf/////7z8S9//////vPyT3/////+8/Nff/////7z9H9//////vP1j3/////+8/aff/////7z979//////vP4v3/////+8/nPf/////7z+t9//////vP773/////+8/zvf/////7z/e9//////vP+/3/////+8///f/////7z8P+P/////vPx74/////+8/Lvj/////7z8++P/////vP034/////+8/Xfj/////7z9s+P/////vP3v4/////+8/ivj/////7z+Z+P/////vP6f4/////+8/tvj/////7z/F+P/////vP9P4/////+8/4fj/////7z/v+P/////vP/74/////+8/DPn/////7z8Z+f/////vPyf5/////+8/Nfn/////7z9C+f/////vP1D5/////+8/Xfn/////7z9q+f/////vP3f5/////+8/hPn/////7z+R+f/////vP575/////+8/q/n/////7z+3+f/////vP8T5/////+8/0Pn/////7z/d+f/////vP+n5/////+8/9fn/////7z8B+v/////vPw36/////+8/Gfr/////7z8l+v/////vPzD6/////+8/PPr/////7z9H+v/////vP1P6/////+8/Xvr/////7z9p+v/////vP3T6/////+8/gPr/////7z+K+v/////vP5X6/////+8/oPr/////7z+r+v/////vP7X6/////+8/wPr/////7z/K+v/////vP9X6/////+8/3/r/////7z/p+v/////vP/T6/////+8//vr/////7z8I+//////vPxH7/////+8/G/v/////7z8l+//////vPy/7/////+8/OPv/////7z9C+//////vP0v7/////+8/Vfv/////7z9e+//////vP2f7/////+8/cPv/////7z95+//////vP4L7/////+8/i/v/////7z+U+//////vP537/////+8/pvv/////7z+u+//////vP7f7/////+8/wPv/////7z/I+//////vP9D7/////+8/2fv/////7z/h+//////vP+n7/////+8/8fv/////7z/6+//////vPwL8/////+8/Cvz/////7z8R/P/////vPxn8/////+8/Ifz/////7z8p/P/////vPzD8/////+8/OPz/////7z9A/P/////vP0f8/////+8/Tvz/////7z9W/P/////vP138/////+8/ZPz/////7z9r/P/////vP3P8/////+8/evz/////7z+B/P/////vP4j8/////+8/j/z/////7z+V/P/////vP5z8/////+8/o/z/////7z+q/P/////vP7D8/////+8/t/z/////7z++/P/////vP8T8/////+8/yvz/////7z/R/P/////vP9f8/////+8/3fz/////7z/k/P/////vP+r8/////+8/8Pz/////7z/2/P/////vP/z8/////+8/Av3/////7z8I/f/////vPw79/////+8/FP3/////7z8a/f/////vPyD9/////+8/Jf3/////7z8r/f/////vPzH9/////+8/Nv3/////7z88/f/////vP0H9/////+8/R/3/////7z9M/f/////vP1L9/////+8/V/3/////7z9c/f/////vP2H9/////+8/Z/3/////7z9s/f/////vP3H9/////+8/dv3/////7z97/f/////vP4D9/////+8/hf3/////7z+K/f/////vP4/9/////+8/lP3/////7z+Z/f/////vP539/////+8/ov3/////7z+n/f/////vP6z9/////+8/sP3/////7z+1/f/////vP7n9/////+8/vv3/////7z/C/f/////vP8f9/////+8/y/3/////7z/Q/f/////vP9T9/////+8/2P3/////7z/d/f/////vP+H9/////+8/5f3/////7z/p/f/////vP+79/////+8/8v3/////7z/2/f/////vP/r9/////+8//v3/////7z8C/v/////vPwb+/////+8/Cv7/////7z8O/v/////vPxL+/////+8/Ff7/////7z8Z/v/////vPx3+/////+8/If7/////7z8l/v/////vPyj+/////+8/LP7/////7z8w/v/////vPzP+/////+8/N/7/////7z86/v/////vPz7+/////+8/Qf7/////7z9F/v/////vP0j+/////+8/TP7/////7z9P/v/////vP1L+/////+8/Vv7/////7z9Z/v/////vP1z+/////+8/YP7/////7z9j/v/////vP2b+/////+8/af7/////7z9s/v/////vP3D+/////+8/c/7/////7z92/v/////vP3n+/////+8/fP7/////7z9//v/////vP4L+/////+8/hf7/////7z+I/v/////vP4v+/////+8/jv7/////7z+R/v/////vP5P+/////+8/lv7/////7z+Z/v/////vP5z+/////+8/n/7/////7z+h/v/////vP6T+/////+8/p/7/////7z+q/v/////vP6z+/////+8/r/7/////7z+x/v/////vP7T+/////+8/t/7/////7z+5/v/////vP7z+/////+8/vv7/////7z/B/v/////vP8P+/////+8/xv7/////7z/I/v/////vP8v+/////+8/zf7/////7z/P/v/////vP9L+/////+8/1P7/////7z/W/v/////vP9n+/////+8/2/7/////7z/d/v/////vP+D+/////+8/4v7/////7z/k/v/////vP+b+/////+8/6P7/////7z/r/v/////vP+3+/////+8/7/7/////7z/x/v/////vP/P+/////+8/9f7/////7z/3/v/////vP/n+/////+8/+/7/////7z/9/v/////vP//+/////+8/Af//////7z8D///////vPwX//////+8/B///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PzW/ceb+/+8/1MCK5/7/7z//qaLo/v/vP8p7uen+/+8/UTfP6v7/7z+m3ePr/v/vP95v9+z+/+8/D+8J7v7/7z9JXBvv/v/vP5+4K/D+/+8/IQU78f7/7z/dQkny/v/vP+RyVvP+/+8/QJZi9P7/7z//rW31/v/vPyu7d/b+/+8/0L6A9/7/7z/1uYj4/v/vP6Ktj/n+/+8/4JqV+v7/7z+zgpr7/v/vPyBmnvz+/+8/LEah/f7/7z/aI6P+/v/vPyoApP/+/+8/INyjAP//7z+4uKIB///vP/KWoAL//+8/z3edA///7z9HXJkE///vP1pFlAX//+8/ADSOBv//7z81KYcH///vP/Ilfwj//+8/LSt2Cf//7z/fOWwK///vP/5SYQv//+8/fXdVDP//7z9RqEgN///vP2/mOg7//+8/xjIsD///7z9KjhwQ///vP+z5CxH//+8/mHb6Ef//7z9BBegS///vP8+m1BP//+8/M1zAFP//7z9YJqsV///vPykGlRb//+8/i/x9F///7z9uCmYY///vP7cwTRn//+8/TnAzGv//7z8Xyhgb///vP/k+/Rv//+8/2M/gHP//7z+XfcMd///vPxtJpR7//+8/RTOGH///7z/0PGYg///vPwhnRSH//+8/ZLIjIv//7z/iHwEj///vP2Kw3SP//+8/v2S5JP//7z/VPZQl///vP4E8bib//+8/mmFHJ///7z/6rR8o///vP3si9yj//+8/8r/NKf//7z83h6Mq///vPyB5eCv//+8/gZZMLP//7z8u4B8t///vP/tW8i3//+8/uvvDLv//7z8/z5Qv///vP1fSZDD//+8/1AU0Mf//7z+GagIy///vPzoB0DL//+8/vcqcM///7z/fx2g0///vP2f5MzX//+8/JWD+Nf//7z/h/Mc2///vP2XQkDf//+8/ettYOP//7z/mHiA5///vP3Sb5jn//+8/6VGsOv//7z8JQ3E7///vP5pvNTz//+8/Ydj4PP//7z8hfrs9///vP5xhfT7//+8/lYM+P///7z/M5P4////vPwOGvkD//+8/+Gd9Qf//7z9piztC///vPxfx+EL//+8/vpm1Q///7z8ZhnFE///vP+e2LEX//+8/4iznRf//7z/E6KBG///vP0XrWUf//+8/ITUSSP//7z8Rx8lI///vP8mhgEn//+8/AcY2Sv//7z9xNOxK///vP83toEv//+8/yfJUTP//7z8bRAhN///vP3Xiuk3//+8/ic5sTv//7z8MCR5P///vP6ySzk///+8/GWx+UP//7z8Fli1R///vPyAR3FH//+8/Ft6JUv//7z+X/TZT///vP05w41P//+8/6DaPVP//7z8RUjpV///vP3bC5FX//+8/v4iOVv//7z+WpTdX///vP6UZ4Ff//+8/kuWHWP//7z8KCi9Z///vP7GH1Vn//+8/LF97Wv//7z8hkSBb///vPzkexVv//+8/FgdpXP//7z9cTAxd///vP63url3//+8/re5QXv//7z//TPJe///vP0IKk1///+8/GiczYP//7z8kpNJg///vPwCCcWH//+8/UMEPYv//7z+tYq1i///vP7dmSmP//+8/Dc7mY///7z9KmYJk///vPwjJHWX//+8/5l24Zf//7z96WFJm///vP2K562b//+8/NYGEZ///7z+NsBxo///vPwFItGj//+8/KkhLaf//7z+eseFp///vP/OEd2r//+8/v8IMa///7z+aa6Fr///vPxWANWz//+8/xQDJbP//7z8+7ltt///vPxVJ7m3//+8/2BGAbv//7z8cSRFv///vP3HvoW///+8/aAUycP//7z+Ri8Fw///vP3yCUHH//+8/t+recf//7z/QxGxy///vP1cR+nL//+8/2dCGc///7z/gAxN0///vP/uqnnT//+8/tMYpdf//7z+WV7R1///vPy1ePnb//+8/BNvHdv//7z+izlB3///vP4852Xf//+8/VxxheP//7z9+d+h4///vP5BLb3n//+8/EZn1ef//7z+HYHt6///vP3eiAHv//+8/al+Fe///7z/glwl8///vP2JMjXz//+8/cH0Qff//7z+OK5N9///vPz9XFX7//+8/BwGXfv//7z9lKRh////vP9vQmH///+8/6fcYgP//7z8Rn5iA///vP9HGF4H//+8/q2+Wgf//7z8ZmhSC///vP5xGkoL//+8/snUPg///7z/WJ4yD///vP4hdCIT//+8/QReEhP//7z9/Vf+E///vP7sYeoX//+8/c2H0hf//7z8eMG6G///vPzaF54b//+8/OWFgh///7z+ZxNiH///vP9SvUIj//+8/XiPIiP//7z+xHz+J///vP0OltYn//+8/irQriv//7z/+TaGK///vPxNyFov//+8/PiGLi///7z/zW/+L///vP6kic4z//+8/0nXmjP//7z/hVVmN///vP0jDy43//+8/fL49jv//7z/vR6+O///vPxBgII///+8/UQeRj///7z8kPgGQ///vP/cEcZD//+8/PFzgkP//7z9hRE+R///vP9S9vZH//+8/B8krkv//7z9kZpmS///vP1uWBpP//+8/WFlzk///7z/Jr9+T///vPxuaS5T//+8/thi3lP//7z8LLCKV///vP4DUjJX//+8/gRL3lf//7z975mCW///vP9ZQypb//+8/+VEzl///7z9R6puX///vP0YaBJj//+8/PeJrmP//7z+hQtOY///vP9g7Opn//+8/Sc6gmf//7z9b+gaa///vP3LAbJr//+8/+CDSmv//7z9RHDeb///vP9+ym5v//+8/C+X/m///7z80s2Oc///vP8Idx5z//+8/FyUqnf//7z+XyYyd///vP6ML753//+8/nutQnv//7z/qabKe///vP+iGE5///+8/+UJ0n///7z9/ntSf///vP9uZNKD//+8/azWUoP//7z+OcfOg///vP6ROUqH//+8/Ds2wof//7z8o7Q6i///vP1CvbKL//+8/5hPKov//7z9FGyej///vP8vFg6P//+8/1xPgo///7z/BBTyk///vP+ebl6T//+8/pdbypP//7z9Xtk2l///vP1U7qKX//+8//WUCpv//7z+lNlym///vP6uttab//+8/ZcsOp///7z8vkGen///vP2H8v6f//+8/URAYqP//7z9czG+o///vP9Ywx6j//+8/Fj4eqf//7z909HSp///vP0hUy6n//+8/5l0hqv//7z+nEXeq///vP91vzKr//+8/4Xghq///7z8HLXar///vP6KMyqv//+8/CJgerP//7z+MT3Ks///vP4Kzxaz//+8/P8QYrf//7z8Vgmut///vP1Xtva3//+8/VAYQrv//7z9izWGu///vP9NCs67//+8/9WYEr///7z8dOlWv///vP5q8pa///+8/vu71r///7z/X0EWw///vPzVjlbD//+8/KqbksP//7z8CmjOx///vPw8/grH//+8/m5XQsf//7z/8nR6y///vP3hYbLL//+8/Y8W5sv//7z8F5Qaz///vP7C3U7P//+8/rj2gs///7z9Nd+yz///vP9dkOLT//+8/nAaEtP//7z/jXM+0///vP/lnGrX//+8/Kihltf//7z/Bna+1///vPwXJ+bX//+8/RqpDtv//7z/JQY22///vP9mP1rb//+8/wJQft///7z/HUGi3///vPzXEsLf//+8/Vu/4t///7z9t0kC4///vP8htiLj//+8/qMHPuP//7z9bzha5///vPyKUXbn//+8/SROkuf//7z8RTOq5///vP8Y+MLr//+8/q+t1uv//7z8GU7u6///vPxt1ALv//+8/MFJFu///7z+M6om7///vP3E+zrv//+8/JE4SvP//7z/rGVa8///vPwaimbz//+8/u+bcvP//7z9O6B+9///vPwGnYr3//+8/FiOlvf//7z/PXOe9///vP3FUKb7//+8/Ogprvv//7z9xfqy+///vP1Kx7b7//+8/I6Muv///7z8iVG+////vP4/Er7///+8/rPTvv///7z+55C/A///vP/iUb8D//+8/pQWvwP//7z8AN+7A///vP0spLcH//+8/wtxrwf//7z+lUarB///vPzKI6MH//+8/qIAmwv//7z9FO2TC///vP0a4ocL//+8/5/fewv//7z9q+hvD///vPwfAWMP//+8/Tjl0ZXNzZXJhY3Q1SW5wdXRFAE45dGVzc2VyYWN0NExTVE1FAE45dGVzc2VyYWN0N01heHBvb2xFAE45dGVzc2VyYWN0N05ldHdvcmtFAE45dGVzc2VyYWN0OFBhcmFsbGVsRQBOOXRlc3NlcmFjdDhQbHVtYmluZ0UAAAAAAAAFAAAACgAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAATjl0ZXNzZXJhY3Q4UmVjb25maWdFAE45dGVzc2VyYWN0OFJldmVyc2VkRQBOOXRlc3NlcmFjdDZTZXJpZXNFAE45dGVzc2VyYWN0MTVUcmFuc3Bvc2VkQXJyYXlFAAAAAwAAAE45dGVzc2VyYWN0MTFBbGlnbmVkQmxvYkUATjl0ZXNzZXJhY3Q4R3JpZEJhc2VFAE45dGVzc2VyYWN0N0ludEdyaWRFAE45dGVzc2VyYWN0OEJsb2JHcmlkRQBOOXRlc3NlcmFjdDZCQkdyaWRJOEJMT0JOQk9YMTRCTE9CTkJPWF9DTElTVDEzQkxPQk5CT1hfQ19JVEVFAE45dGVzc2VyYWN0MTVDQ05vblRleHREZXRlY3RFAE45dGVzc2VyYWN0MTJDb2x1bW5GaW5kZXJFAE45dGVzc2VyYWN0NkJCR3JpZElOU18xMkNvbFBhcnRpdGlvbkVOU18xOENvbFBhcnRpdGlvbl9DTElTVEVOU18xN0NvbFBhcnRpdGlvbl9DX0lURUVFAE45dGVzc2VyYWN0NkJCR3JpZElOU18xMkNvbFBhcnRpdGlvbkVOU18xOENvbFBhcnRpdGlvbl9DTElTVEVOU18xN0NvbFBhcnRpdGlvbl9DX0lURUVFAE45dGVzc2VyYWN0NkJCR3JpZElOU18xMkNvbFBhcnRpdGlvbkVOU18xOENvbFBhcnRpdGlvbl9DTElTVEVOU18xN0NvbFBhcnRpdGlvbl9DX0lURUVFAE5IU1JJVVZUAAQAAABOOXRlc3NlcmFjdDE2Q29sUGFydGl0aW9uR3JpZEUATjl0ZXNzZXJhY3QxOFNoaXJvUmVraGFTcGxpdHRlckUATjl0ZXNzZXJhY3QxOEVxdWF0aW9uRGV0ZWN0QmFzZUUATjl0ZXNzZXJhY3QxMVN0cm9rZVdpZHRoRQAyOV9UZXNzTWVtYmVyUmVzdWx0Q2FsbGJhY2tfMF8ySUxiMEViTjl0ZXNzZXJhY3QxMVN0cm9rZVdpZHRoRVBOUzBfMTJDb2xQYXJ0aXRpb25FUDRUQk9YRQAxOVRlc3NSZXN1bHRDYWxsYmFjazJJYlBOOXRlc3NlcmFjdDEyQ29sUGFydGl0aW9uRVA0VEJPWEUAMjlfVGVzc01lbWJlclJlc3VsdENhbGxiYWNrXzBfMklMYjBFYk45dGVzc2VyYWN0MTFTdHJva2VXaWR0aEVQS05TMF8xMkNvbFBhcnRpdGlvbkVTNF9FADE5VGVzc1Jlc3VsdENhbGxiYWNrMkliUEtOOXRlc3NlcmFjdDEyQ29sUGFydGl0aW9uRVMzX0UATjl0ZXNzZXJhY3Q3VGFiRmluZEUAMjlfVGVzc01lbWJlclJlc3VsdENhbGxiYWNrXzBfMUlMYjBFYk45dGVzc2VyYWN0N1RhYkZpbmRFaUUAMTlUZXNzUmVzdWx0Q2FsbGJhY2sxSWJpRQAAAAMAAAAEAAAAAwAAAAAAAAABAAAATjl0ZXNzZXJhY3Q2QkJHcmlkSU5TXzEwQ29sU2VnbWVudEVOU18xNkNvbFNlZ21lbnRfQ0xJU1RFTlNfMTVDb2xTZWdtZW50X0NfSVRFRUUATjl0ZXNzZXJhY3Q2QkJHcmlkSU5TXzExV29yZFdpdGhCb3hFTlNfMTdXb3JkV2l0aEJveF9DTElTVEVOU18xNldvcmRXaXRoQm94X0NfSVRFRUUAAAAAbxKDOgAAyEJOOXRlc3NlcmFjdDdXb3JkcmVjRQAyOV9UZXNzTWVtYmVyUmVzdWx0Q2FsbGJhY2tfMl8ySUxiMEViTjl0ZXNzZXJhY3QxMkxNUGFpblBvaW50c0VkUDhXRVJEX1JFU2lpRQAxOVRlc3NSZXN1bHRDYWxsYmFjazJJYmlpRQAAAKIAAAAiAAAAIgAAACcAAAAnAAAAtwAAAC0AAAAAAAAARgAAAGAJAABOOXRlc3NlcmFjdDExVGVzc0Jhc2VBUElFAE5TdDNfXzIxNGJhc2ljX2lmc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAE5TdDNfXzIxM2Jhc2ljX2ZpbGVidWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAMzRfQ29uc3RUZXNzTWVtYmVyUmVzdWx0Q2FsbGJhY2tfNl8wSUxiMEViTjl0ZXNzZXJhY3QxMlBhZ2VJdGVyYXRvckVOUzBfMTdQYWdlSXRlcmF0b3JMZXZlbEVpUGlTM19TM19TM19FADE4VGVzc1Jlc3VsdENhbGxiYWNrSWJFADM0X0NvbnN0VGVzc01lbWJlclJlc3VsdENhbGxiYWNrXzVfMElMYjBFYk45dGVzc2VyYWN0MTJQYWdlSXRlcmF0b3JFTlMwXzE3UGFnZUl0ZXJhdG9yTGV2ZWxFUGlTM19TM19TM19FAE45dGVzc2VyYWN0MThUZXNzUmVzdWx0UmVuZGVyZXJFAAAAAC9DSURJbml0IC9Qcm9jU2V0IGZpbmRyZXNvdXJjZSBiZWdpbgoxMiBkaWN0IGJlZ2luCmJlZ2luY21hcAovQ0lEU3lzdGVtSW5mbwo8PAogIC9SZWdpc3RyeSAoQWRvYmUpCiAgL09yZGVyaW5nIChVQ1MpCiAgL1N1cHBsZW1lbnQgMAo+PiBkZWYKL0NNYXBOYW1lIC9BZG9iZS1JZGVudGlmeS1VQ1MgZGVmCi9DTWFwVHlwZSAyIGRlZgoxIGJlZ2luY29kZXNwYWNlcmFuZ2UKPDAwMDA+IDxGRkZGPgplbmRjb2Rlc3BhY2VyYW5nZQoxIGJlZ2luYmZyYW5nZQo8MDAwMD4gPEZGRkY+IDwwMDAwPgplbmRiZnJhbmdlCmVuZGNtYXAKQ01hcE5hbWUgY3VycmVudGRpY3QgL0NNYXAgZGVmaW5lcmVzb3VyY2UgcG9wCmVuZAplbmQKAE45dGVzc2VyYWN0MTVUZXNzUERGUmVuZGVyZXJFAHBpeFJlZHVjZVJhbmtCaW5hcnlDYXNjYWRlAAAAAAAAcGl4UmVkdWNlUmFua0JpbmFyeTIAQaCnHwuAAm1ha2VTdWJzYW1wbGVUYWIyeABibWZDcmVhdGUAYm1mRGVzdHJveQBibWZHZXRQaXgAYm1mR2V0V2lkdGgAYm1mR2V0QmFzZWxpbmUAcGl4YUdldEZvbnQAAAAAAAAAAAsAAAAMAAAADAAAABIAAAASAAAAEgAAABgAAAAYAAAAGAAAAB4AAAAeAAAAHgAAACQAAAAkAAAAJAAAACoAAAAqAAAAKgAAADAAAAAwAAAAMAAAADYAAAA2AAAANgAAADwAAAA8AAAAPAAAAAAAAABwaXhhR2VuZXJhdGVGb250RnJvbUZpbGUAAAAAAAAAAHBpeGFHZW5lcmF0ZUZvbnQAQbCpHwsScGl4R2V0VGV4dEJhc2VsaW5lAEHQqR8LlFtwaXhhR2VuZXJhdGVGb250RnJvbVN0cmluZwAAAAAAAFNVa3FBQ1lGQUFBbW9ISUNQLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9rRmNjaGdjNDVCZ2M0NUFnY2d4Qlk1RFk1RFk1QWdjZ2prTTQ1QThHb2NneEJBOE00NUJmQ0dnY2hoek9ReFpCaU5lL0NEUVJUNlJRK2s0UVY2QkhjZ3ZCQmpDQytLb1NqUUk3d2pqLzE2SStFVVBUcFYwckk0TGlsVnRBamp5UHVSNThqZzNDUmQ2ZEprY0RNQ2ordi8vcWxWc01nUVBWWTZ2dWdpaDlMci84UkNGK09xVVVLNkMvZkhGVjlSU3RmOE11bEcxMGZLY042WCtsWE9CZytHZXhYNzF3eFNQQ2Y0LytrRTB1UjV6RTBydGZDRmczb0lwMFIrR0Y1RFNtUWFNUy9vRzF4ZW4wWDJ3eWg4V1h3b0k0NlZQdC9rTlljZjlKNGgvcFVIQi8vLzJIK3QrbGtDQnlEai9yOVpCWEgxQkF0VXI3dS9JRU9RYW5yUzBlQnlPMTZ0cFZhU1d0YUVWc05pRzY2V3JCZ2cwNXdNNGJDWU5XRENXSWlEQ0VSNkhHaEVSRVJFUjNaSEJmWGphU1E3aU9QLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8rUUpnSzk1RElEUlpBakNEY2NnUk1objRnNXlDOUNEMElMK1F4aHVJZkNDWVFUQzRJSmhCaXlMQkI3SjRRWDRndlFneHhCZWhCaXlHRGtQaGRrRXcxa1BaWTVjRUhjazVCSUpPUWM5YUkrd2pFN0RMN1Jkc011MkdYb1plaEdEWWFEQ0RRYURTQ0RRZElPR0VFWGJETHpDTHRobDVvanprZUwwTk1KaE5OYlZvSjZrY2xYdWdneU9HZnVnbnczdnVndi8wdSs5SU43cEJ2ZEovL2JyVDNWdGRMeUI0Tnh5R3NPUFJudjlSN3h4My85TCtFVS8zL2Y0amovdCszVGREdmtGWnlDN2hZZEtrQ0NLSFFJNzZTVy9wRC82WENLZEFpbjI5TDlMNi85ZUVVT3JEMGt2OElJTU5La3Evai96RDVoK1A0ci8vOTlMZkJLY0RSOXV0SzYyTkx4RUlJaG5tR0dscGVrM0x6L2pqNWN2L3VsN2YrRXZpbUgvLy8wbDZDRU5wZnJIdC95OWw3a3IvNFJUL2Y3ZitQd1JUa0c3L3RwYXYyNlh0cnhvVkk1L3ZTeHhzUC83ZnVsN2ZkZDF0di83RlJvai8vRExnUVpnUUNGaGxZbGZ2MWt4OS8vMjhtUHgvN3J1dTMvdDlLM3BFaC9JS3prRjNETGcyQkVORHRCcjlKaDRTMTJILyszKzE3R3d3bHRwYlpCeDB1MHVucjB2OUlNamhyQllZcE8wS1ptRGlrTUpzWVRDRENlRTJHaHA2RFRkaUVFMktDZG84R2NOajNwSnNKb2ZqaUlpSWlJaUlpSTRpSWlJaUloaENJaUlpSWlJcjFTTXd5UWJPa0VpR1FDdmQ0aUkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8rUVZvN0lFRGtHd2NocE9RVm5JYTBFTktDR2h5QzdrSGNob2NnWnNjaG5ISU1QdEtrN29JUDd1bHY2ZjlZajVESURhSC8zZ2pqci8vLytySTRhaUlFWG5nZ1JaQmZDQkVXUVhzb2ZLZ2d1NURENVkrUXc1VUhnaGlDb0lFWVF3NVZrQ01JTzVUa0Y3c2hoek9ReFo0SUpaeHkzSU81bklKWjRJUC8vMWlpUE9HZDBSK2lQUWdSM1RRSUlYWjMvUzdCQm5lenVpODdNT2lQYktIUkhxZnROTlh2VFRVankvOUprY0ZqVHBPazlOc0ttRlR1K0V0cHB3MDZWdE1qaGhPME9MQ2QzUytyU2RJVXZ5REQrSWhhOGZRLy8rSy8vMy8rRC92YlFSVDdkOUxzamhnSTduSDhJdmYvbHcwYlMvNFJULy8vLzdmLy9wZnErbGhyNi92L1lmL3QvLzMvK0Qvc08yTk5ocGZpUDY2WGF0OEwvMi8vM1MwclhJTUQvcnZVRWQ5SXNmLzRNcDV3Q0RnWUJsT3pnTzBmQjNhZW0ybW1uWVR0aXB3Q0FaUTZEbkFYRGd5bmFwd2syMGgvK0lpSWlJeTlFUnhFUkVSRVpIRExpSWlJaUlqamo2a05XZFAvL3FQL3BNamhxOGJTWHdvanNHa0V3bWxpSWlQLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy93QVFBUTRBQUFFREFBRUFBQUNTQXdBQUFRRURBQUVBQUFBMkFnQUFBZ0VEQUFFQUFBQUJBQUFBQXdFREFBRUFBQUFFQUFBQUJnRURBQUVBQUFBQkFBQUFFUUVFQUFFQUFBQUlBQUFBRWdFREFBRUFBQUFCQUFBQUZRRURBQUVBQUFBQkFBQUFGZ0VEQUFFQUFBQTJBZ0FBRndFRUFBRUFBQUFlQlFBQUdnRUZBQUVBQUFEVUJRQUFHd0VGQUFFQUFBRGNCUUFBSEFFREFBRUFBQUFCQUFBQUtBRURBQUVBQUFBQ0FBQUFBQUFBQUFBQXdCSUFBQVFBQUFEQUVnQUFCQUE9AAAAAFNVa3FBTW9HQUFBbW9IVmYvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vSVpBVWZzZ2VCZHlHZHlEamtNZ0krUVBLQ0dJTzVBaHpPZ3lHaUNNY2dZdFVySUtIb2hvd2hzY2hzNGhud2dYY2dSUWhzZ2d1UVFYd2hvdjYvUVlRSTdxZ1JVVWsyUUlmVkY1aFFtbXVncUNNVENCSGovOUY4ajlKdWtuV203clNiQ0JGUEx0b3Uyc2pobEJTT0trRTNRZjMra3Y5ZnBjTVFhWFk5UFR3UlQ2V3ZwWC8wdjE5YVZiZVEwRDZYNyt2L1gvL1FJUWZqNnhTUzRRTFMzeHg2OUlWdEwvRVF5OEN2YlNxaHE0STcvL3BKZVZuVERyLytOaWxvdWZqOWZwSkx4YWxZckR0ZHIyREdrL2V0ZjZDRHJrZHV6UWt3MjEvdzJwclJmWVpjTmJqMStrUU1RdUwwM2hGNXNRUlQrQ0VNTWo3cEFqdWsvNURWRElOZnIrazliMDZTdGorR1hnVzZwTjkva05zZEwvWFFnLytuU3gvMHYyMHZ4U3Ywdi9TMy95REEvMTlzVi82V2tRMEQ1RFkvNitsa0R5Zi9TWDloNjVCUkJEVGRKL1N0TElMdWsybFdrbDM5OVUya3cwVGhwYTByN1MwVUE3UzIwclNWdEpML2lHckZNU1BKditxWW9FYUErS0JBNHBpa21LQ1dJaURWQ0lOYVEwS2lJaUlpSW9GaG9SZlNvZGJTMXhicElkMGh4OGYvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9JSE1Gbk1nVEEwaHlHUUc0NURMY2cwamtRZnlHUUROeEJ2NURMY2czUVEyRUVIRElFYUVIRElhRGtNVEp6SWVaQkprRW1Ud2g1a05tRVBoQjdJVENHaVpET2doc21RMElJYkpoSFVFTXpQQWg4allPZUl1UnNFWkZIQ1pFSEJEaGRvd3cxRExtMGJPR1hHd1pjY0dYSENNRGd3UU1FREJBd1FNRWk0WndRZEFnMkdFRWJZWVpjMkViWVlaY3d3akI1ZG1EZ3dRTUlNSm9OYlFOcUh1UnhGNkk3WVFJTis2QkJyRGYrRUUvL3BmM29FRzl0QWczdkM5Ly8xMjZiUVdsWGgwZ3lPRGQrbDdmWHd2LzB1MWdpbzBtOTBtOTE2eDl1dTYwblhYeUI0RzdrTnR4Nkp3VTlvRVUvNDk0NHFQL3BjRVU4RVUrMzdmN2Y0ai9xNnEydHBEWGhZYVNoQkJEZXIxWGZKRDVJZEwvMHZ0ZjlMOUwvL2VyZ2luOUp1a3ZJSGs1QmlBZ2d3K2tuMWZTci8vLzlMM3IyL2ZTMzBvZjlyMWV4V3FYcDRRUVlhV2w5WEgvYTJ2SCtsOS90LzZYNThtZ04vL3IwN2RKZTA0UVJEWUdHR2d2cFZlWGIvamo1Z1Q4WDdyN2YrQ1g2Q0REL2JwNmJYWS94RUlJUXcxNlhxOE4veTVaY3ZUL0xwL2RlMy9qKzJRTWQvci9wMGw2Q0RkZjBoNzMvL1pGNy93MzdyOTkvZnVEL3ZWcTlTUDNTOWhwZCtsTGovNjQ0NGEvOXY3cjM5TDB0dC83WHE5YjB2RERJYkF3UVF1MkVsS0hxL2ZyM2YvMi9kZmIzOS9iL1Y2ampTYjFJby9oaGlFRmJFRUNGS3IvZXVSUisvLzI4aXZ4WHQ5MTNYWkJjZi9qYWV2cjhnZVRrQ0hERENDSUYzYkVrOVhwTjZYN2YvN2Y3K3h0cGJhVytsMmw5SzNwZnBxR0dFRXJCaEpmQ1RCazR3bCt3Zi83Zjlmc01KYmE3Y01KYkRTYTlKdlNYMnNQQ3d4Q1FZUWFGQmlrSVFRd1FNTVlJR0NCZ2dlQ0JzTkNnZzNDQmhCdUdLQkEyS0JBMjRoQWdiRmRPbFlJR2grTkNJaUlpSWlJaUk0aUlpSWh4RUdDRVJFUkVSRVI5TEdIZlZCRjBUZ3RnMGRTQm9EVFlrK2g0MFBpUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzVBODg3SUhrT1FiTElFOEVGYUNHdkJCbXNnb3NnYURjZzNISWJId2FJYkl2VlZJWlRrR0hWVXR2OUlPSFJIQlUrRGc1REpCeC8vUVJUcjY5ZnIvKzNYK0krdi9wYS8vdi85TjBRMlhuc2hzc2hzaklhTXlHak1obE9RSUh5Y1pBaHlEVU9ReStJWnh6V1FVV1VPUVljN2tHTXlHZHlUa0g0MWtINHNjblpCNEp3UXhocklZcC82NGhGNTZEQ0x6QkY0YUx6UU5GOCtEeXVDZ3V1Rkt3L0FwWEl2TUZUQ0k3RmhVMFhtZ1lVTC9hcDB0b3czLzZUZE4yWENUcEIwclZKcUpIbUhENkJZYk5ob0RFanpTYkRETGhKb05uSFNkUTRjTUpvTUpRMERwQnBoVkMvL3g5di9TY01Fa3dxZjlMcHA2ZEp1bTE4Y1F3WDNWOVhYV3YvcE45T2tLWC85ZjZYMTEvVHBkWCs2dW1yRGRSU1MyeUJHRnY0aVFadS85RC8vNHIvL2YvNThDUDNYSS9wN3BMOUY5cGVFWXYvekFGOE5ML2hGUC8vLy90L3V0cnJ1dE42U1FZcjBGLy83RmYrMy8vLy9nMy8xMWRKK2wrSS8rbGQ3ZXk0S1ArMy8vZnBYNURPT0QvM3NiOGorNlgvOWVuMSt2L2IvL2RMci8vVnVvMHJZMGliLy9hcGhLR1lkdEFpbmJMZlJPQy8vWWYvOE5LR0Vtd3ZhVU93dnRLM1NYLzdEUGNVR05qaHNVRUhoQnd3ZzhKdUVHRUdFSERDRGhoaW9waUNLY0lPS2VKSFRkOEpOdWgvK0lpSWlJc3ViRVJ4RVJFUkVaY05LSWlJaUlpTkRqK0VuL1gvSWJRZGYvK0NqLzlOcGQ2U1hxM1dMRFNyd1NFZGlna0VHQ0RyRVJFZi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy80QUlBSUFBNEFBQUVEQUFFQUFBQkJCQUFBQVFFREFBRUFBQUE2QWdBQUFnRURBQUVBQUFBQkFBQUFBd0VEQUFFQUFBQUVBQUFBQmdFREFBRUFBQUFCQUFBQUVRRUVBQUVBQUFBSUFBQUFFZ0VEQUFFQUFBQUJBQUFBRlFFREFBRUFBQUFCQUFBQUZnRURBQUVBQUFBNkFnQUFGd0VFQUFFQUFBREJCZ0FBR2dFRkFBRUFBQUI0QndBQUd3RUZBQUVBQUFDQUJ3QUFIQUVEQUFFQUFBQUJBQUFBS0FFREFBRUFBQUFDQUFBQUFBQUFBQUFBd0JJQUFBUUFBQURBRWdBQUJBQT0AAAAAU1VrcUFMSUlBQUFtb0hjR2YvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9rTWdNc2ZVZ2VEYU9RTGprSEhJWkFOVDVBOEs1QWlEUVEwT1c3a01xQ0VISVp0aE5Ka2NNd3VHUUc4ZzM0Z1ljZ284Z280aG13UUlESUdJSUwxRUdPSUtPMS93Um1HY3ZCcUVYM1MzZEJHSmhVd21sUVNwR0lORjIvOWNJeGtmYTlVK2syUTJPbHBOZ3FhTnpXd2dXazJrMzNWZWx1azJxNlNUYWRKVTJqSGx6Y0p0WmNHbFM0UkpPdDlmOWY5TDYyR013K3ZDMG5wNUhYUy8wbi82VmY5ZGFwd3hwZGo3cnI2V2wvZi8vdjlkSkxha0c3NlgvWFhwZi8vdi9qNjJrbDRJMmk0WlZkOGNhWDhVclMveEVndlY3YVZNVVAxOWY2MTUrUzcvNkJtR1hCaDcwdEsyMWV2NjBseGVma21HbGEvOFd4VlpNOVkzMS9SRFlPRWw1dWFwcE1WLzFzR0toTmZZWC8xRU91RUhpUjU3RGJYZlVNT2llSXh3WmdOdmpwZnJJN2E5WFFkSkY5c1NPditRTCtxTHpTdC8vOUlXNng2dFVnMjErUTJxcEhuUzNUZjVCdFRrTlNpLzA2NzEwcllwZURNTXVCaTZwTnEzK1FaWDYvUzBKOERIZFVuOGYrdjNTL0ZiOUwvNjNyOGhuSDlmMjYvclMwc2dYajlmWHBWK3Z1UDlYOUlnb2Z5REQxZWw2V1FQQ1IvcEwrdzdYSVpVRUd4NjYwblMzVjB2U3J2L3FtMG0yVUJyNjFUN1MwZEFkMTNYU1RkQkwrcjBsNllZWCt0SnRLMWhoSzdDVERDU3RoSkxwZUlwSU1VR0pIYWY5cllvaHNRc1FpQmhERUlNUXRpRUNDeEVTQ2pLRVNLUGREUXFJaUlpSWlnc0doRjFXaDE2cGZiU1NyRnRLaDNvZGtjSFdJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzVBN0F5ZmtEcUcyNjVESkJSeERLbVFhbklaV3BES0RJT25JYUJoQjA1QlFHUXdna2NnaUNDSUlJZ2x4QkVFRy9rR1BJSjVEeklONkVHK3BES29RMmFrREZDR0JCQkRrZENDVUk1a0U4aXVSZklQeEN3Q1pCSElZR01GaE1JMnc4TTQyQ09GQm5DRElON0pXUXoyU3NFY0tRendEQkVORUVOa0VOa1FSRFJBTndRTmd3UVJ0aGhuRFlSdGhnelpoaEdHNWNqWlFZSUdYRE9DQmhOWVlXazJyTUJOY3UyRUNCaHB0QnRBZ2RvR0hRUFFkRndUditsNlQ0UUlHRzBHd2k0VU9nMmdnMDc3N2ROWGcyZ2c5UXErbTBnMzdwZUcvOEpmL3BkOTZDYjdTYjlmLy8xcHZiUzB2VjByVDlMMy8wdi8wdldDS2pWOTFmZEovL2RLLzBuMVh4NmVYWDB2dkhHdi8wdVhUa2RlOUp2MG0vLzYrL1QyMHJTZXZJWkNnZ3J4cEVyUEZwWCtPMzZqLzZDL1gyLy83L0VjZjk1ZFVuU2RJVXZDc05MQ0NDSTZ2dnBMK1JSOGlqLy9wZTMrK2xmcGV2KzJsMWZmZEplUVBDT1EwT0VFdzlVbjYrcTMvMHYvUy9TOXYvUy9xLy90ZllwMVM5Tk1JSU1OS2txMXV3Uy8vLy8wdmIvYjkrdDlLWmcwZmRMM1dtMHYvQ0NEQnBkZnZGL3d3c01MeC9wZnBmZitFdnoreWdNcjkrbGRQZEplMDBFRVFicHd3MHRWMHJtRGY4Y2ZOaGZ4RDkvMi84L2ZvRXcvL2YvWTB2RVFRUWd3NitsM3diL21CNWdmb1A4d245cGUvK1A0YkJ2OTB2ZnZTOUFnMmwxMGxmZisrLy83ZnYrMy8zK1FhdS92dEswa1hUYVg2YnE5ZVBlOUwvc2haLyszOXBmZmYvdGgvM1M5Lyt2aGhML1NrY0ovL0hIQnIvMi9mOXYwdlMyMy92ZEwwbTlMd3d3Z21Sd2IyMFIxU1cvZi9kLy9iKzB2ZmYyL2IvM3I3MG05THd3eURkT0VFTnNIcEhIMys5TElVZnYvOXZJVWZmOXZ1dnJ5R2NmOWRZMktYMUlVZndZTVFnbkZpazByMWIwdjIvLzIrK0srOXRMYlhidXUrT3VtOUw4Z2VFY2hvZ01NRUVRelhiRkJiOU42V3ZmLzdmNyt4dlgxdDYrazAray9YNmFoaGhBazJHa3Q2VFpEajRTL2IvL2IwdjkyR0V0dExiMHRnd3ZUUzNwTC9RYlFXR0RCTDdDUVlNRlRDVmhiREJyZmZiYVlXMnIzWVlTdGhoSzdnd2d1S3IwbTlKZmF3OEpvTVFnUVlJTUlRZ3hDUWhBaGtIUUdJUkJoQkk1QkVaQmhBWWFHQ0I0SUdRU21HSVJCdWdNUWlHaEREaWlDZzRZVCtFb1pET2hEOGFFUkVSRVJFUkVSeEVSRVJEaUlNSVJFUkVSRVJIMXhiK3FRZnBKQkYyVUFaaG45RURVRlRLQjd4b1FZU0I3UWpqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL2tEeGY3SUhnUU9RVmJJSDFrQ1N5Q3JaQThjRU15Q0JxSGNnWWNnWWZJSGg3SUY0VENoVkNrTTF5R2h3b1ZlK2xvSEJ3aThnZE5NT0hTMi90TDZIL3lHU0NrUC82QkZPdnJ0TmVFLy9TdjljUit2L3AxLy8vL1c2Ly8vL3AxelprTm5aQXYyYkNEY2Noc0h5TEdRMkRtd25aQXVPYkNCZmlCY2MzRUdvY2hvSE5CQWpzZzNISVFjZ3VPU0hMSExISUpNbTVMaUM3a01vY21PV09XT1FYY2l2LzYySkRaUFFaQnY1RFloRjV6NFp5OHlyMHlER0VHTTF5REdKb01neHlZUmlESUVZbVFib0lZeE5GMkhQZzhsa2FINmhNamhEalEvL3AwWGIwWG1FWW1FWWNKTmhOSmowWG4rZ3RVWHFMM1JlYVFiVkY1b3UxcWs0VFZRd2dZUVlXRENEb0lNSU1LWEgvOWJTYmlnNkNEb0lPbHlPakFiRlZ0aHcrZ3NHNHF3YmJTc0dLRFlRUWNNU1BKUlNCd2Q2ZFBiU2ZwTC82ZjZ0ZFhxeDFZVmY2WFRDZXZlbTE2OEdZRFI5ZlN1dExTLzlXeGV1cXJWLzkvd2wvN3BYWFhRLzkxcDdwWGpTVzVEUmhGSCtzTHVvci8vLzZDLy8zM1g0UDkxYmwxcGpkSkt0aG92QnI0aVFQS24veC9YL0YvLy8vN05Bei92MHRhdlc5YVlhWGhHMy8rWURNMmwvekNmLy8vKzMrOWUzVHZTVGVnbERGZWd2Ly9iUy85di8vK3Z3My9xM1d0NnBmMFBwZlYzK3hYL3QvLzM2MzVETnY5dXRiMFI5dDFYNC8rdnJleU9HWi8yLy8rdXZ5R3gzLzE2ZWx2VklqSC8vWHAzL1gvMi8vM1gzLy9XS2pqU2VOYi8rMTBydFd5TWZYLzIvLzdxMHJYNnUxZDJrcmFTci8zUmRZYVRETGRzSXYyR3ZKQVovK3cvLzJHRXJDQ2JDTHIyRW9OaVIxNjFiMGwvOWcwSEk2RkJpbUtnMktDQjJDQnd3UVBCQTJ3UU1FREJBNE1FRGhoaUZGQmlzRVRnd0lUVENnMnZDVERhUS8vRVJFUkVSWmcySWppSWlJaUl6QWE4UkVSRVJFY2Nmd2dnLzlmNlgrditRWksvLy8weC8rbTBzRjBxOVcwc1c2WHlHU0drT2tJN1lTcjRyWWhBa0VHQ0RyRmhDSTQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy84QUVBRURnQUFBUU1BQVFBQUFQOEVBQUFCQVFNQUFRQUFBRlVDQUFBQ0FRTUFBUUFBQUFFQUFBQURBUU1BQVFBQUFBUUFBQUFHQVFNQUFRQUFBQUVBQUFBUkFRUUFBUUFBQUFnQUFBQVNBUU1BQVFBQUFBRUFBQUFWQVFNQUFRQUFBQUVBQUFBV0FRTUFBUUFBQUZVQ0FBQVhBUVFBQVFBQUFLb0lBQUFhQVFVQUFRQUFBR0FKQUFBYkFRVUFBUUFBQUdnSkFBQWNBUU1BQVFBQUFBRUFBQUFvQVFNQUFRQUFBQUlBQUFBQUFBQUFBQURBRWdBQUJBQUFBTUFTQUFBRUFBPT0AAAAAAAAAAFNVa3FBR3dLQUFBbW9GUUd6Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vNURJQm9jZ1pnMFBrRHd5M0p2a0ZkeUI0UWNobERrR0I3eUI1T25aQlE1SjhobWNrUTByQk5VeURTT2tRV25JWlhrTXFaQnJnaHMwSU5Ea00va2RrRGZzTHFxaEdZS0RFSHAwa0cwSGtGRXdvUWFhcUNjV1F6ekNNTVBYZndnMG0wZ2k4OUt5Q2dla2tZbUNwcHBZUUtnamMwbS8vMFl5OC8xNlZ0UDBFR3dxTnRvMjJ1Z3RCQnRKdjJ2cExkSnRKSjFTYlRwSkt3am5vT2dnMnN3R21GTGdpU3RiMytsWGYvNjl2MWJZTHB1dVIxcExWWC8vWHIvUzYwbXdZb3JLWEgvZGZTNjlKLzJ2WC85VXZZeUdVNjk5UFhYcGEvMy8vNCtsMVMyRWNYcXZYSFgxcXIvOFJJTUNQMTdTU3B3Z2ducXZqMVhwQ2xwZjErM1NXbFMybC92NlMrYnRici9JS2JrbnY2MktIMkZlbC9WSmVFR2xURFMvMVc5dEpLaUdMOGYvMVNyaTgzcXhWci9zUTJLMUpCcFhlbC9SQXVPRlhtMjlPbi8vWU1Vay9kaGYrcUVPdUVIUXRXRzJ2K3c5R0V3WnVYajEvVXV3MTZibnphU0R0RjEvd2JTSStTZHgvWDlJUTZXUENiMFliWXIzOE12dkNNVFZ2OGdxbHlHc1IvcFgvdWtrSGFTOGdxaU1Pa2sybGYvcGZwT2x2WFNUWWEvOS9iMi95Qk85ZjljVFFNenV1NC9SQlNnbkhwSmUybCtLWDZXdjZTVDFqLy83Zi8ybHBkZi9wZmtNOGVsK3hWcjAvcEVNb2ZJWlYxNit2Ly85dGRhL3BkWkFoMXZTK3NnZTQvMGt2M2Z5R2JCQlZldXRLMTI2ZEx0Skx1cSt0dEp1SCtGVFYvU09SMTlkSlBTV3FyNlNYMmd5eCt1cjdTMExiUzIwbi9vSmY4UFMyMG13amVOdGYwbm9JTllNSkJCd3drMmtrMmtFRnRleEZKQmlFeENZWFhUV3d3a0NCckVJRURpbUdFRXJEQ1FJTEVSQmdzUXdnYWZGUlNERUlSRENFTUlNVUlZaFFXUXlBYUhFUmJTckVSRVIvMHE5MHRmdWtxeGJXaDNvZHRMYlN4SC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy95QlRETXBrRnNGaHlCNFlPUXlBYm9JTFlGQnlCNGh5QjR2a01nQ0lLNGlPUXNGV1EwN0laeHlCRWVReVExUElOTkxJWmljRURJTWVXY2dvQmtGeTRJR1FJSUlvWkJ5Q0Roa0hJSW5rTUVFREZDR3loQkprRnpnZ3lEY1lDRElOeGdRTWd3b0lJR1JEa0VJSXAwTzBNaGpySVB5WkRDajBHQ0Q0YU9FSEVOM0NQRERhRFRRYWFwcDZid2p4QnljMkVlSU9UbUdFY2J3MVRUVDdwcEoxVTRCNDZhUEdHbVFhYkplRUNJSlpEUFpFbUROaElNMkpRSUhCZ2d3UU1FREJBd1NCQXdRTm80RGRrQ0hRSUd5Q2l3MmdRTmtGRmh0QkI1Y1p3V0dDSU1PR0NCaEJnbEJnZ2RCQTZVMkNhNWMyRWJEdndiU2F5Q1poOE9nZysvNkMzMjlKdmJTYjNTRDc3Ny9xM1RkUXE5SU5vSU4vb0wyLzlKLy9TN1c5SU45cEJ2di8vdEo3MjBtMHRML1NiVDNYMi85TC85TCtYWFN2ZEs5MHYvLzFwMG5yUytucHVYWDB2YjY2WC85TGwwMTc2Yi9iLy8vZXUrKzEveUdReHlCd09PazYzKysrT05WLzZYOHV1M3IrbC9pT1AydDZ1azlDbDRXSHFSOGU3cjZTSC9VZi9TKzE5djMvZi85NmRHRjdxMGt2Q3cwcUNCQW42dnBmZi8vcGU5ZTM5LzNwWC9hOVhUYVRxbDVBOXdRMlFFbUhXZ21LZXI2WDhpUGtSMS85TDdYMzB2U1MvLy85OTFicEwxVENDREJwS3Y3NlZiLzlmK2w3MTkrL1crbEQvZXJYV0swdjd3Z2d3MHFTOUs0WUlMLy8vL1FYMyszL3BmcE1vQnEvYTlYVFRhcGZXQ0NJRnk0TU5MNjk0Zy80NCtQOWZkTDIvOEpmbm16b0daOTZkWCs2UzkyZ2dzTU5MUzlibXlELy8vaS92OXYvUC82Qk1QKy9yMjJLUzhSQ0JDR0dsK3RlRGY4NFBPRDgyREg3OTEvLzVIREwrR3czKzYvYS9YaEJCaHBkZEsrLzlQVC8vTjcvcjIvOGI5eUdwVC9xMWVrMmw5QkJ1dlM2dnU5Zit5RHVSai8rMzlyN2ZmLzJELzJyMTZNTHBmVDkra2g3L1gveGYvdCs5ZTM5ZlcyLzcxcTJxVjZYc01MK3FWLy9qamtDTS85aC9hKzM2K3UyLy85ZFUzcGVHRENDYmR0YWx3LzIvOTMvOXYzci9mMi9iLzIwcjcxZnJ3d3lHV1hCQlZiYUw4SksvK2w5Ly90L2ErMzNYMS8vN0crbGV2aGg0UUlYWXFLTkZYN2ZXUVI5di85dklPKzllM3V1Mmx0a05EL3JIVWFUZWtRdy9oaGlFRTJJcEsrbDYvLy83ZWx4KzMzWCszMTNUWFg2WDVBOXVRVVFHR0VFUWE0dEtyOXZTL2IvL2IvYTlqYlMyMHR2WDE2ZEp2Uy9UQ2hnd2drMkdrcjZURElMajRTL1lmLzdmLysybHRwZmRiYVg2VGZyOTBHd2d0c0pkNEpOaGNFdExiLy9iL3IzWWFXdzB0dTB1REJKcDlmU1gvQjRXR2VOQk5OQ0VHWmtnaENDR0VHR1psQ0RDRENEd2cyR2hoTjBHRTNZWUpCQnNNRUVFR3c0WUpCQnNWMDBrdzBHaCsxUWVFMHhDQ0RCQmhCTVFrQ0NoQnNRZ2d3UVlRZUVHMkZCQThJR0NCdUdJUVFZWW9JTnVJUUlOcjhKV0NCcjRxSWlEQ0VSQmhDSWd5Z0R3MUlpSXRDTGhnaEJnaEVHRUlNSnJ4RVIraEVhRVJEaUlpUHBhQi8wZy9TSUd3Q2NkSkZ6T2dHZ3I2akVHdkdnYW1nSDJFTDRqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLytRUDZFRG9iK1FQQm9ISUVsa0R3OWtDeXlCSkJBOEY3SU5Wa0RZREVaRExqeUdWQ1pCWG1DcVFaUElhVUVORUFvS2x0NUE4c1RTZlYwMC9TMi82QndkRjNEK0RnLy9wcjZRLytRV3diai8vTUt2cnROZUMvOUpOMS9pUC8vK3ZyLy8razMvLy8vOXIvLy8razlaZUVDelB5K0laWTVCdVA1QXVPWGhIaERLSEw0Z3RPWHhCb3dzY2czSExqSUdCeUhISUc5Q01jaStRenYvKzNCRU15ZUVHUU1VQ0dRTHp5QmltZ3dVZ1JtUmV3Vk5CZ3FESVpYZ3FZUXNGVElFVXlHekFVZ3VjdWlwcGdtUkxJT2N1aERGWC9wWWhQVENoR0hDTnpST0JCdUtBWHBnb0xvTEJVMHdWTUl3d3dWTkZ6Z3FvdzJpY0Vnb1lJR0NEQllNSzBFR0VEQ2x4UC83WVJ0dmwyMFlPZ2c2Q0RZVkJOYU1YZlFYb3ZOR0s2TVVJSnQwWGJDVFdxQ0RoWDMzNkI2YXBKTC8wdWczYnBCMG5Tc0diRFpac05naEJzSEI5QllOaGlFMkdJUWJTYkJzTm9Kd1lrZXJnellONFAxcDlwWFhYL3EzdlRhV3JyNlYxL3BmOWF0MDJ2VFgvdDdmVGFUK2wvOVkvcnIwMzcwLzZYVFQwL2ZyNDQvNldudXVrS3Bka0ZGa0svcE4rOURXdi8vNkMvL1MvcnEvNytYVkp1bTlLdDBEWHhFRjlWLy8vOWYvOTkxK1pnWSs2VGY4VnJRU3d3MFl3YVhrRHdPRWYvSDNYL0gvLy8vc0gvK2syazFkSk42U1FZcndqai8vTmcxZEwvbTAvLy8vOWgvdDEvdHZwTjZTUWE5QXYvL2V2L2IvLy8vdzMvcnBONmVrcmVsUSt2Ly9zTUpmKzMvLy9YNE4vM3QrbHQ2WDQrbDZWMzNoaUYvN2YvOSt0K0QvdWxyNkw3MHEvLy8vK1hCcC83Zi8vWFg1QlFPLzkvVGRKTnZwRVIvLzE2ZDFmUy85di85MTkvLzFlbU9OSzcxci8vMHJ0YjEvOWgvLzNXbGEvWHJIV3J4U1MvL1lSZGJwc2lqdG91clpGZlQvOXYvOSswRTJ2clozaG91clcwazI2WC83YVdnd2dtR0ZZYVZzTUpKeldCRHRQVFlhYVlUdE8yMG9hVFlSaFVHblVVeFY3NlYwa0YvOWlvT1hRcGlneFVOaWdnYllRT0dFRHdnM0NCZ2d3ZzRNSUhEWWFDaW1JV0VIRENDYWFoOU9yRGVQLzJFTkJvTk1JUXdoYkVSeGtjTWdZcWJRVEN4REVKcG9YOFJvY2Z4RVJFVVlFNGppT0lpSWovMkVuL3IvSUc1ZEovMS8vLy8vSDY5SnRMSUg5TkpmM1M2dXE5SVNoMEN4ZEw4Z3Q0NmlPMmtsNkZiWVNDUUlNSUhXR0lTQ1RDYldJaUkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy93QVFBUTRBQUFFREFBRUFBQUNvQlFBQUFRRURBQUVBQUFCQ0FnQUFBZ0VEQUFFQUFBQUJBQUFBQXdFREFBRUFBQUFFQUFBQUJnRURBQUVBQUFBQkFBQUFFUUVFQUFFQUFBQUlBQUFBRWdFREFBRUFBQUFCQUFBQUZRRURBQUVBQUFBQkFBQUFGZ0VEQUFFQUFBQkNBZ0FBRndFRUFBRUFBQUJrQ2dBQUdnRUZBQUVBQUFBYUN3QUFHd0VGQUFFQUFBQWlDd0FBSEFFREFBRUFBQUFCQUFBQUtBRURBQUVBQUFBQ0FBQUFBQUFBQUFBQXdCSUFBQVFBQUFEQUVnQUFCQUE9AEHwhCALtHRTVWtxQUZBTUFBQW1vRnNOUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL2tNZ05weUJvTEdRUEJvY2pmSUVrRUR3VTNJTGpya0R4d21ua0dtS0lhK0VOZkZzaHBqMFF5NWtOSWNnMFVJSGh4eUNqQ0xoRFNISWE5a0c4eUdaUENxcEF2Qks0WVJvQ1Uwa200UFRDaEJrTXFnSnhoTWhuQ0JCaEI2dS9RSW9CdWJicFBTYjBnamJZS21FSDRTMGJObzQzL3JoQnBOcWpIcEt5QmgvU0RZVk5OTENCVWtHMEVHLy8wWWk3ZmRKT3F0M1MwMkN6amFQTnJvTFNkSnY2cXRMRFMycVQxVGFhVkxvNVVFRHdRYjVnR3hUQVlYZGYvcWw5UFMrdDNyVnd1cnAwWFhTNlNkVyt2OWY5ZnBKd3hSY1VyajcvOUpVdi83djFYL1drbDJER3Y5YVRwZWwxNlh2NjYvNi9wYmtNeUs3OS9TK3RmMi8vL0g2dEpMYkJIdjYvNC82NlZwZjRpUVlVZnF1bFhoQWlvSFNyeDZTOUlmLy85dXEwa2t0TC9mMHY5SzB2L3Y2MktIYnE5ZjYwdk5OZGhwWCtRSjRKWGU2cFY3WDErcVNYaEIwa3cwdGY2WWUybDBSTkZ4YjEvb0VGOFdwZjB4Qy8xNGd3eENTVFh2Ni95QmlpWE9ONFFhdHRyL3NHT210Y0wvMG9OZUVEYXBwTU8xK3RocEl4eUlSdU9sK2tqRGRjSjRsemVtd3dqQy80YnlMNlRiTmdwLy82RU5wWTNDRHBCRzVzVi9xUWFDRWdqYzByZnlES1RJYldpWDZUKzlXcUNEYlZia0dSUkx0NlRhdi8xL3BXbDlQU2hzTkwxNGRKSzZiLzFYOUxYTEhmMVNjZi8vYlZ2OGd0UlZmcFBFWDcxdlhSQW5zbEc2U1gybCtLMzlhL3FscmpYLyszLzFwYVgvcGIxK1FiaitsKzJsYS8rbGtNMjYvOUwxVC8rMjYvU2YxSVpnOWY2WC8vMGwreFQxLzZWcmtORHBOMHZTV1FQT092WCsyL3lHbEJCa2RldExyL1dyVkxUWCtrbTBtMkgrQ3AxYTZSQjNiKzBuMWVrdS85TCswRExIdExwTlhyUXUwdDZ0S3JVSmZYRDBrbnBnd1F0LytyU1RXMEVuWVNicFcwa0Yvd2VFdHNKTVRjRi9UcXcwaUJlcFlZU0ladXJEQ1REQ1NzTUpCTGExREVRa2d4Q1lRYTB0YW9NVjhRcmlFeFZNUWlDanNSRUdGaUdFR204YUhhRVFZUXNJTUlRd29XUXlBMm5FUjZwSVJFUkgzVmYyNnBmMGtxOXYxeGJTU0hkS0Z0cER0MTFXSS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8va0MwR0Q1QXpBeEJBOERDQ0dRQ29RUU13MHlDQjRFRUVEd1lvUXlBMVlOeER1UThId2cyWVEyNHZJWklMSGtOUStRYVM0SUdRenF5R1drSUxrd1FNaHMxSVRVZytwQjlTRDZrSlFoalVobUhJR0RrTVVJWnlBZ3lCZ0dFR1FNQkFnWkRQUWhhRUVxSVFnZ21oQ29RMVF5QkZxUVg1TWd3R1FsMWhCZ2c3aGhIeUJ3L0NQa0QvLy92Q1BFSERDUEVIRFJ4aHgvcitDZUU2aTV3RHd4VENQa0dwRFNtVDlHd1NRMFRJemtNdVpGOGhvbVIrRWNCMlEyZVFJOGczOGczOGczK2NCUWZEVWFQZ29aRFpZUUlHR1FNVEpUQ0JBd3lCaVpLYUJBK1FJNGhuc0dmQWdFREJXUWUwMENiV3ZSdHRHd1I3Q0RZUVFkaEVFOWhBMHdnYVFRZHBwcHBwQk5QVHRJSU5zSU5vSU5zSU5wUExoRGdtbW5hYVZ5R3prZ2VwZ0NQd2cyRUVHSGUyaytHSHZ1ay8vcGRyZWszdWszdWsvLzYvdDAybFNYN2FUYStsNGYvU2YvMHY3MG05dEp2YlgvOTY3U2JWNjB2UzBudmRMMi85S3YvUzliMG45Si8vMys5dGQwbTB0TDkwbTVkZlgyLzlMLzlMbDArWFQ5dmZiM1NyLzNTL3VyOUo4ZXJYOUw3eHhYLzlMK1hYYjEvWC9mNi8rNmRKMHEvSVpBZHlCWStwQ1E5WCtPLzBQL29MN1gzNnY2djhSeCsvUmhWYlcwaFM4TEQ2QkJueTFmcEwvWC8wdmV2YjFmMWYvOTByL3VuMHZDdzBsUnlkZFhyOS8vK2w5cjkvZjk2Vi8zdWxlNlRhU1hrRHpnZ29nSk1IVklKamRYNi95RmZJVi8vMHZmOXZTOUpMLy9kTDNTdXV2MDB3Z2d3MVZmN3drdS8rbC82WDJsN2YvL3BRLy82OTFiVkwxc0VFR0dscFZwZUVGWC8vLzZYdisvdnBiNlRCLzM2dDdGYVNYK0VFRERxa3YzaXYvL2hoZjB2dEwyLzlMOElLZFEwL3VrMzlVM1NYdmhCRU1vbUdHZ3YrcmcvNDQrUDlmZisvOEpmbk95bkJwL2YxcStxWHRNSUlGaGhwYVhxODRRZi8vOFg5cGUzL25QL0JCdjk2MWI3WXI4UkNDd3cwdlNYdklUdjU4ZWZINXdOSDc5LzIvOWhmdUcvOWV2M1M4SUlRd2FYOUplMy9DRHdnLy96aWYybDcvNC90a05RUDl2YlhwUFM4SUlOcGRmdnZmLy8vN2Z2KzMzOS9rTnFmK2w3YTIwbDhJTjFmcEpYMzYvOWtHQ1AvRGY2WHQvLzdZZisvcjBZLy92K2x4Ny9YLzMvN2YzL2ZwZWx0dis5YXQwbGVsOE1FdC9TVDkvMzNjaHMvLzIvZXZiMzkvYi85ZjFwdlM4TU1JSnZiUkhXcGdNZnY4Y2JELyszOXI3OS9mNy90MDJsNnZwZUdHUWFTWVFUM1lYWC85TC8vOXYzcjIvcjYyLy9YMjlLOUx3dzhJSVhZckNSNFN2Mi85di85aDVCZ2Z0ZmIzWGJYYklOeC8xL3JwWDhndy9oZzhJS3d3bUlTNzZWNldRWGYvLzI5ZGl2dnV2cmJ1dTl1bzQ2dlMvRERFSUpzV2trcjl2UzEyLy8yLy8yOXRMYnJ0VitvM2RKdlMvSUhuQkF2WU1NRUVRMDRiRkxmcHZTNjIvLzIvMzlqZXR0TGZyZFdxcFgwdjB3b1lZUVNiYVMzcE5rTTQrbCszLyszL1h1MmwybHQ2OXBmcFhyK3RCaGhBcmJDVlBoSmhoY0pmdC8vdDY3KzdEUzIwdHU2Mkd2VDAzMHYrRzBGc01KTGFna3lnV21SYVlMc05kZjIxQlZxMTJHRXNNTUpkMkV0Z3dTYWZYMGd2OUI0V0dmTUlFVUFnTkNneFNFSWhsa3lDK29ab09RWTBJWFFoalhJWjlHRFF5R0VPQ0lZWUtBSXNHQ1JBdm95ZG9nWDBZY0dFaUdYb3hYMENUQmtDK2lIN1NoNFRRWWhKcWdRWVNCTGhpQ3UvdDF2VHR3eENzTVFyYlloV3d1blNidjhhRVJEQ0VSQmdoRVFaSUE4R1dJaU5DTGhnaEJnaEVHQ0VHRitJaVAwSWpRaUpBOEMrQ0lpSzY0UVA2cEIra2tnZitpNHpVQm9ETjBpQktiMElOZkNpZ2FrNEhoSTBRTXcxSXZZUWpqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9rRDlCQTZocmprTTJDR1lQNURJRFVnZ2VCaXlCOWhCWXNnZUdWQkRWZ2diUTJaaVZIa0dpQ0I0cmtEZnlCNGJKcVFONWtOZHlDaUNCRXlEVk5CYmVRUEh5cXFxcWFmL2U2YVJCWXNnZUJmRVhjZ1VZblpEUlpEVXRMYi85MGhmLy85TkwxLzhndGdzUC84eHRmUzJtdkJmL1gvOFIvLzZwdGZYK3YvWHIvLy8rbTEvLy8vVi8vLy85SzBpR2Iva016OGcwZmtENGZ5QjRaeHlHM01obWprRHdVcDVETUhJWUhJSGdUai8vdXdRVHljeURUTWhsMHduaFBMbVF5NEJjaGV5QmVDNWtmZ3Bjd1FZS1hNZzEwTTVEWkJQQWc4RkJTQkJCTTVEQ0NLNUVvUXg1QzRRY2dtY2d1SS85S3hUMHdRWVEwYm1pUUdnd3lHQkZNaHNtUUlucFpEUE5OQmtOazAwY1laQWlhRENHUVhtRlJ0dEVnSGtXYnV1bmU3Ly83aEdEZUVHRWJPRWJPRUVHd3FRZlQxMEM5Tk5VMEVHMVFZUnN1cVFjTDRZSUdDQmdreUZzRzBDREJBd1V3RlgvcFhRZlJ0MEVHZ2dnNlY2VFdqRFpCUlpEWm1sa0ZGb3cyakRrRkdJdzJrNURSaU1HMEVHaUd5MXAxQndkNmZwMG42Uy8rbjI0aEJ0WFNEcE5nellGODRDZ1FnM3ZvTGlFR0lRYlloQnRKdGlFRGFUeEx1dVEwVzc2OTkxcGFYL3JkUENkTHAvMHVuL1M2cnArNmRMaFAvL1d0TnEzNi8vVFkrMzY2WDcxL3BkTlBXcjAydmp0ZnQ3MnJwZFZTWFpBeGhCeC9YNjZmOXYvZjhKZis5WC8xWS82Mmk2MDJscUtYdWcwL3B2OVJTMS8vL1FYLzYvcGZEL2JyM1dLYnBKQmJhRFM4UklIZ1lQdi9EQy8vK3YvLzcveWdESC9kYnByVklKWWJSdUJoTHdSbXYveDlwZjhYLy92LzdCLzZWMTd2U2hoNFFWQmo4SThmLzRMNi81dFAvLy8vWWY3ZnEydmZUZXFRYTlBdi81d05TMmwvN2YvLy8rRy85SjY2dlZLOUtnWVhwZi8rdzB2L2IvLy9yOEcvMis5KzI2U2Y4Zlg2dS8ySy85di8rL1cvSWF2LzZXbGFTTDcxUy9INjlmN3d3di9iLy82Ni9ELy8vcGIwdi8vMTZ2b3VHcC8yLy8zWC95R1U3K3JkT3JHcmQ5RUtQLyt2dHRyNi8rMy8vZGFUZi8zNnhWSk51a2t2LzY2WGUzcGYrMy8vL1d2MTZzZnBYR2wvL2FMcmFUYllSaFlaQ1BwLyszLysybGFUWVgxdTBYV21uVjlMLyt3bDNDYklqc01KYkRDWEl3Ry8vWWYvN2FWb0tHRWJYdXN6dGhMZnFtMmtsLzlpRk13WEJoSmhoSmlGTXd6aklNRVdRWVJCa01FWkJnaGhrRUlJWUlNUk13d0RnMkdsRENURUxJTWFRd1Npb3FaZ1k3Z2xCNkgvN1hMNHBpbWxZVnRwM2ZiVjNkcDJ4Q2ltRjZFSjJ1cTkydi8yaG9NSU1JTkNHRUliRVJ4REJDSWlJaGhUZUVHc1F3bWd3aGQ2RWNjZnNSRVJFSXdFNGppT0lpSWpYK0VnZi8vMWY5ZjhnVnE2LzYvLy8vUzFIMHZTYjhnZm8wdjkwdnV2MG00V0xyWGtGc0dzZFJIdEpMN1MyR0NDcjRyREZFRHdVWVF5UTB5Q0NxR2xoZ3FYYXhFUkgvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy80QUlBSUFPQUFBQkF3QUJBQUFBWXdZQUFBRUJBd0FCQUFBQWVBSUFBQUlCQXdBQkFBQUFBUUFBQUFNQkF3QUJBQUFBQkFBQUFBWUJBd0FCQUFBQUFRQUFBQkVCQkFBQkFBQUFDQUFBQUJJQkF3QUJBQUFBQVFBQUFCVUJBd0FCQUFBQUFRQUFBQllCQXdBQkFBQUFlQUlBQUJjQkJBQUJBQUFBU0F3QUFCb0JCUUFCQUFBQS9nd0FBQnNCQlFBQkFBQUFCZzBBQUJ3QkF3QUJBQUFBQVFBQUFDZ0JBd0FCQUFBQUFnQUFBQUFBQUFBQUFNQVNBQUFFQUFBQXdCSUFBQVFBAAAAAAAAAABTVWtxQUtJTkFBQW1vQ0F6Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3lHUUJ3L2tNZ0dZY2d3NURKQnB2SUhnMXdSM2tDdUNCNE5GaGJySUhpd25aQXhaRmpJYWZVUTIrQkpKc2hyUmtHbnlHdEJCcW1RMDVrTnF5QmNRUTFZSU55WkJSTWhwZmhmMUNNd3pTNWhxZzlXNGFnZ3dvSUdDRENXQzRRWUlQWHJ3UjFCUW02V2ttNnBHellLbW4yRUZRUnNnd2poQi85VWplWGcwbTFSaWZWa010MVZCTmhVR0UxcEF0QkJ0Qk4vL2hCWWRib0pPa2syblZKTmdqM1I0czhiOEpVazZUZnRmcFlmZGFmVjA5VmJRWENEY0VIV1hCV0NtQUlyYVRmLzllbGRMMGxkMVZjTHA2YlJkZEtrcWZmOTFWZjlmWGJEZXF0d3VtMHY5TDExdi8rdit1cVN3eFIrcngvM1M5TFMrdmZxdGY5ZGE3REhyKy9wZWwvNzlmMS85ZEtyNUJvaGE5THIvOUwxL2EvOGZYU3FzSS9ldi9IUzlLa3Jydi9JWjBuOVZhU1hZSUVVNDY3ZVBYNmoyditJL3RxdWxTdWxmWCtxWDBsZGYvZTlVNlE5d3IxWDZwZkordTJsL2tGcXlPL3RKWXIydnIvcXZCQTlKaHBYL1hlRzBxcXRxOWYxU1M5TklsM0RTMS9wZzhNUWx5Sld1UC85SmZGNFFhVEZOLy9FTWFWZDM2L1NJWnJoTkxuQ2VFR29iMS8yVTRiVUovY0xYL2lEWFFRYjA2WWRyMHV3NlJ2WkNhZVBYNlYxMDZFd2RLMkdGMzhOcVFuSk96Z0UvMS9Ta2NiUzJuaEJ0UWpjMkpmWDZrR3JTZ2pERFczL3IraERmaTNDZWtFRzJ2NjJYbW9RVGROL2tEZ0NJS3RTL3BPbCsycVFiYS9JSENURDByYXQvL1g2VGEvWFN1R0VsL2h0YXVyLzB2OWV0OTFTYkgvK2wxZXZJSDBhL3BPaEpBYWYwdC9vZ3RXUlkzV205di9HdXRMWC9TMHNkZnBmYlMvWDlMLzB0L3I5TDl2L3B2NjNyMTlMOGdYSC8vdEw5ZGRLaURWbjlmWDE5SmZiRlBYWFdrUWFuK25wZWt2Ly85OWRmMHRMSWJIVyt2WElIamoxMVM2YmY4aHJXUUpIcC9TYi9yVmZTMDEvcmRkdS9CVUgybHBhVzJrOUpOcEphNjNwSlgzRDY2VFg5SW9aZGRyZitndnJ2UzNwc0lNazcvOU4xb2RwYnBPa3JhUVMvNzBrbTBtR0VjeFd2V3JwSnF3d2tuRENDYlNTdEpMK29QQ1cyRW1LRFhXdFV3d2tReTA2eENJTlF5S1lhV0dHRUVDQzJ2REVRa2d4Qk1JTk4vVFNzVjliQ1loSk1VQ0JZaUpCcHBpR0NEQzBoeG9NSVJCZ2hZSU1JUXdVTElaQUhEaUl2cEtJaUlqOTFYN3F0ZmRVdnVrbFh0clM0dDBvK2xDMjBoMjYzU3hILy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy95Qmx5UHlCbUN5NUE4TlVNaGtyUWdhQTZDQjROS0NCNFpoeUdRQnhaQ0RrSGNnOEVVY2czY2dyMzVCYkI1a0d3NmtOUlFRMVFaQWd3UWFCb2d3QmtHZ0dRMFZrUFdReFdReFdReFdRU2hCZXNnMG9JTkJCRENDRGNNaG1KeUdXcklhaWNobUt3UU1ob0V5RDFrRURJUFVRUWlQaklNVElhT0lMMElLTUlFRGM4QjRXQ0JnZ2RzTUlNTWdZWmtPQ0REUVlRYURDRFNob053ZzdRUU1NR0VEWVlRZUdFMEdFR2cwbUdrMXV1dE1JUEJudGhHWVJBendJR1FhTU9uSUtNUFdFWmhpUUw4REJFTXJnWUlobGRPQmxuZ2JjRURaREtnSXpFWU04RVlSbUl5R2JoQ1VSd0p3WjRDNWdGQUlHRUdDd1lRTm9FSFNyN0NNeEEwM0lTWVFJZ3hqa0dKNUJpTWd2Q0JCNmFwcWtxdEs5QWdZYmcyZ1FNUEJzSUlOVEFVOEZUNzAvVDBHMW1BMkw1Z2JSd0YzNGRCQjhOLzRRVC8rZ3Y3MEUzdG9KdmV1di9YVDIwbTZwZlNEaEJCaHA3YVQ0Yi9wQlYvNlhhM29JTjdvSU43YVQvKzNYN2FUcGFYMDJrL3VsN2Yray8vcGYray9hVCt2MS8rcVQxZGFYL1RhTUw2WHQvNlgvNlhNSm93c3ducmU2M3ZYLzdhdmUycnBhWGk2VGZmcGZmLy8vaEwvOXZTYjlKdjEvLzYvMG0xNjhoa0EzSDBucC9yM3h4Uy8vUzl0TDIvZjkveEhIL3RHRjI2ZWhYd3BBL2ZvaDdiVy9VZS9VZi9TLy9iMHI5Sy8vMjB2dEswclNTOExEcElFeloxOVZ2OWYrbDlwZisvNy8vKzllNnZwZUZocmhIbVIvYXQ2ci9yLzZYdiszcjlMOVgrMmxxM3QxYVNYa0R5Z2dZZ0pNSFNTQ2pmK3Z2SU8rUWQvLzB2MHZiNi9xOWYvNzlMU2JTcjAwd2dndzEwbXRKOUt0Lyt2L1FYdC90L2V2NlYvL3BQdHBldnFtRUVHR2xyL2VFbC8vWC8wdjB2YjFmcFg2WWY3YVQ5OGJhU1gzZ2dRWWFTU1hwUGhBdi8vLzlMMi8yLzlMOEpTUUNyLyt2YWRKTC9DQ0REUzZyN2ovLytQOUw5TC8vUy9DVE5ZYS8zUzFkSnErdnBvSUlnMEFRWWFXdjF5WERaK09QLzAvYi9iL3dsK1pESWdOUDk5OSs2UyswMEVGaGgxMTZ2T0NCLy8veGY2WHQvNVovNEpoLy9wZTNlbDRpRUZoaHBhcWwzZzMvL09BWC9mdC90LzhMOXdiL2JTZmVyWXBMd2doQmcwRjlhVDdmODRENXdILy9PYi9TOXYvSDlzaHIxZi8xYXJwZUVFR0d2WDk3ZjEvLy90KzMvLy83a0ZVLzdwV3I2TUp0VjRRSU5wZXFTVDcvLy8vN2Y2WHQ5L2YyRGY5Ly83cjhJUFgxeGZkNi85a05Hbi90KzMrMzlmVzIvL3VsYVNUZWw5KzM2WHUvLzcvL3QvMTdlL3Y3Yi90cGUrazNwZkRCZjFwZitzY2NobGQvN2Z0cjdmcjJ1Ny8vMWV2MTRNTUlKdmRVcGdHSDk2L2IvKzMvLzkxOWQvNzFhOVUzcGVHR0VFN2R5T3FTWDc5ZS8vN2Z0cGUzdi83Zi9hdnVxVjYrR0RJTllFRUVPMkVuQ1czOS85Ly90Ly90OTF0MXQvMDlhVjZ2cGVHSGhBcllxS0x0TDZmU3lHZDkvLzI4aG9mdEwyL1gxMnlEZDY5YlgvU2IwaUd4L0REd1FUWWFZU1czcmVsL2YvN2Y3L3Q3ZGJkZi9mOGIxVjlmaGhpRUUySXBMOU42L3QvL2h2K0s5dmJYdGR2L1Y2cU5YMHZ5QjVRUXk3RERDQ0lOc1d0UHEzcGZ0Ly9zUFhmL3RMZXR2UzI2amQwcjEvVEJJR0dFRW0ybDNwTjZYN2YvN2Y5ZXh0cGJhVzNhOXIxU3ZwZnJoZ3dnazIwbDlKaGtOajRTMTJILyszKy91MmxzTkwrdXdrMTlONlMvZEJoaEJiRENWTjRKTU1KWUlMOWgvL3Q2WFh1dzB0dExiaGhMWVlTL1N2cGY4UEJZWU1JSk8wS1lNRlFoSVVtd1lWTk5QVGJRMDNUVGRoaEJKc01KSnR3d2tteFZOT3JhYUg5SkI0VFRGRUZBWkRHcUNERUlJSWcwQVpCaXNNVVF6MWtQV1F4WGtObGJCaFNDK21RbFJER21HS0laVllaUXdpR1ZXd2NRaURUVzAvUUpRWkRLclgyc1BDYUJndlJUZzJCSWhBMHVHUzRLUCsvdGU0WUxERUwyRmhyK24veG9SRUdDRVJJS2dZaUpCVkRFUnhFUnhFT0RCQ0RCQ0lNRUlNRjA0aUkrb2lOQ0lrRHcxYkVSRWZyQ0IvV0VINjBnZjBxTU1INlZJSUdVNEdvS2ZTSUVzR0tDRFY5VVFOQTlJZU5BMUpBSG5oRDRqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8rUVBrRURNRlcreUdRQlBCQThOU0FtUVo0SUhocVFRMm9JRW9ERmtHdUNHbEhrRHdONElMTXlCNE5NMUlMTXlCNE5NeUdyTkxZZVFQRjRnMTRrRkM0VWdxUVFMd0ZDcGJlOXBFR2JpQjROZkl1NUFzNU5NZzM0aHI5WCtxdTZRZDF0M1hiKzB2VWYvLzlHMS9TK3ZJR1laai8vdHI2N1RYaGYvUzYveEgxLy9iWC8vLzlML1gvLy9iWC8vLzlMci8vLzlKdGYvLy8vLzhsL2tOVGlId2cyZi8razNMaHBHZ1pjbE1ocWVRYUo1QnAvSU5VOUJrR2lDQmVNZ25aRExnSU1JTWhtd2d5RFhNZzFRU21RMUtFM0lGNEpZUVVIeUdiQkJkeUJHaEpCRFhjaHJjUWZDQzRaR2dnd0UvL3hDRHdnd1FNSVlJUEpPQ0Qwd1VGMXlDajAwd1ZNRURCVUdFTUZDZ2c4Z1k4aCs4aGpSU0VRRTEvLzlKc0o2WVVLRWNNTUlZUnNqcUJGTWhzT0M2QllLbW1RMEhUUnNnd1VJTlNEQjFSZ2NJNkJpQ2d6NE9DQm53U0RCQnRBZ3o0T0NtQVJmL3RoR3h2VENPRkNPRG9JTmhKSnJSZzMrZ3ZSdDBZTjZNR3dnZzNwaEd4VnFrR2d2dnZiaDZkcWt2L1M2RDZNRGFDRG9JSFM5SjlCQnlCakNEZk5MSUdKaHRKeUJmRUVIU2JJS01SZ1ZvSUhJS01WSjFJYU1JSm5UclRhVHBhWC83ZThRbTBta25TYklOOFZuQU1Dbi9TNllwdUtlbTRoQjB1SmRwY2dvejMrOXRiLy85THE2RHBhVHI5WFYvaEJkVjFhdlRhWFFmZis2MVM2NnBMLzl0M3IvNmIxZW4vUzZhZW5XL1hvZi9kVy9iU2RkTDhncEQrbGo3YVRyci8vK2wvL1QwMnZWai8xb3duVGFWMEtTVzJRek12NmIveHIvLy8wRi8vMzlmZjlyMXIwNjBsdUVEWHhFTHVxLy8vK2wvK3Z2L0IvdlRhM1RGZXFXdzBEUzhoa0JvSS8rR3YxL3hmLysvcjdKQVpuNytuMm02U3IwYk1NSmVReUFYbWJQL2o3WC92Ly8vL1oxQXY5MHYxOVVtSGhCSkJqOEk4UC84aUFNWHIvbkUvLy8vOWgvM3RwTjAzZEpOL1FZWG9MLytjQnMybC83Zi8vLytHLzNTL1czWGZTU0JyMHZyLzJHRXYvYi8vL3I4SC8vVzYra3I5b2ZTLy85aUYvN2YvLy8rUTE2ZjM5UG91bTNwZmo2WDkzK0dDLzl2Lys2MXZ3ZjkwbTEwbGIxUy8vOUwrOW1BMXYrMy8vL1g3LzM5TjZUM1NYLy8wN3I2WC90Ly92Ky9rTXQzL2RMWDByZFZJZC8vMTF1OXZTLzl2LyswdEsvLzE5amlrbStxLy8xNmJiWDEvOXYvOS9yWDY5WXFuVnR2Uy8vdGRMMFhXeURqNi8rMy8vYVZwTnIzOW91ci9YRkpmLzZMK0dnbUdRbzdhVzJ2Zi90Ly90MURTc0l3dnBXVzhOTDZwSnQwbC85c0pjTUpNTUt3d2xzTUx5WEF2LzJILysybERDQ1lhWDJsRk1WYlR1cmRLbC83RUtEaUV4VEZTY05Bb2dSckRJTWF6UU1IVUdKQWpWc2crcERHcHRKT0NIVVEwRFFHRW9waUZrQ0tvWVNkcVRobGZCS0QwUC82MFkwN1dHRnQvK3d1djlpRkNEWHhDYWEzcHFuZi84TUlXZ1lRTUVEQ0VNRUljUkhGZ2hFUkVRd1U1QkJoWWhoTkJoRFQ0alE0L2lJaUloR3c3eEhFY1JFUkgvMGcvOWY0U2YvL3lCK0JmK2wvNlgvOWYvK3JhK1BWZlhXQ2YvcTJ1QzZyOU5vTHB1cTlSSEhTL0lHZU9sdHBWOXJ0cEplaFd3d1NJSGcwOEVEQ0RyREVLRUNESU10VllZSWZheEVSLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8rQUNBQ0FBNEFBQUVEQUFFQUFBQVRCd0FBQVFFREFBRUFBQUJLQWdBQUFnRURBQUVBQUFBQkFBQUFBd0VEQUFFQUFBQUVBQUFBQmdFREFBRUFBQUFCQUFBQUVRRUVBQUVBQUFBSUFBQUFFZ0VEQUFFQUFBQUJBQUFBRlFFREFBRUFBQUFCQUFBQUZnRURBQUVBQUFCS0FnQUFGd0VFQUFFQUFBQ1pEUUFBR2dFRkFBRUFBQUJRRGdBQUd3RUZBQUVBQUFCWURnQUFIQUVEQUFFQUFBQUJBQUFBS0FFREFBRUFBQUFDQUFBQUFBQUFBQUFBd0JJQUFBUUFBQURBRWdBQUJBQT0AAAAAU1VrcUFIQVBBQUFtb0NRUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL0laSngwUXlRemprTTQ1REpBM3ZJSGhyMlJieUI5QkE4R3kwMC9JSGc4WFpETXNpWGtHenFJSy9Ba2syUTJuU0lOVXlHMjVEVm9RMWFFR1NDR1VvSU5qa0ZFeUdQSVpVeUdyUEJWWHF3UWFoTlVtNFBDQmhRUVlRTUZ3UWNZSUdFRDEzMUlab2FOc09rNlNiVklJNGJCUWd3bWxoQXRIRERDT0VINzlZUU5JTnFuclpCb0hyUVFiQ3BwK0VGU0NEWVFRYi8xd2prWGJTZWtiZlNiVDlKc0ZUUjgydUVGcE9rMy8rZ3NPdHFrNlNUYWRKTFlSOVo0YmhCdjBGU1RkWDlmcFlmNlNlbHRQNmNJTGhCdEJPc3dDa3BzTkZkWDY2NlMrbTEvcDdwSmJndEo2YlJkZEJWVk5wWCsrdjY5THBLMkcxNjRYVDEvcGEvdjc5YS82OWRXR0tKMmtyWSszdWw2WFM2Vi82OWY5YTB1R1AvclgvV2t2Ly85ZjlmU3BzT2wvdldsNld2Ny9YLy8xcGE2a0d1OWYvMHZTNjlmK3Y4Zlc2UzhJemY2L3hyLzF1dTk5eUdnYS9xdGFTYkJIMUhTMjhmUzlJYXRmOFIvZFZkSkx3bGYvNlMrcTlmL2ZkVnBEOVBwTDlWWGt2cW1HbC8vdXF4Q1cyci8vMThFRFZiU3Y4Z2VySWwzdHBWVzdDdlMvVkt2UWVrdzB0ZXZiN1NWcngvL3BCSmNYUkg5TU5CZi95aFF4Q3JJVVpYZi8wa3ZhaEExWXB2L3FJTU1KUW12K2wrcEJwY0lPdWVHOEowdzlmMVpMZ3lKTlZ1Qy85SkNEWGhCOU5XRzJ2MXNOUWpuSVd2eDB2NnV1ZzNFd1RTdTE5Y01OSWgvU3NHY0YvLzZVdU5wZGFCQjhJNWhzTUkybHY0TjRRYVRlUDZYNmlHMXhicHRKQkJ0aUYvNURVMVNDT04wNy8vOUJ1dDYxU0R0ZmtGZ2FsMjlJTnJmNUJaRXlESW5TL1MxL2JwSU50SmY0ZEpLMWIvMHY5SnV2clZYQmhmKzMwM1RmLy82V3UrOVUyUC91a3YzWDZwZGFUb1NHRFo5Slhyb2dlcklsNzlPcmY1QThTNi8wdi9XdGV2OUpiM1MvRkovUzEvcFhySC8vMi8vdjB0NjlmWC8wdjIwdjB0ZEtpR2wzNi9YMFF5bi8rMjBucit0SWhwai92MTZYUy9TWDhmNlg5TDVCUTlkTDBsci8vN1ZyNytrMmw2VjlldVFQRHgvcEpkTnYrUTJvN3JTNjIvVmRVc0ovL3RyYkQvQlNCUGlXdWxmNlQwazNTWGZycEpkV3czclZQZXRJaGllbDNWLzBndis5TGRXd2d5S1AvcWxmb2JhVzJrNlNUYXBhOVhwSlhURENIL1h1bHJEU3V3azNTNlFTM3BZZWx0aEppYmFiUzEwbTBrR3NNSUpPd2sybHRwQkJkTHlqZ2drZ3hDYURYOVB0cEVNd0dzVVEweERFSnNKSk1OQkJCYlhneEZZWVRDWVQvdGJGZkM0VEVMREZFTXVlSWlRYTBKQ0dDQnE2RklVZ3doRUdDRU1JTUlRd1VGa01rM0VSZGF4RVJFZjYwdmJWTC9xa3ZiU1g5K2t1N1NTOFcwcUhla3R0SWR0TGJTM2F4SC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vOGdNQlpEMXlCb0RRNUE4R1hRaGtnMzFJR2dGQVpBOEcwTWdlR3NRUXlRMm9JRzQ1QWt2eUMyR3ZNZ3FvVElhNlFodEJDR2diSU5RcVFZRkNEV29JYkJCQkJCREFnaGdRUXdJSU9nZ3VJSU5ZWkRUSUlZSUlHS2dSRUEwRXdEWVJBTkJNQnFneUdnb0lZR0VNVkVIcklZMElZcXlDK2hBaVpCdk1oZzVETDRnUUxNekE4UEJBeUdzbjRNSUhJcUdab0VELy85YndRY0dDRGd3Z2YvNjRKOXBjTENZUU95RzBrQkdnZVFib0lRZ2cxQVpCUVlDTXdlUUx6SUdKa011WkRMbVF5NW8rR1daZ3FPWmdZWkROeEh3b1pCcE9SYUkrRkRJTkp5S2RIaE5FTmxDQmpBWm9CZ0VETkF6eUd6TkhBenV2N0NOQkExWjhJMENCMkNJTUhaNEdFendMd2dRTzAwMDAxQ2FkSnRvSUlHSEJBMkVFRERZSUcwRUR6WWMrSHROTlUxZEVDOUVnZEptd1VMNXNtRWZCaDI0TmhJTzRONGZEb0lQLzZYZStnZzI3YUNEZTJrMDF1KzM2NGVnM3drdlFRYlFRWWZ1Z253dzkvU2EvOUwxdlNiMjBtOTBuLy9wL3RKMHYrblFUYTdhVFczL3BQLzZYZmVrM3VrM3RwZlg3L2ROcTNXbCsya0c3OUwyLzlMLzlMMXZTYjdTYi8vL3RLMVY2dEpVdlMwblJoZDB2Zi9TLy9DWGN3c3ducFB1ays2WC8vL3RwT2xwZnVnbSsvcjIvOUwvOUxtRlgzNmIrbS8zLzl1bnV0SnY2OGRiUy9YMjhjVi8vUys2OXZXL1cvWC8vWFJoZHYwdGZJWkFhUTVBOFVmcDkvci82Ly9RWHV2MzAvcS80amo3LzJyYVRkQ2w0V0hwRUg1dGI2VWUvVWYvUys2OXZYK3YvKzZ0ZjBuVkx3c09sQk0zZFA5Yi9YL3BlNiszOS8zLy9xOVBUZFdrbDRXRFdrZWIvdlNYL1gvMHZ1dmIxZnBYMHIvYnI3OVhxdklIaFlJWmRoV0hXRUU2VGFULy9rRjN5QzcvL3BlNisvWHJYLy9ycGF0cFdrdmhOTUlJTU5Va28vdlM5di9yLzB2dXZ2NzY3MHIvZXIzcHVuVkw3VUVFR0hYdnBlZ3EvLy8vUzkvMi8vL3BoLzN1dCtrM1NYOWhBZ3cwdEt2ZkNTLy9yLzZYMmw3ZXI2U3ZwUS85ZW5WanRLdlhDQ0REU1NTOWJoZ2dYLy8vK2w3L3QvNlg0U1oxQlcrM1gvVDYrK0VFUWFCTU1OTC9wNGgvNjY4ZjZDKzB2Zi9TL0NUSWdHeit1dDAxYVNYMDBFRmhnMHRWKzRQK09QLzAvZisvOEpmbUlZUDk2dW4yM1NTOXBvSUxERFM2clNlZUNCLy8veGY2WHQvNVpIOEV3LzczWFh2UzhSQ0N3WWFYNlhlRGYvODhHWCtIN2Y3Zit3WDdoaC82OVhWc1ZYZ2doRERyWDB2Yi9uZ2ZQQS8vNTdmNiszL2orMlEyaEg3MTcrNitFRUdHbDBsNzdmKysvLzdmdDE3Zi8rMlFWOWY3VzE5UFM4SUVHSFg2UzN2OWI3Ly90L3IvLzlia0ZOSDcwOU5xamFiU1h3ZzJ2L1Q5My8vLyszN2RlMzNYZjJHLzcvNlM5TDRRZXIxU1F2ZjEvN0lONnYvYi9YMi8vOXNQKzY2VjlOOWZhNzlWKy9YKzkvKzM3ZGUzdjcrMi8vWHZyZXZ3d3Y2cFgvK09PUXpKLyszK3Z0K2w2Vy8vZTJ1a2srbDRZTUlKN2ZWR3d6L3ZYN0QvKzM3ZGY5L2YyLzdwZFhwTjZYaGhoQXJmUmRVcWYzNi8vL2IvWDI5Ly9iLzcvZjc2OE1NaHFpWUlKcmJTMEV0L2YrLy83ZnQxN2ZwYjF0LzdwYVdxVDYrR0hoQkMyMmxwVS92cGZmLzdmNiszMzlyLzZYMzNTVjZSQlJIaGg0UVZzVXhDSjJ0OVhya0c3N2YvN2VRVVB0MTdlOWIxdGtDOFYvZXh2NzZWZURCNFFUaGhNSmE5Vyt2Ly85dlgvNzdTN1MyLzczU3IwbTlMOE1NUWdteEdsZjcwdGR2Lzl2K0s5OXYzOXZTM1g5aWtyNi9JSGhZSU5FQmhoQkVGUzdTNzBtOUw5di85djkvYjNTMjB2L3VtS3JWOWZ3bUNoaGdnU2JhVlAwM2hMcnYvOXYrdlk3UzdTMjlMMTM2YjB2N1VNTUlMWVlTVzlXR1FMdnBmdC8vc1BTMy9iUzIwdHU2N1M5MHIwbC9vTU1JSk50TDhKTU1KWVMxd3cvLzIvLzNZYVcybHQybHRoV3FwWDB2MXcyZ3NNTUVsYndTWU1FbElPZlcyR3QzZmJhcmJYdUd3Z3JZYUN1N0NWc0dFdjByNkMrNlFQQzJEQ1Nwb1FneG9Ra05XRENxcTZ0eHJwcHV3WVNVTU1FbGJnd2tuRmU2dHBvZjFoNFRRWWhFREdwQmlzSUlNSUlJZzFDaEJnUUdJUkRRSUlJSUlZRVpCdUlEQmhTQzlUUkRqQ0QxT3hDSVpvaGlFUXpSREJ4Q0lOWXdOTk5VQ1RCa01zUXZ0VUhoTkJoZWlYQlZDbFdHcndaQ0FYLzdyLzRZV0dGdUdGaGhmMS80NGlJTUVJaURPb1pJYURVR1FFUWlJdUlod1lJU0NtR0lnd1FoZ3Z4RVI5SVJIRVJJSGdyd0lpSTExaEdnR3dDenJvTytxQ0IrbG9QOUpHQ05RR3dHWHBFQ1lHWVBTQ0JrdUJzQnQ5UTBxQnIwb29TR2NpSGpRTUpIUUR4NklHb2J2OElSeC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3lCNDlQSVpJc0VEd1pJSUhneHhBOHJJSGdxV1FWcklFc00yeUduWkRVdnlHUW9JTTh5QjRLbmhTQi9NZ2VEWk1odFRDV3c4Z2VDVElhbUJJRklIZzJJVWd6RUVGZUNHWEFLQzF0N3JYcnBwK3Y5V3BBKzRnZUNyeU1ISUh2azB5QmZpQ3AxYjdxbDZRLyt2ZjJ2ci8vL280dGVsMDE1QXpCbWovNnRmOXByd3YvcS82NGo0WC8wclMvL3IvdmY5Zi8vMHJYLy8vK20vLy8vOWRmLy8vNmIvLy8vMWRMLy8vK3JnaUdwVEl2a0cyWkRTL0lhWDVEVXBrcGtOT0NHWEdRZjhobU9SK1FUeUduQktaRFhvUTA0STVrTnFoSnlHVkJMaUJjK1FhbklaNElaNElTQ09DT0NEYTVCVXdndnhCZUNKQkZjaXVRejhReGYvcTRnZzhFREJBd2dlQ0I0SVBDQmdvTHJrQy9CQmhCZ29RTUVEQlFnWUlHRkJRb0kxZ29rTXpnV09NZzlWa0tHUXdkWTQ0Ly9xd25waFFoaEhERFIxQlFiSm5ucGtGQ0NHZEdsa002RUdneURjaE1JNFFaQnVoTkRJRUlWR3gwYWdlUXFBWm9HQVFNRW9NSnVDREJCaEwvNnVucGhIQ2hHeHdnZzJGQ0NZOVA5QXZDcDZhQ0RlZ3dqZzFxRWcwRjlwcGhiQ0IwbWcxTUJoZi9WbzJLOUd5WVFRY0lJSFNjS3JXalpNZ1k4Z28vUVdRVWVqaHNJNGJJR1BSc21rMlFMK2paTkFnNUJSL1RoU0JIa01lOVBidHBQWC8rcjBIMEVHMGc2VHBYTHg0TXRQRUozZlMySUppRTdFSjBtM1FJTmhJTzZwUHUvNjAzOWFYL3BYdkVKdExTRHBOajgrR1duL1M2YWVuVnVLRHBjUzVwWElGKzl0SnUxZEoxcEwvNmVtNmV0ZjlKNmIvUVhUVGROcFBUYTlQLy82MWFYV2wvNjMvcTZXbC8xL3BkVjE5L1hRLy9kZnQwMzlWdjlOajAzLzdldnYrbDd2dWs5TnI5ais2dWpDYVRwYVFxdlpCcDRnUS9xLzZRcGEvLy9oTC8vL1M2di9xLzdTdlNyY0lOUDZ0OS8vLy85QmYvOTcvMysydlRkTjA2U1NXdzBEUzhSSUhnclU5Zi8vLzB2LzEvL1pRRFgvM1hWajlJSUxERFFhK1F5QWF0UDE1T0orditMLy8zOWZtb016OTFkZlRkYmVncHNnMHZJWkFabERkLzhmZi8zLy8vL3NIKzY2dHBQcWt3OEpKQml2Q1BqLy9LZ0RGMHYrZVQvLy8vMi8rbnIzZlNiMGtnYThJRi8vUEJ0N1MvOXYvLyt2d2IvYlcxYnE3U1NmcWcxNlgxLzdkZiszLy8vL2h2L3I5YjlLL3d3dlMvLzloaEwvMi8vLy84ZzJFZnQrbDByZGZxMFAvOTMrR0lYL3QvLzM5WDVCVW4vcE43ZWpHOVV2eDlMMHYvQmd2L2IvLzYxL0QvMzlhcE52U1gvLzd2M3k0YmYvYi8vZjYvSVprUCs2V3IwdDJxWC8vMWQ3NFMvOXYvL1gyLy8xOSsxU2YwaUdILy9YWDF2Uy85di8rNjB2Ly9iV0s2U3R1di8vK20yMTlmL2IvL2YxdGZydGV0anB2VkpmL3NMcGRxM3IvN2YvOXBYVGEvK3NiV2syeFNYLzlvd3RvSnR0R0Zoa0hmVC85di85dXJRVGE5cFdTSGJSZnRiUytsWC90aEJjTkpoa09Pd3dsc01KY3F3eXYrdy8vMjByQ1VNSTJ2OXB3d2w5YVRiUy8veFhEQ0NiQ3NRclkxaHJhNnNHdHJyYmFVTkJNUXRiU1lwaXQvVnZTQmYvYWs0WnpDRk1iVWtCc1JEUFUyUVlybEFPYXd6eUJGYmtIcklQV2F1VUE1ckNGQWJHbEVJTlpBaFBEQ0NwcVVCbXAyZ1NnOUQvOWhkTk5CckRDMi8vWVhYK3hDbmttRjhVMDF2WFR0Zi9ob2FCaEF3UWFFTUVJT0lqaXlPR1FDd0N3d2dZV0lNRUdnd2gvRWNjZm9SRVJFSTJDUEVjUnhFUkVhL3dnZy8vL2hKLzYvMG4vWC9JSGlpWC8vL3BkZlQrbi8rdHBlUFg5ZmhmWDFiU3lCNDlOS3ZwdEw3LzFJSGcxd0VZQTFDeGRLdlNFZHRKTHlCbURVLzJsL1lTMndrbDhlR0dFRVFQRFhjSkJCaEJwWVloTVFnUU1nVVZ3c0dhQWVDc0Y3V0lpSS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy93QVFBUUE0QUFBRURBQUVBQUFET0J3QUFBUUVEQUFFQUFBQjNBZ0FBQWdFREFBRUFBQUFCQUFBQUF3RURBQUVBQUFBRUFBQUFCZ0VEQUFFQUFBQUJBQUFBRVFFRUFBRUFBQUFJQUFBQUVnRURBQUVBQUFBQkFBQUFGUUVEQUFFQUFBQUJBQUFBRmdFREFBRUFBQUIzQWdBQUZ3RUVBQUVBQUFCb0R3QUFHZ0VGQUFFQUFBQWVFQUFBR3dFRkFBRUFBQUFtRUFBQUhBRURBQUVBQUFBQkFBQUFLQUVEQUFFQUFBQUNBQUFBQUFBQUFBQUF3QklBQUFRQUFBREFFZ0FBQkFBPQBBsPkgC4AwU1VrcUFFQVJBQUFtb0NxLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vK1F5WGU1REpEVmNobmNndGhNeUI0TkZrVE1nZUpCQThGS0UwNnlCOWFkNURieElnU2NDcE5rRllkU0duUWdyT1FiS0VOcWhBM2dobVdRejJRVlJ5QnhaRE1vUWJKNFhVZzBZUWw0SUhoQmhVbTRPZ2d3b0lHQ0JoWXdRWkJ1SmdnWUlIaGYxQ0p3YXpqYVNkSk5wcUVHRlFhWVdnU3dtZzlkNnlHYW5RUWIxMG0rZ2p4TUtFR0VHbGhBdEhoaGhIeWYvNFFhVnBJdzNyWkJwZWxRUWJDcHArRUZTQ0RhQ0RlL1hTT013YlNmU0RwSk4zMVRZS3FNeXJhQzBuUVRmVC9wWWFXMGd2MDZkS2s0SXo4K0s0UWI5QlVrMmsvK3VndDkrbnBiVFhWdEJjSU53bldZQW5UTmczNzdmMSt2MWFTK2szZFZYQzZlbTBZWFNxa3JTdjk5VXZYL1M4TjZxM0M2ZEovMHRMZmYvcjkvUzZwSnNOMFJCNnJIMi9TOUpMWFgvcjB2Ly9Xd3hSZnF0Nlh2WHBhWDFmdjlmK2xxbFRoanJmK3RmUy8vLy8vLzZwYmRmOTEwdnJTOVgrdGRmOUxTV3NLUTFMcGZyLzlmdXYvZi9IKzFyY0l6SCt2OGFTOUxTMTcveUd3VTk2UzBrbHNFZjJPdmVQcGZqM1grSS8ydjBsNFN2ci9TL1NTdGYzLzlKd2t3cWV2WGY5TCttNi9ydmRMaWhXNnZwZnBMOGpta3RwZjVBOFd5RXUrNlNoZTE2L3JTWGdnZWt3d2dyL1h2YlhyMkUzMS9TU1hnbXBIUFlhV3YrM3RwSk5FR3QvSDEvMHZpSGhCcE1VMy9TeUdvWWhhWkNnL3YvMGdTUzdvSU5XdGY5aWZEVkNTQzZUL1grUWE5UG54MVRwaDMvMHlFQWtwcjNCYS9wUWFYQkJ2VFVNTnRmOWhwSTRtRCtQWDlKcGRCdlJ3blYyRi8ySGhCT1F4aEZqOWYxbUJoL1R4QkIwZ2ppRFlZUnhMMXdiU0lQNlRkai9YOVFnYlN4ZEp0UWdnMnhYL2tOVlBoQTZ0LzEvU0YvdW5wSU53dmVsRE1iU0NPRzFiL0lNNHZYNlRhVzlPcVFPR3ZvZ3pDbUQ2VGFULzVCU0VMK2s2WDdhU1RiU1grRzBrbSsvOWYrci9yMG5EQmYrL1RwTi85VjFwYVdSanY2Vk5qLytrdDdkZVFQQmU5ZjBuUWo5OVhTOGdlV0VKZS82dC82MWZwZitsdjhLdjBxYjdTL0ZYOUxYOWE2eDEvWDIvK3Ywdi9wWFgvMHYyMHYxMTB0NjlmcjZJWmNmL3Z2OWRhVkVOWHQrdlgvOUw3YlM2LzlTR28vL1M5SmEvMS9zVmE2dCtsZFpBdTZWNlgxLytsOXRmMTEwNjkvL3BaQTlSWDYvVC81QldoZGRLNjNwMGtyU1N3bnI5Sk90c1A4aHRlUUxNcHYwdEx0TDFmUzcvMTc3WWIxcW12V2szWDdhWGFTV3YvU1hUY0hyMG5UYTZJR0JEWGJTdlNla3UrcjB0dEpoaEZJQk8vWFhTMXRMdEowdTFDWHJvUFNTZFd3ajNmL3B0Sk5iUVNiYVRhU1RhUVFYWHc4SmJEQ0NpRTExMTdEU0lac0JCbHVzTUpFTlNBZzRZUVREQ1NzTUlJSUxldGtOUWdrbUtEUVlWcjAwckZSR3JFS0pyRE9LWXFtS0NDMkZxREVWZ3dtRUdub2RxbXZoYkNZU2hoQWdzUkVocGhwQ0RCQnIwaFVNSVJCaENHQ0RDRU1LQ3lHU2NDSXRwZENJaUkvNlMrOVZYMnV2dlNYOXFsWHZXdXJhU1ZZdHBVTzlKZHF3dHRJZHRMYlMybUZpUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vK1FFd2F0ZThnYUFwd1FQQXJxSVpJTnRaQTFEVTFJSGdwYUVEd1pDQ0Mzd1FQQTRqeUMyREpNZ3BJeUcwQmtGZFFRVUNaRFVLU0JBdVExQ1pBdURJWUJrRndaREFNZ3VESVlESU1BeUdwcVExOUNHTkNHWW5JTllNZzFEUkJVQmtHc2JCRVlEY2hnUVF3d1FZTGxPR0NJQmMxQTVHQXhJRVZFTm5rTXFaQmloQnA0aG9LNU9CNEtKQmJCVTFJYll4T0RCRWFET1JjR3BZSUgvLzYzaEE0TUlIQmhCeFgvK1FYRFVKcndzSU1JUERZUm9DTU1HSERoR2dPR0dDREJCZ2dZUVlMREJCdUVIRENDTXc0WVlZUm1IWVlhUEJBM0RCQmhNRUdFd1NZWVY5MTEyRUdwQlhvUWlBZ1FORURGQ0Q2RUdzNUI2RURCeUNVQ0JBNUF4UWhtVUladENHYlFobVVSOEdnMEJTb25ETVpCcndJRURaQnFPUWlBZ1FNTWcxbklRZ0lJTlpCdlFnMFlETkF6UWdZTElLTWRIQWIwcDhDNjlNSW9DQjNRZEJCNklhRU1JaHN0aEVNOW9JR21tbW1tcWF1cnBCTnNJRzBFMndnYlNEekFPWmc5cW5wOXlHVWRJTjFCVjg0Tm96Qmg3aHNKQjNCdmZkQlAvNlc2dHVrR0hodElNUERhVC83djZhUWJ3MmxTVDhJTmhBZ2JUM1FUN2YrRW4vOUx2dlNiMndrM3ZYWC9kZnVrL3Bla0hTYiswdkRmK2svL3BldnBQOVA2VDlQL3V2YVZwZi9hQ0RhZTZYdC82WC80UVg5NlRlMmszdC8vN3BkMDlPbHBmVHBOL3I3Zi9YLzZYYXpDZWszNlRmcGYvMytyYXQxcGVyMDNNTDlWdi9yLytsekN6YTdldDdyZS8vKzYydmFUcnBlT2s2MzZYMy9wZi9wZmFYdDlQOVAvLy9kUGU5WFgvcFhUK3Z0NDQvLzZYdi9ldCt0K3VPUC96Q3BOcE5wQ2w1RElCb2NnZURqOU90L1EvNlEvK2w5MTcrLzcvais2V3QrcnBKZUZoNlJESDNUOUx0K3YvcGU2KzNwZnBmLzkvdnQxZWw0V0RyQ0ROenJldi8xLzZYM1h0L2Y5OWY3cTJsMXBPbFhoWWFwQkgyLy9xdi8vOUwzWDIvZnBYMXYrNisxYlN0SmZDdzYwRTZ0MC9yK1FJZklFT3Yvb0w3cjcxOWY2Ly82ZmIzMHZJTTlrTTJ3UVFZYVNRU2YxdlM5di8vL1M5MTl2cit2Vy8zUzEvU2JTUzlCb01JSU1OTHFLNmZTci8rdi9TKy8zKyt1K3IvdnZ1bTB1a3ZWTUlFR0d1dnJlRUYvLy8vcGU2WHQrK2tyNlREL2VucDE2YlgrOElJTU90TDZmQkJMK3VxLytsOS90Nit2NlVIL2E2K3gya2wvaEJCZzBrbDllSUwvLy8vUy9TKy85TDhKTXB3WmYvMDN0UFNYMWhCRUdzWEREUzZyN2xRR1gvWFhqL1M5djl2L1MvQkJTb0RiKzZXdlZXcVh1MEVGZ3cwRnI2VHdmOGNmL3AvcGUvK0V2emFNSC9lMzZ0dWxYMWdnc01OTHIrNThJSC8vL0YrMyszL2s5UDRJTVA5NjZiOXVsOW9NSUlMRERTK2txZklQVC8rZkJvL2Y2WHQvOEw5b04vNjY5TnhwZUloQkNHR2xxdXQ3ZjgrR00rR1AvejZmdi9mK3dYN1lOLzM5V3FiU1hoQWd3Ni82ZmIvdytILy9iKzY5di9IOXNneURQM1NiVi8wdkNDREJwZGFTKzM5Zi8vN2Z1dnQvLzdrRGpUKy8vVGEvQ0NEYVhwZmUvLy8vK3cvdXZmdXU2N0IvM3JxNlJ2ZWw4SVAvMGsvZDY3NzMvNGI5MTl2Ly9iRGYrdXJxbDZYd2dlbS9XTDNmLzl5QmhQLzdmM1gzdjcrMi83ZjErM3BmREMvcWt2L1gvMy83ZnV2dCt2KzcvOU5xM1NYMThNTDcxVi9mNDQ1QnFwLzdmM1h0L1hwZHYvYS82VGV2aGhnZ203MVdiQnYvMSt3Ly90KzYrL2YzN2YrOWRhcTNwZUdHRUZ2b3VxU1g3OWUvLzdmMyszdjcrMi8rdXJmWHBlR0dFRTNiZnBkL2YvLy90L3BmZjE5YmYrM1RkZEpONlhnd1pEWEZ3Z2hkMG5DU1QrK2w5Ly90KzMrMzJ2YS8rbCt1cTMvaGg0UVZ0aEtJUlBPK3IvMy8vYnlCaVBTOXZldDYyeUdVOWYydnQ2VDZSREtqd3c4SUp0aW1ra24xYjBzZ1hqdi85djl2OXZ0THV0dis5NjY2cHZTL0REd1FMRENZS3YvMHYyLy8yLzRyMzIvZGR2OTExWTJOYjB2d3d4Q0NiRVY3NmIwdXR2Lzl2OS92ZEx0TDdTN3BpdlNmcjhnejJRYTRERENDSU1zTnBKUHEzci8vL3Q2WFh0OTF0MXQvNjlhVjYvcGtNend3WVFTRFlhWGZUZWxydC8vdC92N0cybHRwYmVsdHBlMXZwVjlxRERDQ1ZzSksra3d5R2FQcGZ0Ly90LzE3dHBiYVczMTJyVmFUZWt2clFZWUlKTmhwVmVFbXd1RUYrdy8vMi8zOTIwdHRMN1MyMHQ5SzlMKzhNTkJiRENTK2t3WVNVSmE3Zi83RDE2L2JTMjB0dTB1REJmYVY5SmYwZzhGc0dFbHRRU1lZTFpCMEtGVEREVk5OUFRiVUZUZE5OMkdFazJHRWsyNFlTVFlwcXRLMDFDL1dIaFlZaElOTkNFR0tDRUpEVERCZ3FhYWVtMmhwNmFiaGhoQkpzR0VFbXcwR0VrMnYxWWFjZnZRZUUwR0VRekt5R2NRRUVHRUVDSWFoUVFJQmhpQ0lOd1pEQU1ndUR5Q2dHd1lVZ3duYUlPSUlZVHV4Q0lOUU1NVVFhZ2NPSVJEVUJoaGJ1Q1RCa013R3ZzTER3ZzBHRjhoQVpRVWdRTm5ESk1NcjliMS91R0ZoZ3R3d3RoTlZWZitLUWlJTUVJaURCQ0lneW5ESUJSRVJHaEZ3WUlTQlBxSWtOR29nd1g0aUkvUWlPSWlRUEJaY1JFUjljSXpBMmdiK3FDQi9XRUg2MGcvclFOZEpKR3hsT01qZ2JRYU9wQW1nMkQxQ0JqK29hUWcxZWdvb2dhaHBhWGpRTUthZ1BCalJBMURidjRRMXNJY2YvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9JRm1wQTBBa3ZVaGtobFFRUEFyZ0lNZ2VGc2dlQnhCQWtnZ1RBMHJJYTlrTmUvSVpBSkJBOHZJSGdUK0ZJSGptUVBCUzhneWVFdGg1QTlISWEyQklnZmtFRHdVaUZJSHhCQThGVWdodGtKYmVIdEwvSUVsa011L1MyOTFVZ2VMNUE4Q2YwWU9RUEhOTk1obGVRWlAvKzZkMGc0ZE5OM3JmcFY5SWYvWHYwMHZYL3lCb0dvUC84NG4rbDcrdi9xNi83VmVDLy9WMTY3Q0RYaGYvVjEveEgvLzZ0Zi8zLzlKNjlmLy85dGYvLy8wdi8vLy8yLy8vLzlMWC8vLy9ici8vLzlMUUlnMlV5RThncVRJYTA4aHF6eURaVElzeUd1NUJvZnlEVTVGOGhpWkRWZ2l6SWJaeUdzNUVtUVZxRVZ5R2E1RjRobG55R2xCRFpCQThHMXlESmhBOE5RQy85VzJDQkI0SUdDQmhBOEVEd1FQQ0JncERLN0lMendVSUdFR0NoQXdRTUZDQmhBMUJRb0kxaGxRVUZJYUU1RjBJT25VZ21wQmM1Qmp5REZaRTAvL3JFSVBDWVFZUXduTlFHSHBrTXM1QnVmWElGemhOTWhsblRDRElHRGhNSVpEWWRRdVNzZ3djZzUvNzcvLy9WdFBRWVVJMk9FZUd3b1I0aUlEUlRDaGRBc0ttbUZUQ1BqWVZCaEhCWVZVY0ZoREJRVWdYb1FJNGhzb3BCamcyallGelFDRHdOellMci82c0k0TDB3andzSUlIUVFiQlVFR3NKL29MMDA4Sm9JTVBUUVFhMVFRY0Y5cW11ZzZUdFYvK2s5QnZSd2RCQm9KQjBtOUo5SEJzaGwrUU1mb0xJWmZvNFZIQ1pETDlIQnRCTmtDL280TmhCQnlCajFVT2tRMmVRWSs2YnZiVi9TLy9icDlBZzJnZzZUcFdRTDhrMUVKM2ZTMklRWWhPeENkSjNRSUcwbmRHM3JtSThEVGQvV202MHFTLzlMcDRwMTBuU2ZWbmd6UWcvNlhDWVR3ZzZ0eFRwY1FuVngvNmU5MG02Ni8vYjdwdEwzVytycS8wRjAwM1YwM1RhOU5mKzJ1dFdscnBmK2w3MDlPbC83Ny9oTC8zWHA2NmYvK3IxYlM2MS8vYkhxMS9TZlhyL1M2cDY5dXRmSEg5OTA2ZW04VWt0c2hwWVEyUDZYNyt2LysvNlh2N3BlMnZWLzJsekg3UzFTL0NCdy8yLzBocjcvLzlCZi83L1gzLzkrazJyMVNXMmcwdlMvLzEvLy9DWC8vZS84SCsybHBYdlZxa2x0b05MeEVnZUJPUnZyLzlmK3YvNi8vc2hocC85OTFpdWxCQXNHRFJ3dzE4aGtBclYrdng5Ly9GLy83K3Z5bkJvKzNXbGROTjZRTVBCQWtnd1lTOEVUdi85ZWwvMy8vLy9zUC9XOTk5SkpoNlNRWXJ3ak1YLzhwQXk3Zi96eWYvLy8rdy8vZExTdCttOUtnMTZCZi96NEsrMHYvYi8vLy93MyszWDN2YXBmcEExNlgxLzdhWC90Ly8vMStEZit0cTlKdlN2cFlZWHBmLyt3d2d2L2IvLy8vd2IvYnA2dGJ2U3YyaDlMKzcvWXIvMi8vNy92eUN1Ui9yL294dlNTL0gvMS84TUwvMi8vK3RMOEgvZXJTZWwzNi85TDYvdkJndi9iLy9mLzhQL2EvYXBOMmtsLy8rMjJyNk1BcmY5di8vK244ZzFPLy9UcFBTVGI2Ly8rbC80Uy85di8rMHRiLy9WdGI3Vks3MGlDOGYvcjFkcmVsLzdmLy85Zi82OVIvdnBKZi8vcTIrM3BmKzMvKzNXdHI5ZXI3VDBrMjMxLy9ZWFM3WDEvOXYvL1N0SnRmKzFqNDByaWtxLy9SaGJRVERiUmhXeUJBK24vN2YvN2ZhQ3RlMHJ0RzFxblNiZGYvMjB1R2szWVM0WVh2LzIvLzIwb2FUWVJ0ZjdKdXd3Z3QzcFhwSmYvc0lMZ3dnbUdRc01NSUxZWVhsSUdaLzJILysybERCQk1NSmZEU2ppdXZTdDBsLzlpck1QRk1VeFZzVW5EVHRQVFlhYVlUdE8yR0VvcGlGb00wV0VtcVRlblZ1a1AvNmptRW5ha2dDNklhRTdESU1ESklEQlRob2tOQ2R5QzZjZ3VuTEdTR0NFWUhKQU54Q2hNTElhQkVRcWFrTUduMENUQjYvK3d0SU1JTkJyWUxmLzJGLyt3cDVJTmVnbW1GdE5QVy8vNE5EUU1JTUVEUWd3aEJzUkhFTWpoa2hBc0dFREN4QmhCb0dFUDRqUTQvaUlpSWhIQVRpT0k0aUlpUC9oQkEzL1grRWcvLy9wZjlmNlQvci9aQThPTGYvLytsMTZUMS8vL2E2L1Mrazlhai8vYTVBcnEwcTlKdEwvL3dZWVFMZHRLdlNFY2RWOGdhSWRkdEt2VFMyMGt2ajJHRWt2cllZSUlnZUNzT0VnZ3lCNnNJT3RpRkZFRnNHUlBFNkFaZ3NMRENZWHNGa0RZRFNjUkVjZi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzRBSUFJQUFEZ0FBQVFNQUFRQUFBSUVJQUFBQkFRTUFBUUFBQUlzQ0FBQUNBUU1BQVFBQUFBRUFBQUFEQVFNQUFRQUFBQVFBQUFBR0FRTUFBUUFBQUFFQUFBQVJBUVFBQVFBQUFBZ0FBQUFTQVFNQUFRQUFBQUVBQUFBVkFRTUFBUUFBQUFFQUFBQVdBUU1BQVFBQUFJc0NBQUFYQVFRQUFRQUFBRGNSQUFBYUFRVUFBUUFBQU80UkFBQWJBUVVBQVFBQUFQWVJBQUFjQVFNQUFRQUFBQUVBQUFBb0FRTUFBUUFBQUFJQUFBQUFBQUFBQUFEQUVnQUFCQUFBQU1BU0FBQUVBQT09AEHAqSEL1TVTVWtxQUJBVEFBQW1vRGdmLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLytReVF5N0lHd0dYUElaSUxMa05BL2tEd1ZySVczSUhndkJBOEZxRTAwc2dlQzlwcDVCV2hJRlN2SUhocE9RUERUb1FLM0lMWWIwMVRUSU5PRUxtQ0p3eXBCWThGVnNneTJrUTE2QlNDb2NFREJTRFFCRUZmQ0JjV0lOSndRZUYvcURDRFNDRDBtNGVDQmhTRFpXRUdGd1R3UU1JUEMxVktRYTZrZU1QVHBKdThJTUtFR211RUN3ZzBmSVAzZGNJR2dnMmtFOUp1a2tlR3dxRFFhV0VDd2o0MkVFRy8vd2lSaHBONk9OMGxaRFNldEJCc0ZUWHdncVFRTm9Kdi85SG5KZXRwSUoxMjAxU1NiQ3BvMEpyb0xRVGRQLytFRmg2YjFla20wNjBtd1JwNW1Od1FiOEpVcmF0Ly8xdXVraytsYWVrbGhCYUJBNlFkWnNDc0tjQXdxZEsvcXVrdjMvcFh1dmJndW00VGFNTHBVcTNUN3U5S2x0VmFTNjFiZnBjTHA2L3BLcXAxdnIxLzEvcWxjTnBKSzJ3dmZkTDB0ZjMvL1gvUytxc0dNanZySHB1dXZTNlhTLy82Ly9TVld3MGM2WC9xNitsci9mLy8vcGZYaGoxYi85TDB1djMrbXZYLzlKSkx5R3RpWDlQWCt1dnIrL1ZlUHBmN1lSOWYvWEdrdnFxdXYvMVgrdTBrbHdVaTNwTC8vNjZXdmYrUWJpL3VxV2tsVmhHYVkvWGo2WHBEM1grSS8zN3BWdUNULzM2U1g2VnBmMS8wbHBRbDZ2Uy9xdjBsYnIvNzIwdTBoN2hYKy82WGtXZlZwZnYrNnBSVmJYcEwra3ZnZ2FxdzByL0lIZ21FTGQ3YVd3bGRxLy9TU3J3ZzZxR0V0ZnBXOWhvSkt1MnZTLzBrdkNha1dpc05ML1hnOE1WNUROcDQzLzlJTDRoNFFhVEVKdi80d3dTU2tFVWY2WDZna2xyaEIwK3YreVhCbXByVy8vMFEwNmw1bUswazFERHYvNUpnVUlKcnZCZitsQjF3Z2J3blREYlgvWWVqeWgxc2RML3RMaFBvOFRXOWZxZ3cwa215Qy9FdS8vMGtjR0g5TnhCQTJrRUd3d2phWDZodklZbWxlUDZYNlVFRzB0cDBuMGNiWVlTK2x5R3FFU0NEU2QvLytoYlhGNFRhUVNCdUsvOGh0SjhJOHcwbS85TDlKNjczVklOc0wzK1liU1FRYlN2OGdmbFpBNENmNlRhVzlkSkJzTkplUVB5akQ2VGUzLy8ray8rMmxUdGYrRzBsdFcvK2t2MHJTK3ZTY0dDLzkrbnIvMSt1dGNpanY2U1RZMS82UzN0MS9TWDZ2RWZ1dTYvNy9xMytRUERaaTdmcGEvMHIvUkE4UGhDNTZWTjdhL2lsK2xyK3RkWS8rdnQxLy9wZitrcnIvNlg5LzZXdWx2WC8xLy8rMms5ZjFwVVExLzMwdlM2b2htdjZYMjJ0ci82UkJzSC8vOWRWK3Y5dXYwbS9TQzExMHZWZi9wZnNWLzlhVHJrREVMZWw2WC8vOXRmcGZwWFgwNi9wWkE4SGovU1M2ZCtzZ3kzdXVsKzM5SldrbGhCLy91dHNOL0JTQjRiNGxkZE5wZWxlcjZYMXJwSlgzRHRjS24vcGRiYVRwVnBKYWExZi9UY1ArazBtMHRJdFhhWDE2dDBsK3ZwSk9rdzBHUWc3MXI3K2gybDJrMmxWcUV2K0hwYmEyRWVScm4vUzlwYXRwSnRoSnVsYlNRWC9EMGttMG1kV21LdGZkSnRKTllZU3VHRW13a3JhUVMvNGVFdHRCTVFnMDlkZTJrUWFVaXlnd2lHdVRrNXB0S21HRUVFRnRleEVKSmltZ3d2K2ttREJMV0sySVRCZ2tyQmdrQ0MycXdZV0RCQmhCcDBoU0RXR0lYd3VFeENvTVFnUUxFUklhdWlRaGdnd3I4VWd3aEVHQ0VNRUdFSVlVRmtNa015TWdlQy9FTXUrcXdad01nTW80QjRheHdEZzhCNGF4d0cwTHhFVzFTeEVSRWZldEw5VXYyNnBMOUpmVnZwTDIwa3YrcVN4YlNVZDFTMjZZVzJrTzJsdHBiMXROWWovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy81QVdCcXIvSUdvTk1FTWdrNURKQmFHRURZR0t5QjRGbFpBOENqUWd0Z1lnaGtKL0lHWU1VSUhDTElLZ2tDS3NDNVFDSFFOY2xvYUNXQnFsSUdZVkFNRldHQ29CY3F3WEtnQ0RvREJVQnJtb0ZRMUJnNmcxRVFHbVZZYVJFd1pDckRTSW9DcURJR0tFREdoRENnaG5HRU1BeUJDY2hndlpEUldRVVlRemFFTkV5R2xNaHNCZkJBeUN1TVdSWUZZallhQktjTlBRSWlZRi8vOXJlRUhJdUcwSEJoQTRyLy9JTUVaQmNPdWFBZUduQ0RCQSt3ZzRQd2dmLy85NFFjTUlPR0VILyt1RTF0ZXRNSU95RElLQkZBUElLQ3docGk1REtGUWlnR0VRekNDR2FRUXpDQ0dhUVF6Q0VhQm1rZ0ZOb2tCbHNocHpDSndjTWhwYUVRZ0luQnd5R2xvUkEwZkQ4ZzNJSU5Qa0RDQ0RUTWdvUmtERTdSOE5EcXZUQ0pBUU5Rek1FWVFJaHNvR1pnUTJhQm5zMEJpRWFBWHROTk5OSUpwNmJhUUlHMmFBdTBDQnRtZ0xzSUlQdE5PMDFZYUlHRVVRTUlTbnd5OWRvMEFoM2c2Q0Q1QlFHNUJSYmtHOW9JTzAwMDAwZ21tMG5hQ0NERGNOaEJCaHVHNkR6WVlOQXhhcDkxb05wTjFCVjg0S3dnZ3cxMjBFSHdiMzhKQi8vUy92U2IyMG05MG5yZit2VnRKdEtrdlFRYlFRYnZjSk5ZYi8wRS8vcGRyZWtHOXRJTjdhVDcvdjk3MC9wZlRvSU4rMmd2Yi9wTC85TCs5SnYwbS9TLy90TFdtMWJTLzkwbTE5TDIvOUovL1M3NzBuM1NiMit2L2ZiL1NldEwwbTBFOTdyN2YrbC8rbDZ6YTlYM1g2Ly8zWGF0MDJscGY2VGFOcjllMy8xLytsemFjMnUzcE43cE43MS8vcnJUYVQxcGZUMDMzNlh2L3IvK2wrdjNxL3EvLy83MTM2MnZYanE2VCt2dDQ0cGYvcGUzWHQ5WDlYNnYvOXEydTNUcGEvcFgzOWZmLy82Qy9YMjlYOVgvRWNmZjV0VjBtNkZMeUdRQ201QThORDlQdjBrTy9wRC82WHZYdjkvMy8vMTkwMmxhcGVGZzlTR0tFL3RMLy8vLzB2dGZiMG45Si8vN1hTZmIzcEx3c09xQ2UrM3F2ZnIvNlh2WHQvZlhmWCs5UC9wV2xYaFlhcEJHWnYwdnF0L3IvMHZ0ZnYvLzF2KzF2YlNiU2RWOEZoMW9KdGI3NlgvLy9TOTY5dlY5VmZyL2YwdjZicEx5QjRleURWWVNERFMwdW5TZlMveUdlTWhuaGYvUysxOSt2cXZXLyt2OXRkSkwwR0V3Z2d3OUpKLy9TKy8vLzlMM3IyL3YrK3IvdGRKdFhTYld2V3dnUVlhV3NmVGVsVy8vWC9wZmErMy9wZnBNUDk2YitycnBMN1RDQ0RCcGFYcjRRUy8vLy9vTCt2dlYvVjlLSC9mL3NVMmt2K0VFR0dscFY3ZUNDLy8xLzlMMi8yLzlMOUptb0ZuN3BhVGY2cGY0UVFZYVNYNlhFd0duLy80LzB2MHZmL1MvQ0NrSUNuLy8wbW02Uy93UVJEVEt3WWFXbC9jZ1FabjhMaGYvWDIvMi84SmZrS2RsSUN0KzFkSnZhYlNyNmFDQ3d3Nit0SjRQK09QLzAvMHZiL3l4d1FYNXRXRC9lci92MTk2Q0N3dzB0ZitaaDMvLy9GKzMvZisxL0JNUCsvL2JiU1M5aEJvSUxERFM2VkpKdkJoLy96TUd2OS9wZTMvd1g3UWIvZExTYlM0MHZFUWdXR0RTLy93My8vLzM3ZjcvOEYrMkRmL3YvYlZlRUVJWWFXdGUzaHY2bVlFWm1CSC81bnY5ZmIveC9iSUtZVDl0YlgwOUx3Z2d3MHYwa3ZmL2ZmLzl2M3IyLy85eUN3bi82NmJTVjE4RUVERHJwZisvLy8vOXY3WDc3cnV0c2d0Qi8vL3phZEpmQ0RhWDlKTjczci8zLzdmdlh0Ly85aC8yMHRMMG5kTDRRZXIwbGo3ZnIveUdaWkJJLzl2N1gzLy8yMi8vZmIxdnI0UWZmNlQzLy8zaS8vYjk2OXZmMzlzUCsydHJwSk42WHd3WC9YLy8vLy8yL3RmYjlMMHQvL3JwK3ZYNFlYM1NTdjc2eHhzaHBJLzloKzllMzM5L2IvLzk2dDZYaGhoQlBlcVNOZ1krK3Y0Zi8yL3YrLy85di9iU2RMcEp2cnd3WVFWdTNMclgvZlh1Ly90KzZYdnZXOWJiLy9lMnFYcGVHR0VFM2VscXJmK3YzLyszOS90OXIzNy83ZGYrM3BlR0dRMnlzSUpwMjBzSUt2Mit2Ly8yLzB2Yit2UzcvOWRMMHZYd3c4RUNHMndrNFNXK3ZYMi8vdzM3ZjdlMzcrM1hwZSsya2szcGVHSGhCT0dLaWllVS90OVpETGovLzI4aG1SNlgzNlhhVzJReTQrOXRMUzlXK2lEUkhoZzhJS3d3bUVxM3JldlczLyszKzMrM3QrM1cvLy9HL1hwZmd3OElKc1dDcW42YjB0ZHYvOXZYaXZmZEwvdnJkVzY0MG05Znd3eENDYkZMOVgwdjcvL2I2Mzl2dXR0TGIxN3FPcVc5TDhnZUhzaHAyR0dDQ0lHOTJxMzFEMHYyLy8yLzY5dmJTMjB0dnIxM2RKOUw5TUZERENDQ2JhVlBxM3BmdC8vdC92OGJhWHBiZXUzdFYwMzErbUVnd3dnVnRwTGVrM2hMOXYvOXYvOTIwdHV2dEx0TDZXOUpmdkRCaEJLMkV0OUpoa00yTkxYYi8vYjEydmUwdGhwYmQxdGhhM1NmWC93d3dncllZU1N2Q1REQ1dDWDdELy9iLy9kaHBiWVMyN0NYYVR0YVY2Uy9wQTZDd3d3bCtDUVlNRWxJRUI2V3cxNy9iVmRydHcyRXRocGQybHNNSmY3ZWtGL3c4TFlNSUpPMElUSXdYRUpEVERCcW1xZW13NDA5TmRnd2drd3d3Z2syNE1KSnMxRFRXMGsybWgvMEhoVUdReVFJR0NEb01VRUVDa05DZ00xaXlHeFFRWVZrTUtNZ1hVTU1KQWdiUUlpQXpnM1pxSkVHcFF3WUpFR3BRdzUwSkVOUld4WFdDd3lEV28vYXc4Sm9NUWdRTWhzQmdnUVlTQkF1R0pJQXhycllZVWdRSXdVaGdRNFloWVloYkRRaGJYNFNZZXZzSklQQk5CZ3ZrbUJ3Q2thQlU0WkFnemYrL3Y3aGdzTUxjR0ZoaFU3MS80MElpRENFUklMSWdSRWdzQ0JFY1JFYUVRNE1FSkFzVGlJTUVJTUU5VUlpUDVCYkJxOGhraG5tUVd5L0VnZURJT1FVdUlaQXVFRHdadUlIZ3owRVI5SVJIRVdaZ1NnVmYwRUQ5TFFmMVFRUDB0Qi9wSTVnL1NwQkVRdVNlK2lCeUEzSHFFREg2VU1LSU5mVVVRTmdKWGZDb0dGTllIaGx4aEF3dm9nYkF6Qi9oQ09QLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vK1FQRnJJR29GOElIWUczUElaSWJka01nNENaQThDSUlaQWIyUUo3SUUwTmJNZzI1NURJQXc1QThQTWhrTHdwQThIOGdlQlpNZ3B6Q0N3dy9Da0R5MElIZ1ZocVFQRkRJSGdjYUVGWFJMYnlCNEwwSU52TC9rRml5RFJucGJlNmFYcmhOUDE3KzBpQjRQTWhrTDBiS1FQQi90TWhsVElLYy8vWGZTRDY3dlcvMmw2US8rdmZxdnIvLy96eWY2VzdYa0RVby85TFMvNi9DLy9UYSt1R2d3dkJmK2xldjhSLy8rclgvK3YvVi8xLy8vcTEvLy8vVi8vLy85SzB2Ly8vOXYvLy8vUy8vLy8vYlgvLy85TG5BMnljTktRa3lETE1nMi9rRzJlUTI2WkVvUTJvSU5UK1EwbklreURFeURhNUVvUVZ6a05xQ0VtUVpUa1J5RFRCRjRobW95R3E1QXc1QThGTnlCeGYvMDNCQWc4RURJYldvSUhnZ2VRMTljSUdGQmNnd2ZCUWdZUU1GQ0JnZ1lLQ0JoQTFDaE1FVTRaa0ZCU0d3UVJLaUM0eXlEMUVHRUVOSGtGeGhFcUlhQnYvMWNRZzhKaEJoRENEd2c5TWcxVUlHS2E0S21tUWFLSmhBd1ZCaERJR0tLRThnMFVJRVU5VjdYLy82c0o2RENoUWp3MkVSQUZ6eEVHR3lneUJqUWhvMDBDeUNnTUpwa0RBYURDUGpaQXZvZzFJYU5GUjRXaU1CNUJOQ0JoQkRQNUJRaklFVXRIQVVFZ0dBWC82dWpZcjB3andzSThMQ0NEWVNRUWZYOUJlbUU5VUVHOU1JOEwxUVFjTDdUVFNZYUlHRHBNSU5UWUVMLzZzSkEramcyZ2c0UVFPazJGU2F3anhQOUJlanh0SGllRWVKcEJoNk9EYUJBMTZRY0Y5NmZwOTZTUy85WHB2aEIwRUhRUWRKdlNmUUlOa00yWkRLbm9MSVp2b0VIUVRaRExtZ1FiU2NobHpRSU5oSU9ReTVxcjVEUk1obm4vZTJsZFZYLzFlK2tHMG5TZExJWlhxek1HZ1U3dnBjVXhDZGluU2JkSU9rN28yZXNobCs3dWs2MDJrL3BmK3IwOFFuV2xkVzlYaFArbHdtbmhPdHhDYlM0aFB2L2ZmOWFXdi9wWDlXazZUMTlYVGY2WFRUZE4wM1RwZE92LzA2YVRhVCtsLyszM3VsMXJmLy9vTC85ZmJYNi85dGYyMHJTNi85TEY2MTE2OVhyL1M2cnIyNjY2SEgvclRwMG54U1MyeUdweEF1LzdmdC82di92K2w3dnVsN2EvZjc3YzJxMzNTWDRRYWZwZjlDbC8vLzRRWC8rLy9WLzJ2WHVscXFXNkRYNmIvWC8vLzlMLy8vUytILzFxMmsyazlKSmJhQnBlSWd1Ly8vWC9wZi85Ny9zSCsycmRmRld0SUxERFFhK1F5UTMxL1hYLy85UC85Zi81cURVLzFyZE5QcEpiYVBFUXpYa01nQ3NSNi9IMy84Zi8rL3I3SWdHbjcvVHExZEpCaDRRVkJpdkJGQi8vL1MvNy8vLy8ySC9hVnIxNnF3OEpKQnJ3alFULzhnWVp0Ni81OVAvLy8vWWY3NzAzdHZTVDZTUU5lZ1gvOHpCVDJsLzdmLy85Zmh2KzYvU2J0YXY2RFhoQmZYL3RwZiszLy8vL2h2L1hTdlRla242VUdGNlgvL3RwZiszLy8vL2czKzlONy82VjZ0RC8vZC9zTUpmKzMvLy8zNUJrMC90ZGRKTnRWL0gwdi8vWWhmKzMvL2RhWDVBa1IrLzAzbzN2cEwvLzB2MjhNTC8yLy8vLzhIL3RLMTBrbTdXdi9TL2Qvd3pDQmYrMy8rLzErLzc3MWVsdlNYLy8xZC9wRC83Zi8vV3Jma0d1UCswdFgxYjlJZ1JILy9yNjNoTC8yLy83WHIvZjErL1NwdHRKZi85ZW03MzB2L2IvL2Yxdi83VjZlcjByOUwvL1hTdHRiMS85di8vcnB0ZnIrMWpZMG50VXEvKzE5N1gxLzl2LyswclMxLzlYcXFWdGlxWC85YlFWdG93clpEWVByLzdELy9iN1NZYTlwVzJqQ3h1NlY2Ly90aEcvYVRkaExiQzkvKzMvKzZWb0sxL3lLUFlTM3JTYmFTLy9oaExoaEpoa01Pd3dsdzE1QWdhUCszLy9hVnBNTUVjL2FWaE9HRXV1bGZTLy9pRm9NSUpoaFdLdGhoSllkMnVyQnJhOTIybEJnZ21LMXRKaW1LL2VyYVNCZi9hc3FJcGd3VnFHd1lKQkEyR0NEaGhBOElHMkVEQkF3UU9EQkJ3MkdsRk1MQ0tjRERDVlZCdTFoSmg2SC83Q2ptMEV4UWFuUU1vVVEyRjdJRUY1MERCTGhva05naHlHQzVEQmNFRG5RSElnRU9nRndZSUtFMWtOZ09VR0Uwd29PdG9LdzlmL2E2RFFhREMyQ3cvL3NGLyt4Q24wZ3d2aW1nMXZYVzAvL2hoRFFNSU1FRFFnd2hEWWlPTExoa2hsQllNRURDeERCQm9NRU8rSTQ0L2lJa0NUaElMR0JIZ1RpUXlRYU94SElIaCtFUkVhL3hGQkVNNThmSC9zSUovNi93ay8vL3BQK2wva0R3SUsvLy8vWC8zcit1dlN0Zi8vLzhldjBuckMrdjlwWkE4V3ZTcjBnMmwvLzdhWHRwZnFKVGdpNEd3R2VQMTZRanRwSmVRTkFhblh0TCswdHNKSmVoV3d3Z2tsWDJHRWdrbWc2d3hDQklnWmlDQ0IrRHJEQ2hmQ3lCdERPZGtjRE1NY01MRVJFZi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzRBSUFJQUFPQUFBQkF3QUJBQUFBVEFrQUFBRUJBd0FCQUFBQWN3SUFBQUlCQXdBQkFBQUFBUUFBQUFNQkF3QUJBQUFBQkFBQUFBWUJBd0FCQUFBQUFRQUFBQkVCQkFBQkFBQUFDQUFBQUJJQkF3QUJBQUFBQVFBQUFCVUJBd0FCQUFBQUFRQUFBQllCQXdBQkFBQUFjd0lBQUJjQkJBQUJBQUFBQnhNQUFCb0JCUUFCQUFBQXZoTUFBQnNCQlFBQkFBQUF4aE1BQUJ3QkF3QUJBQUFBQVFBQUFDZ0JBd0FCQUFBQUFnQUFBQUFBQUFBQUFNQVNBQUFFQUFBQXdCSUFBQVFBAAAAAAAAAABibWZNYWtlQXNjaWlUYWJsZXMAYm94Q3JlYXRlAGJveENvcHkAYm94Q2xvbmUAYm94RGVzdHJveQBib3hHZXRHZW9tZXRyeQBib3hTZXRHZW9tZXRyeQBib3hHZXRSZWZjb3VudABBoN8hC5cCYm94Q2hhbmdlUmVmY291bnQAYm94YUNyZWF0ZQBib3hhQ29weQBib3hhRGVzdHJveQBib3hhQWRkQm94AAAAAGJveGFFeHRlbmRBcnJheQBib3hhRXh0ZW5kQXJyYXlUb1NpemUAYm94YUdldENvdW50AGJveGFHZXRCb3gAAABib3hhR2V0Qm94R2VvbWV0cnkAYm94YVJlcGxhY2VCb3gAYm94YVJlbW92ZUJveABib3hhQ2xlYXIAYm94YVJlYWRTdHJlYW0AAAAAAAAAAGJveGFXcml0ZVN0cmVhbQBib3hhV3JpdGVNZW0AAAAAYm94Q2xpcFRvUmVjdGFuZ2xlAGJveGFTb3J0AGJveGFCaW5Tb3J0AEHA4SELYGJveGFTb3J0QnlJbmRleABib3hhR2V0RXh0ZW50AHBpeENvbm5Db21wAAAAAAAAAHBpeENvbm5Db21wUGl4YQBwaXhDb25uQ29tcEJCAAAAcGl4Q291bnRDb25uQ29tcABBsOIhC5cBbmV4dE9uUGl4ZWxJblJhc3RlcgBwaXhTZWVkZmlsbEJCAHBpeFNlZWRmaWxsNEJCAHBpeFNlZWRmaWxsOEJCAHBpeFNlZWRmaWxsAHBpeFNlZWRmaWxsNABwaXhTZWVkZmlsbDgAcHVzaEZpbGxzZWdCQgBwdXNoRmlsbHNlZwBwb3BGaWxsc2VnAHBpeEJsb2NrY29udgBB0OMhCxBwaXhCbG9ja2NvbnZHcmF5AEHw4yELpwFwaXhCbG9ja2NvbnZBY2N1bQBibG9ja2NvbnZMb3cAAGJsb2NrY29udkFjY3VtTG93AGRlY29kZUJhc2U2NABlbmNvZGVBc2NpaTg1AAAAAAEAAABVAAAAORwAAO1eCQCxhBwDZnBpeENyZWF0ZQBmcGl4RGVzdHJveQAAAAAAAGZwaXhTZXREaW1lbnNpb25zAGZwaXhHZXRXcGwAZnBpeFNldFdwbABBoOUhC1FmcGl4R2V0UmVmY291bnQAZnBpeENoYW5nZVJlZmNvdW50AGZwaXhHZXREYXRhAGZwaXhTZXREYXRhAAAAAAAAcGl4VW5zaGFycE1hc2tpbmcAQYDmIQsVcGl4VW5zaGFycE1hc2tpbmdHcmF5AEGg5iELFXBpeFVuc2hhcnBNYXNraW5nRmFzdABBwOYhCzdwaXhVbnNoYXJwTWFza2luZ0dyYXlGYXN0AAAAAAAAAHBpeFVuc2hhcnBNYXNraW5nR3JheTFEAEGA5yELMnBpeFVuc2hhcnBNYXNraW5nR3JheTJEAHBpeE51bUNvbG9ycwBwaXhjbWFwQ3JlYXRlAEHA5yELYnBpeGNtYXBDcmVhdGVMaW5lYXIAcGl4Y21hcENvcHkAcGl4Y21hcERlc3Ryb3kAAHBpeGNtYXBBZGRDb2xvcgBwaXhjbWFwQWRkUkdCQQAAcGl4Y21hcEFkZE5ld0NvbG9yAEGw6CELFnBpeGNtYXBBZGROZWFyZXN0Q29sb3IAQdDoIQsWcGl4Y21hcEFkZEJsYWNrT3JXaGl0ZQBB8OghCyNwaXhjbWFwR2V0Q291bnQAcGl4Y21hcEdldEZyZWVDb3VudABBoOkhC3ZwaXhjbWFwR2V0RGVwdGgAcGl4Y21hcEdldENvbG9yAHBpeGNtYXBHZXRSR0JBAABwaXhjbWFwR2V0SW5kZXgAcGl4Y21hcEhhc0NvbG9yAHBpeGNtYXBJc09wYXF1ZQBwaXhjbWFwSXNCbGFja0FuZFdoaXRlAEGg6iELF3BpeGNtYXBHZXRSYW5rSW50ZW5zaXR5AEHA6iELFnBpeGNtYXBHZXROZWFyZXN0SW5kZXgAQeDqIQsRcGl4Y21hcENvbnZlcnRUbzgAQYDrIQtjcGl4Y21hcFRvQXJyYXlzAHBpeGNtYXBTZXJpYWxpemVUb01lbW9yeQAAAAAAAAAAcGl4Y21hcERlc2VyaWFsaXplRnJvbU1lbW9yeQAAAABwaXhjbWFwQ29udmVydFRvSGV4AEHw6yEL0QFnZW5lcmF0ZVB0YUxpbmUAZ2VuZXJhdGVQdGFXaWRlTGluZQBnZW5lcmF0ZVB0YUJveABwaXhSZW5kZXJQdGEAcGl4UmVuZGVyUHRhQXJiAHBpeFJlbmRlckJveEFyYgBwaXhEaWxhdGUAcGl4RXJvZGUAcGl4T3BlbgBwaXhDbG9zZQBwaXhEaWxhdGVCcmljawBwaXhFcm9kZUJyaWNrAHBpeE9wZW5CcmljawBwaXhDbG9zZUJyaWNrAAAAAABwaXhDbG9zZVNhZmVCcmljawBB0O0hCxFwcm9jZXNzTW9ycGhBcmdzMQBB8O0hCxFwcm9jZXNzTW9ycGhBcmdzMgBBkO4hCxFwaXhFcXVhbFdpdGhBbHBoYQBBsO4hC+ABcGl4RXF1YWxXaXRoQ21hcABjbWFwRXF1YWwAAAAAAABwaXhVc2VzQ21hcENvbG9yAG51bWFDcmVhdGUAbnVtYURlc3Ryb3kAbnVtYUNvcHkAbnVtYUNsb25lAG51bWFBZGROdW1iZXIAAAAAAAAAAG51bWFSZXBsYWNlTnVtYmVyAG51bWFHZXRDb3VudABudW1hU2V0Q291bnQAbnVtYUdldEZWYWx1ZQBudW1hR2V0SVZhbHVlAG51bWFTZXRWYWx1ZQBudW1hR2V0SUFycmF5AG51bWFHZXRGQXJyYXkAQaDwIQtjbnVtYUdldFJlZmNvdW50AG51bWFDaGFuZ2VSZWZjb3VudABudW1hYUNyZWF0ZQBudW1hYURlc3Ryb3kAbnVtYWFBZGROdW1hAG51bWFhR2V0Q291bnQAbnVtYWFHZXROdW1hAEGQ8SELQG51bWFFeHRlbmRBcnJheQBudW1hYUV4dGVuZEFycmF5AG51bWFHZXRNYXgAAAAAAG51bWFNYWtlU2VxdWVuY2UAQeDxIQsQbnVtYUdldFNvcnRJbmRleABBgPIhC2VudW1hR2V0QmluU29ydEluZGV4AG51bWFKb2luAGJidWZmZXJDcmVhdGUAYmJ1ZmZlckRlc3Ryb3kAAAAAAAAAYmJ1ZmZlckRlc3Ryb3lBbmRTYXZlRGF0YQBiYnVmZmVyUmVhZABB8PIhCzdiYnVmZmVyRXh0ZW5kQXJyYXkAYmJ1ZmZlcldyaXRlAHBpeEdlbmVyYXRlSGFsZnRvbmVNYXNrAEGw8yELgQFwaXhTZXRNYXNrZWRDbWFwAGxfYnl0ZWFDcmVhdGUAAGxfYnl0ZWFJbml0RnJvbU1lbQBsX2J5dGVhRGVzdHJveQBsX2J5dGVhR2V0U2l6ZQBsX2J5dGVhR2V0RGF0YQBsX2J5dGVhQ29weURhdGEAbF9ieXRlYUFwcGVuZERhdGEAQcD0IQsTbF9ieXRlYUFwcGVuZFN0cmluZwBB4PQhCxdsX2J5dGVhRmluZEVhY2hTZXF1ZW5jZQBBgPUhC1BsX2J5dGVhRXh0ZW5kQXJyYXlUb1NpemUAAAAAAAAAAHNlbGVjdERlZmF1bHRQZGZFbmNvZGluZwAAAAAAAAAAcGl4YUNvbnZlcnRUb1BkZgBB4PUhCxRwaXhhQ29udmVydFRvUGRmRGF0YQBBgPYhC5QBcGl4V3JpdGVTdHJlYW1QZGYAcGl4V3JpdGVNZW1QZGYAbF9kbmFDcmVhdGUAbF9kbmFEZXN0cm95AGxfZG5hQ29weQBsX2RuYUNsb25lAGxfZG5hRW1wdHkAbF9kbmFBZGROdW1iZXIAbF9kbmFHZXRDb3VudABsX2RuYUdldElWYWx1ZQBsX2RuYUdldElBcnJheQBBoPchCxBsX2RuYUdldFJlZmNvdW50AEHA9yELV2xfZG5hQ2hhbmdlUmVmY291bnQAbF9kbmFhQ3JlYXRlAGxfZG5hYURlc3Ryb3kAbF9kbmFhQWRkRG5hAGxfZG5hYUdldENvdW50AGxfZG5hYUdldERuYQBBoPghCxBsX2RuYUV4dGVuZEFycmF5AEHA+CELEWxfZG5hYUV4dGVuZEFycmF5AEHg+CELEmxfZG5hRGlmZkFkalZhbHVlcwBBgPkhCxFwaXhSZWFkU3RyZWFtSnBlZwBBoPkhCyJmcmVhZEhlYWRlckpwZWcAZmdldEpwZWdSZXNvbHV0aW9uAEHQ+SELQWZnZXRKcGVnQ29tbWVudABwaXhXcml0ZUpwZWcAAAAAcGl4V3JpdGVTdHJlYW1KcGVnAHBpeFJlYWRNZW1KcGVnAEGg+iELEXJlYWRIZWFkZXJNZW1KcGVnAEHA+iELNHBpeFdyaXRlTWVtSnBlZwByZWFkSGVhZGVySnAyawAAZnJlYWRIZWFkZXJKcDJrAGloZHIAQYD7IQsRcmVhZEhlYWRlck1lbUpwMmsAQaD7IQsTcGl4Q29udmVydFRvUGRmRGF0YQBBwPshCzZwdHJhQ29uY2F0ZW5hdGVQZGZUb0RhdGEAAAAAAAAAAGxfZ2VuZXJhdGVDSURhdGFGb3JQZGYAQYD8IQsWbF9nZW5lcmF0ZUZsYXRlRGF0YVBkZgBBoPwhCxJsX2dlbmVyYXRlSnBlZ0RhdGEAQcD8IQsRcGl4R2VuZXJhdGVDSURhdGEAQeD8IQsTbF9nZW5lcmF0ZUZsYXRlRGF0YQBBgP0hCxBsX2dlbmVyYXRlRzREYXRhAEGg/SELImxfQ0lEYXRhRGVzdHJveQBsX2dlbmVyYXRlSnAya0RhdGEAQdD9IQsUcGl4R2VuZXJhdGVGbGF0ZURhdGEAQfD9IQsTcGl4R2VuZXJhdGVKcGVnRGF0YQBBkP4hCzdwaXhHZW5lcmF0ZUc0RGF0YQBsX2dlbmVyYXRlUGRmAGdlbmVyYXRlRml4ZWRTdHJpbmdzUGRmAEHQ/iELFGdlbmVyYXRlRXNjYXBlU3RyaW5nAEHw/iELFWdlbmVyYXRlUGFnZVN0cmluZ1BkZgBBkP8hC0RnZW5lcmF0ZUNvbnRlbnRTdHJpbmdQZGYAAAAAAAAAAGdlbmVyYXRlUHJlWFN0cmluZ3NQZGYAcGRmZGF0YUdldENpZABB4P8hCzVnZW5lcmF0ZUNvbG9ybWFwU3RyaW5nc1BkZgAAAAAAAGdlbmVyYXRlT3V0cHV0RGF0YVBkZgBBoIAiCxRtYWtlVHJhaWxlclN0cmluZ1BkZgBBwIAiC0JwYXJzZVRyYWlsZXJQZGYAZ2VuZXJhdGVQYWdlc09ialN0cmluZ1BkZgBwZGZkYXRhRGVzdHJveQBwaXhDcmVhdGUAQZCBIgshcGl4Q3JlYXRlTm9Jbml0AHBpeENyZWF0ZVRlbXBsYXRlAEHAgSILF3BpeENyZWF0ZVRlbXBsYXRlTm9Jbml0AEHggSILQnBpeENyZWF0ZUhlYWRlcgBwaXhDbG9uZQBwaXhEZXN0cm95AHBpeENvcHkAAAAAAHBpeFJlc2l6ZUltYWdlRGF0YQBBsIIiC2dwaXhDb3B5Q29sb3JtYXAAcGl4U2l6ZXNFcXVhbABwaXhHZXRXaWR0aABwaXhTZXRXaWR0aABwaXhHZXRIZWlnaHQAcGl4U2V0SGVpZ2h0AHBpeEdldERlcHRoAHBpeFNldERlcHRoAEGggyILUnBpeEdldERpbWVuc2lvbnMAcGl4R2V0U3BwAHBpeFNldFNwcABwaXhDb3B5U3BwAHBpeEdldFdwbABwaXhTZXRXcGwAcGl4R2V0UmVmY291bnQAQYCEIgtQcGl4Q2hhbmdlUmVmY291bnQAcGl4R2V0WFJlcwBwaXhTZXRYUmVzAHBpeEdldFlSZXMAcGl4U2V0WVJlcwAAAHBpeFNldFJlc29sdXRpb24AQeCEIgsRcGl4Q29weVJlc29sdXRpb24AQYCFIgsScGl4U2NhbGVSZXNvbHV0aW9uAEGghSILEXBpeEdldElucHV0Rm9ybWF0AEHAhSILEXBpeFNldElucHV0Rm9ybWF0AEHghSILUnBpeENvcHlJbnB1dEZvcm1hdABwaXhHZXRUZXh0AHBpeFNldFRleHQAcGl4Q29weVRleHQAcGl4R2V0Q29sb3JtYXAAcGl4U2V0Q29sb3JtYXAAQcCGIgs0cGl4RGVzdHJveUNvbG9ybWFwAHBpeEdldERhdGEAcGl4U2V0RGF0YQBwaXhGcmVlRGF0YQBBgIciCxRwaXhCbGVuZFdpdGhHcmF5TWFzawBBoIciC3JwaXhBbHBoYUJsZW5kVW5pZm9ybQBwaXhHZXRQaXhlbABwaXhTZXRQaXhlbABwaXhDbGVhclBpeGVsAHBpeEZsaXBQaXhlbABwaXhDbGVhckFsbABwaXhTZXRBbGwAAABwaXhTZXRBbGxBcmJpdHJhcnkAQaCIIgvEAXBpeFNldEJsYWNrT3JXaGl0ZQBwaXhDbGVhckluUmVjdABwaXhTZXRJblJlY3QAcGl4U2V0UGFkQml0cwAAAAAAAAAAAQAAAAMAAAAHAAAADwAAAB8AAAA/AAAAfwAAAP8AAAD/AQAA/wMAAP8HAAD/DwAA/x8AAP8/AAD/fwAA//8AAP//AQD//wMA//8HAP//DwD//x8A//8/AP//fwD///8A////Af///wP///8H////D////x////8/////f/////8AQfSJIguAAQEAAAADAAAABwAAAA8AAAAfAAAAPwAAAH8AAAD/AAAA/wEAAP8DAAD/BwAA/w8AAP8fAAD/PwAA/38AAP//AAD//wEA//8DAP//BwD//w8A//8fAP//PwD//38A////AP///wH///8D////B////w////8f////P////3//////AEGEiyILgAEBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9//////wBBlIwiC4ABAQAAAAMAAAAHAAAADwAAAB8AAAA/AAAAfwAAAP8AAAD/AQAA/wMAAP8HAAD/DwAA/x8AAP8/AAD/fwAA//8AAP//AQD//wMA//8HAP//DwD//x8A//8/AP//fwD///8A////Af///wP///8H////D////x////8/////f/////8AQaCNIgsTcGl4U2V0T3JDbGVhckJvcmRlcgBBwI0iC0NwaXhTZXRNaXJyb3JlZEJvcmRlcgBwaXhDb3B5Qm9yZGVyAHBpeEFkZEJvcmRlcgBwaXhBZGRCb3JkZXJHZW5lcmFsAEGQjiILJnBpeFJlbW92ZUJvcmRlcgBwaXhSZW1vdmVCb3JkZXJHZW5lcmFsAEHAjiILMXBpeFNoaWZ0QW5kVHJhbnNmZXJBbHBoYQAAAAAAAAAAcGl4Q3JlYXRlUkdCSW1hZ2UAQYCPIgsScGl4R2V0UkdCQ29tcG9uZW50AEGgjyILEnBpeFNldFJHQkNvbXBvbmVudABBwI8iCxZwaXhHZXRSR0JDb21wb25lbnRDbWFwAEHgjyILE3BpeENvcHlSR0JDb21wb25lbnQAQYCQIgsgY29tcG9zZVJHQlBpeGVsAGNvbXBvc2VSR0JBUGl4ZWwAQbCQIgsUcGl4RW5kaWFuQnl0ZVN3YXBOZXcAQdCQIgsRcGl4RW5kaWFuQnl0ZVN3YXAAQfCQIgsXcGl4RW5kaWFuVHdvQnl0ZVN3YXBOZXcAQZCRIgsUcGl4RW5kaWFuVHdvQnl0ZVN3YXAAQbCRIgsQcGl4R2V0UmFzdGVyRGF0YQBB0JEiC2VwaXhBbHBoYUlzT3BhcXVlAHBpeFNldE1hc2tlZAAAAHBpeFBhaW50VGhyb3VnaE1hc2sAcGl4SW52ZXJ0AHBpeE9yAHBpeEFuZABwaXhYb3IAcGl4U3VidHJhY3QAcGl4WmVybwBBwJIiCyRwaXhGb3JlZ3JvdW5kRnJhY3Rpb24AcGl4Q291bnRQaXhlbHMAQfCSIgsTcGl4Q291bnRQaXhlbHNCeVJvdwBBkJMiCxNwaXhDb3VudFBpeGVsc0luUm93AEGwkyILEG1ha2VQaXhlbFN1bVRhYjgAQdCTIgsTcGl4R2V0R3JheUhpc3RvZ3JhbQBB8JMiCxBwaXhDbGlwUmVjdGFuZ2xlAEGQlCILE3BpeENsaXBUb0ZvcmVncm91bmQAQbCUIgsWcGl4Q2xpcEJveFRvRm9yZWdyb3VuZABB0JQiC3JwaXhTY2FuRm9yRm9yZWdyb3VuZABwaXhhQ3JlYXRlAHBpeGFEZXN0cm95AHBpeGFDb3B5AHBpeGFBZGRQaXgAcGl4YUFkZEJveAAAAAAAAHBpeGFFeHRlbmRBcnJheVRvU2l6ZQBwaXhhR2V0Q291bnQAQdCVIgtAcGl4YUNoYW5nZVJlZmNvdW50AHBpeGFHZXRQaXgAAABwaXhhR2V0UGl4RGltZW5zaW9ucwBwaXhhR2V0Qm94YQBBoJYiC7MBcGl4YUdldEJveGFDb3VudABwaXhhR2V0Qm94AAAAAABwaXhhR2V0Qm94R2VvbWV0cnkAcGl4YVNldEJveGEAcGl4YVJlcGxhY2VQaXgAcGl4YUNsZWFyAHBpeGFSZWFkAHBpeGFSZWFkU3RyZWFtAHBpeGFFeHRlbmRBcnJheQBwaXhhY2NDcmVhdGUAcGl4YWNjRGVzdHJveQBwaXhhY2NGaW5hbABwaXhhY2NHZXRQaXgAQeCXIgtQcGl4YWNjR2V0T2Zmc2V0AHBpeGFjY0FkZABwaXhhY2NTdWJ0cmFjdAAAAAAAAAAAcGl4YWNjTXVsdENvbnN0AHBpeGFBbnlDb2xvcm1hcHMAQcCYIgsQcGl4YUdldERlcHRoSW5mbwBB4JgiCyJwaXhhQ29udmVydFRvU2FtZURlcHRoAHBpeGFEaXNwbGF5AEGQmSILQHBpeGFEaXNwbGF5VGlsZWRJbkNvbHVtbnMAAAAAAAAAcGl4RmluYWxBY2N1bXVsYXRlAHBpeEFjY3VtdWxhdGUAQeCZIgsWcGl4TXVsdENvbnN0QWNjdW11bGF0ZQBBgJoiCxFwaXhSZW1vdmVDb2xvcm1hcABBoJoiCxNwaXhBZGRHcmF5Q29sb3JtYXA4AEHAmiILE3BpeENvbnZlcnRSR0JUb0dyYXkAQeCaIgvhAXBpeENvbnZlcnQxNlRvOABwaXhVbnBhY2tCaW5hcnkAcGl4Q29udmVydDFUbzE2AHBpeENvbnZlcnQxVG8zMgBwaXhDb252ZXJ0MVRvMgBwaXhDb252ZXJ0MVRvNAAAAHBpeENvbnZlcnQxVG84Q21hcABwaXhDb252ZXJ0MVRvOABwaXhDb252ZXJ0MlRvOABwaXhDb252ZXJ0NFRvOABwaXhDb252ZXJ0VG84AHBpeENvbnZlcnRUbzMyAAAAAHBpeENvbnZlcnQ4VG8zMgBwaXhDb252ZXJ0VG84T3IzMgBB0JwiCzJwaXhDb252ZXJ0MjR0bzMyAHBpeFJlbW92ZUFscGhhAHBpeENvbnZlcnRMb3NzbGVzcwBBkJ0iCxNwaXhDb252ZXJ0Rm9yUFNXcmFwAEGwnSILQHBpeFJlYWRTdHJlYW1QbmcAcmVhZEhlYWRlclBuZwBmcmVhZEhlYWRlclBuZwAAAHJlYWRIZWFkZXJNZW1QbmcAQYCeIgsRZmdldFBuZ1Jlc29sdXRpb24AQaCeIgsXaXNQbmdJbnRlcmxhY2VkAENvbW1lbnQAQcCeIgtjcGl4V3JpdGVTdHJlYW1QbmcAcGl4UmVhZE1lbVBuZwBDb21tZW50AHBpeFdyaXRlTWVtUG5nAHB0YUNyZWF0ZQBwdGFEZXN0cm95AHB0YUFkZFB0AHB0YUdldFJlZmNvdW50AEGwnyILsAFwdGFDaGFuZ2VSZWZjb3VudABwdGFHZXRDb3VudABwdGFHZXRQdABwdGFHZXRJUHQAcHRhU2V0UHQAAAAAAAAAcHRhRXh0ZW5kQXJyYXlzAHB0YUpvaW4AcHRyYUNyZWF0ZQBwdHJhRGVzdHJveQBwdHJhQWRkAHB0cmFJbnNlcnQAcHRyYVJlbW92ZQBwdHJhUmVtb3ZlTGFzdAAAAAAAcHRyYUNvbXBhY3RBcnJheQBB8KAiCyJwdHJhR2V0TWF4SW5kZXgAcHRyYUdldEFjdHVhbENvdW50AEGgoSILEHB0cmFHZXRQdHJUb0l0ZW0AQcChIgtQcHRyYUV4dGVuZEFycmF5AHBpeFJlYWRTdHJlYW1CbXAAcGl4UmVhZE1lbUJtcAAAcGl4V3JpdGVTdHJlYW1CbXAAcGl4V3JpdGVNZW1CbXAAQaCiIgsxcGl4UmVhZFN0cmVhbVBubQBmcmVhZEhlYWRlclBubQBwaXhXcml0ZVN0cmVhbVBubQBB4KIiC1VwaXhXcml0ZVN0cmVhbVBhbQBwaXhSZWFkTWVtUG5tAHJlYWRIZWFkZXJNZW1Qbm0AcGl4V3JpdGVNZW1Qbm0AcG5tUmVhZE5leHRBc2NpaVZhbHVlAEHAoyILEXBubVJlYWROZXh0TnVtYmVyAEHgoyILEXBubVJlYWROZXh0U3RyaW5nAEGApCILVHBubVNraXBDb21tZW50TGluZXMAcGl4UmVhZABwaXhSZWFkU3RyZWFtAGZpbmRGaWxlRm9ybWF0AAAAAAAAAABmaW5kRmlsZUZvcm1hdFN0cmVhbQBB4KQiCyVmaW5kRmlsZUZvcm1hdEJ1ZmZlcgD/T/9RAAAADGpQICANCocKAEGQpSILPGZpbGVGb3JtYXRJc1RpZmYAcGl4UmVhZE1lbQAAAAAAcGl4UmVhZEhlYWRlck1lbQBwaXhSYXN0ZXJvcABB16UiC32AAAAAwAAAAOAAAADwAAAA+AAAAPwAAAD+AAAA/wAAgP8AAMD/AADg/wAA8P8AAPj/AAD8/wAA/v8AAP//AID//wDA//8A4P//APD//wD4//8A/P//AP7//wD///+A////wP///+D////w////+P////z////+/////////wBB56YiC8wBgAAAAMAAAADgAAAA8AAAAPgAAAD8AAAA/gAAAP8AAID/AADA/wAA4P8AAPD/AAD4/wAA/P8AAP7/AAD//wCA//8AwP//AOD//wDw//8A+P//APz//wD+//8A////gP///8D////g////8P////j////8/////v////////9waXhSb3RhdGVPcnRoAHBpeFJvdGF0ZTE4MABwaXhSb3RhdGU5MABwaXhGbGlwTFIAcGl4RmxpcFRCAABtYWtlUmV2ZXJzZUJ5dGVUYWIxAEHAqCILE21ha2VSZXZlcnNlQnl0ZVRhYjIAQeCoIgskbWFrZVJldmVyc2VCeXRlVGFiNABzYXJyYXlDcmVhdGUAIAoJAEGQqSILkQFzYXJyYXlDcmVhdGVXb3Jkc0Zyb21TdHJpbmcAAAAAAHNhcnJheUNyZWF0ZUxpbmVzRnJvbVN0cmluZwBzYXJyYXlEZXN0cm95AAAAAAAAAHNhcnJheUFkZFN0cmluZwBzYXJyYXlHZXRDb3VudAAAc2FycmF5R2V0U3RyaW5nAHNhcnJheUdldFJlZmNvdW50AEGwqiILI3NhcnJheUNoYW5nZVJlZmNvdW50AHNhcnJheVRvU3RyaW5nAEHgqiILE3NhcnJheVRvU3RyaW5nUmFuZ2UAQYCrIgsRc2FycmF5U3BsaXRTdHJpbmcAQaCrIgsRc2FycmF5RXh0ZW5kQXJyYXkAQcCrIgs1cGl4RXhwYW5kQmluYXJ5UmVwbGljYXRlAAAAAAAAAABwaXhFeHBhbmRCaW5hcnlQb3dlcjIAQYCsIgtxbWFrZUV4cGFuZFRhYjJ4AG1ha2VFeHBhbmRUYWI0eABtYWtlRXhwYW5kVGFiOHgAcGl4U2NhbGUAAAAAAAAAAHBpeFNjYWxlR2VuZXJhbABwaXhTY2FsZUNvbG9yTEkAcGl4U2NhbGVDb2xvcjJ4TEkAQYCtIgsgcGl4U2NhbGVDb2xvcjR4TEkAcGl4U2NhbGVHcmF5TEkAQbCtIgsQcGl4U2NhbGVHcmF5MnhMSQBB0K0iCxBwaXhTY2FsZUdyYXk0eExJAEHwrSILQnBpeFNjYWxlQXJlYU1hcABwaXhTY2FsZUFyZWFNYXAyAHBpeFNjYWxlQmluYXJ5AHBpeEV4cGFuZFJlcGxpY2F0ZQBBwK4iCydwaXhTY2FsZUFuZFRyYW5zZmVyQWxwaGEAc2NhbGVCaW5hcnlMb3cAQfCuIgsRcGl4U2VlZGZpbGxCaW5hcnkAQZCvIgsTcGl4RGlzdGFuY2VGdW5jdGlvbgBBsK8iCxFzZWVkZmlsbEJpbmFyeUxvdwBB0K8iCzdkaXN0YW5jZUZ1bmN0aW9uTG93AHNlbENyZWF0ZQBzZWxEZXN0cm95AHNlbENyZWF0ZUJyaWNrAEGQsCILEGNyZWF0ZTJkSW50QXJyYXkAQbCwIgs3c2VsR2V0UGFyYW1ldGVycwBzZWxTZXRPcmlnaW4AAABzZWxhRmluZE1heFRyYW5zbGF0aW9ucwBB8LAiCxFwaXhSZWFkU3RyZWFtU3BpeABBkLEiCyJzcmVhZEhlYWRlclNwaXgAcGl4V3JpdGVTdHJlYW1TcGl4AEHAsSILFHBpeFNlcmlhbGl6ZVRvTWVtb3J5AEHgsSILcXBpeERlc2VyaWFsaXplRnJvbU1lbW9yeQBsc3RhY2tDcmVhdGUAbHN0YWNrRGVzdHJveQBsc3RhY2tBZGQAbHN0YWNrUmVtb3ZlAGxzdGFja0dldENvdW50AAAAAAAAAGxzdGFja0V4dGVuZEFycmF5AEHgsiILJHBpeEFkZFNpbmdsZVRleHRibG9jawBwaXhTZXRUZXh0bGluZQBBkLMiCxFibWZHZXRMaW5lU3RyaW5ncwBBsLMiCxBibWZHZXRXb3JkV2lkdGhzAEHQsyILMWJtZkdldFN0cmluZ1dpZHRoAHBpeFJlYWRUaWZmAAAAcGl4UmVhZFN0cmVhbVRpZmYAQZC0IgsUcGl4V3JpdGVTdHJlYW1UaWZmV0EAQbC0IgsxcGl4UmVhZEZyb21NdWx0aXBhZ2VUaWZmAAAAAAAAAABnZXRUaWZmUmVzb2x1dGlvbgBB8LQiCxFyZWFkSGVhZGVyTWVtVGlmZgBBkLUiCxNmaW5kVGlmZkNvbXByZXNzaW9uAEGwtSILJGV4dHJhY3RHNERhdGFGcm9tRmlsZQBwaXhSZWFkTWVtVGlmZgBB4LUiCzVwaXhSZWFkTWVtRnJvbU11bHRpcGFnZVRpZmYAAAAAAHBpeFdyaXRlTWVtVGlmZkN1c3RvbQBBoLYiCxVwaXhSZWFkRnJvbVRpZmZTdHJlYW0AQcC2IgsUcGl4V3JpdGVUb1RpZmZTdHJlYW0AQeC2IgsTd3JpdGVDdXN0b21UaWZmVGFncwBBgLciCxdnZXRUaWZmU3RyZWFtUmVzb2x1dGlvbgBBoLciCyV0aWZmUmVhZEhlYWRlclRpZmYAZm9wZW5UaWZmAG9wZW5UaWZmAEHQtyILEmZvcGVuVGlmZk1lbXN0cmVhbQBB8LciC1V0aWZmU2Vla0NhbGxiYWNrAHN0cmluZ05ldwBzdHJpbmdDb3B5AHN0cmluZ1JlcGxhY2UAc3RyaW5nTGVuZ3RoAHN0cmluZ0NhdABzdHJ0b2tTYWZlAEHQuCILFWFycmF5RmluZEVhY2hTZXF1ZW5jZQBB8LgiC0JhcnJheUZpbmRTZXF1ZW5jZQByZWFsbG9jTmV3AGxfYmluYXJ5UmVhZAAAAAAAAABsX2JpbmFyeVJlYWRTdHJlYW0AQcC5IgtBbF9iaW5hcnlSZWFkU2VsZWN0U3RyZWFtAGxfYmluYXJ5V3JpdGUAZm5ieXRlc0luRmlsZQBsX2JpbmFyeUNvcHkAQZC6IgsgZm9wZW5SZWFkU3RyZWFtAGZvcGVuV3JpdGVTdHJlYW0AQcC6IgthZm9wZW5SZWFkRnJvbU1lbW9yeQBsZXB0X3JtZmlsZQBzcGxpdFBhdGhBdERpcmVjdG9yeQBwYXRoSm9pbgAAAGNvbnZlcnRTZXBDaGFyc0luUGF0aABnZW5QYXRobmFtZQBBsLsiCyJtYWtlVGVtcERpcm5hbWUAbF9tYWtlVGVtcEZpbGVuYW1lAEHguyILEHBpeFdyaXRlU3RyZWFtUFMAQYC8IgsQcGl4V3JpdGVTdHJpbmdQUwBBoLwiCxZnZW5lcmF0ZVVuY29tcHJlc3NlZFBTAEHAvCIL0QpnZXRTY2FsZWRQYXJhbWV0ZXJzUFMAcGl4V3JpdGVNZW1QUwBwaXhXcml0ZQBwaXhXcml0ZVN0cmVhbQAAAAAAcGl4Q2hvb3NlT3V0cHV0Rm9ybWF0AHBpeFdyaXRlTWVtAHpsaWJDb21wcmVzcwAAAEDFWJ9TQksAQEkyoyKoEcVYIXv8c2JoxVi/RQswfhifU/xzQW1UYp9Ts0FBLRIXQktiaFRiflhCSyE7uijDFABAxVifU0JLAEBJMqMiqBFJMr9Fs0EhO0kygic3G+ANoyILMEEtuiijIjcbvxKOCagRfhgSF8MUqBHgDY4J3wQAAAAAAADwP+9hSLFQMfY/ym9Nka7n9D+qEWzvYtDyPwAAAAAAAPA/O7+nwGkk6T+7IMd7elHhP12rct5VqNE/gQEdWg4ChiUQAxQREgQLCBQF2AMXBtoBGQflABwIbwAeCTYAIQoaACMLDQAJDAYACg0DAAwNAQCPD39aJBAlPyYR8iwnEnwgKBO5FyoU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AQAA/////wQAAAAYAAAAlH8CABcBAAD/////AwAAABgAAACUfwIAGAEAAP7///8DAAAAEgABAEmHAgAZAQAA/v///wMAAAATAAEAM48CABoBAAABAAEABQAAAAMAAQASlwIAGwEAAAEAAQAFAAAAAwABANSfAgAcAQAAAQABAAMAAAAUAAAAD6cCAB0BAAD/////AgAAAEEAAQA5rwIAHgEAAAEAAQAFAAAABAABAEm3AgAfAQAAAQABAAUAAAAEAAEAS78CACABAAD/////BAAAAAAAAABfyAIAIQEAAP////8EAAAAAAAAAI3QAgAiAQAAAQABAAMAAAAAAAEAzNgCACMBAAD/////AwAAAAAAAQCc3wIAKAEAAAEAAQADAAAAFgABAOPlAgApAQAAAgACAAMAAAAXAAEAbOwCACwBAAABAAEAAwAAAAAAAQB59AIALQEAAP////8DAAAALAABAFD7AgAxAQAA/////wIAAABBAAEAxQEDADIBAAAUABQAAgAAAEEAAQA0CQMAOwEAAP////8CAAAAQQABAGgQAwA8AQAA/////wIAAABBAAEAkBYDAD4BAAACAAIABQAAAEEAAQBzHAMAPwEAAAYABgAFAAAAQQABAKciAwBAAQAA/////wMAAAAaAAEA2SgDAEEBAAACAAIAAwAAACUAAQBALwMAQgEAAAEAAQAEAAAAAgAAAGA1AwBCAQAAAQABAAMAAAACAAAAYDUDAEMBAAABAAEABAAAAAIAAADbOwMAQwEAAAEAAQADAAAAAgAAANs7AwBEAQAA//8BAAQAAAAZAAAAWUEDAEUBAAD//wEABAAAABgAAAA3RwMARQEAAP//AQADAAAAGAAAADdHAwBKAQAA/////w0AAAAxAAEBN0wDAEoBAAD/////BAAAADEAAQE3TAMATAEAAAEAAQADAAAAQQAAAGhRAwBNAQAA/////wIAAAAuAAEBGlYDAE4BAAABAAEAAwAAAEEAAQC6WgMAUAEAAAIAAgADAAAAQQAAAA5fAwBQAQAAAgACAAEAAABBAAAADl8DAFEBAAD/////AgAAAEEAAQBkYwMAUgEAAP////8DAAAAHwAAAexmAwBSAQAA/////wEAAAAfAAAB7GYDAFMBAAD/////AwAAACAAAABZawMAVAEAAP7///8AAAAAIQABAIxvAwBVAQAA/v///wAAAAAiAAEA9nIDAFcBAAD///3/AQAAAEEAAAFwdgMAWAEAAAEAAQAJAAAAQQAAAPF5AwBYAQAAAQABAAgAAABBAAAA8XkDAFgBAAABAAEABgAAAEEAAADxeQMAWQEAAAEAAQAJAAAAQQAAACF9AwBZAQAAAQABAAgAAABBAAAAIX0DAFkBAAABAAEABgAAAEEAAAAhfQMAEQIAAAMAAwAFAAAAQQAAAF6AAwASAgAAAgACAAMAAAAnAAAA2YIDABMCAAABAAEAAwAAACgAAACIhQMAFAIAAAYABgAFAAAAKQABAHWIAwAUAgAABgAGAAQAAAApAAEAdYgDALwCAAD9//3/AQAAAEEAAAEjiwMA44AAAAEAAQADAAAAHwAAAOyNAwDkgAAA/v///wMAAAAgAAAArJADAOWAAAABAAEABAAAACMAAACukwMA5YAAAAEAAQADAAAAIwAAAK6TAwDmgAAAAQABAAQAAAAkAAAA65UDAOaAAAABAAEAAwAAACQAAADrlQMAFIIAAAEAAQAEAAAAQQABAMGYAwAVggAAAQABAAQAAABBAAEAdZsDABaCAAD/////AgAAAEEAAQBrngMAF4IAAP////8CAAAAQQABAC+hAwAYggAAAQABAAsAAABBAAEAOaMDABmCAAAQABAACwAAAEEAAQCZpQMAGoIAABAAEAALAAAAQQABAKKnAwCYggAA/////wIAAABBAAEAZ6kDALuDAAD9//3/BAAAAEEAAAHeqgMASYYAAP3//f8BAAAAQQAAAZ2sAwBphwAAAQABAAQAAABBAAAAc64DAHOHAAD9//3/BwAAAEEAAAEEsAMAJYgAAAEAAQAEAAAAQQAAAC6xAwA/kgAAAQABAAwAAABBAAAAXbIDAAWgAAABAAEABAAAAEEAAAD8swMAEsYAAAQABAABAAAAQQAAAIG1AwATxgAABAAEAAEAAABBAAAA3rYDABTGAAD/////AgAAAEEAAQAvvgMAFcYAAP////8CAAAAQQABAFa/AwAVxgAA/////wEAAABBAAEBVr8DABbGAAD/////AQAAAEEAAAFwwAMAF8YAAAEAAQADAAAAQQAAALPBAwAYxgAA/////wMAAABBAAABlcIDABnGAAACAAIAAwAAAEEAAADDwwMAGsYAAP////8EAAAAQQAAAWfFAwAaxgAA/////wMAAABBAAABZ8UDABrGAAD/////BQAAAEEAAAFnxQMAG8YAAP////8KAAAAQQAAAfzGAwAcxgAA/////woAAABBAAABJ8gDAB3GAAD+//7/BAAAAEEAAACmyQMAHcYAAP7//v8DAAAAQQAAAKbJAwAexgAAAgACAAUAAABBAAAAkcoDAFzGAAABAAEABQAAAEEAAABRywMAH8YAAAIAAgAEAAAAQQAAAF/MAwAfxgAAAgACAAMAAABBAAAAX8wDAB/GAAACAAIABQAAAEEAAABfzAMAIMYAAAIAAgAEAAAAQQAAAHjNAwAgxgAAAgACAAMAAABBAAAAeM0DACDGAAACAAIABQAAAEEAAAB4zQMAIcYAAP////8KAAAAQQAAAZvOAwAixgAA/////woAAABBAAABYc8DACPGAAD/////CgAAAEEAAAE10AMAJMYAAP////8KAAAAQQAAAS7RAwAlxgAA/////woAAABBAAABE9IDACbGAAD/////CgAAAEEAAAH70gMAJ8YAAP////8FAAAAQQAAAeLTAwAoxgAA/////wMAAABBAAAB3NQDACjGAAD/////BQAAAEEAAAHc1AMAKcYAAAIAAgAFAAAAQQAAAOXVAwAqxgAAAQABAAoAAABBAAAAXtYDACvGAAABAAEABQAAAEEAAAAI1wMALMYAAAEAAQAFAAAAQQAAAKHXAwAtxgAAAQABAAQAAABBAAAAX9gDAC7GAAABAAEABQAAAEEAAAAH2QMAL8YAAP////8CAAAAQQABAIfZAwAwxgAABAAEAAUAAABBAAAAJtoDADHGAAABAAEABQAAAEEAAADm2gMAMsYAAAEAAQAFAAAAQQAAAKLbAwAzxgAAAQABAAUAAABBAAAAMdwDADTGAAD/////AQAAAEEAAAGy3AMANcYAAAEAAQADAAAAQQAAAEDdAwBaxgAAAQABAAMAAABBAAAA3N0DAFvGAAABAAEAAwAAAEEAAABf3gMAXcYAABAAEAABAAAAQQAAAATfAwCLxgAA/////wIAAABBAAEAdN8DAIvGAAD/////AQAAAEEAAQF03wMAjMYAAP////8HAAAAQQAAAc/fAwCNxgAABAAEAAQAAABBAAAAHOADAI3GAAAEAAQAAwAAAEEAAAAc4AMAjsYAAP////8EAAAAQQAAAabgAwCPxgAA/////wcAAABBAAABDeEDAJDGAAD/////CgAAAEEAAAFs4QMAkcYAAP////8HAAAAQQAAAbzhAwCSxgAA/////woAAABBAAABM+IDAEHQhyMLE19USUZGTWVyZ2VGaWVsZEluZm8AQfCHIwuBAWZvciBmaWVsZCBpbmZvIGFycmF5AAAAAAEAAAABAAAAAQAAAAIAAAAEAAAACAAAAAEAAAABAAAAAgAAAAQAAAAIAAAABAAAAAgAAAAEAAAAAQAAAAEAAAACAAAABAAAAAQAAAABAAAAAQAAAAIAAAAEAAAABAAAAAQAAAAIAAAABABBgIkjCxdFc3RpbWF0ZVN0cmlwQnl0ZUNvdW50cwBBoIkjCyJNaXNzaW5nUmVxdWlyZWQAVElGRkZldGNoRGlyZWN0b3J5AEHQiSMLEnRvIGZldGNoIHRhZyB2YWx1ZQBB8IkjC4MLZm9yICJSZWZlcmVuY2VCbGFja1doaXRlIiBhcnJheQBEdW1wTW9kZUVuY29kZQAACAA1AAAABgAHAAEABAAHAAIABAAIAAMABAALAAQABAAMAAUABAAOAAYABAAPAAcABQATAAgABQAUAAkABQAHAAoABQAIAAsABgAIAAwABgADAA0ABgA0AA4ABgA1AA8ABgAqABAABgArABEABwAnABIABwAMABMABwAIABQABwAXABUABwADABYABwAEABcABwAoABgABwArABkABwATABoABwAkABsABwAYABwACAACAB0ACAADAB4ACAAaAB8ACAAbACAACAASACEACAATACIACAAUACMACAAVACQACAAWACUACAAXACYACAAoACcACAApACgACAAqACkACAArACoACAAsACsACAAtACwACAAEAC0ACAAFAC4ACAAKAC8ACAALADAACABSADEACABTADIACABUADMACABVADQACAAkADUACAAlADYACABYADcACABZADgACABaADkACABbADoACABKADsACABLADwACAAyAD0ACAAzAD4ACAA0AD8ABQAbAEAABQASAIAABgAXAMAABwA3AAABCAA2AEABCAA3AIABCABkAMABCABlAAACCABoAEACCABnAIACCQDMAMACCQDNAAADCQDSAEADCQDTAIADCQDUAMADCQDVAAAECQDWAEAECQDXAIAECQDYAMAECQDZAAAFCQDa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BQMAAAEAAAADAQAAAAAAAAIDAAAAAAAAAwEAAAAAAAAEAwAAAQAAAAMBAAAAAAAABQcAAAMAAAADAQAAAAAAAAUDAAABAAAAAwEAAAAAAAACAwAAAAAAAAMBAAAAAAAABAMAAAEAAAADAQAAAAAAAAEEAAAAAAAAAwEAAAAAAAAFAwAAAQAAAAMBAAAAAAAAAgMAAAAAAAADAQAAAAAAAAQDAAABAAAAAwEAAAAAAAAEBgAAAgAAAAMBAAAAAAAABQMAAAEAAAADAQAAAAAAAAIDAAAAAAAAAwEAAAAAAAAEAwAAAQAAAAMBAAAAAAAAAQQAAAAAAAADAQAAAAAAAAUDAAABAAAAAwEAAAAAAAACAwAAAAAAAAMBAAAAAAAABAMAAAEAAAADAQAAAAAAAAYHAAAAAAAAAwEAAAAAAAAFAwAAAQAAAAMBAAAAAAAAAgMAAAAAAAADAQAAAAAAAAQDAAABAAAAAwEAAAAAAAABBAAAAAAAAAMBAAAAAAAABQMAAAEAAAADAQAAAAAAAAIDAAAAAAAAAwEAAAAAAAAEAwAAAQAAAAMBAAAAAAAABQYAAAIAAAADAQAAAAAAAAUDAAABAAAAAwEAAAAAAAACAwAAAAAAAAMBAAAAAAAABAMAAAEAAAADAQAAAAAAAAEEAAAAAAAAAwEAAAAAAAAFAwAAAQAAAAMBAAAAAAAAAgMAAAAAAAADAQAAAAAAAAQDAAABAAAAAwEAAAAAAAAEBwAAAwAAAAMBAAAAAAAABQMAAAEAAAADAQAAAAAAAAIDAAAAAAAAAwEAAAAAAAAEAwAAAQAAAAMBAAAAAAAAAQQAAAAAAAADAQAAAAAAAAUDAAABAAAAAwEAAAAAAAACAwAAAAAAAAMBAAAAAAAABAMAAAEAAAADAQAAAAAAAAQGAAACAAAAAwEAAAAAAAAFAwAAAQAAAAMBAAAAAAAAAgMAAAAAAAADAQAAAAAAAAQDAAABAAAAAwEAAAAAAAABBAAAAAAAAAMBAAAAAAAABQMAAAEAAAADAQAAAAAAAAIDAAAAAAAAAwEAAAAAAAAEAwAAAQAAAAMBAAAAAAAADAsAAAAAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAnAAAABwYAABAAAAAJCAAAQAIAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA3AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAtAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADUAAAAHBQAACQAAAAkIAADAAQAABwQAAAYAAAAHCAAAIwAAAAkFAACAAAAABwgAADMAAAAHBgAADwAAAAcIAAA/AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAADABQAABwQAAAUAAAAHCAAAKwAAAAcGAAARAAAACQkAAMAEAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACEAAAAJBQAAgAAAAAcIAAAxAAAABwYAAA4AAAAHCAAAPQAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAvAAAABwQAAAMAAAAHCAAAOwAAAAcEAAAFAAAABwgAACkAAAAHBgAAEAAAAAkJAADAAwAABwQAAAYAAAAHCAAAHwAAAAcFAAAIAAAABwgAADkAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQkAAMACAAAHBAAABgAAAAcIAAAlAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAEABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAsLAAAABwAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAKAAAAAcGAAAQAAAACQkAAEADAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAAOAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA2AAAABwUAAAkAAAAJCAAAAAIAAAcEAAAGAAAABwgAACQAAAAJBQAAgAAAAAcIAAA0AAAABwYAAA8AAAAHCAAAAAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAQAYAAAcEAAAFAAAABwgAACwAAAAHBgAAEQAAAAkJAABABQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAiAAAACQUAAIAAAAAHCAAAMgAAAAcGAAAOAAAABwgAAD4AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAMAAAAAcEAAADAAAABwgAADwAAAAHBAAABQAAAAcIAAAqAAAABwYAABAAAAAJCQAAQAQAAAcEAAAGAAAABwgAACAAAAAHBQAACAAAAAcIAAA6AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkIAACAAgAABwQAAAYAAAAHCAAAJgAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAACAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAQfi0Iwv1DwcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACcAAAAHBgAAEAAAAAkIAABAAgAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADcAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANQAAAAcFAAAJAAAACQgAAMABAAAHBAAABgAAAAcIAAAjAAAACQUAAIAAAAAHCAAAMwAAAAcGAAAPAAAABwgAAD8AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAAAGAAAHBAAABQAAAAcIAAArAAAABwYAABEAAAAJCQAAAAUAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAdAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIQAAAAkFAACAAAAABwgAADEAAAAHBgAADgAAAAcIAAA9AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC8AAAAHBAAAAwAAAAcIAAA7AAAABwQAAAUAAAAHCAAAKQAAAAcGAAAQAAAACQkAAAAEAAAHBAAABgAAAAcIAAAfAAAABwUAAAgAAAAHCAAAOQAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCQAAAAMAAAcEAAAGAAAABwgAACUAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAQAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAACwsAAEAHAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAoAAAABwYAABAAAAAJCQAAgAMAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA4AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAuAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADYAAAAHBQAACQAAAAkIAAAAAgAABwQAAAYAAAAHCAAAJAAAAAkFAACAAAAABwgAADQAAAAHBgAADwAAAAcIAAAAAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAADABgAABwQAAAUAAAAHCAAALAAAAAcGAAARAAAACQkAAIAFAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACIAAAAJBQAAgAAAAAcIAAAyAAAABwYAAA4AAAAHCAAAPgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAwAAAABwQAAAMAAAAHCAAAPAAAAAcEAAAFAAAABwgAACoAAAAHBgAAEAAAAAkJAACABAAABwQAAAYAAAAHCAAAIAAAAAcFAAAIAAAABwgAADoAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQgAAIACAAAHBAAABgAAAAcIAAAmAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAIABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwBB+MQjC/UPBwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAJwAAAAcGAAAQAAAACQgAAEACAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAANwAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA1AAAABwUAAAkAAAAJCAAAwAEAAAcEAAAGAAAABwgAACMAAAAJBQAAgAAAAAcIAAAzAAAABwYAAA8AAAAHCAAAPwAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAwAUAAAcEAAAFAAAABwgAACsAAAAHBgAAEQAAAAkJAADABAAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAhAAAACQUAAIAAAAAHCAAAMQAAAAcGAAAOAAAABwgAAD0AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALwAAAAcEAAADAAAABwgAADsAAAAHBAAABQAAAAcIAAApAAAABwYAABAAAAAJCQAAwAMAAAcEAAAGAAAABwgAAB8AAAAHBQAACAAAAAcIAAA5AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkJAADAAgAABwQAAAYAAAAHCAAAJQAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAABAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAALDAAAQAgAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACgAAAAHBgAAEAAAAAkJAABAAwAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADgAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANgAAAAcFAAAJAAAACQgAAAACAAAHBAAABgAAAAcIAAAkAAAACQUAAIAAAAAHCAAANAAAAAcGAAAPAAAABwgAAAAAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAEAGAAAHBAAABQAAAAcIAAAsAAAABwYAABEAAAAJCQAAQAUAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAeAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIgAAAAkFAACAAAAABwgAADIAAAAHBgAADgAAAAcIAAA+AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAADAAAAAHBAAAAwAAAAcIAAA8AAAABwQAAAUAAAAHCAAAKgAAAAcGAAAQAAAACQkAAEAEAAAHBAAABgAAAAcIAAAgAAAABwUAAAgAAAAHCAAAOgAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCAAAgAIAAAcEAAAGAAAABwgAACYAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAgAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAEH41CML9Q8HBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAnAAAABwYAABAAAAAJCAAAQAIAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA3AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAtAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADUAAAAHBQAACQAAAAkIAADAAQAABwQAAAYAAAAHCAAAIwAAAAkFAACAAAAABwgAADMAAAAHBgAADwAAAAcIAAA/AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAAAABgAABwQAAAUAAAAHCAAAKwAAAAcGAAARAAAACQkAAAAFAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACEAAAAJBQAAgAAAAAcIAAAxAAAABwYAAA4AAAAHCAAAPQAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAvAAAABwQAAAMAAAAHCAAAOwAAAAcEAAAFAAAABwgAACkAAAAHBgAAEAAAAAkJAAAABAAABwQAAAYAAAAHCAAAHwAAAAcFAAAIAAAABwgAADkAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQkAAAADAAAHBAAABgAAAAcIAAAlAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAEABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAsMAABACQAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAKAAAAAcGAAAQAAAACQkAAIADAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAAOAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA2AAAABwUAAAkAAAAJCAAAAAIAAAcEAAAGAAAABwgAACQAAAAJBQAAgAAAAAcIAAA0AAAABwYAAA8AAAAHCAAAAAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAwAYAAAcEAAAFAAAABwgAACwAAAAHBgAAEQAAAAkJAACABQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAiAAAACQUAAIAAAAAHCAAAMgAAAAcGAAAOAAAABwgAAD4AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAMAAAAAcEAAADAAAABwgAADwAAAAHBAAABQAAAAcIAAAqAAAABwYAABAAAAAJCQAAgAQAAAcEAAAGAAAABwgAACAAAAAHBQAACAAAAAcIAAA6AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkIAACAAgAABwQAAAYAAAAHCAAAJgAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAACAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAQfjkIwv1DwcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACcAAAAHBgAAEAAAAAkIAABAAgAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADcAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANQAAAAcFAAAJAAAACQgAAMABAAAHBAAABgAAAAcIAAAjAAAACQUAAIAAAAAHCAAAMwAAAAcGAAAPAAAABwgAAD8AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAMAFAAAHBAAABQAAAAcIAAArAAAABwYAABEAAAAJCQAAwAQAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAdAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIQAAAAkFAACAAAAABwgAADEAAAAHBgAADgAAAAcIAAA9AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC8AAAAHBAAAAwAAAAcIAAA7AAAABwQAAAUAAAAHCAAAKQAAAAcGAAAQAAAACQkAAMADAAAHBAAABgAAAAcIAAAfAAAABwUAAAgAAAAHCAAAOQAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCQAAwAIAAAcEAAAGAAAABwgAACUAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAQAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAACwwAAMAHAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAoAAAABwYAABAAAAAJCQAAQAMAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA4AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAuAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADYAAAAHBQAACQAAAAkIAAAAAgAABwQAAAYAAAAHCAAAJAAAAAkFAACAAAAABwgAADQAAAAHBgAADwAAAAcIAAAAAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAABABgAABwQAAAUAAAAHCAAALAAAAAcGAAARAAAACQkAAEAFAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACIAAAAJBQAAgAAAAAcIAAAyAAAABwYAAA4AAAAHCAAAPgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAwAAAABwQAAAMAAAAHCAAAPAAAAAcEAAAFAAAABwgAACoAAAAHBgAAEAAAAAkJAABABAAABwQAAAYAAAAHCAAAIAAAAAcFAAAIAAAABwgAADoAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQgAAIACAAAHBAAABgAAAAcIAAAmAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAIABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwBB+PQjC/UPBwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAJwAAAAcGAAAQAAAACQgAAEACAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAANwAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA1AAAABwUAAAkAAAAJCAAAwAEAAAcEAAAGAAAABwgAACMAAAAJBQAAgAAAAAcIAAAzAAAABwYAAA8AAAAHCAAAPwAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAAAYAAAcEAAAFAAAABwgAACsAAAAHBgAAEQAAAAkJAAAABQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAhAAAACQUAAIAAAAAHCAAAMQAAAAcGAAAOAAAABwgAAD0AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALwAAAAcEAAADAAAABwgAADsAAAAHBAAABQAAAAcIAAApAAAABwYAABAAAAAJCQAAAAQAAAcEAAAGAAAABwgAAB8AAAAHBQAACAAAAAcIAAA5AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkJAAAAAwAABwQAAAYAAAAHCAAAJQAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAABAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAALCwAAgAcAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACgAAAAHBgAAEAAAAAkJAACAAwAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADgAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANgAAAAcFAAAJAAAACQgAAAACAAAHBAAABgAAAAcIAAAkAAAACQUAAIAAAAAHCAAANAAAAAcGAAAPAAAABwgAAAAAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAMAGAAAHBAAABQAAAAcIAAAsAAAABwYAABEAAAAJCQAAgAUAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAeAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIgAAAAkFAACAAAAABwgAADIAAAAHBgAADgAAAAcIAAA+AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAADAAAAAHBAAAAwAAAAcIAAA8AAAABwQAAAUAAAAHCAAAKgAAAAcGAAAQAAAACQkAAIAEAAAHBAAABgAAAAcIAAAgAAAABwUAAAgAAAAHCAAAOgAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCAAAgAIAAAcEAAAGAAAABwgAACYAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAgAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAEH4hCQL9Q8HBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAnAAAABwYAABAAAAAJCAAAQAIAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA3AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAtAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADUAAAAHBQAACQAAAAkIAADAAQAABwQAAAYAAAAHCAAAIwAAAAkFAACAAAAABwgAADMAAAAHBgAADwAAAAcIAAA/AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAADABQAABwQAAAUAAAAHCAAAKwAAAAcGAAARAAAACQkAAMAEAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACEAAAAJBQAAgAAAAAcIAAAxAAAABwYAAA4AAAAHCAAAPQAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAvAAAABwQAAAMAAAAHCAAAOwAAAAcEAAAFAAAABwgAACkAAAAHBgAAEAAAAAkJAADAAwAABwQAAAYAAAAHCAAAHwAAAAcFAAAIAAAABwgAADkAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQkAAMACAAAHBAAABgAAAAcIAAAlAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAEABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAsMAADACAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAKAAAAAcGAAAQAAAACQkAAEADAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAAOAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA2AAAABwUAAAkAAAAJCAAAAAIAAAcEAAAGAAAABwgAACQAAAAJBQAAgAAAAAcIAAA0AAAABwYAAA8AAAAHCAAAAAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAQAYAAAcEAAAFAAAABwgAACwAAAAHBgAAEQAAAAkJAABABQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAiAAAACQUAAIAAAAAHCAAAMgAAAAcGAAAOAAAABwgAAD4AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAMAAAAAcEAAADAAAABwgAADwAAAAHBAAABQAAAAcIAAAqAAAABwYAABAAAAAJCQAAQAQAAAcEAAAGAAAABwgAACAAAAAHBQAACAAAAAcIAAA6AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkIAACAAgAABwQAAAYAAAAHCAAAJgAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAACAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAQfiUJAv1HwcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACcAAAAHBgAAEAAAAAkIAABAAgAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADcAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANQAAAAcFAAAJAAAACQgAAMABAAAHBAAABgAAAAcIAAAjAAAACQUAAIAAAAAHCAAAMwAAAAcGAAAPAAAABwgAAD8AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAAAGAAAHBAAABQAAAAcIAAArAAAABwYAABEAAAAJCQAAAAUAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAdAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIQAAAAkFAACAAAAABwgAADEAAAAHBgAADgAAAAcIAAA9AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC8AAAAHBAAAAwAAAAcIAAA7AAAABwQAAAUAAAAHCAAAKQAAAAcGAAAQAAAACQkAAAAEAAAHBAAABgAAAAcIAAAfAAAABwUAAAgAAAAHCAAAOQAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCQAAAAMAAAcEAAAGAAAABwgAACUAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAQAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAACwwAAMAJAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAoAAAABwYAABAAAAAJCQAAgAMAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA4AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAuAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADYAAAAHBQAACQAAAAkIAAAAAgAABwQAAAYAAAAHCAAAJAAAAAkFAACAAAAABwgAADQAAAAHBgAADwAAAAcIAAAAAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAADABgAABwQAAAUAAAAHCAAALAAAAAcGAAARAAAACQkAAIAFAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACIAAAAJBQAAgAAAAAcIAAAyAAAABwYAAA4AAAAHCAAAPgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAwAAAABwQAAAMAAAAHCAAAPAAAAAcEAAAFAAAABwgAACoAAAAHBgAAEAAAAAkJAACABAAABwQAAAYAAAAHCAAAIAAAAAcFAAAIAAAABwgAADoAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQgAAIACAAAHBAAABgAAAAcIAAAmAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAIABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAwLAAAAAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAJwAAAAcGAAAQAAAACQgAAEACAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAANwAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA1AAAABwUAAAkAAAAJCAAAwAEAAAcEAAAGAAAABwgAACMAAAAJBQAAgAAAAAcIAAAzAAAABwYAAA8AAAAHCAAAPwAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAwAUAAAcEAAAFAAAABwgAACsAAAAHBgAAEQAAAAkJAADABAAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAhAAAACQUAAIAAAAAHCAAAMQAAAAcGAAAOAAAABwgAAD0AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALwAAAAcEAAADAAAABwgAADsAAAAHBAAABQAAAAcIAAApAAAABwYAABAAAAAJCQAAwAMAAAcEAAAGAAAABwgAAB8AAAAHBQAACAAAAAcIAAA5AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkJAADAAgAABwQAAAYAAAAHCAAAJQAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAABAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAALCwAAAAcAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACgAAAAHBgAAEAAAAAkJAABAAwAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADgAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANgAAAAcFAAAJAAAACQgAAAACAAAHBAAABgAAAAcIAAAkAAAACQUAAIAAAAAHCAAANAAAAAcGAAAPAAAABwgAAAAAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAEAGAAAHBAAABQAAAAcIAAAsAAAABwYAABEAAAAJCQAAQAUAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAeAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIgAAAAkFAACAAAAABwgAADIAAAAHBgAADgAAAAcIAAA+AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAADAAAAAHBAAAAwAAAAcIAAA8AAAABwQAAAUAAAAHCAAAKgAAAAcGAAAQAAAACQkAAEAEAAAHBAAABgAAAAcIAAAgAAAABwUAAAgAAAAHCAAAOgAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCAAAgAIAAAcEAAAGAAAABwgAACYAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAgAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAEH4tCQL9Q8HBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAnAAAABwYAABAAAAAJCAAAQAIAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA3AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAtAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADUAAAAHBQAACQAAAAkIAADAAQAABwQAAAYAAAAHCAAAIwAAAAkFAACAAAAABwgAADMAAAAHBgAADwAAAAcIAAA/AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAAAABgAABwQAAAUAAAAHCAAAKwAAAAcGAAARAAAACQkAAAAFAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACEAAAAJBQAAgAAAAAcIAAAxAAAABwYAAA4AAAAHCAAAPQAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAvAAAABwQAAAMAAAAHCAAAOwAAAAcEAAAFAAAABwgAACkAAAAHBgAAEAAAAAkJAAAABAAABwQAAAYAAAAHCAAAHwAAAAcFAAAIAAAABwgAADkAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQkAAAADAAAHBAAABgAAAAcIAAAlAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAEABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAsLAABABwAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAKAAAAAcGAAAQAAAACQkAAIADAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAAOAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA2AAAABwUAAAkAAAAJCAAAAAIAAAcEAAAGAAAABwgAACQAAAAJBQAAgAAAAAcIAAA0AAAABwYAAA8AAAAHCAAAAAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAwAYAAAcEAAAFAAAABwgAACwAAAAHBgAAEQAAAAkJAACABQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAiAAAACQUAAIAAAAAHCAAAMgAAAAcGAAAOAAAABwgAAD4AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAMAAAAAcEAAADAAAABwgAADwAAAAHBAAABQAAAAcIAAAqAAAABwYAABAAAAAJCQAAgAQAAAcEAAAGAAAABwgAACAAAAAHBQAACAAAAAcIAAA6AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkIAACAAgAABwQAAAYAAAAHCAAAJgAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAACAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAQfjEJAv1DwcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACcAAAAHBgAAEAAAAAkIAABAAgAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADcAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANQAAAAcFAAAJAAAACQgAAMABAAAHBAAABgAAAAcIAAAjAAAACQUAAIAAAAAHCAAAMwAAAAcGAAAPAAAABwgAAD8AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAMAFAAAHBAAABQAAAAcIAAArAAAABwYAABEAAAAJCQAAwAQAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAdAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIQAAAAkFAACAAAAABwgAADEAAAAHBgAADgAAAAcIAAA9AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC8AAAAHBAAAAwAAAAcIAAA7AAAABwQAAAUAAAAHCAAAKQAAAAcGAAAQAAAACQkAAMADAAAHBAAABgAAAAcIAAAfAAAABwUAAAgAAAAHCAAAOQAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCQAAwAIAAAcEAAAGAAAABwgAACUAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAQAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAACwwAAIAIAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAoAAAABwYAABAAAAAJCQAAQAMAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA4AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAuAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADYAAAAHBQAACQAAAAkIAAAAAgAABwQAAAYAAAAHCAAAJAAAAAkFAACAAAAABwgAADQAAAAHBgAADwAAAAcIAAAAAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAABABgAABwQAAAUAAAAHCAAALAAAAAcGAAARAAAACQkAAEAFAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACIAAAAJBQAAgAAAAAcIAAAyAAAABwYAAA4AAAAHCAAAPgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAwAAAABwQAAAMAAAAHCAAAPAAAAAcEAAAFAAAABwgAACoAAAAHBgAAEAAAAAkJAABABAAABwQAAAYAAAAHCAAAIAAAAAcFAAAIAAAABwgAADoAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQgAAIACAAAHBAAABgAAAAcIAAAmAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAIABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwBB+NQkC/UPBwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAJwAAAAcGAAAQAAAACQgAAEACAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAANwAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA1AAAABwUAAAkAAAAJCAAAwAEAAAcEAAAGAAAABwgAACMAAAAJBQAAgAAAAAcIAAAzAAAABwYAAA8AAAAHCAAAPwAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAAAYAAAcEAAAFAAAABwgAACsAAAAHBgAAEQAAAAkJAAAABQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAhAAAACQUAAIAAAAAHCAAAMQAAAAcGAAAOAAAABwgAAD0AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALwAAAAcEAAADAAAABwgAADsAAAAHBAAABQAAAAcIAAApAAAABwYAABAAAAAJCQAAAAQAAAcEAAAGAAAABwgAAB8AAAAHBQAACAAAAAcIAAA5AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkJAAAAAwAABwQAAAYAAAAHCAAAJQAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAABAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAALDAAAgAkAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACgAAAAHBgAAEAAAAAkJAACAAwAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADgAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANgAAAAcFAAAJAAAACQgAAAACAAAHBAAABgAAAAcIAAAkAAAACQUAAIAAAAAHCAAANAAAAAcGAAAPAAAABwgAAAAAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAMAGAAAHBAAABQAAAAcIAAAsAAAABwYAABEAAAAJCQAAgAUAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAeAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIgAAAAkFAACAAAAABwgAADIAAAAHBgAADgAAAAcIAAA+AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAADAAAAAHBAAAAwAAAAcIAAA8AAAABwQAAAUAAAAHCAAAKgAAAAcGAAAQAAAACQkAAIAEAAAHBAAABgAAAAcIAAAgAAAABwUAAAgAAAAHCAAAOgAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCAAAgAIAAAcEAAAGAAAABwgAACYAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAgAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAEH45CQL9Q8HBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAnAAAABwYAABAAAAAJCAAAQAIAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA3AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAtAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADUAAAAHBQAACQAAAAkIAADAAQAABwQAAAYAAAAHCAAAIwAAAAkFAACAAAAABwgAADMAAAAHBgAADwAAAAcIAAA/AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAADABQAABwQAAAUAAAAHCAAAKwAAAAcGAAARAAAACQkAAMAEAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACEAAAAJBQAAgAAAAAcIAAAxAAAABwYAAA4AAAAHCAAAPQAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAvAAAABwQAAAMAAAAHCAAAOwAAAAcEAAAFAAAABwgAACkAAAAHBgAAEAAAAAkJAADAAwAABwQAAAYAAAAHCAAAHwAAAAcFAAAIAAAABwgAADkAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQkAAMACAAAHBAAABgAAAAcIAAAlAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAEABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAsMAAAACAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAKAAAAAcGAAAQAAAACQkAAEADAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAAOAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA2AAAABwUAAAkAAAAJCAAAAAIAAAcEAAAGAAAABwgAACQAAAAJBQAAgAAAAAcIAAA0AAAABwYAAA8AAAAHCAAAAAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAQAYAAAcEAAAFAAAABwgAACwAAAAHBgAAEQAAAAkJAABABQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAiAAAACQUAAIAAAAAHCAAAMgAAAAcGAAAOAAAABwgAAD4AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAMAAAAAcEAAADAAAABwgAADwAAAAHBAAABQAAAAcIAAAqAAAABwYAABAAAAAJCQAAQAQAAAcEAAAGAAAABwgAACAAAAAHBQAACAAAAAcIAAA6AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkIAACAAgAABwQAAAYAAAAHCAAAJgAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAACAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAQfj0JAv1DwcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACcAAAAHBgAAEAAAAAkIAABAAgAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADcAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANQAAAAcFAAAJAAAACQgAAMABAAAHBAAABgAAAAcIAAAjAAAACQUAAIAAAAAHCAAAMwAAAAcGAAAPAAAABwgAAD8AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAAAGAAAHBAAABQAAAAcIAAArAAAABwYAABEAAAAJCQAAAAUAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAdAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIQAAAAkFAACAAAAABwgAADEAAAAHBgAADgAAAAcIAAA9AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC8AAAAHBAAAAwAAAAcIAAA7AAAABwQAAAUAAAAHCAAAKQAAAAcGAAAQAAAACQkAAAAEAAAHBAAABgAAAAcIAAAfAAAABwUAAAgAAAAHCAAAOQAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCQAAAAMAAAcEAAAGAAAABwgAACUAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAQAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAACwsAAIAHAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAoAAAABwYAABAAAAAJCQAAgAMAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA4AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAuAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADYAAAAHBQAACQAAAAkIAAAAAgAABwQAAAYAAAAHCAAAJAAAAAkFAACAAAAABwgAADQAAAAHBgAADwAAAAcIAAAAAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAADABgAABwQAAAUAAAAHCAAALAAAAAcGAAARAAAACQkAAIAFAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACIAAAAJBQAAgAAAAAcIAAAyAAAABwYAAA4AAAAHCAAAPgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAwAAAABwQAAAMAAAAHCAAAPAAAAAcEAAAFAAAABwgAACoAAAAHBgAAEAAAAAkJAACABAAABwQAAAYAAAAHCAAAIAAAAAcFAAAIAAAABwgAADoAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQgAAIACAAAHBAAABgAAAAcIAAAmAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAIABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwBB+IQlC/UPBwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAJwAAAAcGAAAQAAAACQgAAEACAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAANwAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA1AAAABwUAAAkAAAAJCAAAwAEAAAcEAAAGAAAABwgAACMAAAAJBQAAgAAAAAcIAAAzAAAABwYAAA8AAAAHCAAAPwAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAwAUAAAcEAAAFAAAABwgAACsAAAAHBgAAEQAAAAkJAADABAAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB0AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAhAAAACQUAAIAAAAAHCAAAMQAAAAcGAAAOAAAABwgAAD0AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALwAAAAcEAAADAAAABwgAADsAAAAHBAAABQAAAAcIAAApAAAABwYAABAAAAAJCQAAwAMAAAcEAAAGAAAABwgAAB8AAAAHBQAACAAAAAcIAAA5AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkJAADAAgAABwQAAAYAAAAHCAAAJQAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAABAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAALDAAAAAkAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwcAABQAAAAJBQAAgAAAAAcHAAAYAAAABwYAAA4AAAAHBwAAHAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAXAAAABwQAAAMAAAAHBwAAGwAAAAcEAAAFAAAABwgAACgAAAAHBgAAEAAAAAkJAABAAwAABwQAAAYAAAAHBwAAEwAAAAcFAAAIAAAABwgAADgAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAC4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHCAAANgAAAAcFAAAJAAAACQgAAAACAAAHBAAABgAAAAcIAAAkAAAACQUAAIAAAAAHCAAANAAAAAcGAAAPAAAABwgAAAAAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAACQkAAEAGAAAHBAAABQAAAAcIAAAsAAAABwYAABEAAAAJCQAAQAUAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAeAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHCAAAIgAAAAkFAACAAAAABwgAADIAAAAHBgAADgAAAAcIAAA+AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAADAAAAAHBAAAAwAAAAcIAAA8AAAABwQAAAUAAAAHCAAAKgAAAAcGAAAQAAAACQkAAEAEAAAHBAAABgAAAAcIAAAgAAAABwUAAAgAAAAHCAAAOgAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcHAAAaAAAABwUAAAkAAAAJCAAAgAIAAAcEAAAGAAAABwgAACYAAAAJBQAAgAAAAAcHAAAZAAAABwYAAA8AAAAJCAAAgAEAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAHBwAAEgAAAAcEAAAFAAAABwcAABUAAAAHBgAAEQAAAAkHAAAAAQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAEH4lCUL9R8HBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcHAAAUAAAACQUAAIAAAAAHBwAAGAAAAAcGAAAOAAAABwcAABwAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBwAAFwAAAAcEAAADAAAABwcAABsAAAAHBAAABQAAAAcIAAAnAAAABwYAABAAAAAJCAAAQAIAAAcEAAAGAAAABwcAABMAAAAHBQAACAAAAAcIAAA3AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAtAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwgAADUAAAAHBQAACQAAAAkIAADAAQAABwQAAAYAAAAHCAAAIwAAAAkFAACAAAAABwgAADMAAAAHBgAADwAAAAcIAAA/AAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAkJAAAABgAABwQAAAUAAAAHCAAAKwAAAAcGAAARAAAACQkAAAAFAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAHQAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcGAAAMAAAABwUAAAkAAAAJBgAAgAYAAAcEAAAGAAAABwgAACEAAAAJBQAAgAAAAAcIAAAxAAAABwYAAA4AAAAHCAAAPQAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcIAAAvAAAABwQAAAMAAAAHCAAAOwAAAAcEAAAFAAAABwgAACkAAAAHBgAAEAAAAAkJAAAABAAABwQAAAYAAAAHCAAAHwAAAAcFAAAIAAAABwgAADkAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABYAAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBwAAGgAAAAcFAAAJAAAACQkAAAADAAAHBAAABgAAAAcIAAAlAAAACQUAAIAAAAAHBwAAGQAAAAcGAAAPAAAACQgAAEABAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHBgAADQAAAAcEAAADAAAABwcAABIAAAAHBAAABQAAAAcHAAAVAAAABwYAABEAAAAJBwAAAAEAAAcEAAAGAAAABwYAAAEAAAAHBQAACAAAAAkGAADAAAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAsMAAAACgAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwYAAAwAAAAHBQAACQAAAAkGAACABgAABwQAAAYAAAAHBwAAFAAAAAkFAACAAAAABwcAABgAAAAHBgAADgAAAAcHAAAcAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwcAABcAAAAHBAAAAwAAAAcHAAAbAAAABwQAAAUAAAAHCAAAKAAAAAcGAAAQAAAACQkAAIADAAAHBAAABgAAAAcHAAATAAAABwUAAAgAAAAHCAAAOAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAALgAAAAcEAAADAAAABwUAAAsAAAAHBAAABQAAAAcIAAA2AAAABwUAAAkAAAAJCAAAAAIAAAcEAAAGAAAABwgAACQAAAAJBQAAgAAAAAcIAAA0AAAABwYAAA8AAAAHCAAAAAAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcGAAANAAAABwQAAAMAAAAJCQAAwAYAAAcEAAAFAAAABwgAACwAAAAHBgAAEQAAAAkJAACABQAABwQAAAYAAAAHBgAAAQAAAAcFAAAIAAAACQYAAMAAAAAJBQAAQAAAAAcFAAAKAAAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwgAAB4AAAAHBAAAAwAAAAcFAAALAAAABwQAAAUAAAAHBgAADAAAAAcFAAAJAAAACQYAAIAGAAAHBAAABgAAAAcIAAAiAAAACQUAAIAAAAAHCAAAMgAAAAcGAAAOAAAABwgAAD4AAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAHCAAAMAAAAAcEAAADAAAABwgAADwAAAAHBAAABQAAAAcIAAAqAAAABwYAABAAAAAJCQAAgAQAAAcEAAAGAAAABwgAACAAAAAHBQAACAAAAAcIAAA6AAAACQUAAEAAAAAHBQAACgAAAAcEAAAEAAAABwQAAAIAAAAHBAAABwAAAAcHAAAWAAAABwQAAAMAAAAHBQAACwAAAAcEAAAFAAAABwcAABoAAAAHBQAACQAAAAkIAACAAgAABwQAAAYAAAAHCAAAJgAAAAkFAACAAAAABwcAABkAAAAHBgAADwAAAAkIAACAAQAABwQAAAQAAAAHBAAAAgAAAAcEAAAHAAAABwYAAA0AAAAHBAAAAwAAAAcHAAASAAAABwQAAAUAAAAHBwAAFQAAAAcGAAARAAAACQcAAAABAAAHBAAABgAAAAcGAAABAAAABwUAAAgAAAAJBgAAwAAAAAkFAABAAAAABwUAAAoAAAAHBAAABAAAAAcEAAACAAAABwQAAAcAAAAMCwAAAAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICQAADwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAASAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAEQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwsAAAAHAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAAXAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABQAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAGQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+LQlC/UPCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoMAACAAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAeAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALCwAAQAcAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAFQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAA2AAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH4xCUL9Q8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAkAAA8AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAANAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsMAABACAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAALAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAkAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACgwAAIABAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfjUJQv1DwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAHAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAA8AAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAKAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwwAAEAJAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAAQAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAAAAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKCgAAQAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+OQlC/UPCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgJAAAPAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAABIAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAARAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALDAAAwAcAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADIAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAIgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoNAACABgAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH49CUL9Q8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAABoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDQAAgAUAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAACAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsLAACABwAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAPQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAqAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACg0AAAAEAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfiEJgv1DwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICQAADwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoNAAAAAwAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAPgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwwAAMAIAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAuAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAACYAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDQAAAAIAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+JQmC/UfCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAATAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAAWAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALDAAAwAkAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAABAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAAAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoKAABAAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAADAsAAAAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAkAAA8AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAEgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAABEAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsLAAAABwAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAFwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAAUAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfi0Jgv1DwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDAAAwAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoNAAAABQAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAHwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwsAAEAHAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAA6AAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABUAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDQAAgAMAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+MQmC/UPCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgJAAAPAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACg0AAIACAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAxAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALDAAAgAgAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAAC0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAJQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoMAADAAQAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH41CYL9Q8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAAB0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDQAAAAYAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAACkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsMAACACQAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAEAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAAAAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACgoAAEAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfjkJgv1DwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICQAADwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAASAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAEQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwwAAAAIAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAzAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAACMAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDAAAQAEAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+PQmC/UPCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAbAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAhAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALCwAAgAcAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACgwAAAABAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAKwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoNAACABAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH4hCcL9Q8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAkAAA8AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAANwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAAD8AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsMAAAACQAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAALwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAnAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADUAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfiUJwv1HwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAEwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAAYAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAFgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwwAAAAKAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAAQAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAAAAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKCgAAQAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAwLAAAAAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgJAAAPAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAABIAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAARAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALCwAAAAcAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAFAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAAZAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH4tCcL9Q8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACgwAAIAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAOAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAAB4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsLAABABwAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAOQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAAVAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADYAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfjEJwv1DwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICQAADwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAA0AAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAMAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwwAAEAIAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAsAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAACQAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDAAAgAEAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+NQnC/UPCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAcAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAoAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALDAAAQAkAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAABAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAAAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoKAABAAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH45CcL9Q8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAkAAA8AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAEgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAABEAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsMAADABwAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAMgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAiAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACg0AAMAGAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfj0Jwv1DwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAGgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoNAADABQAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAIAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwsAAIAHAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAA9AAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAACoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDQAAQAQAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+IQoC/UPCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgJAAAPAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACg0AAEADAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAA+AAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALDAAAwAgAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAAC4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAJgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoNAABAAgAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH4lCgL9R8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABMAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAGAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABYAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsMAADACQAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAEAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAAAAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACgoAAEAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAMCwAAAAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICQAADwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAASAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAEQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwsAAAAHAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAAXAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABQAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAGQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+LQoC/UPCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoMAADAAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACg0AAEAFAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAfAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALCwAAQAcAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICwAAFQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoNAADAAwAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH4xCgL9Q8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAkAAA8AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDQAAwAIAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADEAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsMAACACAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAALQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAlAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACgwAAMABAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfjUKAv1DwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAHQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoNAABABgAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAKQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwwAAIAJAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAAQAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAAAAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKCgAAQAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+OQoC/UPCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgJAAAPAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAABIAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgKAAARAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALDAAAAAgAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAADMAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAIwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoMAABAAQAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAEH49CgL9Q8IAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAANAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAABsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAOwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAACEAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAsLAACABwAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAKDAAAAAEAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAArAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACg0AAMAEAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgIAAAOAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAQfiEKQv1DwgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA0AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICQAADwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAA3AAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAAPwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACwwAAAAJAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgMAAAvAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAwAACcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIDAAANQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAALAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAgAAA4AAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAADAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgBB+JQpC4kQCAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAoAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAATAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAsAABgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAJAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBwAACwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgLAAAWAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAwAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAALDAAAAAoAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAkAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAKAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAoAABAAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgGAAAIAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICgAAAAAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAUAAAcAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAoKAABAAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBgAACQAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAcAAAsAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABgAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgFAAAHAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAUAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAICAAADgAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAGAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAACAYAAAgAAAAIAgAAAwAAAAgDAAABAAAACAIAAAIAAAAIBAAABQAAAAgCAAADAAAACAMAAAQAAAAIAgAAAgAAAAgHAAAMAAAACAIAAAMAAAAIAwAAAQAAAAgCAAACAAAACAQAAAYAAAAIAgAAAwAAAAgDAAAEAAAACAIAAAIAAAAIBQAABwAAAAgCAAADAAAACAMAAAEAAAAIAgAAAgAAAAgEAAAFAAAACAIAAAMAAAAIAwAABAAAAAgCAAACAAAAVElGRkxp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TG9nAEGwsykLJhgAAQAAAAAAAwAAAAAAAQBqmgAAGQABAAAAAAADAAAAAAABAIiwAEHgsykL5wFMb2dMdXZJbml0U3RhdGUATG9nTHV2RGVjb2RlMjQATG9nTHV2RGVjb2RlMzIAAABMb2dMMTZJbml0U3RhdGUATG9nTDE2RGVjb2RlAExvZ0x1dkRlY29kZVN0cmlwAExvZ0x1dkRlY29kZVRpbGUATG9nTHV2RW5jb2RlMjQATG9nTHV2RW5jb2RlMzIATG9nTDE2RW5jb2RlAExvZ0x1dkVuY29kZVN0cmlwAExvZ0x1dkVuY29kZVRpbGUATG9nTHV2Q2xlYW51cAAMAAAABgAAAAQAAAADAAAAVElGRkluaXRMWlcAQdC1KQt3IExaV1NldHVwRGVjb2RlAExaV1NldHVwRGVjb2RlAExaV0RlY29kZUNvbXBhdABMWldEZWNvZGUATFpXU2V0dXBFbmNvZGUATFpXUHJlRW5jb2RlAExaV0VuY29kZQBMWldDbGVhbnVwAFRJRkZJbml0T0pQRUcAQdC2KQunAQECAAABAAEABAAAAEIAAQCDmgAAAgIAAAEAAQAEAAAAQwABALGwAAAHAgAA/////wQAAABEAAAB+ccAAAgCAAD/////BAAAAEUAAAGo4AAACQIAAP////8EAAAARgAAAcz3AAAAAgAAAQABAAMAAABHAAAA2wwBAAMCAAABAAEAAwAAAEgAAAArIQEAAAAAAE9KUEVHU3Vic2FtcGxpbmdDb3JyZWN0AEGAuCkLsgJPSlBFR1JlYWRIZWFkZXJJbmZvU2VjAE9KUEVHUmVhZEJ5dGVQZWVrAE9KUEVHUmVhZEJ1ZmZlckZpbGwAT0pQRUdSZWFkQnl0ZQBPSlBFR1JlYWRTa2lwAAAAAAAAAABPSlBFR1JlYWRIZWFkZXJJbmZvU2VjU3RyZWFtRHJpAE9KUEVHUmVhZEhlYWRlckluZm9TZWNTdHJlYW1EcXQAT0pQRUdSZWFkQmxvY2sAAE9KUEVHUmVhZEhlYWRlckluZm9TZWNTdHJlYW1EaHQAT0pQRUdSZWFkSGVhZGVySW5mb1NlY1N0cmVhbVNvZgBPSlBFR1JlYWRIZWFkZXJJbmZvU2VjU3RyZWFtU29zAE9KUEVHUmVhZEhlYWRlckluZm9TZWNUYWJsZXNRVGFibGUAQcC6KQsjT0pQRUdSZWFkSGVhZGVySW5mb1NlY1RhYmxlc0RjVGFibGUAQfC6KQtAT0pQRUdSZWFkSGVhZGVySW5mb1NlY1RhYmxlc0FjVGFibGUAT0pQRUdWU2V0RmllbGQAT0pQRUdQcmludERpcgBBwLspCxBPSlBFR1NldHVwRGVjb2RlAEHguykLQk9KUEVHUmVhZEhlYWRlckluZm8AT0pQRUdSZWFkU2Vjb25kYXJ5U29zAE9KUEVHTGlianBlZ1Nlc3Npb25BYm9ydABBsLwpC8QBT0pQRUdXcml0ZUhlYWRlckluZm8AT0pQRUdXcml0ZVN0cmVhbQBPSlBFR1dyaXRlU3RyZWFtU29mAE9KUEVHV3JpdGVTdHJlYW1Tb3MAT0pQRUdXcml0ZVN0cmVhbUNvbXByZXNzZWQAAAAAAAAAAE9KUEVHUHJlRGVjb2RlU2tpcFNjYW5saW5lcwBPSlBFR0RlY29kZVJhdwAAAAAAAE9KUEVHRGVjb2RlU2NhbmxpbmVzAE9KUEVHUG9zdERlY29kZQBBgL4pC4QBT0pQRUdTZXR1cEVuY29kZQBPSlBFR1ByZUVuY29kZQBPSlBFR0VuY29kZQAAAAAAT0pQRUdQb3N0RW5jb2RlAFRJRkZDbGllbnRPcGVuAAAAAAAA/wAAAP///////wAA////////////AAAA/wAAAP//AAD/////////////////////AEGUvykLCRgAAAAAAAAAEABBqL8pCwkYAAAAGAAAABAAQZDAKQsQVElGRkluaXRQaXhhckxvZwBBsMApCwMNAAEAQcDAKQsHs5oAABYAAQBB1MApCwKzmgBB4MApCzRQaXhhckxvZ1NldHVwRGVjb2RlAFBpeGFyTG9nUHJlRGVjb2RlAFBpeGFyTG9nRGVjb2RlAEGgwSkLJVBpeGFyTG9nU2V0dXBFbmNvZGUAUGl4YXJMb2dQcmVFbmNvZGUAQdDBKQsxUGl4YXJMb2dQb3N0RW5jb2RlAFBpeGFyTG9nRW5jb2RlAFBpeGFyTG9nQ2xlYW51cABBkMIpC1VQaXhhckxvZ1ZTZXRGaWVsZAAAAAgAAAAIAAAAEAAAABAAAAAQAAAAIAAAAAEAAAABAAAAAQAAAAIAAAABAAAAAwAAAFRJRkZQcmVkaWN0b3JJbml0AEHwwikL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CfQAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzAARBw8AAAhmAAAIJgAACawAAAgGAAAIhgAACEYAAAnsABAHCQAACF4AAAgeAAAJnAAUB2MAAAh+AAAIPgAACdwAEgcbAAAIbgAACC4AAAm8AAAIDgAACI4AAAhOAAAJ/ABgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnCABAHCgAACGEAAAghAAAJogAACAEAAAiBAAAIQQAACeIAEAcGAAAIWQAACBkAAAmSABMHOwAACHkAAAg5AAAJ0gARBxEAAAhpAAAIKQAACbIAAAgJAAAIiQAACEkAAAnyABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcoAEQcNAAAIZQAACCUAAAmqAAAIBQAACIUAAAhFAAAJ6gAQBwgAAAhdAAAIHQAACZoAFAdTAAAIfQAACD0AAAnaABIHFwAACG0AAAgtAAAJugAACA0AAAiNAAAITQAACfoAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxgARBwsAAAhjAAAIIwAACaYAAAgDAAAIgwAACEMAAAnmABAHBwAACFsAAAgbAAAJlgAUB0MAAAh7AAAIOwAACdYAEgcTAAAIawAACCsAAAm2AAAICwAACIsAAAhLAAAJ9gAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnOABEHDwAACGcAAAgnAAAJrgAACAcAAAiHAAAIRwAACe4AEAcJAAAIXwAACB8AAAmeABQHYwAACH8AAAg/AAAJ3gASBxsAAAhvAAAILwAACb4AAAgPAAAIjwAACE8AAAn+AGAHAAAACFAAAAgQABQIcwASBx8AAAhwAAAIMAAACcEAEAcKAAAIYAAACCAAAAmhAAAIAAAACIAAAAhAAAAJ4QAQBwYAAAhYAAAIGAAACZEAEwc7AAAIeAAACDgAAAnRABEHEQAACGgAAAgoAAAJsQAACAgAAAiIAAAISAAACfEAEAcEAAAIVAAACBQAFQjjABMHKwAACHQAAAg0AAAJyQARBw0AAAhkAAAIJAAACakAAAgEAAAIhAAACEQAAAnpABAHCAAACFwAAAgcAAAJmQAUB1MAAAh8AAAIPAAACdkAEgcXAAAIbAAACCwAAAm5AAAIDAAACIwAAAhMAAAJ+QAQBwMAAAhSAAAIEgAVCKMAEwcjAAAIcgAACDIAAAnFABEHCwAACGIAAAgiAAAJpQAACAIAAAiCAAAIQgAACeUAEAcHAAAIWgAACBoAAAmVABQHQwAACHoAAAg6AAAJ1QASBxMAAAhqAAAIKgAACbUAAAgKAAAIigAACEoAAAn1ABAHBQAACFYAAAgWAEAIAAATBzMAAAh2AAAINgAACc0AEQcPAAAIZgAACCYAAAmtAAAIBgAACIYAAAhGAAAJ7QAQBwkAAAheAAAIHgAACZ0AFAdjAAAIfgAACD4AAAndABIHGwAACG4AAAguAAAJvQAACA4AAAiOAAAITgAACf0AYAcAAAAIUQAACBEAFQiDABIHHwAACHEAAAgxAAAJwwAQBwoAAAhhAAAIIQAACaMAAAgBAAAIgQAACEEAAAnjABAHBgAACFkAAAgZAAAJkwATBzsAAAh5AAAIOQAACdMAEQcRAAAIaQAACCkAAAmzAAAICQAACIkAAAhJAAAJ8wAQBwQAAAhVAAAIFQAQCAIBEwcrAAAIdQAACDUAAAnLABEHDQAACGUAAAglAAAJqwAACAUAAAiFAAAIRQAACesAEAcIAAAIXQAACB0AAAmbABQHUwAACH0AAAg9AAAJ2wASBxcAAAhtAAAILQAACbsAAAgNAAAIjQAACE0AAAn7ABAHAwAACFMAAAgTABUIwwATByMAAAhzAAAIMwAACccAEQcLAAAIYwAACCMAAAmnAAAIAwAACIMAAAhDAAAJ5wAQBwcAAAhbAAAIGwAACZcAFAdDAAAIewAACDsAAAnXABIHEwAACGsAAAgrAAAJtwAACAsAAAiLAAAISwAACfcAEAcFAAAIVwAACBcAQAgAABMHMwAACHcAAAg3AAAJzwARBw8AAAhnAAAIJwAACa8AAAgHAAAIhwAACEcAAAnvABAHCQAACF8AAAgfAAAJnwAUB2MAAAh/AAAIPwAACd8AEgcbAAAIbwAACC8AAAm/AAAIDwAACI8AAAhPAAAJ/wAQBQEAFwUBARMFEQAbBQEQEQUFABkFAQQVBUEAHQUBQBAFAwAYBQECFAUhABwFASASBQkAGgUBCBYFgQBABQAAEAUCABcFgQETBRkAGwUBGBEFBwAZBQEGFQVhAB0FAWAQBQQAGAUBAxQFMQAcBQEwEgUNABoFAQwWBcEAQAUAAAMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAASQDDAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAAAQIDBAQFBQYGBgYHBwcHCAgICAgICAgJCQkJCQkJCQoKCgoKCgoKCgoKCgoKCgoLCwsLCwsLCwsLCwsLCwsLDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PAAAQERISExMUFBQUFRUVFRYWFhYWFhYWFxcXFxcXFxcYGBgYGBgYGBgYGBgYGBgYGRkZGRkZGRkZGRkZGRkZGRoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxscHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQABAgMEBQYHCAgJCQoKCwsMDAwMDQ0NDQ4ODg4PDw8PEBAQEBAQEBARERERERERERISEhISEhISExMTExMTExMUFBQUFBQUFBQUFBQUFBQUFRUVFRUVFRUVFRUVFRUVFRYWFhYWFhYWFhYWFhYWFhYXFxcXFxcXFxcXFxcXFxcXGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxwMAAgAjAAIAEwACADMAAgALAAIAKwACABsAAgA7AAIABwACACcAAgAXAAIANwACAA8AAgAvAAIAHwACAD8AAgAAgAIAIIACABCAAgAwgAIACIACACiAAgAYgAIAOIACAASAAgAkgAIAFIACADSAAgAMgAIALIACAByAAgA8gAIAAoACACKAAgASgAIAMoACAAqAAgAqgAIAGoACADqAAgAGgAIAJoACABaAAgA2gAIADoACAC6AAgAegAIAPoACAAGAAgAhgAIAEYACADGAAgAJgAIAKYACABmAAgA5gAIABYACACWAAgAVgAIANYACAA2AAgAtgAIAHYACAD2AAgADgAIAI4ACABOAAgAzgAIAC4ACACuAAgAbgAIAO4ACAAeAAgAngAIAF4ACADeAAgAPgAIAL4ACAB+AAgA/gAIAAEACACBAAgAQQAIAMEACAAhAAgAoQAIAGEACADhAAgAEQAIAJEACABRAAgA0QAIADEACACxAAgAcQAIAPEACAAJAAgAiQAIAEkACADJAAgAKQAIAKkACABpAAgA6QAIABkACACZAAgAWQAIANkACAA5AAgAuQAIAHkACAD5AAgABQAIAIUACABFAAgAxQAIACUACAClAAgAZQAIAOUACAAVAAgAlQAIAFUACADVAAgANQAIALUACAB1AAgA9QAIAA0ACACNAAgATQAIAM0ACAAtAAgArQAIAG0ACADtAAgAHQAIAJ0ACABdAAgA3QAIAD0ACAC9AAgAfQAIAP0ACAATAAkAEwEJAJMACQCTAQkAUwAJAFMBCQDTAAkA0wEJADMACQAzAQkAswAJALMBCQBzAAkAcwEJAPMACQDzAQkACwAJAAsBCQCLAAkAiwEJAEsACQBLAQkAywAJAMsBCQArAAkAKwEJAKsACQCrAQkAawAJAGsBCQDrAAkA6wEJABsACQAbAQkAmwAJAJsBCQBbAAkAWwEJANsACQDbAQkAOwAJADsBCQC7AAkAuwEJAHsACQB7AQkA+wAJAPsBCQAHAAkABwEJAIcACQCHAQkARwAJAEcBCQDHAAkAxwEJACcACQAnAQkApwAJAKcBCQBnAAkAZwEJAOcACQDnAQkAFwAJABcBCQCXAAkAlwEJAFcACQBXAQkA1wAJANcBCQA3AAkANwEJALcACQC3AQkAdwAJAHcBCQD3AAkA9wEJAA8ACQAPAQkAjwAJAI8BCQBPAAkATwEJAM8ACQDPAQkALwAJAC8BCQCvAAkArwEJAG8ACQBvAQkA7wAJAO8BCQAfAAkAHwEJAJ8ACQCfAQkAXwAJAF8BCQDfAAkA3wEJAD8ACQA/AQkAvwAJAL8BCQB/AAkAfwEJAP8ACQD/AQkAAAAHAEAABwAgAAcAYAAHABAABwBQAAcAMAAHAHAABwAIAAcASAAHACgABwBoAAcAGAAHAFgABwA4AAcAeAAHAAQABwBEAAcAJAAHAGQABwAUAAcAVAAHADQABwB0AAcAAwAIAIMACABDAAgAwwAIACMACACjAAgAYwAIAOMACAAAAAUAEAAFAAgABQAYAAUABAAFABQABQAMAAUAHAAFAAIABQASAAUACgAFABoABQAGAAUAFgAFAA4ABQAeAAUAAQAFABEABQAJAAUAGQAFAAUABQAVAAUADQAFAB0ABQADAAUAEwAFAAsABQAbAAUABwAFABcABQBB8LAqC00BAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAMAAAAEAAAABAAAAAQAAAAEAAAABQAAAAUAAAAFAAAABQBB4LEqC2UBAAAAAQAAAAIAAAACAAAAAwAAAAMAAAAEAAAABAAAAAUAAAAFAAAABgAAAAYAAAAHAAAABwAAAAgAAAAIAAAACQAAAAkAAAAKAAAACgAAAAsAAAALAAAADAAAAAwAAAANAAAADQBBkLMqCyMCAAAAAwAAAAcAAAAAAAAAEBESAAgHCQYKBQsEDAMNAg4BDwBBxLMqC2kBAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAQcS0KgtyAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAAAAAEAAIABAAAAAgAAAAMAAAAEAAAABgAAAAgAAAAMAAAAEAAAABgAAAAgAAAAMAAAAEAAAABgAEHAtSoLJjAmAAC2QwAAjmIAANaBAABgmwAA4bEAAGjJAACp4QAApPgAAI5iAEHwtSoLVxkSRDsCPyxHFD0zMAobBkZLRTcPSQ6OFwNAHTxpKzYfSi0cASAlKSEIDBUWIi4QOD4LNDEYZHR1di9BCX85ESNDMkKJiosFBCYoJw0qHjWMBxpIkxOUlQBB0LYqC7MOSWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAC9wcm9jL3NlbGYvZmQvAHJ3YQByd2EAcndhAACIPAsAGD0LAKg9CwBBkMUqCycvdG1wL3RtcGZpbGVfWFhYWFhYAHcrAC0rICAgMFgweAAobnVsbCkAQcDFKgtBEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAQZHGKgshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEHLxioLAQwAQdfGKgsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEGFxyoLAQ4AQZHHKgsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEG/xyoLARAAQcvHKgseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEGCyCoLDhIAAAASEhIAAAAAAAAJAEGzyCoLAQsAQb/IKgsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHtyCoLAQwAQfnIKgtLDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAuAEHQySoLuAT/////////////////////////////////////////////////////////////////AAECAwQFBgcICf////////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgQHAwYFAAAAAAAAAAIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM02luZmluaXR5AG5hbgAAAAAAAAAA0XSeAFedvSqAcFIP//8+JwoAAABkAAAA6AMAABAnAACghgEAQEIPAICWmAAA4fUFGAAAADUAAABxAAAAa////877//+Sv///AEGszioLAk4FAEHTzioLBf//////AEGYzyoL3xVYWFhYWFgAAAMAAAAEAAAABAAAAAYAAACD+aIARE5uAPwpFQDRVycA3TT1AGLbwAA8mZUAQZBDAGNR/gC73qsAt2HFADpuJADSTUIASQbgAAnqLgAcktEA6x3+ACmxHADoPqcA9TWCAES7LgCc6YQAtCZwAEF+XwDWkTkAU4M5AJz0OQCLX4QAKPm9APgfOwDe/5cAD5gFABEv7wAKWosAbR9tAM9+NgAJyycARk+3AJ5mPwAt6l8Auid1AOXrxwA9e/EA9zkHAJJSigD7a+oAH7FfAAhdjQAwA1YAe/xGAPCrawAgvM8ANvSaAOOpHQBeYZEACBvmAIWZZQCgFF8AjUBoAIDY/wAnc00ABgYxAMpWFQDJqHMAe+JgAGuMwAAZxEcAzWfDAAno3ABZgyoAi3bEAKYclgBEr90AGVfRAKU+BQAFB/8AM34/AMIy6ACYT94Au30yACY9wwAea+8An/heADUfOgB/8soA8YcdAHyQIQBqJHwA1W76ADAtdwAVO0MAtRTGAMMZnQCtxMIALE1BAAwAXQCGfUYA43EtAJvGmgAzYgAAtNJ8ALSnlwA3VdUA1z72AKMQGABNdvwAZJ0qAHDXqwBjfPgAerBXABcV5wDASVYAO9bZAKeEOAAkI8sA1op3AFpUIwAAH7kA8QobABnO3wCfMf8AZh5qAJlXYQCs+0cAfn/YACJl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AGNvdmFyaWFudCByZXR1cm4gdGh1bmsgdG8gAHRocmVhZC1sb2NhbCB3cmFwcGVyIHJvdXRpbmUgZm9yIAB0aHJlYWQtbG9jYWwgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgAHZpcnR1YWwgdGh1bmsgdG8gAG5vbi12aXJ0dWFsIHRodW5rIHRvIABndWFyZCB2YXJpYWJsZSBmb3IgAHJlZmVyZW5jZSB0ZW1wb3JhcnkgZm9yIAAAAAAAAAAAhOYKAH8GAACABgAAgQYAAIIGAACDBgAAhAYAAIUGAACGBgAAhwYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTExU3BlY2lhbE5hbWVFAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTROb2RlRQCgDQsAVOYKAMgNCwAk5goAfOYKAAAAAAB85goAfwYAAIAGAACBBgAAggYAAIYDAACEBgAAhQYAAIYGAACIBgAAAAAAACTnCgB/BgAAgAYAAIEGAACCBgAAiQYAAIQGAACFBgAAhgYAAIoGAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUyMUN0b3JWdGFibGVTcGVjaWFsTmFtZUUAAADIDQsA6OYKAHzmCgBjb25zdHJ1Y3Rpb24gdnRhYmxlIGZvciAALWluLQBTdABzdGQAAAAAAAAAALDnCgB/BgAAgAYAAIEGAACCBgAAiwYAAIQGAACMBgAAhgYAAI0GAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGU4TmFtZVR5cGVFAMgNCwCE5woAfOYKAAAAAAAY6AoAfwYAAIAGAACBBgAAggYAAI4GAACEBgAAjwYAAIYGAACQBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTBOZXN0ZWROYW1lRQAAyA0LAOjnCgB85goAOjoAYXV0bwAAAAAAmOgKAJEGAACSBgAAkwYAAJQGAACVBgAAlgYAAIUGAACGBgAAlwYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTI0Rm9yd2FyZFRlbXBsYXRlUmVmZXJlbmNlRQAAAADIDQsAWOgKAHzmCgBkZWNsdHlwZSgAKQBncwAmJgAmACY9AD0AYWxpZ25vZiAoAGNvbnN0X2Nhc3QALAB+AGR5bmFtaWNfY2FzdAAqAC4qAC4ALwAvPQBeAF49AD09AD49AD4APD0APDwAPDw9ADwALQAtPQAqPQAtLQAhPQAhAG5vZXhjZXB0ICgAfHwAfAB8PQAtPioAKwArPQArKwAtPgByZWludGVycHJldF9jYXN0ACUAJT0APj4APj49AHN0YXRpY19jYXN0AHNpemVvZiAoAHNpemVvZi4uLiAoAHR5cGVpZCAoAHRocm93AHU4X191dWlkb2Z0AHU4X191dWlkb2Z6AHdjaGFyX3QAYjBFAGIxRQBjaGFyAHNpZ25lZCBjaGFyAHVuc2lnbmVkIGNoYXIAc2hvcnQAdW5zaWduZWQgc2hvcnQAAHUAbAB1bABsbAB1bGwAX19pbnQxMjgAdW5zaWduZWQgX19pbnQxMjgAAAAAAAAAAHDqCgB/BgAAgAYAAIEGAACCBgAAmAYAAIQGAACFBgAAhgYAAJkGAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxNEludGVnZXJMaXRlcmFsRQAAyA0LADzqCgB85goAKAAAAAAAAADY6goAfwYAAIAGAACBBgAAggYAAJoGAACEBgAAhQYAAIYGAACbBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlOEJvb2xFeHByRQDIDQsArOoKAHzmCgB0cnVlAGZhbHNlAAAAAAAAVOsKAH8GAACABgAAgQYAAIIGAACcBgAAhAYAAIUGAACGBgAAnQYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTE2RmxvYXRMaXRlcmFsSW1wbElmRUUAyA0LABzrCgB85goAJWFmAAAAAADI6woAfwYAAIAGAACBBgAAggYAAJ4GAACEBgAAhQYAAIYGAACfBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTZGbG9hdExpdGVyYWxJbXBsSWRFRQDIDQsAkOsKAHzmCgAlYQAAAAAAADzsCgB/BgAAgAYAAIEGAACCBgAAoAYAAIQGAACFBgAAhgYAAKEGAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxNkZsb2F0TGl0ZXJhbEltcGxJZUVFAMgNCwAE7AoAfOYKACVMYUwAAAAAAAAAALDsCgB/BgAAgAYAAIEGAACCBgAAogYAAIQGAACFBgAAhgYAAKMGAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxNUludGVnZXJDYXN0RXhwckUAyA0LAHzsCgB85goAZnAAZkwAAAAAAAAAJO0KAH8GAACABgAAgQYAAIIGAACkBgAAhAYAAIUGAACGBgAApQYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEzRnVuY3Rpb25QYXJhbUUAAADIDQsA8OwKAHzmCgBhYQBhbgBhTgBhUwBjbQBkcwBkdgBkVgBlbwBlTwBlcQBnZQBndABsZQBscwBsUwBsdABtaQBtSQBtbABtTABuZQBvbwBvcgBvUgBwbABwTABybQByTQBycwByUwAAAAAAAAAA6O0KAH8GAACABgAAgQYAAIIGAACmBgAAhAYAAIUGAACGBgAApwYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZThGb2xkRXhwckUAyA0LALztCgB85goALi4uIAAgLi4uAAAAAAAAAGjuCgB/BgAAgAYAAIEGAACCBgAAqAYAAIQGAACFBgAAhgYAAKkGAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUyMlBhcmFtZXRlclBhY2tFeHBhbnNpb25FAADIDQsALO4KAHzmCgAuLi4ALCAAAAAAAADY7goAfwYAAIAGAACBBgAAggYAAKoGAACEBgAAhQYAAIYGAACrBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTBCaW5hcnlFeHByRQAAyA0LAKjuCgB85goAKSAAICgAAAAAAAAASO8KAH8GAACABgAAgQYAAIIGAACsBgAAhAYAAIUGAACGBgAArQYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEwUHJlZml4RXhwckUAAMgNCwAY7woAfOYKAAAAAACs7woAfwYAAIAGAACBBgAAggYAAK4GAACEBgAAhQYAAIYGAACvBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlOENhc3RFeHByRQDIDQsAgO8KAHzmCgA+KAAAAAAAABTwCgB/BgAAgAYAAIEGAACCBgAAsAYAAIQGAACFBgAAhgYAALEGAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGU4Q2FsbEV4cHJFAMgNCwDo7woAfOYKAGN2AAAAAAAAhPAKAH8GAACABgAAgQYAAIIGAACyBgAAhAYAAIUGAACGBgAAswYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTE0Q29udmVyc2lvbkV4cHJFAADIDQsAUPAKAHzmCgApKAAAAAAAAPDwCgB/BgAAgAYAAIEGAACCBgAAtAYAAIQGAACFBgAAhgYAALUGAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxMERlbGV0ZUV4cHJFAADIDQsAwPAKAHzmCgBkZWxldGUAW10gAHNyTgBzcgBfR0xPQkFMX19OAChhbm9ueW1vdXMgbmFtZXNwYWNlKQAAAAAAAJDxCgB/BgAAgAYAAIEGAACCBgAAtgYAAIQGAAC3BgAAhgYAALgGAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxM1F1YWxpZmllZE5hbWVFAAAAyA0LAFzxCgB85goAZG4Ab24AAAAAAAAA/PEKAH8GAACABgAAgQYAAIIGAAC5BgAAhAYAAIUGAACGBgAAugYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZThEdG9yTmFtZUUAyA0LANDxCgB85goAb3BlcmF0b3ImJgBvcGVyYXRvciYAb3BlcmF0b3ImPQBvcGVyYXRvcj0Ab3BlcmF0b3IoKQBvcGVyYXRvciwAb3BlcmF0b3J+AG9wZXJhdG9yIGRlbGV0ZVtdAG9wZXJhdG9yKgBvcGVyYXRvciBkZWxldGUAb3BlcmF0b3IvAG9wZXJhdG9yLz0Ab3BlcmF0b3JeAG9wZXJhdG9yXj0Ab3BlcmF0b3I9PQBvcGVyYXRvcj49AG9wZXJhdG9yPgBvcGVyYXRvcltdAG9wZXJhdG9yPD0Ab3BlcmF0b3I8PABvcGVyYXRvcjw8PQBvcGVyYXRvcjwAb3BlcmF0b3ItAG9wZXJhdG9yLT0Ab3BlcmF0b3IqPQBvcGVyYXRvci0tAG9wZXJhdG9yIG5ld1tdAG9wZXJhdG9yIT0Ab3BlcmF0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BgAAggYAANgGAACEBgAAhQYAAIYGAADZBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlOVRocm93RXhwckUAAAAAyA0LAGz6CgB85goAdGhyb3cgAAAAAAAADPsKAH8GAACABgAAgQYAAIIGAADaBgAAhAYAAIUGAACGBgAA2wYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEwVVVJRE9mRXhwckUAAMgNCwDc+goAfOYKAF9fdXVpZG9mKAAAAAAAAACQ+woAfwYAAIAGAACBBgAAggYAANwGAACEBgAA3QYAAIYGAADeBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMjdFeHBhbmRlZFNwZWNpYWxTdWJzdGl0dXRpb25FAMgNCwBQ+woAfOYKAHN0ZDo6YWxsb2NhdG9yAHN0ZDo6YmFzaWNfc3RyaW5nAHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4Ac3RkOjpiYXNpY19pc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBzdGQ6OmJhc2ljX29zdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+AHN0ZDo6YmFzaWNfaW9zdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+AGFsbG9jYXRvcgBiYXNpY19zdHJpbmcAYmFzaWNfaXN0cmVhbQBiYXNpY19vc3RyZWFtAGJhc2ljX2lvc3RyZWFtAAAAAAAAAABA/QoAfwYAAIAGAACBBgAAggYAAN8GAACEBgAAhQYAAIYGAADgBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTJDdG9yRHRvck5hbWVFAAAAAMgNCwAM/QoAfOYKAAAAAACo/QoAfwYAAIAGAACBBgAAggYAAOEGAACEBgAAhQYAAIYGAADiBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTBBYmlUYWdBdHRyRQAAyA0LAHj9CgB85goAW2FiaToAREMAVXQAVWwAdkUAVWIAJ2Jsb2NrLWxpdGVyYWwnAAAAAAAAAAA8/goAfwYAAIAGAACBBgAAggYAAOMGAACEBgAAhQYAAIYGAADkBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTVVbm5hbWVkVHlwZU5hbWVFAMgNCwAI/goAfOYKACd1bm5hbWVkACcAAAAAAAC0/goAfwYAAIAGAACBBgAAggYAAOUGAACEBgAAhQYAAIYGAADmBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTVDbG9zdXJlVHlwZU5hbWVFAMgNCwCA/goAfOYKACdsYW1iZGEAJygAAAAAAAA0/woAfwYAAIAGAACBBgAAggYAAOcGAACEBgAAhQYAAIYGAADoBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMjFTdHJ1Y3R1cmVkQmluZGluZ05hbWVFAAAAyA0LAPj+CgB85goAc3RyaW5nIGxpdGVyYWwAAAAAAACs/woAfwYAAIAGAACBBgAAggYAAOkGAACEBgAAhQYAAIYGAADqBgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlOUxvY2FsTmFtZUUAAAAAyA0LAHz/CgB85goAAAAAABwACwB/BgAAgAYAAIEGAACCBgAA6wYAAIQGAADsBgAAhgYAAO0GAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxOVNwZWNpYWxTdWJzdGl0dXRpb25FAMgNCwDk/woAfOYKAHN0ZDo6c3RyaW5nAHN0ZDo6aXN0cmVhbQBzdGQ6Om9zdHJlYW0Ac3RkOjppb3N0cmVhbQBzdHJpbmcAaXN0cmVhbQBvc3RyZWFtAGlvc3RyZWFtAAAAAADcAAsA7gYAAO8GAADwBgAA8QYAAPIGAADzBgAAhQYAAIYGAAD0BgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTNQYXJhbWV0ZXJQYWNrRQAAAMgNCwCoAAsAfOYKAAAAAABIAQsAfwYAAIAGAACBBgAAggYAAPUGAACEBgAAhQYAAIYGAAD2BgAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTJUZW1wbGF0ZUFyZ3NFAAAAAMgNCwAUAQsAfOYKACAAAAAAAAAAwAELAH8GAACABgAAgQYAAIIGAAD3BgAAhAYAAPgGAACGBgAA+QYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTIwTmFtZVdpdGhUZW1wbGF0ZUFyZ3NFAAAAAMgNCwCEAQsAfOYKAFN0TAAAAAAANAILAH8GAACABgAAgQYAAIIGAAD6BgAAhAYAAPsGAACGBgAA/AYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTE2U3RkUXVhbGlmaWVkTmFtZUUAAAAAyA0LAPwBCwB85goAc3RkOjoAAAAAAAAAsAILAH8GAACABgAAgQYAAIIGAAD9BgAAhAYAAIUGAACGBgAA/gYAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTIwVGVtcGxhdGVBcmd1bWVudFBhY2tFAAAAAMgNCwB0AgsAfOYKAAAAAAAcAwsAfwYAAIAGAACBBgAAggYAAP8GAACEBgAAhQYAAIYGAAAABwAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTJFbmFibGVJZkF0dHJFAAAAAMgNCwDoAgsAfOYKACBbZW5hYmxlX2lmOgAAAAAAAAAAnAMLAAEHAACABgAAAgcAAIIGAAADBwAABAcAAIUGAACGBgAABQcAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTE2RnVuY3Rpb25FbmNvZGluZ0UAAAAAyA0LAGQDCwB85goAIGNvbnN0ACB2b2xhdGlsZQAgcmVzdHJpY3QAICYAICYmAAAAAAAAACgECwB/BgAAgAYAAIEGAACCBgAABgcAAIQGAACFBgAAhgYAAAcHAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGU5RG90U3VmZml4RQAAAADIDQsA+AMLAHzmCgB2b2lkAGJvb2wAaW50AHVuc2lnbmVkIGludABsb25nAHVuc2lnbmVkIGxvbmcAbG9uZyBsb25nAHVuc2lnbmVkIGxvbmcgbG9uZwBmbG9hdABkb3VibGUAbG9uZyBkb3VibGUAX19mbG9hdDEyOABkZWNpbWFsNjQAZGVjaW1hbDEyOABkZWNpbWFsMzIAZGVjaW1hbDE2AGNoYXIzMl90AGNoYXIxNl90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AABMEgsApQMAAKgDAACGAwAAAAAAAEwSCwClAwAAqAMAAIYDAAAAAAAATBILAKUDAACoAwAAhgMAAAAAAABMEgsApQMAAKgDAACGAwAAAAAAAFgTCwCpAwAAqgMAAKsDAACgDQsAl7sDAMgNCwBXuwMAUBMLAAAAAABQEwsAqQMAAKwDAACGAwAAAAAAAKgTCwCLAwAArQMAAJUDAACOAwAAjwMAAJYDAACXAwAAmAMAAJkDAACaAwAAyA0LAMe7AwDQEAsAQNABAOndAQAN7AEAZ/gBAAAAAAAYFAsArgMAAK8DAACwAwAAAAAAABgUCwCuAwAArwMAALADAAAAAAAAGBQLAK4DAACvAwAAsAMAAKANCwDFvAMAoA0LAMW8AwCgDQsAxbwDAMgNCwD8uwMAABQLAMgNCwD8uwMAABQLAMgNCwD8uwMAABQLAAAAAAAAFAsArgMAALEDAACGAwAAAAAAAAAUCwCuAwAAsQMAAIYDAAAAAAAAABQLAK4DAACxAwAAhgMAAAAAAACQFAsAsgMAALMDAAC0AwAAtQMAAMgNCwC0DAQAhDYLAAAAAADEFAsAtgMAALcDAAC4AwAAuQMAALoDAAC7AwAAvAMAAL0DAACgDQsA6AwEAAAAAAAHDQQADA0EAA8NBAAUDQQAGg0EAB8NBAAnDQQALQ0EADcNBAA9DQQARw0EAE0NBABAAAAAAAAAAIAcCwC+AwAAvwMAADgAAAD4////gBwLAMADAADBAwAAwP///8D///+AHAsAwgMAAMMDAABAAAAAAAAAAIAcCwC+AwAAvwMAADgAAAD4////gBwLAMADAADBAwAAwP///8D///+AHAsAwgMAAMMDAABAAAAAAAAAAIAcCwC+AwAAvwMAADgAAAD4////gBwLAMADAADBAwAAwP///8D///+AHAsAwgMAAMMDAABAAAAAAAAAAIAcCwC+AwAAvwMAADgAAAD4////gBwLAMADAADBAwAAwP///8D///+AHAsAwgMAAMMDAABAAAAAAAAAAIAcCwC+AwAAvwMAADgAAAD4////gBwLAMADAADBAwAAwP///8D///+AHAsAwgMAAMMDAABAAAAAAAAAAIAcCwC+AwAAvwMAADgAAAD4////gBwLAMADAADBAwAAwP///8D///+AHAsAwgMAAMMDAABAAAAAAAAAAIAcCwC+AwAAvwMAADgAAAD4////gBwLAMADAADBAwAAwP///8D///+AHAsAwgMAAMMDAABAAAAAAAAAAIAcCwC+AwAAvwMAADgAAAD4////gBwLAMADAADBAwAAwP///8D///+AHAsAwgMAAMMDAAAMFQsALBgLAAwaCwAgGgsATBsLAGAbCwBUGAsAQBgLADQVCwAgFQsADBULACwYCwAMGgsAIBoLAEwbCwBgGwsAVBgLAEAYCwA0FQsAIBULAAwVCwAsGAsADBoLACAaCwBMGwsAYBsLAFQYCwBAGAsANBULACAVCwAMFQsALBgLAAwaCwAgGgsATBsLAGAbCwBUGAsAQBgLADQVCwAgFQsADBULACwYCwAMGgsAIBoLAEwbCwBgGwsAVBgLAEAYCwA0FQsAIBULAAwVCwAsGAsADBoLACAaCwBMGwsAYBsLAFQYCwBAGAsANBULACAVCwAMFQsALBgLAAwaCwAgGgsATBsLAGAbCwBUGAsAQBgLADQVCwAgFQsADBULACwYCwAMGgsAIBoLAEwbCwBgGwsAVBgLAEAYCwA0FQsAIBULAEAAAAAAAAAAJLoKAMQDAADFAwAAOAAAAPj///8kugoAxgMAAMcDAADA////wP///yS6CgDIAwAAyQMAAEAAAAAAAAAAJLoKAMQDAADFAwAAOAAAAPj///8kugoAxgMAAMcDAADA////wP///yS6CgDIAwAAyQMAAEAAAAAAAAAAJLoKAMQDAADFAwAAOAAAAPj///8kugoAxgMAAMcDAADA////wP///yS6CgDIAwAAyQMAAEAAAAAAAAAAJLoKAMQDAADFAwAAOAAAAPj///8kugoAxgMAAMcDAADA////wP///yS6CgDIAwAAyQMAAEAAAAAAAAAAJLoKAMQDAADFAwAAOAAAAPj///8kugoAxgMAAMcDAADA////wP///yS6CgDIAwAAyQMAAEAAAAAAAAAAJLoKAMQDAADFAwAAOAAAAPj///8kugoAxgMAAMcDAADA////wP///yS6CgDIAwAAyQMAAEAAAAAAAAAAJLoKAMQDAADFAwAAOAAAAPj///8kugoAxgMAAMcDAADA////wP///yS6CgDIAwAAyQMAAEAAAAAAAAAAJLoKAMQDAADFAwAAOAAAAPj///8kugoAxgMAAMcDAADA////wP///yS6CgDIAwAAyQMAAEAAAAAAAAAAtLgKAMoDAADLAwAAwP///8D///+0uAoAzAMAAM0DAABAAAAAAAAAALS4CgDKAwAAywMAAMD////A////tLgKAMwDAADNAwAAQAAAAAAAAAC0uAoAygMAAMsDAADA////wP///7S4CgDMAwAAzQMAAEAAAAAAAAAAtLgKAMoDAADLAwAAwP///8D///+0uAoAzAMAAM0DAABAAAAAAAAAALS4CgDKAwAAywMAAMD////A////tLgKAMwDAADNAwAAQAAAAAAAAAC0uAoAygMAAMsDAADA////wP///7S4CgDMAwAAzQMAAEAAAAAAAAAAtLgKAMoDAADLAwAAwP///8D///+0uAoAzAMAAM0DAABAAAAAAAAAALS4CgDKAwAAywMAAMD////A////tLgKAMwDAADNAwAAOAAAAAAAAABEuQoAzgMAAM8DAADI////yP///0S5CgDQAwAA0QMAADgAAAAAAAAARLkKAM4DAADPAwAAyP///8j///9EuQoA0AMAANEDAAA4AAAAAAAAAES5CgDOAwAAzwMAAMj////I////RLkKANADAADRAwAAOAAAAAAAAABEuQoAzgMAAM8DAADI////yP///0S5CgDQAwAA0QMAADgAAAAAAAAARLkKAM4DAADPAwAAyP///8j///9EuQoA0AMAANEDAAA4AAAAAAAAAES5CgDOAwAAzwMAAMj////I////RLkKANADAADRAwAAOAAAAAAAAABEuQoAzgMAAM8DAADI////yP///0S5CgDQAwAA0QMAADgAAAAAAAAARLkKAM4DAADPAwAAyP///8j///9EuQoA0AMAANEDAADIDQsAUg0EACS6CgDIDQsAUg0EACS6CgDIDQsAUg0EACS6CgDIDQsAUg0EACS6CgDIDQsAUg0EACS6CgDIDQsAUg0EACS6CgDIDQsAUg0EACS6CgDIDQsAUg0EACS6CgAAAAAAoB8LANIDAADTAwAA1AMAANUDAADWAwAA1wMAANgDAADZAwAA2gMAANsDAADcAwAA3QMAAN4DAADfAwAAAAAAAKAfCwDSAwAA0wMAANQDAADVAwAA1gMAANcDAADYAwAA2QMAANoDAADbAwAA3AMAAN0DAADeAwAA3wMAAAAAAACgHwsA0gMAANMDAADUAwAA1QMAANYD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HQQAwh0EANYdBADsHQQAAh4EADAeBABgHgQAfx4EAJkeBACwHgQAyR4EAOMeBAD1HgQACR8EACcfBABgHwQAkB8EAK0fBADCHwQAZAoAAI8rAACtSQAAsmgAALeGAAC1nwAAIbYAAKLNAABo5QAA7fwAQYDKLAsXxREBAJUlAQDQOgEA504BAJBiAQDodAEAQaDKLAvnB7CFAQBIlwEAr6UBAHe0AQA8AAAAAAAAALAmCwAABAAAAQQAAMT////E////sCYLAAIEAAADBAAAPAAAAAAAAACwJgsAAAQAAAEEAADE////xP///7AmCwACBAAAAwQAADwAAAAAAAAAsCYLAAAEAAABBAAAxP///8T///+wJgsAAgQAAAMEAAA8AAAAAAAAALAmCwAABAAAAQQAAMT////E////sCYLAAIEAAADBAAAPCULABwmCwAwJgsAUCULADwlCwAcJgsAMCYLAFAlCwA8JQsAHCYLADAmCwBQJQsAPCULABwmCwAwJgsAUCULADwAAAAAAAAAtLgKAMoDAADLAwAAxP///8T///+0uAoAzAMAAM0DAAA8AAAAAAAAALS4CgDKAwAAywMAAMT////E////tLgKAMwDAADNAwAAPAAAAAAAAAC0uAoAygMAAMsDAADE////xP///7S4CgDMAwAAzQMAADwAAAAAAAAAtLgKAMoDAADLAwAAxP///8T///+0uAoAzAMAAM0DAADIDQsAFCEEALS4CgDIDQsAFCEEALS4CgDIDQsAFCEEALS4CgDIDQsAFCEEALS4CgCgDQsALCIEAAAAAADgJgsABAQAAAUEAACGAwAAAAAAABAnCwAEBAAABgQAAAcEAADIDQsASiIEAOAmCwBnCgAAkysAALFJAAC2aAAAAAAAAC4gLCA7IDogLyBgIH4gJyAtID0gXCB8ICIgISBfIF4AMCAxIDIgMyA0IDUgNiA3IDggOQAAAAAAeCcLAAgEAAAJBAAACgQAAMgNCwBUvgYANCALAAAAAACgJwsACwQAAAwEAAANBAAAoA0LAKy+BgDIDQsAar4GAJgnCwAAAAAAmCcLAAsEAAAOBAAAhgMAAAAAAADcJwsADwQAABAEAAARBAAAoA0LABu/BgDIDQsA3r4GANQnCwAAAAAA1CcLAA8EAAASBAAAhgMAAAAAAACMKAsAEwQAABQEAAAV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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(wasmBinaryFile);if(binary){return binary}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;var ASM_CONSTS={33309:function($0){if(Module["TesseractProgress"])Module["TesseractProgress"]($0)}};function _emscripten_asm_const_iii(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){demangle.recursionGuard=(demangle.recursionGuard|0)+1;if(demangle.recursionGuard>1)return func;var __cxa_demangle_func=Module["___cxa_demangle"]||Module["__cxa_demangle"];assert(__cxa_demangle_func);var stackTop=stackSave();try{var s=func;if(s.startsWith("__Z"))s=s.substr(1);var len=lengthBytesUTF8(s)+1;var buf=stackAlloc(len);stringToUTF8(s,buf,len);var status=stackAlloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(HEAP32[status>>2]===0&&ret){return UTF8ToString(ret)}}catch(e){}finally{_free(ret);stackRestore(stackTop);if(demangle.recursionGuard<2)--demangle.recursionGuard}return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};var _emscripten_get_now_is_monotonic=true;function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{___setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(a0,a1){return _clock_gettime(a0,a1)}function ___cxa_allocate_exception(size){return _malloc(size)}var ___exception_infos={};var ___exception_last=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){___exception_infos[ptr]={ptr:ptr,adjusted:[ptr],type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};___exception_last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function ___map_file(pathname,size){___setErrNo(63);return-1}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___syscall10(path){try{path=SYSCALLS.getStr(path);FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall183(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size=67){while((ptr&3)!=0){HEAP8[ptr>>0]=value;ptr=ptr+1|0}aligned_end=end&-4|0;value4=value|value<<8|value<<16|value<<24;block_aligned_end=aligned_end-64|0;while((ptr|0)<=(block_aligned_end|0)){HEAP32[ptr>>2]=value4;HEAP32[ptr+4>>2]=value4;HEAP32[ptr+8>>2]=value4;HEAP32[ptr+12>>2]=value4;HEAP32[ptr+16>>2]=value4;HEAP32[ptr+20>>2]=value4;HEAP32[ptr+24>>2]=value4;HEAP32[ptr+28>>2]=value4;HEAP32[ptr+32>>2]=value4;HEAP32[ptr+36>>2]=value4;HEAP32[ptr+40>>2]=value4;HEAP32[ptr+44>>2]=value4;HEAP32[ptr+48>>2]=value4;HEAP32[ptr+52>>2]=value4;HEAP32[ptr+56>>2]=value4;HEAP32[ptr+60>>2]=value4;ptr=ptr+64|0}while((ptr|0)<(aligned_end|0)){HEAP32[ptr>>2]=value4;ptr=ptr+4|0}}while((ptr|0)<(end|0)){HEAP8[ptr>>0]=value;ptr=ptr+1|0}return end-num|0}function syscallMmap2(addr,len,prot,flags,fd,off){off<<=12;var ptr;var allocated=false;if((flags&16)!==0&&addr%16384!==0){return-28}if((flags&32)!==0){ptr=_memalign(16384,len);if(!ptr)return-48;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-8;var res=FS.mmap(info,HEAPU8,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,flags:flags,offset:off};return ptr}function ___syscall192(addr,len,prot,flags,fd,off){try{return syscallMmap2(addr,len,prot,flags,fd,off)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:___setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall3(fd,buf,count){try{var stream=SYSCALLS.getStreamFromFD(fd);return FS.read(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall40(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function syscallMunmap(addr,len){if(addr===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset);FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___syscall91(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){abort()}function _clock(){if(_clock.start===undefined)_clock.start=Date.now();return(Date.now()-_clock.start)*(1e6/1e3)|0}function _difftime(time1,time0){return time1-time0}function _emscripten_get_heap_size(){return HEAPU8.length}var setjmpId=0;function _saveSetjmp(env,label,table,size){env=env|0;label=label|0;table=table|0;size=size|0;var i=0;setjmpId=setjmpId+1|0;HEAP32[env>>2]=setjmpId;while((i|0)<(size|0)){if((HEAP32[table+(i<<3)>>2]|0)==0){HEAP32[table+(i<<3)>>2]=setjmpId;HEAP32[table+((i<<3)+4)>>2]=label;HEAP32[table+((i<<3)+8)>>2]=0;setTempRet0(size|0);return table|0}i=i+1|0}size=size*2|0;table=_realloc(table|0,8*(size+1|0)|0)|0;table=_saveSetjmp(env|0,label|0,table|0,size|0)|0;setTempRet0(size|0);return table|0}function _testSetjmp(id,table,size){id=id|0;table=table|0;size=size|0;var i=0,curr=0;while((i|0)<(size|0)){curr=HEAP32[table+(i<<3)>>2]|0;if((curr|0)==0)break;if((curr|0)==(id|0)){return HEAP32[table+((i<<3)+4)>>2]|0}i=i+1|0}return 0}function _longjmp(env,value){_setThrew(env,value||1);throw"longjmp"}function _emscripten_longjmp(env,value){_longjmp(env,value)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648-PAGE_MULTIPLE;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function __getExecutableName(){return thisProgram||"./this.program"}function _emscripten_get_environ(){if(!_emscripten_get_environ.strings){var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8","_":__getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}_emscripten_get_environ.strings=strings}return _emscripten_get_environ.strings}function _environ_get(__environ,environ_buf){var strings=_emscripten_get_environ();var bufSize=0;strings.forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=_emscripten_get_environ();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _getTempRet0(){return getTempRet0()|0}var ___tm_current=750928;var ___tm_timezone=(stringToUTF8("GMT",750976,4),750976);function _gmtime_r(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();HEAP32[tmPtr+36>>2]=0;HEAP32[tmPtr+32>>2]=0;var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+40>>2]=___tm_timezone;return tmPtr}function _gmtime(time){return _gmtime_r(time,___tm_current)}function _tzset(){if(_tzset.called)return;_tzset.called=true;HEAP32[__get_timezone()>>2]=(new Date).getTimezoneOffset()*60;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);HEAP32[__get_daylight()>>2]=Number(winter.getTimezoneOffset()!=summer.getTimezoneOffset());function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summer.getTimezoneOffset()>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function _localtime(time){return _localtime_r(time,___tm_current)}function _mktime(tmPtr){_tzset();var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;return date.getTime()/1e3|0}function _png_init_io(){err("missing function: png_init_io");abort(-1)}function _round(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _setTempRet0($i){setTempRet0($i|0)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function readAsmConstArgs(sigPtr,buf){if(!readAsmConstArgs.array){readAsmConstArgs.array=[]}var args=readAsmConstArgs.array;args.length=0;var ch;while(ch=HEAPU8[sigPtr++]){if(ch===100||ch===102){buf=buf+7&~7;args.push(HEAPF64[buf>>3]);buf+=8}else{buf=buf+3&~3;args.push(HEAP32[buf>>2]);buf+=4}}return args}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run();function WrapperObject(){}WrapperObject.prototype=Object.create(WrapperObject.prototype);WrapperObject.prototype.constructor=WrapperObject;WrapperObject.prototype.__class__=WrapperObject;WrapperObject.__cache__={};Module["WrapperObject"]=WrapperObject;function getCache(__class__){return(__class__||WrapperObject).__cache__}Module["getCache"]=getCache;function wrapPointer(ptr,__class__){var cache=getCache(__class__);var ret=cache[ptr];if(ret)return ret;ret=Object.create((__class__||WrapperObject).prototype);ret.ptr=ptr;return cache[ptr]=ret}Module["wrapPointer"]=wrapPointer;function castObject(obj,__class__){return wrapPointer(obj.ptr,__class__)}Module["castObject"]=castObject;Module["NULL"]=wrapPointer(0);function destroy(obj){if(!obj["__destroy__"])throw"Error: Cannot destroy object. (Did you create it yourself?)";obj["__destroy__"]();delete getCache(obj.__class__)[obj.ptr]}Module["destroy"]=destroy;function compare(obj1,obj2){return obj1.ptr===obj2.ptr}Module["compare"]=compare;function getPointer(obj){return obj.ptr}Module["getPointer"]=getPointer;function getClass(obj){return obj.__class__}Module["getClass"]=getClass;var ensureCache={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(ensureCache.needed){for(var i=0;i=ensureCache.size){assert(len>0);ensureCache.needed+=len;ret=Module["_malloc"](len);ensureCache.temps.push(ret)}else{ret=ensureCache.buffer+ensureCache.pos;ensureCache.pos+=len}return ret},copy:function(array,view,offset){var offsetShifted=offset;var bytes=view.BYTES_PER_ELEMENT;switch(bytes){case 2:offsetShifted>>=1;break;case 4:offsetShifted>>=2;break;case 8:offsetShifted>>=3;break}for(var i=0;i + * @license MIT + */ +var i=r(8),n=r(9),o=r(10);function a(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|t}function d(t,e){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return N(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Y(t).length;default:if(i)return N(t).length;e=(""+e).toLowerCase(),i=!0}}function m(t,e,r){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return k(this,e,r);case"ascii":return U(this,e,r);case"latin1":case"binary":return I(this,e,r);case"base64":return S(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function g(t,e,r){var i=t[e];t[e]=t[r],t[r]=i}function y(t,e,r,i,n){if(0===t.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return-1;r=t.length-1}else if(r<0){if(!n)return-1;r=0}if("string"==typeof e&&(e=f.from(e,i)),f.isBuffer(e))return 0===e.length?-1:b(t,e,r,i,n);if("number"==typeof e)return e&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):b(t,[e],r,i,n);throw new TypeError("val must be string, number or Buffer")}function b(t,e,r,i,n){var o,a=1,s=t.length,f=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;a=2,s/=2,f/=2,r/=2}function u(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(n){var h=-1;for(o=r;os&&(r=s-f),o=r;o>=0;o--){for(var c=!0,p=0;pn&&(i=n):i=n;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");i>o/2&&(i=o/2);for(var a=0;a>8,n=r%256,o.push(n),o.push(i);return o}(e,t.length-r),t,r,i)}function S(t,e,r){return 0===e&&r===t.length?i.fromByteArray(t):i.fromByteArray(t.slice(e,r))}function k(t,e,r){r=Math.min(t.length,r);for(var i=[],n=e;n239?4:u>223?3:u>191?2:1;if(n+c<=r)switch(c){case 1:u<128&&(h=u);break;case 2:128==(192&(o=t[n+1]))&&(f=(31&u)<<6|63&o)>127&&(h=f);break;case 3:o=t[n+1],a=t[n+2],128==(192&o)&&128==(192&a)&&(f=(15&u)<<12|(63&o)<<6|63&a)>2047&&(f<55296||f>57343)&&(h=f);break;case 4:o=t[n+1],a=t[n+2],s=t[n+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(f=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&f<1114112&&(h=f)}null===h?(h=65533,c=1):h>65535&&(h-=65536,i.push(h>>>10&1023|55296),h=56320|1023&h),i.push(h),n+=c}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);var r="",i=0;for(;i0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},f.prototype.compare=function(t,e,r,i,n){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===i&&(i=0),void 0===n&&(n=this.length),e<0||r>t.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&e>=r)return 0;if(i>=n)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(n>>>=0)-(i>>>=0),a=(r>>>=0)-(e>>>=0),s=Math.min(o,a),u=this.slice(i,n),h=t.slice(e,r),c=0;cn)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":return x(this,t,e,r);case"latin1":case"binary":return A(this,t,e,r);case"base64":return _(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function U(t,e,r){var i="";r=Math.min(t.length,r);for(var n=e;ni)&&(r=i);for(var n="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function j(t,e,r,i,n,o){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>n||et.length)throw new RangeError("Index out of range")}function B(t,e,r,i){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-r,2);n>>8*(i?n:1-n)}function L(t,e,r,i){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-r,4);n>>8*(i?n:3-n)&255}function R(t,e,r,i,n,o){if(r+i>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function C(t,e,r,i,o){return o||R(t,0,r,4),n.write(t,e,r,i,23,4),r+4}function z(t,e,r,i,o){return o||R(t,0,r,8),n.write(t,e,r,i,52,8),r+8}f.prototype.slice=function(t,e){var r,i=this.length;if((t=~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),(e=void 0===e?i:~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),e0&&(n*=256);)i+=this[t+--e]*n;return i},f.prototype.readUInt8=function(t,e){return e||P(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,e){return e||P(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,e){return e||P(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,e){return e||P(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,e){return e||P(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||P(t,e,this.length);for(var i=this[t],n=1,o=0;++o=(n*=128)&&(i-=Math.pow(2,8*e)),i},f.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||P(t,e,this.length);for(var i=e,n=1,o=this[t+--i];i>0&&(n*=256);)o+=this[t+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},f.prototype.readInt8=function(t,e){return e||P(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,e){e||P(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt16BE=function(t,e){e||P(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt32LE=function(t,e){return e||P(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,e){return e||P(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,e){return e||P(t,4,this.length),n.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,e){return e||P(t,4,this.length),n.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,e){return e||P(t,8,this.length),n.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,e){return e||P(t,8,this.length),n.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,e,r,i){(t=+t,e|=0,r|=0,i)||j(this,t,e,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+r},f.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},f.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):B(this,t,e,!0),e+2},f.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):B(this,t,e,!1),e+2},f.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):L(this,t,e,!0),e+4},f.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):L(this,t,e,!1),e+4},f.prototype.writeIntLE=function(t,e,r,i){if(t=+t,e|=0,!i){var n=Math.pow(2,8*r-1);j(this,t,e,r,n-1,-n)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+r},f.prototype.writeIntBE=function(t,e,r,i){if(t=+t,e|=0,!i){var n=Math.pow(2,8*r-1);j(this,t,e,r,n-1,-n)}var o=r-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},f.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},f.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):B(this,t,e,!0),e+2},f.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):B(this,t,e,!1),e+2},f.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):L(this,t,e,!0),e+4},f.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||j(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):L(this,t,e,!1),e+4},f.prototype.writeFloatLE=function(t,e,r){return C(this,t,e,!0,r)},f.prototype.writeFloatBE=function(t,e,r){return C(this,t,e,!1,r)},f.prototype.writeDoubleLE=function(t,e,r){return z(this,t,e,!0,r)},f.prototype.writeDoubleBE=function(t,e,r){return z(this,t,e,!1,r)},f.prototype.copy=function(t,e,r,i){if(r||(r=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e=0;--n)t[n+e]=this[n+r];else if(o<1e3||!f.TYPED_ARRAY_SUPPORT)for(n=0;n>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===i){(e-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function Y(t){return i.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(D,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function F(t,e,r,i){for(var n=0;n=e.length||n>=t.length);++n)e[n+r]=t[n];return n}}).call(this,r(1))},function(t,e){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var i;i=function(){return this}();try{i=i||new Function("return this")()}catch(t){"object"===("undefined"==typeof window?"undefined":r(window))&&(i=window)}t.exports=i},function(t,e){var r,i,n=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(r===setTimeout)return setTimeout(t,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(e){try{return r.call(null,t,0)}catch(e){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:o}catch(t){r=o}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(t){i=a}}();var f,u=[],h=!1,c=-1;function p(){h&&f&&(h=!1,f.length?u=f.concat(u):c=-1,u.length&&l())}function l(){if(!h){var t=s(p);h=!0;for(var e=u.length;e;){for(f=u,u=[];++c1)for(var r=1;r1){var r=function(t,r){r=_objectSpread({offset:0},r);for(var i=0;i=33&&73===e[r]&&68===e[r+1]&&65===e[r+2]&&84===e[r+3]})),o=e.subarray(33,n);return o.findIndex((function(t,e){return 97===o[e]&&99===o[e+1]&&84===o[e+2]&&76===o[e+3]}))>=0?{ext:"apng",mime:"image/apng"}:{ext:"png",mime:"image/png"}}if(r([71,73,70]))return{ext:"gif",mime:"image/gif"};if(r([87,69,66,80],{offset:8}))return{ext:"webp",mime:"image/webp"};if(r([70,76,73,70]))return{ext:"flif",mime:"image/flif"};if((r([73,73,42,0])||r([77,77,0,42]))&&r([67,82],{offset:8}))return{ext:"cr2",mime:"image/x-canon-cr2"};if(r([73,73,82,79,8,0,0,0,24]))return{ext:"orf",mime:"image/x-olympus-orf"};if(r([73,73,42,0])&&(r([16,251,134,1],{offset:4})||r([8,0,0,0],{offset:4}))&&r([0,254,0,4,0,1,0,0,0,1,0,0,0,3,1],{offset:9}))return{ext:"arw",mime:"image/x-sony-arw"};if(r([73,73,42,0,8,0,0,0])&&(r([45,0,254,0],{offset:8})||r([39,0,254,0],{offset:8})))return{ext:"dng",mime:"image/x-adobe-dng"};if(r([73,73,42,0])&&r([28,0,254,0],{offset:8}))return{ext:"nef",mime:"image/x-nikon-nef"};if(r([73,73,85,0,24,0,0,0,136,231,116,216]))return{ext:"rw2",mime:"image/x-panasonic-rw2"};if(i("FUJIFILMCCD-RAW"))return{ext:"raf",mime:"image/x-fujifilm-raf"};if(r([73,73,42,0])||r([77,77,0,42]))return{ext:"tif",mime:"image/tiff"};if(r([66,77]))return{ext:"bmp",mime:"image/bmp"};if(r([73,73,188]))return{ext:"jxr",mime:"image/vnd.ms-photo"};if(r([56,66,80,83]))return{ext:"psd",mime:"image/vnd.adobe.photoshop"};var a=[80,75,3,4];if(r(a)){if(r([109,105,109,101,116,121,112,101,97,112,112,108,105,99,97,116,105,111,110,47,101,112,117,98,43,122,105,112],{offset:30}))return{ext:"epub",mime:"application/epub+zip"};if(r(xpiZipFilename,{offset:30}))return{ext:"xpi",mime:"application/x-xpinstall"};if(i("mimetypeapplication/vnd.oasis.opendocument.text",{offset:30}))return{ext:"odt",mime:"application/vnd.oasis.opendocument.text"};if(i("mimetypeapplication/vnd.oasis.opendocument.spreadsheet",{offset:30}))return{ext:"ods",mime:"application/vnd.oasis.opendocument.spreadsheet"};if(i("mimetypeapplication/vnd.oasis.opendocument.presentation",{offset:30}))return{ext:"odp",mime:"application/vnd.oasis.opendocument.presentation"};var s,f=0,u=!1;do{var h=f+30;if(u||(u=r(oxmlContentTypes,{offset:h})||r(oxmlRels,{offset:h})),s||(i("word/",{offset:h})?s={ext:"docx",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}:i("ppt/",{offset:h})?s={ext:"pptx",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"}:i("xl/",{offset:h})&&(s={ext:"xlsx",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})),u&&s)return s;f=multiByteIndexOf(e,a,h)}while(f>=0);if(s)return s}if(r([80,75])&&(3===e[2]||5===e[2]||7===e[2])&&(4===e[3]||6===e[3]||8===e[3]))return{ext:"zip",mime:"application/zip"};if(r([48,48,48,48,48,48],{offset:148,mask:[248,248,248,248,248,248]})&&tarHeaderChecksumMatches(e))return{ext:"tar",mime:"application/x-tar"};if(r([82,97,114,33,26,7])&&(0===e[6]||1===e[6]))return{ext:"rar",mime:"application/x-rar-compressed"};if(r([31,139,8]))return{ext:"gz",mime:"application/gzip"};if(r([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(r([55,122,188,175,39,28]))return{ext:"7z",mime:"application/x-7z-compressed"};if(r([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(r([102,114,101,101],{offset:4})||r([109,100,97,116],{offset:4})||r([109,111,111,118],{offset:4})||r([119,105,100,101],{offset:4}))return{ext:"mov",mime:"video/quicktime"};if(r([102,116,121,112],{offset:4})&&0!=(96&e[8])&&0!=(96&e[9])&&0!=(96&e[10])&&0!=(96&e[11])){var c=uint8ArrayUtf8ByteString(e,8,12);switch(c){case"mif1":return{ext:"heic",mime:"image/heif"};case"msf1":return{ext:"heic",mime:"image/heif-sequence"};case"heic":case"heix":return{ext:"heic",mime:"image/heic"};case"hevc":case"hevx":return{ext:"heic",mime:"image/heic-sequence"};case"qt ":return{ext:"mov",mime:"video/quicktime"};case"M4V ":case"M4VH":case"M4VP":return{ext:"m4v",mime:"video/x-m4v"};case"M4P ":return{ext:"m4p",mime:"video/mp4"};case"M4B ":return{ext:"m4b",mime:"audio/mp4"};case"M4A ":return{ext:"m4a",mime:"audio/x-m4a"};case"F4V ":return{ext:"f4v",mime:"video/mp4"};case"F4P ":return{ext:"f4p",mime:"video/mp4"};case"F4A ":return{ext:"f4a",mime:"audio/mp4"};case"F4B ":return{ext:"f4b",mime:"audio/mp4"};default:return c.startsWith("3g")?c.startsWith("3g2")?{ext:"3g2",mime:"video/3gpp2"}:{ext:"3gp",mime:"video/3gpp"}:{ext:"mp4",mime:"video/mp4"}}}if(r([77,84,104,100]))return{ext:"mid",mime:"audio/midi"};if(r([26,69,223,163])){var p=e.subarray(4,4100),l=p.findIndex((function(t,e,r){return 66===r[e]&&130===r[e+1]}));if(-1!==l){var d=l+3,m=function(t){return _toConsumableArray(t).every((function(t,e){return p[d+e]===t.charCodeAt(0)}))};if(m("matroska"))return{ext:"mkv",mime:"video/x-matroska"};if(m("webm"))return{ext:"webm",mime:"video/webm"}}}if(r([82,73,70,70])){if(r([65,86,73],{offset:8}))return{ext:"avi",mime:"video/vnd.avi"};if(r([87,65,86,69],{offset:8}))return{ext:"wav",mime:"audio/vnd.wave"};if(r([81,76,67,77],{offset:8}))return{ext:"qcp",mime:"audio/qcelp"}}if(r([48,38,178,117,142,102,207,17,166,217])){var g=30;do{var y=readUInt64LE(e,g+16);if(r([145,7,220,183,183,169,207,17,142,230,0,192,12,32,83,101],{offset:g})){if(r([64,158,105,248,77,91,207,17,168,253,0,128,95,92,68,43],{offset:g+24}))return{ext:"wma",mime:"audio/x-ms-wma"};if(r([192,239,25,188,77,91,207,17,168,253,0,128,95,92,68,43],{offset:g+24}))return{ext:"wmv",mime:"video/x-ms-asf"};break}g+=y}while(g+24<=e.length);return{ext:"asf",mime:"application/vnd.ms-asf"}}if(r([0,0,1,186])||r([0,0,1,179]))return{ext:"mpg",mime:"video/mpeg"};for(var b=0;b<2&&b=0;--n){var o=this.tryEntries[n],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var s=i.call(o,"catchLoc"),f=i.call(o,"finallyLoc");if(s&&f){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),A(r),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var i=r.completion;if("throw"===i.type){var n=i.arg;A(r)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:E(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),h}},t}("object"===e(t)?t.exports:{});try{regeneratorRuntime=r}catch(t){Function("r","regeneratorRuntime = r")(r)}}).call(this,r(7)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,r){"use strict";e.byteLength=function(t){var e=u(t),r=e[0],i=e[1];return 3*(r+i)/4-i},e.toByteArray=function(t){var e,r,i=u(t),a=i[0],s=i[1],f=new o(function(t,e,r){return 3*(e+r)/4-r}(0,a,s)),h=0,c=s>0?a-4:a;for(r=0;r>16&255,f[h++]=e>>8&255,f[h++]=255&e;2===s&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,f[h++]=255&e);1===s&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,f[h++]=e>>8&255,f[h++]=255&e);return f},e.fromByteArray=function(t){for(var e,r=t.length,n=r%3,o=[],a=0,s=r-n;as?s:a+16383));1===n?(e=t[r-1],o.push(i[e>>2]+i[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],o.push(i[e>>10]+i[e>>4&63]+i[e<<2&63]+"="));return o.join("")};for(var i=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,f=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function h(t,e,r){for(var n,o,a=[],s=e;s>18&63]+i[o>>12&63]+i[o>>6&63]+i[63&o]);return a.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,i,n){var o,a,s=8*n-i-1,f=(1<>1,h=-7,c=r?n-1:0,p=r?-1:1,l=t[e+c];for(c+=p,o=l&(1<<-h)-1,l>>=-h,h+=s;h>0;o=256*o+t[e+c],c+=p,h-=8);for(a=o&(1<<-h)-1,o>>=-h,h+=i;h>0;a=256*a+t[e+c],c+=p,h-=8);if(0===o)o=1-u;else{if(o===f)return a?NaN:1/0*(l?-1:1);a+=Math.pow(2,i),o-=u}return(l?-1:1)*a*Math.pow(2,o-i)},e.write=function(t,e,r,i,n,o){var a,s,f,u=8*o-n-1,h=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,l=i?0:o-1,d=i?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=h):(a=Math.floor(Math.log(e)/Math.LN2),e*(f=Math.pow(2,-a))<1&&(a--,f*=2),(e+=a+c>=1?p/f:p*Math.pow(2,1-c))*f>=2&&(a++,f/=2),a+c>=h?(s=0,a=h):a+c>=1?(s=(e*f-1)*Math.pow(2,n),a+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,n),a=0));n>=8;t[r+l]=255&s,l+=d,s/=256,n-=8);for(a=a<0;t[r+l]=255&a,l+=d,a/=256,u-=8);t[r+l-d]|=128*m}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";(function(t){function r(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e1&&void 0!==arguments[1]?arguments[1]:0,r=t[e],i=1,n=0;++n<8;)i*=256,r+=t[e+n]*i;return r},e.tarHeaderChecksumMatches=function(t){if(t.length<512)return!1;for(var e=256,r=0,n=0;n<148;n++){var o=t[n];e+=o,r+=128&o}for(var a=156;a<512;a++){var s=t[a];e+=s,r+=128&s}var f=parseInt(i(t,148,154),8);return f===e||f===e-(r<<1)},e.multiByteIndexOf=function(e,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(t&&t.isBuffer(e))return e.indexOf(t.from(r),i);for(var n=function(t,e,r){for(var i=1;i=0;){if(n(e,r,o))return o;o=e.indexOf(r[0],o+1)}return-1},e.uint8ArrayUtf8ByteString=i}).call(this,r(0).Buffer)},function(t,e,r){"use strict";t.exports={extensions:["jpg","png","apng","gif","webp","flif","cr2","orf","arw","dng","nef","rw2","raf","tif","bmp","jxr","psd","zip","tar","rar","gz","bz2","7z","dmg","mp4","mid","mkv","webm","mov","avi","mpg","mp2","mp3","m4a","oga","ogg","ogv","opus","flac","wav","spx","amr","pdf","epub","exe","swf","rtf","wasm","woff","woff2","eot","ttf","otf","ico","flv","ps","xz","sqlite","nes","crx","xpi","cab","deb","ar","rpm","Z","lz","msi","mxf","mts","blend","bpg","docx","pptx","xlsx","3gp","3g2","jp2","jpm","jpx","mj2","aif","qcp","odt","ods","odp","xml","mobi","heic","cur","ktx","ape","wv","wmv","wma","dcm","ics","glb","pcap","dsf","lnk","alias","voc","ac3","m4v","m4p","m4b","f4v","f4p","f4b","f4a","mie","asf","ogm","ogx","mpc","arrow","shp"],mimeTypes:["image/jpeg","image/png","image/gif","image/webp","image/flif","image/x-canon-cr2","image/tiff","image/bmp","image/vnd.ms-photo","image/vnd.adobe.photoshop","application/epub+zip","application/x-xpinstall","application/vnd.oasis.opendocument.text","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/zip","application/x-tar","application/x-rar-compressed","application/gzip","application/x-bzip2","application/x-7z-compressed","application/x-apple-diskimage","application/x-apache-arrow","video/mp4","audio/midi","video/x-matroska","video/webm","video/quicktime","video/vnd.avi","audio/vnd.wave","audio/qcelp","audio/x-ms-wma","video/x-ms-asf","application/vnd.ms-asf","video/mpeg","video/3gpp","audio/mpeg","audio/mp4","audio/opus","video/ogg","audio/ogg","application/ogg","audio/x-flac","audio/ape","audio/wavpack","audio/amr","application/pdf","application/x-msdownload","application/x-shockwave-flash","application/rtf","application/wasm","font/woff","font/woff2","application/vnd.ms-fontobject","font/ttf","font/otf","image/x-icon","video/x-flv","application/postscript","application/x-xz","application/x-sqlite3","application/x-nintendo-nes-rom","application/x-google-chrome-extension","application/vnd.ms-cab-compressed","application/x-deb","application/x-unix-archive","application/x-rpm","application/x-compress","application/x-lzip","application/x-msi","application/x-mie","application/mxf","video/mp2t","application/x-blender","image/bpg","image/jp2","image/jpx","image/jpm","image/mj2","audio/aiff","application/xml","application/x-mobipocket-ebook","image/heif","image/heif-sequence","image/heic","image/heic-sequence","image/ktx","application/dicom","audio/x-musepack","text/calendar","model/gltf-binary","application/vnd.tcpdump.pcap","audio/x-dsf","application/x.ms.shortcut","application/x.apple.alias","audio/x-voc","audio/vnd.dolby.dd-raw","audio/x-m4a","image/apng","image/x-olympus-orf","image/x-sony-arw","image/x-adobe-dng","image/x-nikon-nef","image/x-panasonic-rw2","image/x-fujifilm-raf","video/x-m4v","video/3gpp2","application/x-esri-shape"]}},function(t,e){t.exports=function(t){if("string"!=typeof t)return!1;var e=t.match(r);if(!e)return!1;var o=e[1];if(!o)return!1;if(i.test(o)||n.test(o))return!0;return!1};var r=/^(?:\w+:)?\/\/(\S+)$/,i=/^localhost[\:?\d]*(?:[^\:?\d]\S*)?$/,n=/^[^\s\.]+\.\S{2,}$/},function(t,e){var r=function(t){var e=t.split("\n");if(" "===e[0].substring(0,2))for(var r=0;r0){var E=A.get_n(),S=A.get_x(),k=A.get_y();_=[];for(var U=0;U=0)}}).call(this,r(2))},function(t,e,r){(function(e){function i(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t))&&"[object Arguments]"!==Object.prototype.toString.call(t))return;var r=[],i=!0,n=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(i=(a=s.next()).done)&&(r.push(a.value),!e||r.length!==e);i=!0);}catch(t){n=!0,o=t}finally{try{i||null==s.return||s.return()}finally{if(n)throw o}}return r}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,i)}return r}function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var a=r(18),s=r(3);t.exports=function(t,r,f){var u=e.from(Array.from(function(t){for(var e=1;e0){var s=this.pos+n*i+3*this.width;t.fill(0,s,s+this.extraBytes)}}return t},t.exports=function(t,e){return void 0===e&&(e=100),{data:new r(t).encode(),width:t.width,height:t.height}}}).call(this,r(0).Buffer)},function(t,e,r){(function(e){function r(t,e){if(this.pos=0,this.buffer=t,this.is_with_alpha=!!e,this.bottom_up=!0,this.flag=this.buffer.toString("utf-8",0,this.pos+=2),"BM"!=this.flag)throw new Error("Invalid BMP File");this.parseHeader(),this.parseRGBA()}r.prototype.parseHeader=function(){if(this.fileSize=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.reserved=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.offset=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.headerSize=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.width=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.height=this.buffer.readInt32LE(this.pos),this.pos+=4,this.planes=this.buffer.readUInt16LE(this.pos),this.pos+=2,this.bitPP=this.buffer.readUInt16LE(this.pos),this.pos+=2,this.compress=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.rawSize=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.hr=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.vr=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.colors=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.importantColors=this.buffer.readUInt32LE(this.pos),this.pos+=4,16===this.bitPP&&this.is_with_alpha&&(this.bitPP=15),this.bitPP<15){var t=0===this.colors?1<=0?this.height-1:-this.height;for(r=this.height-1;r>=0;r--){for(var i=this.bottom_up?r:this.height-1-r,n=0;n>7-s&1];this.data[a+4*s]=0,this.data[a+4*s+1]=f.blue,this.data[a+4*s+2]=f.green,this.data[a+4*s+3]=f.red}0!=e&&(this.pos+=4-e)}},r.prototype.bit4=function(){if(2==this.compress){var t=function(t){var r=this.palette[t];this.data[e]=0,this.data[e+1]=r.blue,this.data[e+2]=r.green,this.data[e+3]=r.red,e+=4};this.data.fill(255);for(var e=0,r=this.bottom_up?this.height-1:0,i=!1;e>4),1&u&&u+1>1&1)&&this.pos++}}else for(u=0;u>4),i=!i}}else{var h=Math.ceil(this.width/2),c=h%4;for(s=this.height-1;s>=0;s--){var p=this.bottom_up?s:this.height-1-s;for(a=0;a>4,d=15&o,m=this.palette[l];if(this.data[e]=0,this.data[e+1]=m.blue,this.data[e+2]=m.green,this.data[e+3]=m.red,2*a+1>=this.width)break;m=this.palette[d],this.data[e+4]=0,this.data[e+4+1]=m.blue,this.data[e+4+2]=m.green,this.data[e+4+3]=m.red}0!=c&&(this.pos+=4-c)}}},r.prototype.bit8=function(){if(1==this.compress){var t=function(t){var r=this.palette[t];this.data[e]=0,this.data[e+1]=r.blue,this.data[e+2]=r.green,this.data[e+3]=r.red,e+=4};this.data.fill(255);for(var e=0,r=this.bottom_up?this.height-1:0;e=0;a--){var h=this.bottom_up?a:this.height-1-a;for(o=0;o=0;r--){for(var i=this.bottom_up?r:this.height-1-r,n=0;n>5&e)/e*255|0,f=(o>>10&e)/e*255|0,u=o>>15?255:0,h=i*this.width*4+4*n;this.data[h]=u,this.data[h+1]=a,this.data[h+2]=s,this.data[h+3]=f}this.pos+=t}},r.prototype.bit16=function(){var t=this.width%2*2;this.maskRed=31744,this.maskGreen=992,this.maskBlue=31,this.mask0=0,3==this.compress&&(this.maskRed=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.maskGreen=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.maskBlue=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.mask0=this.buffer.readUInt32LE(this.pos),this.pos+=4);for(var e=[0,0,0],r=0;r<16;r++)this.maskRed>>r&1&&e[0]++,this.maskGreen>>r&1&&e[1]++,this.maskBlue>>r&1&&e[2]++;e[1]+=e[0],e[2]+=e[1],e[0]=8-e[0],e[1]-=8,e[2]-=8;for(var i=this.height-1;i>=0;i--){for(var n=this.bottom_up?i:this.height-1-i,o=0;o>e[1],u=(a&this.maskRed)>>e[2],h=n*this.width*4+4*o;this.data[h]=0,this.data[h+1]=s,this.data[h+2]=f,this.data[h+3]=u}this.pos+=t}},r.prototype.bit24=function(){for(var t=this.height-1;t>=0;t--){for(var e=this.bottom_up?t:this.height-1-t,r=0;r=0;t--)for(var e=this.bottom_up?t:this.height-1-t,r=0;r=0;t--)for(e=this.bottom_up?t:this.height-1-t,r=0;r>>8&255]<<16|l[t>>>16&255]<<8|l[t>>>24&255])>>32-e:l[t]>>8-e),8>e+a)s=s<>e-i-1&1,8==++a&&(a=0,n[o++]=l[s],s=0,o===n.length&&(n=this.f()));n[o]=s,this.buffer=n,this.m=a,this.index=o},s.prototype.finish=function(){var t,e=this.buffer,r=this.index;return 0f;++f){for(var h=p=f,c=7,p=p>>>1;p;p>>>=1)h<<=1,h|=1&p,--c;u[f]=(h<>>0}var l=u;function d(t,e,r){var i,n="number"==typeof e?e:e=0,o="number"==typeof r?r:t.length;for(i=-1,n=7&o;n--;++e)i=i>>>8^g[255&(i^t[e])];for(n=o>>3;n--;e+=8)i=(i=(i=(i=(i=(i=(i=(i=i>>>8^g[255&(i^t[e])])>>>8^g[255&(i^t[e+1])])>>>8^g[255&(i^t[e+2])])>>>8^g[255&(i^t[e+3])])>>>8^g[255&(i^t[e+4])])>>>8^g[255&(i^t[e+5])])>>>8^g[255&(i^t[e+6])])>>>8^g[255&(i^t[e+7])];return(4294967295^i)>>>0}var m=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],g=a?new Uint32Array(m):m;function y(){}function b(t){this.buffer=new(a?Uint16Array:Array)(2*t),this.length=0}function v(t){var e,r,i,n,o,s,f,u,h,c,p=t.length,l=0,d=Number.POSITIVE_INFINITY;for(u=0;ul&&(l=t[u]),t[u]>=1;for(c=i<<16|u,h=s;ho[i]);)n=o[r],o[r]=o[i],o[i]=n,n=o[r+1],o[r+1]=o[i+1],o[i+1]=n,r=i;return this.length},b.prototype.pop=function(){var t,e,r,i,n,o=this.buffer;for(e=o[0],t=o[1],this.length-=2,o[0]=o[this.length],o[1]=o[this.length+1],n=0;!((i=2*n+2)>=this.length)&&(i+2o[i]&&(i+=2),o[i]>o[n]);)r=o[n],o[n]=o[i],o[i]=r,r=o[n+1],o[n+1]=o[i+1],o[i+1]=r,n=i;return{index:t,value:e,length:this.length}};var x,A=2,_={NONE:0,L:1,t:A,X:3},E=[];for(x=0;288>x;x++)switch(!0){case 143>=x:E.push([x+48,8]);break;case 255>=x:E.push([x-144+400,9]);break;case 279>=x:E.push([x-256+0,7]);break;case 287>=x:E.push([x-280+192,8]);break;default:i("invalid literal: "+x)}function S(t,e){this.length=t,this.N=e}w.prototype.h=function(){var t,e,r,f,u=this.input;switch(this.k){case 0:for(r=0,f=u.length;r>>8&255,y[b++]=255&p,y[b++]=p>>>8&255,a)y.set(l,b),b+=l.length,y=y.subarray(0,b);else{for(m=0,g=l.length;mX)for(;0X?X:138)>X-3&&$=$?(rt[J++]=17,rt[J++]=$-3,it[17]++):(rt[J++]=18,rt[J++]=$-11,it[18]++),X-=$;else if(rt[J++]=et[H],it[et[H]]++,3>--X)for(;0X?X:6)>X-3&&$F;F++)V[F]=D[W[F]];for(B=19;4=t:return[265,t-11,1];case 14>=t:return[266,t-13,1];case 16>=t:return[267,t-15,1];case 18>=t:return[268,t-17,1];case 22>=t:return[269,t-19,2];case 26>=t:return[270,t-23,2];case 30>=t:return[271,t-27,2];case 34>=t:return[272,t-31,2];case 42>=t:return[273,t-35,3];case 50>=t:return[274,t-43,3];case 58>=t:return[275,t-51,3];case 66>=t:return[276,t-59,3];case 82>=t:return[277,t-67,4];case 98>=t:return[278,t-83,4];case 114>=t:return[279,t-99,4];case 130>=t:return[280,t-115,4];case 162>=t:return[281,t-131,5];case 194>=t:return[282,t-163,5];case 226>=t:return[283,t-195,5];case 257>=t:return[284,t-227,5];case 258===t:return[285,t-258,0];default:i("invalid length: "+t)}}var e,r,n=[];for(e=3;258>=e;e++)r=t(e),n[e]=r[2]<<24|r[1]<<16|r[0];return n}(),U=a?new Uint32Array(k):k;function I(t,e){function r(t,e){var r,n,o,a,s=t.N,f=[],u=0;switch(r=U[t.length],f[u++]=65535&r,f[u++]=r>>16&255,f[u++]=r>>24,!0){case 1===s:n=[0,s-1,0];break;case 2===s:n=[1,s-2,0];break;case 3===s:n=[2,s-3,0];break;case 4===s:n=[3,s-4,0];break;case 6>=s:n=[4,s-5,1];break;case 8>=s:n=[5,s-7,1];break;case 12>=s:n=[6,s-9,2];break;case 16>=s:n=[7,s-13,2];break;case 24>=s:n=[8,s-17,3];break;case 32>=s:n=[9,s-25,3];break;case 48>=s:n=[10,s-33,4];break;case 64>=s:n=[11,s-49,4];break;case 96>=s:n=[12,s-65,5];break;case 128>=s:n=[13,s-97,5];break;case 192>=s:n=[14,s-129,6];break;case 256>=s:n=[15,s-193,6];break;case 384>=s:n=[16,s-257,7];break;case 512>=s:n=[17,s-385,7];break;case 768>=s:n=[18,s-513,8];break;case 1024>=s:n=[19,s-769,8];break;case 1536>=s:n=[20,s-1025,9];break;case 2048>=s:n=[21,s-1537,9];break;case 3072>=s:n=[22,s-2049,10];break;case 4096>=s:n=[23,s-3073,10];break;case 6144>=s:n=[24,s-4097,11];break;case 8192>=s:n=[25,s-6145,11];break;case 12288>=s:n=[26,s-8193,12];break;case 16384>=s:n=[27,s-12289,12];break;case 24576>=s:n=[28,s-16385,13];break;case 32768>=s:n=[29,s-24577,13];break;default:i("invalid distance")}for(r=n,f[u++]=r[0],f[u++]=r[1],f[u++]=r[2],o=0,a=f.length;o=f;)v[f++]=0;for(f=0;29>=f;)w[f++]=0}for(v[256]=1,o=0,s=e.length;o=s){for(l&&r(l,-1),f=0,u=s-o;fo&&e+ou&&(n=i,u=o),258===o)break}return new S(u,e-n)}function O(t,e){var r,i,n,o,s,f=t.length,u=new b(572),h=new(a?Uint8Array:Array)(f);if(!a)for(o=0;o2*h[o-1]+c[o]&&(h[o]=2*h[o-1]+c[o]),l[o]=Array(h[o]),d[o]=Array(h[o]);for(n=0;nt[n]?(l[o][s]=f,d[o][s]=e,u+=2):(l[o][s]=t[n],d[o][s]=n,++n);m[o]=0,1===c[o]&&i(o)}return p}(i,i.length,e),o=0,s=r.length;o>>=1;return o}function j(t,e){this.input=t,this.b=this.c=0,this.g={},e&&(e.flags&&(this.g=e.flags),"string"==typeof e.filename&&(this.filename=e.filename),"string"==typeof e.comment&&(this.w=e.comment),e.deflateOptions&&(this.l=e.deflateOptions)),this.l||(this.l={})}j.prototype.h=function(){var t,e,r,i,o,s,f,u,h=new(a?Uint8Array:Array)(32768),c=0,p=this.input,l=this.c,m=this.filename,g=this.w;if(h[c++]=31,h[c++]=139,h[c++]=8,t=0,this.g.fname&&(t|=R),this.g.fcomment&&(t|=C),this.g.fhcrc&&(t|=L),h[c++]=t,e=(Date.now?Date.now():+new Date)/1e3|0,h[c++]=255&e,h[c++]=e>>>8&255,h[c++]=e>>>16&255,h[c++]=e>>>24&255,h[c++]=0,h[c++]=B,this.g.fname!==n){for(f=0,u=m.length;f>>8&255),h[c++]=255&s;h[c++]=0}if(this.g.comment){for(f=0,u=g.length;f>>8&255),h[c++]=255&s;h[c++]=0}return this.g.fhcrc&&(r=65535&d(h,0,c),h[c++]=255&r,h[c++]=r>>>8&255),this.l.outputBuffer=h,this.l.outputIndex=c,h=(o=new w(p,this.l)).h(),c=o.b,a&&(c+8>h.buffer.byteLength?(this.a=new Uint8Array(c+8),this.a.set(new Uint8Array(h.buffer)),h=this.a):h=new Uint8Array(h.buffer)),i=d(p,n,n),h[c++]=255&i,h[c++]=i>>>8&255,h[c++]=i>>>16&255,h[c++]=i>>>24&255,u=p.length,h[c++]=255&u,h[c++]=u>>>8&255,h[c++]=u>>>16&255,h[c++]=u>>>24&255,this.c=l,a&&c>>=1){case 0:var e=this.input,r=this.c,s=this.a,f=this.b,u=e.length,h=n,c=s.length,p=n;switch(this.e=this.j=0,r+1>=u&&i(Error("invalid uncompressed block header: LEN")),h=e[r++]|e[r++]<<8,r+1>=u&&i(Error("invalid uncompressed block header: NLEN")),h===~(e[r++]|e[r++]<<8)&&i(Error("invalid uncompressed block header: length verify")),r+h>e.length&&i(Error("input buffer is broken")),this.q){case D:for(;f+h>s.length;){if(h-=p=c-f,a)s.set(e.subarray(r,r+p),f),f+=p,r+=p;else for(;p--;)s[f++]=e[r++];this.b=f,s=this.f(),f=this.b}break;case M:for(;f+h>s.length;)s=this.f({B:2});break;default:i(Error("invalid inflate mode"))}if(a)s.set(e.subarray(r,r+h),f),f+=h,r+=h;else for(;h--;)s[f++]=e[r++];this.c=r,this.b=f,this.a=s;break;case 1:this.r(et,it);break;case 2:var l,d,m,g,y=nt(this,5)+257,b=nt(this,5)+1,w=nt(this,4)+4,x=new(a?Uint8Array:Array)(G.length),A=n,_=n,E=n,S=n,k=n;for(k=0;k=N?8:255>=N?9:279>=N?7:8;var Q,tt,et=v($),rt=new(a?Uint8Array:Array)(30);for(Q=0,tt=rt.length;Q=f&&i(Error("input buffer is broken")),n|=a[s++]<>>e,t.e=o-e,t.c=s,r}function ot(t,e){for(var r,n,o=t.j,a=t.e,s=t.input,f=t.c,u=s.length,h=e[0],c=e[1];a=u);)o|=s[f++]<>>16)>a&&i(Error("invalid code length: "+n)),t.j=o>>n,t.e=a-n,t.c=f,65535&r}function at(t){this.input=t,this.c=0,this.G=[],this.R=!1}function st(t){if("string"==typeof t){var e,r,i=t.split("");for(e=0,r=i.length;e>>0;t=i}for(var n,o=1,a=0,s=t.length,f=0;0>>0}function ft(t,e){var r,n;switch(this.input=t,this.c=0,!e&&(e={})||(e.index&&(this.c=e.index),e.verify&&(this.V=e.verify)),r=t[this.c++],n=t[this.c++],15&r){case ut:this.method=ut;break;default:i(Error("unsupported compression method"))}0!=((r<<8)+n)%31&&i(Error("invalid fcheck flag:"+((r<<8)+n)%31)),32&n&&i(Error("fdict flag is not supported")),this.J=new z(t,{index:this.c,bufferSize:e.bufferSize,bufferType:e.bufferType,resize:e.resize})}z.prototype.r=function(t,e){var r=this.a,i=this.b;this.A=t;for(var n,o,a,s,f=r.length-258;256!==(n=ot(this,t));)if(256>n)i>=f&&(this.b=i,r=this.f(),i=this.b),r[i++]=n;else for(s=W[o=n-257],0=f&&(this.b=i,r=this.f(),i=this.b);s--;)r[i]=r[i++-a];for(;8<=this.e;)this.e-=8,this.c--;this.b=i},z.prototype.Q=function(t,e){var r=this.a,i=this.b;this.A=t;for(var n,o,a,s,f=r.length;256!==(n=ot(this,t));)if(256>n)i>=f&&(f=(r=this.f()).length),r[i++]=n;else for(s=W[o=n-257],0f&&(f=(r=this.f()).length);s--;)r[i]=r[i++-a];for(;8<=this.e;)this.e-=8,this.c--;this.b=i},z.prototype.f=function(){var t,e,r=new(a?Uint8Array:Array)(this.b-32768),i=this.b-32768,n=this.a;if(a)r.set(n.subarray(32768,r.length));else for(t=0,e=r.length;tt;++t)n[t]=n[i+t];return this.b=32768,n},z.prototype.S=function(t){var e,r,i,n=this.input.length/this.c+1|0,o=this.input,s=this.a;return t&&("number"==typeof t.B&&(n=t.B),"number"==typeof t.M&&(n+=t.M)),2>n?r=(i=(o.length-this.c)/this.A[2]/2*258|0)e&&(this.a.length=e),t=this.a),this.buffer=t},at.prototype.i=function(){for(var t=this.input.length;this.c>>0,d(e,n,n)!==m&&i(Error("invalid CRC-32 checksum: 0x"+d(e,n,n).toString(16)+" / 0x"+m.toString(16))),s.Z=f=(g[b++]|g[b++]<<8|g[b++]<<16|g[b++]<<24)>>>0,(4294967295&e.length)!==f&&i(Error("invalid input size: "+(4294967295&e.length)+" / "+f)),this.G.push(s),this.c=b}this.R=o;var v,w,x,A=this.G,_=0,E=0;for(v=0,w=A.length;v>>0!==st(t)&&i(Error("invalid adler-32 checksum"))),t};var ut=8;function ht(t,e){this.input=t,this.a=new(a?Uint8Array:Array)(32768),this.k=ct.t;var r,i={};for(r in!e&&(e={})||"number"!=typeof e.compressionType||(this.k=e.compressionType),e)i[r]=e[r];i.outputBuffer=this.a,this.I=new w(this.input,i)}var ct=_;function pt(t,e){var r;return r=new ht(t).h(),e||(e={}),e.H?r:gt(r)}function lt(t,e){var r;return t.subarray=t.slice,r=new ft(t).i(),e||(e={}),e.noBuffer?r:gt(r)}function dt(t,e){var r;return t.subarray=t.slice,r=new j(t).h(),e||(e={}),e.H?r:gt(r)}function mt(t,e){var r;return t.subarray=t.slice,r=new at(t).i(),e||(e={}),e.H?r:gt(r)}function gt(t){var e,i,n=new r(t.length);for(e=0,i=t.length;e>24&255,f[u++]=s>>16&255,f[u++]=s>>8&255,f[u++]=255&s,f},e.deflate=function(e,r,i){t.nextTick((function(){var t,n;try{n=pt(e,i)}catch(e){t=e}r(t,n)}))},e.deflateSync=pt,e.inflate=function(e,r,i){t.nextTick((function(){var t,n;try{n=lt(e,i)}catch(e){t=e}r(t,n)}))},e.inflateSync=lt,e.gzip=function(e,r,i){t.nextTick((function(){var t,n;try{n=dt(e,i)}catch(e){t=e}r(t,n)}))},e.gzipSync=dt,e.gunzip=function(e,r,i){t.nextTick((function(){var t,n;try{n=mt(e,i)}catch(e){t=e}r(t,n)}))},e.gunzipSync=mt}).call(this)}).call(this,r(2),r(0).Buffer)},function(t,e,r){var i=r(28),n=i.set,o=i.get,a=i.del;t.exports={readCache:o,writeCache:n,deleteCache:a,checkCache:function(t){return o(t).then((function(t){return void 0!==t}))}}},function(t,e,r){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"keyval-store",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"keyval";i(this,t),this.storeName=r,this._dbp=new Promise((function(t,i){var n=indexedDB.open(e,1);n.onerror=function(){return i(n.error)},n.onsuccess=function(){return t(n.result)},n.onupgradeneeded=function(){n.result.createObjectStore(r)}}))}var e,r,o;return e=t,(r=[{key:"_withIDBStore",value:function(t,e){var r=this;return this._dbp.then((function(i){return new Promise((function(n,o){var a=i.transaction(r.storeName,t);a.oncomplete=function(){return n()},a.onabort=a.onerror=function(){return o(a.error)},e(a.objectStore(r.storeName))}))}))}}])&&n(e.prototype,r),o&&n(e,o),t}();function s(){return o||(o=new a),o}function f(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s();return r._withIDBStore("readonly",(function(r){e=r.get(t)})).then((function(){return e.result}))}function u(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s();return r._withIDBStore("readwrite",(function(r){r.put(e,t)}))}function h(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s();return e._withIDBStore("readwrite",(function(e){e.delete(t)}))}function c(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s();return t._withIDBStore("readwrite",(function(t){t.clear()}))}function p(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s(),e=[];return t._withIDBStore("readonly",(function(t){(t.openKeyCursor||t.openCursor).call(t).onsuccess=function(){this.result&&(e.push(this.result.key),this.result.continue())}})).then((function(){return e}))}}]); +//# sourceMappingURL=worker.min.js.map \ No newline at end of file diff --git a/web/apps/photos/public/js/tfjs/tfjs-backend-wasm-simd.wasm b/web/apps/photos/public/js/tfjs/tfjs-backend-wasm-simd.wasm new file mode 100755 index 000000000..bcba8a365 Binary files /dev/null and b/web/apps/photos/public/js/tfjs/tfjs-backend-wasm-simd.wasm differ diff --git a/web/apps/photos/public/js/tfjs/tfjs-backend-wasm-threaded-simd.wasm b/web/apps/photos/public/js/tfjs/tfjs-backend-wasm-threaded-simd.wasm new file mode 100755 index 000000000..b55fb263c Binary files /dev/null and b/web/apps/photos/public/js/tfjs/tfjs-backend-wasm-threaded-simd.wasm differ diff --git a/web/apps/photos/public/js/tfjs/tfjs-backend-wasm.wasm b/web/apps/photos/public/js/tfjs/tfjs-backend-wasm.wasm new file mode 100755 index 000000000..32aa94a79 Binary files /dev/null and b/web/apps/photos/public/js/tfjs/tfjs-backend-wasm.wasm differ diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc.js b/web/apps/photos/public/js/tflite/tflite_web_api_cc.js new file mode 100755 index 000000000..5257b33ae --- /dev/null +++ b/web/apps/photos/public/js/tflite/tflite_web_api_cc.js @@ -0,0 +1,21 @@ + +var tflite_web_api_ModuleFactory = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(tflite_web_api_ModuleFactory) { + tflite_web_api_ModuleFactory = tflite_web_api_ModuleFactory || {}; + +var Module=typeof tflite_web_api_ModuleFactory!=="undefined"?tflite_web_api_ModuleFactory:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||33554432;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="tflite_web_api_cc.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["na"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["qa"];addOnInit(Module["asm"]["oa"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var ASM_CONSTS={252892:function(){return typeof wasmOffsetConverter!=="undefined"}};function HaveOffsetConverter(){return typeof wasmOffsetConverter!=="undefined"}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var _emscripten_get_now;_emscripten_get_now=function(){return performance.now()};var _emscripten_get_now_is_monotonic=true;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(a0,a1){return _clock_gettime(a0,a1)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;return 0}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;return 0}function ___sys_lstat64(path,buf){}function zeroMemory(address,size){HEAPU8.fill(0,address,address+size)}function alignMemory(size,alignment){return Math.ceil(size/alignment)*alignment}function mmapAlloc(size){size=alignMemory(size,65536);var ptr=_memalign(65536,size);if(!ptr)return 0;zeroMemory(ptr,size);return ptr}function syscallMmap2(addr,len,prot,flags,fd,off){off<<=12;var ptr;var allocated=false;if((flags&16)!==0&&addr%65536!==0){return-28}if((flags&32)!==0){ptr=mmapAlloc(len);if(!ptr)return-48;allocated=true}else{return-52}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,prot:prot,flags:flags,offset:off};return ptr}function ___sys_mmap2(addr,len,prot,flags,fd,off){return syscallMmap2(addr,len,prot,flags,fd,off)}function syscallMunmap(addr,len){var info=SYSCALLS.mappings[addr];if(len===0||!info){return-28}if(len===info.len){SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){return syscallMunmap(addr,len)}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs}function ___sys_rename(old_path,new_path){}function ___sys_unlink(path){}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=function(v){throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.includes("unsigned");registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>2]=__emval_register(destructors);return destructors}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_method(caller,handle,methodName,destructorsRef,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);return caller(handle,methodName,__emval_allocateDestructors(destructorsRef),args)}function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){abort()}function _dlopen(filename,flag){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function _dlsym(handle,symbol){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?HEAPF64[buf++>>1]:HEAP32[buf]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_get_heap_max(){return 2147483648}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_pc_get_function(pc){abort("Cannot use emscripten_pc_get_function without -s USE_OFFSET_CONVERTER")}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_generate_pc(frame){abort("Cannot use emscripten_generate_pc (needed by __builtin_return_address) without -s USE_OFFSET_CONVERTER")}var UNWIND_CACHE={};function __emscripten_save_in_unwind_cache(callstack){callstack.forEach(function(frame){var pc=_emscripten_generate_pc(frame);if(pc){UNWIND_CACHE[pc]=frame}})}function _emscripten_stack_snapshot(){var callstack=(new Error).stack.split("\n");if(callstack[0]=="Error"){callstack.shift()}__emscripten_save_in_unwind_cache(callstack);UNWIND_CACHE.last_addr=_emscripten_generate_pc(callstack[2]);UNWIND_CACHE.last_stack=callstack;return UNWIND_CACHE.last_addr}function _emscripten_stack_unwind_buffer(addr,buffer,count){var stack;if(UNWIND_CACHE.last_addr==addr){stack=UNWIND_CACHE.last_stack}else{stack=(new Error).stack.split("\n");if(stack[0]=="Error"){stack.shift()}__emscripten_save_in_unwind_cache(stack)}var offset=2;while(stack[offset]&&_emscripten_generate_pc(stack[offset])!=addr){++offset}for(var i=0;i>2]=_emscripten_generate_pc(stack[i+offset])}return i}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start>0]=_getentropy.randomDevice()}return 0}function _tzset(){if(_tzset.called)return;_tzset.called=true;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[__get_timezone()>>2]=stdTimezoneOffset*60;HEAP32[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function _mktime(tmPtr){_tzset();var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();return date.getTime()/1e3|0}function _proc_exit(code){procExit(code)}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"ca":HaveOffsetConverter,"P":___clock_gettime,"w":___sys_fcntl64,"R":___sys_ioctl,"Q":___sys_lstat64,"W":___sys_mmap2,"X":___sys_munmap,"v":___sys_open,"S":___sys_rename,"U":___sys_unlink,"C":__embind_finalize_value_object,"F":__embind_register_bigint,"$":__embind_register_bool,"c":__embind_register_class,"k":__embind_register_class_class_function,"h":__embind_register_class_constructor,"b":__embind_register_class_function,"f":__embind_register_class_property,"_":__embind_register_emval,"x":__embind_register_float,"i":__embind_register_integer,"e":__embind_register_memory_view,"y":__embind_register_std_string,"p":__embind_register_std_wstring,"D":__embind_register_value_object,"j":__embind_register_value_object_field,"aa":__embind_register_void,"K":__emval_as,"ma":__emval_call_method,"t":__emval_call_void_method,"g":__emval_decref,"la":__emval_get_global,"s":__emval_get_method_caller,"T":__emval_get_property,"l":__emval_incref,"ka":__emval_new,"Z":__emval_new_cstring,"B":__emval_run_destructors,"d":__emval_take_value,"a":_abort,"z":_clock_gettime,"ga":_dlopen,"A":_dlsym,"da":_emscripten_asm_const_int,"Y":_emscripten_get_heap_max,"G":_emscripten_memcpy_big,"ba":_emscripten_pc_get_function,"H":_emscripten_resize_heap,"fa":_emscripten_stack_snapshot,"ea":_emscripten_stack_unwind_buffer,"O":_emscripten_thread_sleep,"M":_environ_get,"N":_environ_sizes_get,"ha":_exit,"o":_fd_close,"u":_fd_read,"E":_fd_seek,"V":_fd_sync,"n":_fd_write,"ia":_flock,"I":_getentropy,"q":_localtime_r,"ja":_mktime,"L":_proc_exit,"m":_setTempRet0,"J":_strftime_l,"r":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["oa"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["pa"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ra"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["sa"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["ta"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["ua"]).apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return(__get_tzname=Module["__get_tzname"]=Module["asm"]["va"]).apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return(__get_daylight=Module["__get_daylight"]=Module["asm"]["wa"]).apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return(__get_timezone=Module["__get_timezone"]=Module["asm"]["xa"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["ya"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["za"]).apply(null,arguments)};var dynCall_jiiji=Module["dynCall_jiiji"]=function(){return(dynCall_jiiji=Module["dynCall_jiiji"]=Module["asm"]["Aa"]).apply(null,arguments)};var dynCall_iiij=Module["dynCall_iiij"]=function(){return(dynCall_iiij=Module["dynCall_iiij"]=Module["asm"]["Ba"]).apply(null,arguments)};var dynCall_jiiiji=Module["dynCall_jiiiji"]=function(){return(dynCall_jiiiji=Module["dynCall_jiiiji"]=Module["asm"]["Ca"]).apply(null,arguments)};var dynCall_vij=Module["dynCall_vij"]=function(){return(dynCall_vij=Module["dynCall_vij"]=Module["asm"]["Da"]).apply(null,arguments)};var dynCall_jjj=Module["dynCall_jjj"]=function(){return(dynCall_jjj=Module["dynCall_jjj"]=Module["asm"]["Ea"]).apply(null,arguments)};var dynCall_iiiijj=Module["dynCall_iiiijj"]=function(){return(dynCall_iiiijj=Module["dynCall_iiiijj"]=Module["asm"]["Fa"]).apply(null,arguments)};var dynCall_viijj=Module["dynCall_viijj"]=function(){return(dynCall_viijj=Module["dynCall_viijj"]=Module["asm"]["Ga"]).apply(null,arguments)};var dynCall_viiijjjj=Module["dynCall_viiijjjj"]=function(){return(dynCall_viiijjjj=Module["dynCall_viiijjjj"]=Module["asm"]["Ha"]).apply(null,arguments)};var dynCall_vj=Module["dynCall_vj"]=function(){return(dynCall_vj=Module["dynCall_vj"]=Module["asm"]["Ia"]).apply(null,arguments)};var dynCall_viij=Module["dynCall_viij"]=function(){return(dynCall_viij=Module["dynCall_viij"]=Module["asm"]["Ja"]).apply(null,arguments)};var dynCall_viiiiij=Module["dynCall_viiiiij"]=function(){return(dynCall_viiiiij=Module["dynCall_viiiiij"]=Module["asm"]["Ka"]).apply(null,arguments)};var dynCall_iijjiiii=Module["dynCall_iijjiiii"]=function(){return(dynCall_iijjiiii=Module["dynCall_iijjiiii"]=Module["asm"]["La"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["Ma"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["Na"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["Oa"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["Pa"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){}else{exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); + + + return tflite_web_api_ModuleFactory.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = tflite_web_api_ModuleFactory; +else if (typeof define === 'function' && define['amd']) + define([], function() { return tflite_web_api_ModuleFactory; }); +else if (typeof exports === 'object') + exports["tflite_web_api_ModuleFactory"] = tflite_web_api_ModuleFactory; diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc.wasm b/web/apps/photos/public/js/tflite/tflite_web_api_cc.wasm new file mode 100755 index 000000000..372bb090f Binary files /dev/null and b/web/apps/photos/public/js/tflite/tflite_web_api_cc.wasm differ diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.js b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.js new file mode 100755 index 000000000..ab19fbd28 --- /dev/null +++ b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.js @@ -0,0 +1,21 @@ + +var tflite_web_api_ModuleFactory = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(tflite_web_api_ModuleFactory) { + tflite_web_api_ModuleFactory = tflite_web_api_ModuleFactory || {}; + +var Module=typeof tflite_web_api_ModuleFactory!=="undefined"?tflite_web_api_ModuleFactory:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||33554432;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="tflite_web_api_cc_simd.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["na"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["qa"];addOnInit(Module["asm"]["oa"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var ASM_CONSTS={252572:function(){return typeof wasmOffsetConverter!=="undefined"}};function HaveOffsetConverter(){return typeof wasmOffsetConverter!=="undefined"}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var _emscripten_get_now;_emscripten_get_now=function(){return performance.now()};var _emscripten_get_now_is_monotonic=true;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(a0,a1){return _clock_gettime(a0,a1)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;return 0}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;return 0}function ___sys_lstat64(path,buf){}function zeroMemory(address,size){HEAPU8.fill(0,address,address+size)}function alignMemory(size,alignment){return Math.ceil(size/alignment)*alignment}function mmapAlloc(size){size=alignMemory(size,65536);var ptr=_memalign(65536,size);if(!ptr)return 0;zeroMemory(ptr,size);return ptr}function syscallMmap2(addr,len,prot,flags,fd,off){off<<=12;var ptr;var allocated=false;if((flags&16)!==0&&addr%65536!==0){return-28}if((flags&32)!==0){ptr=mmapAlloc(len);if(!ptr)return-48;allocated=true}else{return-52}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,prot:prot,flags:flags,offset:off};return ptr}function ___sys_mmap2(addr,len,prot,flags,fd,off){return syscallMmap2(addr,len,prot,flags,fd,off)}function syscallMunmap(addr,len){var info=SYSCALLS.mappings[addr];if(len===0||!info){return-28}if(len===info.len){SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){return syscallMunmap(addr,len)}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs}function ___sys_rename(old_path,new_path){}function ___sys_unlink(path){}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=function(v){throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.includes("unsigned");registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>2]=__emval_register(destructors);return destructors}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_method(caller,handle,methodName,destructorsRef,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);return caller(handle,methodName,__emval_allocateDestructors(destructorsRef),args)}function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){abort()}function _dlopen(filename,flag){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function _dlsym(handle,symbol){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?HEAPF64[buf++>>1]:HEAP32[buf]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_get_heap_max(){return 2147483648}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_pc_get_function(pc){abort("Cannot use emscripten_pc_get_function without -s USE_OFFSET_CONVERTER")}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_generate_pc(frame){abort("Cannot use emscripten_generate_pc (needed by __builtin_return_address) without -s USE_OFFSET_CONVERTER")}var UNWIND_CACHE={};function __emscripten_save_in_unwind_cache(callstack){callstack.forEach(function(frame){var pc=_emscripten_generate_pc(frame);if(pc){UNWIND_CACHE[pc]=frame}})}function _emscripten_stack_snapshot(){var callstack=(new Error).stack.split("\n");if(callstack[0]=="Error"){callstack.shift()}__emscripten_save_in_unwind_cache(callstack);UNWIND_CACHE.last_addr=_emscripten_generate_pc(callstack[2]);UNWIND_CACHE.last_stack=callstack;return UNWIND_CACHE.last_addr}function _emscripten_stack_unwind_buffer(addr,buffer,count){var stack;if(UNWIND_CACHE.last_addr==addr){stack=UNWIND_CACHE.last_stack}else{stack=(new Error).stack.split("\n");if(stack[0]=="Error"){stack.shift()}__emscripten_save_in_unwind_cache(stack)}var offset=2;while(stack[offset]&&_emscripten_generate_pc(stack[offset])!=addr){++offset}for(var i=0;i>2]=_emscripten_generate_pc(stack[i+offset])}return i}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start>0]=_getentropy.randomDevice()}return 0}function _tzset(){if(_tzset.called)return;_tzset.called=true;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[__get_timezone()>>2]=stdTimezoneOffset*60;HEAP32[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function _mktime(tmPtr){_tzset();var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();return date.getTime()/1e3|0}function _proc_exit(code){procExit(code)}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"ca":HaveOffsetConverter,"P":___clock_gettime,"w":___sys_fcntl64,"R":___sys_ioctl,"Q":___sys_lstat64,"W":___sys_mmap2,"X":___sys_munmap,"v":___sys_open,"S":___sys_rename,"U":___sys_unlink,"C":__embind_finalize_value_object,"F":__embind_register_bigint,"$":__embind_register_bool,"c":__embind_register_class,"k":__embind_register_class_class_function,"h":__embind_register_class_constructor,"b":__embind_register_class_function,"f":__embind_register_class_property,"_":__embind_register_emval,"x":__embind_register_float,"i":__embind_register_integer,"e":__embind_register_memory_view,"y":__embind_register_std_string,"p":__embind_register_std_wstring,"D":__embind_register_value_object,"j":__embind_register_value_object_field,"aa":__embind_register_void,"K":__emval_as,"ma":__emval_call_method,"t":__emval_call_void_method,"g":__emval_decref,"la":__emval_get_global,"s":__emval_get_method_caller,"T":__emval_get_property,"l":__emval_incref,"ka":__emval_new,"Z":__emval_new_cstring,"B":__emval_run_destructors,"d":__emval_take_value,"a":_abort,"z":_clock_gettime,"ga":_dlopen,"A":_dlsym,"da":_emscripten_asm_const_int,"Y":_emscripten_get_heap_max,"G":_emscripten_memcpy_big,"ba":_emscripten_pc_get_function,"H":_emscripten_resize_heap,"fa":_emscripten_stack_snapshot,"ea":_emscripten_stack_unwind_buffer,"O":_emscripten_thread_sleep,"M":_environ_get,"N":_environ_sizes_get,"ha":_exit,"o":_fd_close,"u":_fd_read,"E":_fd_seek,"V":_fd_sync,"n":_fd_write,"ia":_flock,"I":_getentropy,"q":_localtime_r,"ja":_mktime,"L":_proc_exit,"m":_setTempRet0,"J":_strftime_l,"r":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["oa"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["pa"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ra"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["sa"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["ta"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["ua"]).apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return(__get_tzname=Module["__get_tzname"]=Module["asm"]["va"]).apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return(__get_daylight=Module["__get_daylight"]=Module["asm"]["wa"]).apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return(__get_timezone=Module["__get_timezone"]=Module["asm"]["xa"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["ya"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["za"]).apply(null,arguments)};var dynCall_jiiji=Module["dynCall_jiiji"]=function(){return(dynCall_jiiji=Module["dynCall_jiiji"]=Module["asm"]["Aa"]).apply(null,arguments)};var dynCall_iiij=Module["dynCall_iiij"]=function(){return(dynCall_iiij=Module["dynCall_iiij"]=Module["asm"]["Ba"]).apply(null,arguments)};var dynCall_jiiiji=Module["dynCall_jiiiji"]=function(){return(dynCall_jiiiji=Module["dynCall_jiiiji"]=Module["asm"]["Ca"]).apply(null,arguments)};var dynCall_vij=Module["dynCall_vij"]=function(){return(dynCall_vij=Module["dynCall_vij"]=Module["asm"]["Da"]).apply(null,arguments)};var dynCall_jjj=Module["dynCall_jjj"]=function(){return(dynCall_jjj=Module["dynCall_jjj"]=Module["asm"]["Ea"]).apply(null,arguments)};var dynCall_iiiijj=Module["dynCall_iiiijj"]=function(){return(dynCall_iiiijj=Module["dynCall_iiiijj"]=Module["asm"]["Fa"]).apply(null,arguments)};var dynCall_viijj=Module["dynCall_viijj"]=function(){return(dynCall_viijj=Module["dynCall_viijj"]=Module["asm"]["Ga"]).apply(null,arguments)};var dynCall_viiijjjj=Module["dynCall_viiijjjj"]=function(){return(dynCall_viiijjjj=Module["dynCall_viiijjjj"]=Module["asm"]["Ha"]).apply(null,arguments)};var dynCall_vj=Module["dynCall_vj"]=function(){return(dynCall_vj=Module["dynCall_vj"]=Module["asm"]["Ia"]).apply(null,arguments)};var dynCall_viij=Module["dynCall_viij"]=function(){return(dynCall_viij=Module["dynCall_viij"]=Module["asm"]["Ja"]).apply(null,arguments)};var dynCall_viiiiij=Module["dynCall_viiiiij"]=function(){return(dynCall_viiiiij=Module["dynCall_viiiiij"]=Module["asm"]["Ka"]).apply(null,arguments)};var dynCall_iijjiiii=Module["dynCall_iijjiiii"]=function(){return(dynCall_iijjiiii=Module["dynCall_iijjiiii"]=Module["asm"]["La"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["Ma"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["Na"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["Oa"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["Pa"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){}else{exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); + + + return tflite_web_api_ModuleFactory.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = tflite_web_api_ModuleFactory; +else if (typeof define === 'function' && define['amd']) + define([], function() { return tflite_web_api_ModuleFactory; }); +else if (typeof exports === 'object') + exports["tflite_web_api_ModuleFactory"] = tflite_web_api_ModuleFactory; diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.wasm b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.wasm new file mode 100755 index 000000000..03c1e3971 Binary files /dev/null and b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.wasm differ diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.js b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.js new file mode 100755 index 000000000..767735e67 --- /dev/null +++ b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.js @@ -0,0 +1,21 @@ + +var tflite_web_api_ModuleFactory = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(tflite_web_api_ModuleFactory) { + tflite_web_api_ModuleFactory = tflite_web_api_ModuleFactory || {}; + +function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP16}function GROWABLE_HEAP_U16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU16}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof tflite_web_api_ModuleFactory!=="undefined"?tflite_web_api_ModuleFactory:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function TextDecoderWrapper(encoding){var textDecoder=new TextDecoder(encoding);this.decode=function(data){if(data.buffer instanceof SharedArrayBuffer){data=new Uint8Array(data)}return textDecoder.decode.call(textDecoder,data)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&GROWABLE_HEAP_U16()[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(GROWABLE_HEAP_U8().subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=GROWABLE_HEAP_I16()[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}GROWABLE_HEAP_I16()[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=GROWABLE_HEAP_I32()[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}GROWABLE_HEAP_I32()[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}GROWABLE_HEAP_I32()[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,GROWABLE_HEAP_I8(),ret,size);return ret}function writeArrayToMemory(array,buffer){GROWABLE_HEAP_I8().set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)GROWABLE_HEAP_I8()[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||33554432;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":2147483648/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}assert(!ENVIRONMENT_IS_PTHREAD);what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="tflite_web_api_cc_simd_threaded.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["Ha"];addOnInit(Module["asm"]["Fa"]);PThread.tlsInitFunctions.push(Module["asm"]["La"]);wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency("wasm-instantiate")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var ASM_CONSTS={255388:function(){return typeof wasmOffsetConverter!=="undefined"},255445:function(){throw"Canceled!"}};function HaveOffsetConverter(){return typeof wasmOffsetConverter!=="undefined"}function initPthreadsJS(){PThread.initRuntime()}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}Module["_emscripten_futex_wake"]=_emscripten_futex_wake;function killThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in killThread!";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];delete PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function cancelThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cancelThread!";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({"cmd":"cancel"})}function cleanupThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cleanupThread!";var pthread=PThread.pthreads[pthread_ptr];if(pthread){GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],initMainThreadBlock:function(){var pthreadPoolSize=8;for(var i=0;i>2]=tb;var headPtr=tb+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=_malloc(512);for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),tb+100>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tb+40>>2,tb);__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(tb)},initWorker:function(){},pthreads:{},threadExitHandlers:[],runExitHandlers:function(){while(PThread.threadExitHandlers.length>0){PThread.threadExitHandlers.pop()()}___pthread_tsd_run_dtors()},runExitHandlersAndDeinitThread:function(tb,exitCode){Atomics.store(GROWABLE_HEAP_U32(),tb+56>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,0);PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0)},setExitStatus:function(status){EXITSTATUS=status},threadExit:function(exitCode){var tb=_pthread_self();if(tb){PThread.runExitHandlersAndDeinitThread(tb,exitCode);if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exit"})}}},threadCancel:function(){PThread.runExitHandlersAndDeinitThread(_pthread_self(),-1);postMessage({"cmd":"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+100>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){PThread.runWithoutMainThreadQueuedCalls(function(){delete PThread.pthreads[worker.pthread.threadInfoStruct];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined})},runWithoutMainThreadQueuedCalls:function(func){GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=0;try{func()}finally{GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=1}},receiveObjectTransfer:function(data){},threadInit:function(){for(var i in PThread.tlsInitFunctions){PThread.tlsInitFunctions[i]()}},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e["data"];var cmd=d["cmd"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d["transferList"])}else{err('Internal error! Worker sent a message "'+cmd+'" to target pthread '+d["targetThread"]+", but that thread no longer exists!")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd==="processQueuedMainThreadWork"){_emscripten_main_thread_process_queued_calls()}else if(cmd==="spawnThread"){spawnThread(e.data)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd==="print"){out("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="printErr"){err("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="alert"){alert("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="exit"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.threadInfoStruct+64>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd==="exitProcess"){try{exit(d["returnCode"])}catch(e){if(e instanceof ExitStatus)return;throw e}}else if(cmd==="cancelDone"){PThread.returnWorkerToPool(worker)}else if(cmd==="objectTransfer"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target==="setimmediate"){worker.postMessage(e.data)}else{err("worker sent an unknown command "+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err("pthread sent an error! "+e.filename+":"+e.lineno+": "+e.message)};worker.postMessage({"cmd":"load","urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile("tflite_web_api_cc_simd_threaded.worker.js");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}GROWABLE_HEAP_I32()[tp>>2]=now/1e3|0;GROWABLE_HEAP_I32()[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(a0,a1){return _clock_gettime(a0,a1)}function _atexit(func,arg){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,func,arg)}function ___cxa_thread_atexit(routine,arg){PThread.threadExitHandlers.push(function(){wasmTable.get(routine)(arg)})}function spawnThread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var worker=PThread.getNewWorker();if(!worker){return 6}if(worker.pthread!==undefined)throw"Internal error!";if(!threadParams.pthread_ptr)throw"Internal error, no pthread ptr!";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(64>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(100>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(76>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+12>>2),threadParams.detached);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(172>>2),global_locale);worker.pthread=pthread;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"threadInfoStruct":threadParams.pthread_ptr,"stackBase":threadParams.stackBase,"stackSize":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}return 0}function ___pthread_create_js(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;if(attr&&attr!=-1){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(228);for(var i=0;i<228>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}function _exit(status){exit(status)}function ___pthread_exit_js(status){if(!ENVIRONMENT_IS_PTHREAD){PThread.runExitHandlers();_exit(status)}else PThread.threadExit(status);throw"unwind"}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(!ENVIRONMENT_IS_WEB){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret==="timed-out")return-73;if(ret==="not-equal")return-6;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}var tNow=performance.now();var tEnd=tNow+timeout;var lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr);while(1){tNow=performance.now();if(tNow>tEnd){lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);return-73}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);if(lastAddr==0){break}_emscripten_main_thread_process_queued_calls();if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr)}return 0}}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_WORKER)return;warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function __emscripten_do_pthread_join(thread,status,block){if(!thread){err("pthread_join attempted on a null thread pointer!");return 71}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self()==thread){err("PThread "+thread+" is attempting to join to itself!");return 16}else if(!ENVIRONMENT_IS_PTHREAD&&_emscripten_main_browser_thread_id()==thread){err("Main thread "+thread+" is attempting to join to itself!");return 16}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return 71}var detached=Atomics.load(GROWABLE_HEAP_U32(),thread+64>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return 28}if(block){_emscripten_check_blocking_allowed()}for(;;){var threadStatus=Atomics.load(GROWABLE_HEAP_U32(),thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(GROWABLE_HEAP_U32(),thread+4>>2);if(status)GROWABLE_HEAP_I32()[status>>2]=threadExitCode;Atomics.store(GROWABLE_HEAP_U32(),thread+64>>2,1);if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread});return 0}if(!block){return 10}_pthread_testcancel();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function ___pthread_join_js(thread,status){return __emscripten_do_pthread_join(thread,status,true)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,fd,cmd,varargs);SYSCALLS.varargs=varargs;return 0}function ___sys_ioctl(fd,op,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,fd,op,varargs);SYSCALLS.varargs=varargs;return 0}function ___sys_lstat64(path,buf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,path,buf)}function zeroMemory(address,size){GROWABLE_HEAP_U8().fill(0,address,address+size)}function alignMemory(size,alignment){return Math.ceil(size/alignment)*alignment}function mmapAlloc(size){size=alignMemory(size,65536);var ptr=_memalign(65536,size);if(!ptr)return 0;zeroMemory(ptr,size);return ptr}function syscallMmap2(addr,len,prot,flags,fd,off){off<<=12;var ptr;var allocated=false;if((flags&16)!==0&&addr%65536!==0){return-28}if((flags&32)!==0){ptr=mmapAlloc(len);if(!ptr)return-48;allocated=true}else{return-52}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,prot:prot,flags:flags,offset:off};return ptr}function ___sys_mmap2(addr,len,prot,flags,fd,off){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,addr,len,prot,flags,fd,off);return syscallMmap2(addr,len,prot,flags,fd,off)}function syscallMunmap(addr,len){var info=SYSCALLS.mappings[addr];if(len===0||!info){return-28}if(len===info.len){SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,addr,len);return syscallMunmap(addr,len)}function ___sys_open(path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,path,flags,varargs);SYSCALLS.varargs=varargs}function ___sys_rename(old_path,new_path){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,old_path,new_path)}function ___sys_unlink(path){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1,path)}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](GROWABLE_HEAP_U32()[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=function(v){throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])};case 3:return function(pointer){return this["fromWireType"](GROWABLE_HEAP_F64()[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return GROWABLE_HEAP_I8()[pointer]}:function readU8FromPointer(pointer){return GROWABLE_HEAP_U8()[pointer]};case 1:return signed?function readS16FromPointer(pointer){return GROWABLE_HEAP_I16()[pointer>>1]}:function readU16FromPointer(pointer){return GROWABLE_HEAP_U16()[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return GROWABLE_HEAP_I32()[pointer>>2]}:function readU32FromPointer(pointer){return GROWABLE_HEAP_U32()[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.includes("unsigned");registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=GROWABLE_HEAP_U32();var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=GROWABLE_HEAP_U32()[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||GROWABLE_HEAP_U8()[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}GROWABLE_HEAP_U8()[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);GROWABLE_HEAP_U32()[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emscripten_notify_thread_queue(targetThreadId,mainThreadId){if(targetThreadId==mainThreadId){postMessage({"cmd":"processQueuedMainThreadWork"})}else if(ENVIRONMENT_IS_PTHREAD){postMessage({"targetThread":targetThreadId,"cmd":"processThreadQueue"})}else{var pthread=PThread.pthreads[targetThreadId];var worker=pthread&&pthread.worker;if(!worker){return}worker.postMessage({"cmd":"processThreadQueue"})}return 1}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);GROWABLE_HEAP_I32()[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_allocateDestructors(destructorsRef){var destructors=[];GROWABLE_HEAP_I32()[destructorsRef>>2]=__emval_register(destructors);return destructors}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_method(caller,handle,methodName,destructorsRef,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);return caller(handle,methodName,__emval_allocateDestructors(destructorsRef),args)}function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1);abort()}function _dlopen(filename,flag){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function _dlsym(handle,symbol){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=GROWABLE_HEAP_U8()[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?GROWABLE_HEAP_F64()[buf++>>1]:GROWABLE_HEAP_I32()[buf]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){}function _emscripten_get_heap_max(){return 2147483648}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){return navigator["hardwareConcurrency"]}function _emscripten_pc_get_function(pc){abort("Cannot use emscripten_pc_get_function without -s USE_OFFSET_CONVERTER")}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=GROWABLE_HEAP_U8().length;requestedSize=requestedSize>>>0;if(requestedSize<=oldSize){return false}var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;__emscripten_call_on_thread(0,targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;__emscripten_call_on_thread(0,targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}var specialHTMLTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=specialHTMLTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function findCanvasEventTarget(target){if(typeof target==="number")target=UTF8ToString(target);if(!target||target==="#canvas"){if(typeof GL!=="undefined"&&GL.offscreenCanvases["canvas"])return GL.offscreenCanvases["canvas"];return Module["canvas"]}if(typeof GL!=="undefined"&&GL.offscreenCanvases[target])return GL.offscreenCanvases[target];return findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){}function maybeExit(){if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD)_pthread_exit(EXITSTATUS);else _exit(EXITSTATUS)}catch(e){if(e instanceof ExitStatus){return}throw e}}}function callUserCallback(func,synchronous){if(ABORT){return}if(synchronous){func();return}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e!=="unwind"){if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(ENVIRONMENT_IS_PTHREAD)maybeExit()}function runtimeKeepalivePush(){runtimeKeepaliveCounter+=1}function runtimeKeepalivePop(){runtimeKeepaliveCounter-=1}function _emscripten_set_timeout(cb,msecs,userData){runtimeKeepalivePush();return setTimeout(function(){runtimeKeepalivePop();callUserCallback(function(){wasmTable.get(cb)(userData)})},msecs)}function _emscripten_generate_pc(frame){abort("Cannot use emscripten_generate_pc (needed by __builtin_return_address) without -s USE_OFFSET_CONVERTER")}var UNWIND_CACHE={};function __emscripten_save_in_unwind_cache(callstack){callstack.forEach(function(frame){var pc=_emscripten_generate_pc(frame);if(pc){UNWIND_CACHE[pc]=frame}})}function _emscripten_stack_snapshot(){var callstack=(new Error).stack.split("\n");if(callstack[0]=="Error"){callstack.shift()}__emscripten_save_in_unwind_cache(callstack);UNWIND_CACHE.last_addr=_emscripten_generate_pc(callstack[2]);UNWIND_CACHE.last_stack=callstack;return UNWIND_CACHE.last_addr}function _emscripten_stack_unwind_buffer(addr,buffer,count){var stack;if(UNWIND_CACHE.last_addr==addr){stack=UNWIND_CACHE.last_stack}else{stack=(new Error).stack.split("\n");if(stack[0]=="Error"){stack.shift()}__emscripten_save_in_unwind_cache(stack)}var offset=2;while(stack[offset]&&_emscripten_generate_pc(stack[offset])!=addr){++offset}for(var i=0;i>2]=_emscripten_generate_pc(stack[i+offset])}return i}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;canvas.getContext=function(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var a=attributes>>2;var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];var contextAttributes={"alpha":!!GROWABLE_HEAP_I32()[a+(0>>2)],"depth":!!GROWABLE_HEAP_I32()[a+(4>>2)],"stencil":!!GROWABLE_HEAP_I32()[a+(8>>2)],"antialias":!!GROWABLE_HEAP_I32()[a+(12>>2)],"premultipliedAlpha":!!GROWABLE_HEAP_I32()[a+(16>>2)],"preserveDrawingBuffer":!!GROWABLE_HEAP_I32()[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!GROWABLE_HEAP_I32()[a+(28>>2)],majorVersion:GROWABLE_HEAP_I32()[a+(32>>2)],minorVersion:GROWABLE_HEAP_I32()[a+(36>>2)],enableExtensionsByDefault:GROWABLE_HEAP_I32()[a+(40>>2)],explicitSwapControl:GROWABLE_HEAP_I32()[a+(44>>2)],proxyContextToMainThread:GROWABLE_HEAP_I32()[a+(48>>2)],renderViaOffscreenBackBuffer:GROWABLE_HEAP_I32()[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,__environ,environ_buf);var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;GROWABLE_HEAP_I32()[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(13,1,penviron_count,penviron_buf_size);var strings=getEnvStrings();GROWABLE_HEAP_I32()[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});GROWABLE_HEAP_I32()[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(14,1,fd);return 0}function _fd_read(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(15,1,fd,iov,iovcnt,pnum);var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);GROWABLE_HEAP_I32()[pnum>>2]=num;return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(16,1,fd,offset_low,offset_high,whence,newOffset)}function _fd_sync(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(17,1,fd);var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops&&stream.stream_ops.fsync){return-stream.stream_ops.fsync(stream)}return 0}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(18,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_I32()[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _flock(fd,operation){return 0}function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}function _getentropy(buffer,size){if(!_getentropy.randomDevice){_getentropy.randomDevice=getRandomDevice()}for(var i=0;i>0]=_getentropy.randomDevice()}return 0}function _tzset(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(19,1);if(_tzset.called)return;_tzset.called=true;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);GROWABLE_HEAP_I32()[__get_timezone()>>2]=stdTimezoneOffset*60;GROWABLE_HEAP_I32()[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;GROWABLE_HEAP_I32()[__get_tzname()+4>>2]=summerNamePtr}else{GROWABLE_HEAP_I32()[__get_tzname()>>2]=summerNamePtr;GROWABLE_HEAP_I32()[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(GROWABLE_HEAP_I32()[time>>2]*1e3);GROWABLE_HEAP_I32()[tmPtr>>2]=date.getSeconds();GROWABLE_HEAP_I32()[tmPtr+4>>2]=date.getMinutes();GROWABLE_HEAP_I32()[tmPtr+8>>2]=date.getHours();GROWABLE_HEAP_I32()[tmPtr+12>>2]=date.getDate();GROWABLE_HEAP_I32()[tmPtr+16>>2]=date.getMonth();GROWABLE_HEAP_I32()[tmPtr+20>>2]=date.getFullYear()-1900;GROWABLE_HEAP_I32()[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;GROWABLE_HEAP_I32()[tmPtr+28>>2]=yday;GROWABLE_HEAP_I32()[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;GROWABLE_HEAP_I32()[tmPtr+32>>2]=dst;var zonePtr=GROWABLE_HEAP_I32()[__get_tzname()+(dst?4:0)>>2];GROWABLE_HEAP_I32()[tmPtr+40>>2]=zonePtr;return tmPtr}function _mktime(tmPtr){_tzset();var date=new Date(GROWABLE_HEAP_I32()[tmPtr+20>>2]+1900,GROWABLE_HEAP_I32()[tmPtr+16>>2],GROWABLE_HEAP_I32()[tmPtr+12>>2],GROWABLE_HEAP_I32()[tmPtr+8>>2],GROWABLE_HEAP_I32()[tmPtr+4>>2],GROWABLE_HEAP_I32()[tmPtr>>2],0);var dst=GROWABLE_HEAP_I32()[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){GROWABLE_HEAP_I32()[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}GROWABLE_HEAP_I32()[tmPtr+24>>2]=date.getDay();var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;GROWABLE_HEAP_I32()[tmPtr+28>>2]=yday;GROWABLE_HEAP_I32()[tmPtr>>2]=date.getSeconds();GROWABLE_HEAP_I32()[tmPtr+4>>2]=date.getMinutes();GROWABLE_HEAP_I32()[tmPtr+8>>2]=date.getHours();GROWABLE_HEAP_I32()[tmPtr+12>>2]=date.getDate();GROWABLE_HEAP_I32()[tmPtr+16>>2]=date.getMonth();return date.getTime()/1e3|0}function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(20,1,code);procExit(code)}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=GROWABLE_HEAP_I32()[tm+40>>2];var date={tm_sec:GROWABLE_HEAP_I32()[tm>>2],tm_min:GROWABLE_HEAP_I32()[tm+4>>2],tm_hour:GROWABLE_HEAP_I32()[tm+8>>2],tm_mday:GROWABLE_HEAP_I32()[tm+12>>2],tm_mon:GROWABLE_HEAP_I32()[tm+16>>2],tm_year:GROWABLE_HEAP_I32()[tm+20>>2],tm_wday:GROWABLE_HEAP_I32()[tm+24>>2],tm_yday:GROWABLE_HEAP_I32()[tm+28>>2],tm_isdst:GROWABLE_HEAP_I32()[tm+32>>2],tm_gmtoff:GROWABLE_HEAP_I32()[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){GROWABLE_HEAP_I32()[ptr>>2]=ret}return ret}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var GLctx;var proxiedFunctionTable=[null,_atexit,___sys_fcntl64,___sys_ioctl,___sys_lstat64,___sys_mmap2,___sys_munmap,___sys_open,___sys_rename,___sys_unlink,_abort,_emscripten_set_canvas_element_size_main_thread,_environ_get,_environ_sizes_get,_fd_close,_fd_read,_fd_seek,_fd_sync,_fd_write,_tzset,_proc_exit];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"va":HaveOffsetConverter,"m":___assert_fail,"A":___clock_gettime,"H":___cxa_thread_atexit,"ia":___pthread_create_js,"ga":___pthread_exit_js,"ha":___pthread_join_js,"D":___sys_fcntl64,"_":___sys_ioctl,"Z":___sys_lstat64,"ca":___sys_mmap2,"da":___sys_munmap,"C":___sys_open,"$":___sys_rename,"aa":___sys_unlink,"N":__embind_finalize_value_object,"Q":__embind_register_bigint,"sa":__embind_register_bool,"d":__embind_register_class,"p":__embind_register_class_class_function,"k":__embind_register_class_constructor,"c":__embind_register_class_function,"h":__embind_register_class_property,"qa":__embind_register_emval,"F":__embind_register_float,"l":__embind_register_integer,"f":__embind_register_memory_view,"G":__embind_register_std_string,"v":__embind_register_std_wstring,"O":__embind_register_value_object,"o":__embind_register_value_object_field,"ta":__embind_register_void,"oa":__emscripten_notify_thread_queue,"ea":__emval_as,"Ea":__emval_call_method,"z":__emval_call_void_method,"i":__emval_decref,"Da":__emval_get_global,"y":__emval_get_method_caller,"pa":__emval_get_property,"q":__emval_incref,"Ca":__emval_new,"ra":__emval_new_cstring,"M":__emval_run_destructors,"e":__emval_take_value,"b":_abort,"I":_clock_gettime,"ya":_dlopen,"L":_dlsym,"J":_emscripten_asm_const_int,"Y":_emscripten_check_blocking_allowed,"s":_emscripten_conditional_set_current_thread_status,"j":_emscripten_futex_wait,"g":_emscripten_futex_wake,"fa":_emscripten_get_heap_max,"n":_emscripten_get_now,"R":_emscripten_memcpy_big,"K":_emscripten_num_logical_cores,"ua":_emscripten_pc_get_function,"la":_emscripten_receive_on_main_thread_js,"S":_emscripten_resize_heap,"ma":_emscripten_set_canvas_element_size,"E":_emscripten_set_current_thread_status,"ka":_emscripten_set_timeout,"xa":_emscripten_stack_snapshot,"wa":_emscripten_stack_unwind_buffer,"na":_emscripten_webgl_create_context,"W":_environ_get,"X":_environ_sizes_get,"za":_exit,"u":_fd_close,"B":_fd_read,"P":_fd_seek,"ba":_fd_sync,"t":_fd_write,"Aa":_flock,"T":_getentropy,"ja":initPthreadsJS,"w":_localtime_r,"a":wasmMemory||Module["wasmMemory"],"Ba":_mktime,"V":_proc_exit,"r":_setTempRet0,"U":_strftime_l,"x":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Fa"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["Ga"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["Ia"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["Ja"]).apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return(_pthread_self=Module["_pthread_self"]=Module["asm"]["Ka"]).apply(null,arguments)};var _emscripten_tls_init=Module["_emscripten_tls_init"]=function(){return(_emscripten_tls_init=Module["_emscripten_tls_init"]=Module["asm"]["La"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["Ma"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["Na"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["Oa"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return(_emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=Module["asm"]["Pa"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return(_emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=Module["asm"]["Qa"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=Module["asm"]["Ra"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["Sa"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=Module["asm"]["Ta"]).apply(null,arguments)};var __emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=function(){return(__emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=Module["asm"]["Ua"]).apply(null,arguments)};var _pthread_testcancel=Module["_pthread_testcancel"]=function(){return(_pthread_testcancel=Module["_pthread_testcancel"]=Module["asm"]["Va"]).apply(null,arguments)};var _pthread_exit=Module["_pthread_exit"]=function(){return(_pthread_exit=Module["_pthread_exit"]=Module["asm"]["Wa"]).apply(null,arguments)};var __emscripten_thread_init=Module["__emscripten_thread_init"]=function(){return(__emscripten_thread_init=Module["__emscripten_thread_init"]=Module["asm"]["Xa"]).apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return(_emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=Module["asm"]["Ya"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return(___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=Module["asm"]["Za"]).apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return(__get_tzname=Module["__get_tzname"]=Module["asm"]["_a"]).apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return(__get_daylight=Module["__get_daylight"]=Module["asm"]["$a"]).apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return(__get_timezone=Module["__get_timezone"]=Module["asm"]["ab"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["bb"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["cb"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["db"]).apply(null,arguments)};var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=function(){return(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=Module["asm"]["eb"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["fb"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["gb"]).apply(null,arguments)};var dynCall_jiiji=Module["dynCall_jiiji"]=function(){return(dynCall_jiiji=Module["dynCall_jiiji"]=Module["asm"]["hb"]).apply(null,arguments)};var dynCall_iiij=Module["dynCall_iiij"]=function(){return(dynCall_iiij=Module["dynCall_iiij"]=Module["asm"]["ib"]).apply(null,arguments)};var dynCall_jiiiji=Module["dynCall_jiiiji"]=function(){return(dynCall_jiiiji=Module["dynCall_jiiiji"]=Module["asm"]["jb"]).apply(null,arguments)};var dynCall_vij=Module["dynCall_vij"]=function(){return(dynCall_vij=Module["dynCall_vij"]=Module["asm"]["kb"]).apply(null,arguments)};var dynCall_jjj=Module["dynCall_jjj"]=function(){return(dynCall_jjj=Module["dynCall_jjj"]=Module["asm"]["lb"]).apply(null,arguments)};var dynCall_iiiijj=Module["dynCall_iiiijj"]=function(){return(dynCall_iiiijj=Module["dynCall_iiiijj"]=Module["asm"]["mb"]).apply(null,arguments)};var dynCall_viijj=Module["dynCall_viijj"]=function(){return(dynCall_viijj=Module["dynCall_viijj"]=Module["asm"]["nb"]).apply(null,arguments)};var dynCall_viiijjjj=Module["dynCall_viiijjjj"]=function(){return(dynCall_viiijjjj=Module["dynCall_viiijjjj"]=Module["asm"]["ob"]).apply(null,arguments)};var dynCall_vj=Module["dynCall_vj"]=function(){return(dynCall_vj=Module["dynCall_vj"]=Module["asm"]["pb"]).apply(null,arguments)};var dynCall_viij=Module["dynCall_viij"]=function(){return(dynCall_viij=Module["dynCall_viij"]=Module["asm"]["qb"]).apply(null,arguments)};var dynCall_viiiiij=Module["dynCall_viiiiij"]=function(){return(dynCall_viiiiij=Module["dynCall_viiiiij"]=Module["asm"]["rb"]).apply(null,arguments)};var dynCall_iijjiiii=Module["dynCall_iijjiiii"]=function(){return(dynCall_iijjiiii=Module["dynCall_iijjiiii"]=Module["asm"]["sb"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["tb"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["ub"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["vb"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["wb"]).apply(null,arguments)};var __emscripten_allow_main_runtime_queued_calls=Module["__emscripten_allow_main_runtime_queued_calls"]=254940;var __emscripten_main_thread_futex=Module["__emscripten_main_thread_futex"]=263696;Module["keepRuntimeAlive"]=keepRuntimeAlive;Module["PThread"]=PThread;Module["PThread"]=PThread;Module["wasmMemory"]=wasmMemory;Module["ExitStatus"]=ExitStatus;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();postMessage({"cmd":"loaded"});return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(!implicit){if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exitProcess","returnCode":status});throw new ExitStatus(status)}else{}}if(keepRuntimeAlive()){}else{PThread.terminateAllThreads();exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}if(ENVIRONMENT_IS_PTHREAD){noExitRuntime=false;PThread.initWorker()}run(); + + + return tflite_web_api_ModuleFactory.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = tflite_web_api_ModuleFactory; +else if (typeof define === 'function' && define['amd']) + define([], function() { return tflite_web_api_ModuleFactory; }); +else if (typeof exports === 'object') + exports["tflite_web_api_ModuleFactory"] = tflite_web_api_ModuleFactory; diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.wasm b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.wasm new file mode 100755 index 000000000..fc55ab379 Binary files /dev/null and b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.wasm differ diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.worker.js b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.worker.js new file mode 100755 index 000000000..f7b758af8 --- /dev/null +++ b/web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.worker.js @@ -0,0 +1 @@ +"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};function moduleLoaded(){}self.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}tflite_web_api_ModuleFactory(Module).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["PThread"].threadExit(result)}}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}}; diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.js b/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.js new file mode 100755 index 000000000..75b0be1d3 --- /dev/null +++ b/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.js @@ -0,0 +1,21 @@ + +var tflite_web_api_ModuleFactory = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(tflite_web_api_ModuleFactory) { + tflite_web_api_ModuleFactory = tflite_web_api_ModuleFactory || {}; + +function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP16}function GROWABLE_HEAP_U16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU16}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof tflite_web_api_ModuleFactory!=="undefined"?tflite_web_api_ModuleFactory:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function TextDecoderWrapper(encoding){var textDecoder=new TextDecoder(encoding);this.decode=function(data){if(data.buffer instanceof SharedArrayBuffer){data=new Uint8Array(data)}return textDecoder.decode.call(textDecoder,data)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&GROWABLE_HEAP_U16()[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(GROWABLE_HEAP_U8().subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=GROWABLE_HEAP_I16()[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}GROWABLE_HEAP_I16()[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=GROWABLE_HEAP_I32()[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}GROWABLE_HEAP_I32()[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}GROWABLE_HEAP_I32()[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,GROWABLE_HEAP_I8(),ret,size);return ret}function writeArrayToMemory(array,buffer){GROWABLE_HEAP_I8().set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)GROWABLE_HEAP_I8()[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||33554432;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":2147483648/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}assert(!ENVIRONMENT_IS_PTHREAD);what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="tflite_web_api_cc_threaded.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["Ha"];addOnInit(Module["asm"]["Fa"]);PThread.tlsInitFunctions.push(Module["asm"]["La"]);wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency("wasm-instantiate")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var ASM_CONSTS={255708:function(){return typeof wasmOffsetConverter!=="undefined"},255765:function(){throw"Canceled!"}};function HaveOffsetConverter(){return typeof wasmOffsetConverter!=="undefined"}function initPthreadsJS(){PThread.initRuntime()}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}Module["_emscripten_futex_wake"]=_emscripten_futex_wake;function killThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in killThread!";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];delete PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function cancelThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cancelThread!";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({"cmd":"cancel"})}function cleanupThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cleanupThread!";var pthread=PThread.pthreads[pthread_ptr];if(pthread){GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],initMainThreadBlock:function(){var pthreadPoolSize=8;for(var i=0;i>2]=tb;var headPtr=tb+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=_malloc(512);for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),tb+100>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tb+40>>2,tb);__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(tb)},initWorker:function(){},pthreads:{},threadExitHandlers:[],runExitHandlers:function(){while(PThread.threadExitHandlers.length>0){PThread.threadExitHandlers.pop()()}___pthread_tsd_run_dtors()},runExitHandlersAndDeinitThread:function(tb,exitCode){Atomics.store(GROWABLE_HEAP_U32(),tb+56>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,0);PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0)},setExitStatus:function(status){EXITSTATUS=status},threadExit:function(exitCode){var tb=_pthread_self();if(tb){PThread.runExitHandlersAndDeinitThread(tb,exitCode);if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exit"})}}},threadCancel:function(){PThread.runExitHandlersAndDeinitThread(_pthread_self(),-1);postMessage({"cmd":"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+100>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){PThread.runWithoutMainThreadQueuedCalls(function(){delete PThread.pthreads[worker.pthread.threadInfoStruct];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined})},runWithoutMainThreadQueuedCalls:function(func){GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=0;try{func()}finally{GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=1}},receiveObjectTransfer:function(data){},threadInit:function(){for(var i in PThread.tlsInitFunctions){PThread.tlsInitFunctions[i]()}},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e["data"];var cmd=d["cmd"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d["transferList"])}else{err('Internal error! Worker sent a message "'+cmd+'" to target pthread '+d["targetThread"]+", but that thread no longer exists!")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd==="processQueuedMainThreadWork"){_emscripten_main_thread_process_queued_calls()}else if(cmd==="spawnThread"){spawnThread(e.data)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd==="print"){out("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="printErr"){err("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="alert"){alert("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="exit"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.threadInfoStruct+64>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd==="exitProcess"){try{exit(d["returnCode"])}catch(e){if(e instanceof ExitStatus)return;throw e}}else if(cmd==="cancelDone"){PThread.returnWorkerToPool(worker)}else if(cmd==="objectTransfer"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target==="setimmediate"){worker.postMessage(e.data)}else{err("worker sent an unknown command "+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err("pthread sent an error! "+e.filename+":"+e.lineno+": "+e.message)};worker.postMessage({"cmd":"load","urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile("tflite_web_api_cc_threaded.worker.js");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}GROWABLE_HEAP_I32()[tp>>2]=now/1e3|0;GROWABLE_HEAP_I32()[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(a0,a1){return _clock_gettime(a0,a1)}function _atexit(func,arg){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,func,arg)}function ___cxa_thread_atexit(routine,arg){PThread.threadExitHandlers.push(function(){wasmTable.get(routine)(arg)})}function spawnThread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var worker=PThread.getNewWorker();if(!worker){return 6}if(worker.pthread!==undefined)throw"Internal error!";if(!threadParams.pthread_ptr)throw"Internal error, no pthread ptr!";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(64>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(100>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(76>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+12>>2),threadParams.detached);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(172>>2),global_locale);worker.pthread=pthread;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"threadInfoStruct":threadParams.pthread_ptr,"stackBase":threadParams.stackBase,"stackSize":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}return 0}function ___pthread_create_js(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;if(attr&&attr!=-1){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(228);for(var i=0;i<228>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}function _exit(status){exit(status)}function ___pthread_exit_js(status){if(!ENVIRONMENT_IS_PTHREAD){PThread.runExitHandlers();_exit(status)}else PThread.threadExit(status);throw"unwind"}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(!ENVIRONMENT_IS_WEB){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret==="timed-out")return-73;if(ret==="not-equal")return-6;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}var tNow=performance.now();var tEnd=tNow+timeout;var lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr);while(1){tNow=performance.now();if(tNow>tEnd){lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);return-73}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);if(lastAddr==0){break}_emscripten_main_thread_process_queued_calls();if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr)}return 0}}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_WORKER)return;warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function __emscripten_do_pthread_join(thread,status,block){if(!thread){err("pthread_join attempted on a null thread pointer!");return 71}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self()==thread){err("PThread "+thread+" is attempting to join to itself!");return 16}else if(!ENVIRONMENT_IS_PTHREAD&&_emscripten_main_browser_thread_id()==thread){err("Main thread "+thread+" is attempting to join to itself!");return 16}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return 71}var detached=Atomics.load(GROWABLE_HEAP_U32(),thread+64>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return 28}if(block){_emscripten_check_blocking_allowed()}for(;;){var threadStatus=Atomics.load(GROWABLE_HEAP_U32(),thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(GROWABLE_HEAP_U32(),thread+4>>2);if(status)GROWABLE_HEAP_I32()[status>>2]=threadExitCode;Atomics.store(GROWABLE_HEAP_U32(),thread+64>>2,1);if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread});return 0}if(!block){return 10}_pthread_testcancel();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function ___pthread_join_js(thread,status){return __emscripten_do_pthread_join(thread,status,true)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,fd,cmd,varargs);SYSCALLS.varargs=varargs;return 0}function ___sys_ioctl(fd,op,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,fd,op,varargs);SYSCALLS.varargs=varargs;return 0}function ___sys_lstat64(path,buf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,path,buf)}function zeroMemory(address,size){GROWABLE_HEAP_U8().fill(0,address,address+size)}function alignMemory(size,alignment){return Math.ceil(size/alignment)*alignment}function mmapAlloc(size){size=alignMemory(size,65536);var ptr=_memalign(65536,size);if(!ptr)return 0;zeroMemory(ptr,size);return ptr}function syscallMmap2(addr,len,prot,flags,fd,off){off<<=12;var ptr;var allocated=false;if((flags&16)!==0&&addr%65536!==0){return-28}if((flags&32)!==0){ptr=mmapAlloc(len);if(!ptr)return-48;allocated=true}else{return-52}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,prot:prot,flags:flags,offset:off};return ptr}function ___sys_mmap2(addr,len,prot,flags,fd,off){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,addr,len,prot,flags,fd,off);return syscallMmap2(addr,len,prot,flags,fd,off)}function syscallMunmap(addr,len){var info=SYSCALLS.mappings[addr];if(len===0||!info){return-28}if(len===info.len){SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,addr,len);return syscallMunmap(addr,len)}function ___sys_open(path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,path,flags,varargs);SYSCALLS.varargs=varargs}function ___sys_rename(old_path,new_path){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,old_path,new_path)}function ___sys_unlink(path){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1,path)}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](GROWABLE_HEAP_U32()[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})}function validateThis(this_,classType,humanName){if(!(this_ instanceof Object)){throwBindingError(humanName+' with invalid "this": '+this_)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(humanName+' incompatible with "this" of type '+this_.constructor.name)}if(!this_.$$.ptr){throwBindingError("cannot call emscripten binding method "+humanName+" on deleted object")}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)}function __embind_register_class_property(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],function(classType){classType=classType[0];var humanName=classType.name+"."+fieldName;var desc={get:function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=function(){throwUnboundTypeError("Cannot access "+humanName+" due to unbound types",[getterReturnType,setterArgumentType])}}else{desc.set=function(v){throwBindingError(humanName+" is a read-only property")}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],function(types){var getterReturnType=types[0];var desc={get:function(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])};case 3:return function(pointer){return this["fromWireType"](GROWABLE_HEAP_F64()[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return GROWABLE_HEAP_I8()[pointer]}:function readU8FromPointer(pointer){return GROWABLE_HEAP_U8()[pointer]};case 1:return signed?function readS16FromPointer(pointer){return GROWABLE_HEAP_I16()[pointer>>1]}:function readU16FromPointer(pointer){return GROWABLE_HEAP_U16()[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return GROWABLE_HEAP_I32()[pointer>>2]}:function readU32FromPointer(pointer){return GROWABLE_HEAP_U32()[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.includes("unsigned");registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=GROWABLE_HEAP_U32();var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=GROWABLE_HEAP_U32()[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||GROWABLE_HEAP_U8()[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}GROWABLE_HEAP_U8()[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);GROWABLE_HEAP_U32()[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emscripten_notify_thread_queue(targetThreadId,mainThreadId){if(targetThreadId==mainThreadId){postMessage({"cmd":"processQueuedMainThreadWork"})}else if(ENVIRONMENT_IS_PTHREAD){postMessage({"targetThread":targetThreadId,"cmd":"processThreadQueue"})}else{var pthread=PThread.pthreads[targetThreadId];var worker=pthread&&pthread.worker;if(!worker){return}worker.postMessage({"cmd":"processThreadQueue"})}return 1}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);GROWABLE_HEAP_I32()[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_allocateDestructors(destructorsRef){var destructors=[];GROWABLE_HEAP_I32()[destructorsRef>>2]=__emval_register(destructors);return destructors}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_method(caller,handle,methodName,destructorsRef,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);return caller(handle,methodName,__emval_allocateDestructors(destructorsRef),args)}function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1);abort()}function _dlopen(filename,flag){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function _dlsym(handle,symbol){abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=GROWABLE_HEAP_U8()[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?GROWABLE_HEAP_F64()[buf++>>1]:GROWABLE_HEAP_I32()[buf]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){}function _emscripten_get_heap_max(){return 2147483648}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){return navigator["hardwareConcurrency"]}function _emscripten_pc_get_function(pc){abort("Cannot use emscripten_pc_get_function without -s USE_OFFSET_CONVERTER")}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=GROWABLE_HEAP_U8().length;requestedSize=requestedSize>>>0;if(requestedSize<=oldSize){return false}var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;__emscripten_call_on_thread(0,targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;__emscripten_call_on_thread(0,targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}var specialHTMLTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=specialHTMLTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function findCanvasEventTarget(target){if(typeof target==="number")target=UTF8ToString(target);if(!target||target==="#canvas"){if(typeof GL!=="undefined"&&GL.offscreenCanvases["canvas"])return GL.offscreenCanvases["canvas"];return Module["canvas"]}if(typeof GL!=="undefined"&&GL.offscreenCanvases[target])return GL.offscreenCanvases[target];return findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){}function maybeExit(){if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD)_pthread_exit(EXITSTATUS);else _exit(EXITSTATUS)}catch(e){if(e instanceof ExitStatus){return}throw e}}}function callUserCallback(func,synchronous){if(ABORT){return}if(synchronous){func();return}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e!=="unwind"){if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(ENVIRONMENT_IS_PTHREAD)maybeExit()}function runtimeKeepalivePush(){runtimeKeepaliveCounter+=1}function runtimeKeepalivePop(){runtimeKeepaliveCounter-=1}function _emscripten_set_timeout(cb,msecs,userData){runtimeKeepalivePush();return setTimeout(function(){runtimeKeepalivePop();callUserCallback(function(){wasmTable.get(cb)(userData)})},msecs)}function _emscripten_generate_pc(frame){abort("Cannot use emscripten_generate_pc (needed by __builtin_return_address) without -s USE_OFFSET_CONVERTER")}var UNWIND_CACHE={};function __emscripten_save_in_unwind_cache(callstack){callstack.forEach(function(frame){var pc=_emscripten_generate_pc(frame);if(pc){UNWIND_CACHE[pc]=frame}})}function _emscripten_stack_snapshot(){var callstack=(new Error).stack.split("\n");if(callstack[0]=="Error"){callstack.shift()}__emscripten_save_in_unwind_cache(callstack);UNWIND_CACHE.last_addr=_emscripten_generate_pc(callstack[2]);UNWIND_CACHE.last_stack=callstack;return UNWIND_CACHE.last_addr}function _emscripten_stack_unwind_buffer(addr,buffer,count){var stack;if(UNWIND_CACHE.last_addr==addr){stack=UNWIND_CACHE.last_stack}else{stack=(new Error).stack.split("\n");if(stack[0]=="Error"){stack.shift()}__emscripten_save_in_unwind_cache(stack)}var offset=2;while(stack[offset]&&_emscripten_generate_pc(stack[offset])!=addr){++offset}for(var i=0;i>2]=_emscripten_generate_pc(stack[i+offset])}return i}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;canvas.getContext=function(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var a=attributes>>2;var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];var contextAttributes={"alpha":!!GROWABLE_HEAP_I32()[a+(0>>2)],"depth":!!GROWABLE_HEAP_I32()[a+(4>>2)],"stencil":!!GROWABLE_HEAP_I32()[a+(8>>2)],"antialias":!!GROWABLE_HEAP_I32()[a+(12>>2)],"premultipliedAlpha":!!GROWABLE_HEAP_I32()[a+(16>>2)],"preserveDrawingBuffer":!!GROWABLE_HEAP_I32()[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!GROWABLE_HEAP_I32()[a+(28>>2)],majorVersion:GROWABLE_HEAP_I32()[a+(32>>2)],minorVersion:GROWABLE_HEAP_I32()[a+(36>>2)],enableExtensionsByDefault:GROWABLE_HEAP_I32()[a+(40>>2)],explicitSwapControl:GROWABLE_HEAP_I32()[a+(44>>2)],proxyContextToMainThread:GROWABLE_HEAP_I32()[a+(48>>2)],renderViaOffscreenBackBuffer:GROWABLE_HEAP_I32()[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,__environ,environ_buf);var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;GROWABLE_HEAP_I32()[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(13,1,penviron_count,penviron_buf_size);var strings=getEnvStrings();GROWABLE_HEAP_I32()[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});GROWABLE_HEAP_I32()[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(14,1,fd);return 0}function _fd_read(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(15,1,fd,iov,iovcnt,pnum);var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);GROWABLE_HEAP_I32()[pnum>>2]=num;return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(16,1,fd,offset_low,offset_high,whence,newOffset)}function _fd_sync(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(17,1,fd);var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops&&stream.stream_ops.fsync){return-stream.stream_ops.fsync(stream)}return 0}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(18,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_I32()[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _flock(fd,operation){return 0}function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}function _getentropy(buffer,size){if(!_getentropy.randomDevice){_getentropy.randomDevice=getRandomDevice()}for(var i=0;i>0]=_getentropy.randomDevice()}return 0}function _tzset(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(19,1);if(_tzset.called)return;_tzset.called=true;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);GROWABLE_HEAP_I32()[__get_timezone()>>2]=stdTimezoneOffset*60;GROWABLE_HEAP_I32()[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;GROWABLE_HEAP_I32()[__get_tzname()+4>>2]=summerNamePtr}else{GROWABLE_HEAP_I32()[__get_tzname()>>2]=summerNamePtr;GROWABLE_HEAP_I32()[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(GROWABLE_HEAP_I32()[time>>2]*1e3);GROWABLE_HEAP_I32()[tmPtr>>2]=date.getSeconds();GROWABLE_HEAP_I32()[tmPtr+4>>2]=date.getMinutes();GROWABLE_HEAP_I32()[tmPtr+8>>2]=date.getHours();GROWABLE_HEAP_I32()[tmPtr+12>>2]=date.getDate();GROWABLE_HEAP_I32()[tmPtr+16>>2]=date.getMonth();GROWABLE_HEAP_I32()[tmPtr+20>>2]=date.getFullYear()-1900;GROWABLE_HEAP_I32()[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;GROWABLE_HEAP_I32()[tmPtr+28>>2]=yday;GROWABLE_HEAP_I32()[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;GROWABLE_HEAP_I32()[tmPtr+32>>2]=dst;var zonePtr=GROWABLE_HEAP_I32()[__get_tzname()+(dst?4:0)>>2];GROWABLE_HEAP_I32()[tmPtr+40>>2]=zonePtr;return tmPtr}function _mktime(tmPtr){_tzset();var date=new Date(GROWABLE_HEAP_I32()[tmPtr+20>>2]+1900,GROWABLE_HEAP_I32()[tmPtr+16>>2],GROWABLE_HEAP_I32()[tmPtr+12>>2],GROWABLE_HEAP_I32()[tmPtr+8>>2],GROWABLE_HEAP_I32()[tmPtr+4>>2],GROWABLE_HEAP_I32()[tmPtr>>2],0);var dst=GROWABLE_HEAP_I32()[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){GROWABLE_HEAP_I32()[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}GROWABLE_HEAP_I32()[tmPtr+24>>2]=date.getDay();var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;GROWABLE_HEAP_I32()[tmPtr+28>>2]=yday;GROWABLE_HEAP_I32()[tmPtr>>2]=date.getSeconds();GROWABLE_HEAP_I32()[tmPtr+4>>2]=date.getMinutes();GROWABLE_HEAP_I32()[tmPtr+8>>2]=date.getHours();GROWABLE_HEAP_I32()[tmPtr+12>>2]=date.getDate();GROWABLE_HEAP_I32()[tmPtr+16>>2]=date.getMonth();return date.getTime()/1e3|0}function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(20,1,code);procExit(code)}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=GROWABLE_HEAP_I32()[tm+40>>2];var date={tm_sec:GROWABLE_HEAP_I32()[tm>>2],tm_min:GROWABLE_HEAP_I32()[tm+4>>2],tm_hour:GROWABLE_HEAP_I32()[tm+8>>2],tm_mday:GROWABLE_HEAP_I32()[tm+12>>2],tm_mon:GROWABLE_HEAP_I32()[tm+16>>2],tm_year:GROWABLE_HEAP_I32()[tm+20>>2],tm_wday:GROWABLE_HEAP_I32()[tm+24>>2],tm_yday:GROWABLE_HEAP_I32()[tm+28>>2],tm_isdst:GROWABLE_HEAP_I32()[tm+32>>2],tm_gmtoff:GROWABLE_HEAP_I32()[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){GROWABLE_HEAP_I32()[ptr>>2]=ret}return ret}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var GLctx;var proxiedFunctionTable=[null,_atexit,___sys_fcntl64,___sys_ioctl,___sys_lstat64,___sys_mmap2,___sys_munmap,___sys_open,___sys_rename,___sys_unlink,_abort,_emscripten_set_canvas_element_size_main_thread,_environ_get,_environ_sizes_get,_fd_close,_fd_read,_fd_seek,_fd_sync,_fd_write,_tzset,_proc_exit];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"va":HaveOffsetConverter,"m":___assert_fail,"A":___clock_gettime,"H":___cxa_thread_atexit,"ia":___pthread_create_js,"ga":___pthread_exit_js,"ha":___pthread_join_js,"D":___sys_fcntl64,"_":___sys_ioctl,"Z":___sys_lstat64,"ca":___sys_mmap2,"da":___sys_munmap,"C":___sys_open,"$":___sys_rename,"aa":___sys_unlink,"N":__embind_finalize_value_object,"Q":__embind_register_bigint,"sa":__embind_register_bool,"d":__embind_register_class,"p":__embind_register_class_class_function,"k":__embind_register_class_constructor,"c":__embind_register_class_function,"h":__embind_register_class_property,"qa":__embind_register_emval,"F":__embind_register_float,"l":__embind_register_integer,"f":__embind_register_memory_view,"G":__embind_register_std_string,"v":__embind_register_std_wstring,"O":__embind_register_value_object,"o":__embind_register_value_object_field,"ta":__embind_register_void,"oa":__emscripten_notify_thread_queue,"ea":__emval_as,"Ea":__emval_call_method,"z":__emval_call_void_method,"i":__emval_decref,"Da":__emval_get_global,"y":__emval_get_method_caller,"pa":__emval_get_property,"q":__emval_incref,"Ca":__emval_new,"ra":__emval_new_cstring,"M":__emval_run_destructors,"e":__emval_take_value,"b":_abort,"I":_clock_gettime,"ya":_dlopen,"L":_dlsym,"J":_emscripten_asm_const_int,"Y":_emscripten_check_blocking_allowed,"s":_emscripten_conditional_set_current_thread_status,"j":_emscripten_futex_wait,"g":_emscripten_futex_wake,"fa":_emscripten_get_heap_max,"n":_emscripten_get_now,"R":_emscripten_memcpy_big,"K":_emscripten_num_logical_cores,"ua":_emscripten_pc_get_function,"la":_emscripten_receive_on_main_thread_js,"S":_emscripten_resize_heap,"ma":_emscripten_set_canvas_element_size,"E":_emscripten_set_current_thread_status,"ka":_emscripten_set_timeout,"xa":_emscripten_stack_snapshot,"wa":_emscripten_stack_unwind_buffer,"na":_emscripten_webgl_create_context,"W":_environ_get,"X":_environ_sizes_get,"za":_exit,"u":_fd_close,"B":_fd_read,"P":_fd_seek,"ba":_fd_sync,"t":_fd_write,"Aa":_flock,"T":_getentropy,"ja":initPthreadsJS,"w":_localtime_r,"a":wasmMemory||Module["wasmMemory"],"Ba":_mktime,"V":_proc_exit,"r":_setTempRet0,"U":_strftime_l,"x":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Fa"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["Ga"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["Ia"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["Ja"]).apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return(_pthread_self=Module["_pthread_self"]=Module["asm"]["Ka"]).apply(null,arguments)};var _emscripten_tls_init=Module["_emscripten_tls_init"]=function(){return(_emscripten_tls_init=Module["_emscripten_tls_init"]=Module["asm"]["La"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["Ma"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["Na"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["Oa"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return(_emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=Module["asm"]["Pa"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return(_emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=Module["asm"]["Qa"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=Module["asm"]["Ra"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["Sa"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=Module["asm"]["Ta"]).apply(null,arguments)};var __emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=function(){return(__emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=Module["asm"]["Ua"]).apply(null,arguments)};var _pthread_testcancel=Module["_pthread_testcancel"]=function(){return(_pthread_testcancel=Module["_pthread_testcancel"]=Module["asm"]["Va"]).apply(null,arguments)};var _pthread_exit=Module["_pthread_exit"]=function(){return(_pthread_exit=Module["_pthread_exit"]=Module["asm"]["Wa"]).apply(null,arguments)};var __emscripten_thread_init=Module["__emscripten_thread_init"]=function(){return(__emscripten_thread_init=Module["__emscripten_thread_init"]=Module["asm"]["Xa"]).apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return(_emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=Module["asm"]["Ya"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return(___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=Module["asm"]["Za"]).apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return(__get_tzname=Module["__get_tzname"]=Module["asm"]["_a"]).apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return(__get_daylight=Module["__get_daylight"]=Module["asm"]["$a"]).apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return(__get_timezone=Module["__get_timezone"]=Module["asm"]["ab"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["bb"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["cb"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["db"]).apply(null,arguments)};var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=function(){return(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=Module["asm"]["eb"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["fb"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["gb"]).apply(null,arguments)};var dynCall_jiiji=Module["dynCall_jiiji"]=function(){return(dynCall_jiiji=Module["dynCall_jiiji"]=Module["asm"]["hb"]).apply(null,arguments)};var dynCall_iiij=Module["dynCall_iiij"]=function(){return(dynCall_iiij=Module["dynCall_iiij"]=Module["asm"]["ib"]).apply(null,arguments)};var dynCall_jiiiji=Module["dynCall_jiiiji"]=function(){return(dynCall_jiiiji=Module["dynCall_jiiiji"]=Module["asm"]["jb"]).apply(null,arguments)};var dynCall_vij=Module["dynCall_vij"]=function(){return(dynCall_vij=Module["dynCall_vij"]=Module["asm"]["kb"]).apply(null,arguments)};var dynCall_jjj=Module["dynCall_jjj"]=function(){return(dynCall_jjj=Module["dynCall_jjj"]=Module["asm"]["lb"]).apply(null,arguments)};var dynCall_iiiijj=Module["dynCall_iiiijj"]=function(){return(dynCall_iiiijj=Module["dynCall_iiiijj"]=Module["asm"]["mb"]).apply(null,arguments)};var dynCall_viijj=Module["dynCall_viijj"]=function(){return(dynCall_viijj=Module["dynCall_viijj"]=Module["asm"]["nb"]).apply(null,arguments)};var dynCall_viiijjjj=Module["dynCall_viiijjjj"]=function(){return(dynCall_viiijjjj=Module["dynCall_viiijjjj"]=Module["asm"]["ob"]).apply(null,arguments)};var dynCall_vj=Module["dynCall_vj"]=function(){return(dynCall_vj=Module["dynCall_vj"]=Module["asm"]["pb"]).apply(null,arguments)};var dynCall_viij=Module["dynCall_viij"]=function(){return(dynCall_viij=Module["dynCall_viij"]=Module["asm"]["qb"]).apply(null,arguments)};var dynCall_viiiiij=Module["dynCall_viiiiij"]=function(){return(dynCall_viiiiij=Module["dynCall_viiiiij"]=Module["asm"]["rb"]).apply(null,arguments)};var dynCall_iijjiiii=Module["dynCall_iijjiiii"]=function(){return(dynCall_iijjiiii=Module["dynCall_iijjiiii"]=Module["asm"]["sb"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["tb"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["ub"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["vb"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["wb"]).apply(null,arguments)};var __emscripten_allow_main_runtime_queued_calls=Module["__emscripten_allow_main_runtime_queued_calls"]=255260;var __emscripten_main_thread_futex=Module["__emscripten_main_thread_futex"]=264016;Module["keepRuntimeAlive"]=keepRuntimeAlive;Module["PThread"]=PThread;Module["PThread"]=PThread;Module["wasmMemory"]=wasmMemory;Module["ExitStatus"]=ExitStatus;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();postMessage({"cmd":"loaded"});return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(!implicit){if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exitProcess","returnCode":status});throw new ExitStatus(status)}else{}}if(keepRuntimeAlive()){}else{PThread.terminateAllThreads();exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}if(ENVIRONMENT_IS_PTHREAD){noExitRuntime=false;PThread.initWorker()}run(); + + + return tflite_web_api_ModuleFactory.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = tflite_web_api_ModuleFactory; +else if (typeof define === 'function' && define['amd']) + define([], function() { return tflite_web_api_ModuleFactory; }); +else if (typeof exports === 'object') + exports["tflite_web_api_ModuleFactory"] = tflite_web_api_ModuleFactory; diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.wasm b/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.wasm new file mode 100755 index 000000000..d36a8bcc2 Binary files /dev/null and b/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.wasm differ diff --git a/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.worker.js b/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.worker.js new file mode 100755 index 000000000..f7b758af8 --- /dev/null +++ b/web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.worker.js @@ -0,0 +1 @@ +"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};function moduleLoaded(){}self.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}tflite_web_api_ModuleFactory(Module).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["PThread"].threadExit(result)}}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}}; diff --git a/web/apps/photos/public/locales/de-DE/translation.json b/web/apps/photos/public/locales/de-DE/translation.json new file mode 100644 index 000000000..c0333d131 --- /dev/null +++ b/web/apps/photos/public/locales/de-DE/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private Sicherungen
für deine Erinnerungen
", + "HERO_SLIDE_1": "Standardmäßig Ende-zu-Ende verschlüsselt", + "HERO_SLIDE_2_TITLE": "
Sicher gespeichert
in einem Luftschutzbunker
", + "HERO_SLIDE_2": "Entwickelt um zu bewahren", + "HERO_SLIDE_3_TITLE": "
Verfügbar
überall
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Anmelden", + "SIGN_UP": "Registrieren", + "NEW_USER": "Neu bei ente", + "EXISTING_USER": "Existierender Benutzer", + "ENTER_NAME": "Name eingeben", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Füge einen Namen hinzu, damit deine Freunde wissen, wem sie für diese tollen Fotos zu danken haben!", + "ENTER_EMAIL": "E-Mail-Adresse eingeben", + "EMAIL_ERROR": "Geben Sie eine gültige E-Mail-Adresse ein", + "REQUIRED": "Erforderlich", + "EMAIL_SENT": "Bestätigungscode an {{email}} gesendet", + "CHECK_INBOX": "Bitte überprüfe deinen E-Mail-Posteingang (und Spam), um die Verifizierung abzuschließen", + "ENTER_OTT": "Bestätigungscode", + "RESEND_MAIL": "Code erneut senden", + "VERIFY": "Überprüfen", + "UNKNOWN_ERROR": "Ein Fehler ist aufgetreten, bitte versuche es erneut", + "INVALID_CODE": "Falscher Bestätigungscode", + "EXPIRED_CODE": "Ihr Bestätigungscode ist abgelaufen", + "SENDING": "Wird gesendet...", + "SENT": "Gesendet!", + "PASSWORD": "Passwort", + "LINK_PASSWORD": "Passwort zum Entsperren des Albums eingeben", + "RETURN_PASSPHRASE_HINT": "Passwort", + "SET_PASSPHRASE": "Passwort setzen", + "VERIFY_PASSPHRASE": "Einloggen", + "INCORRECT_PASSPHRASE": "Falsches Passwort", + "ENTER_ENC_PASSPHRASE": "Bitte gib ein Passwort ein, mit dem wir deine Daten verschlüsseln können", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "Willkommen bei ", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Wo deine besten Fotos leben", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generierung von Verschlüsselungsschlüsseln...", + "PASSPHRASE_HINT": "Passwort", + "CONFIRM_PASSPHRASE": "Passwort bestätigen", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "Die Passwörter stimmen nicht überein", + "CONSOLE_WARNING_STOP": "STOPP!", + "CONSOLE_WARNING_DESC": "", + "CREATE_COLLECTION": "Neues Album", + "ENTER_ALBUM_NAME": "Albumname", + "CLOSE_OPTION": "Schließen (Esc)", + "ENTER_FILE_NAME": "Dateiname", + "CLOSE": "Schließen", + "NO": "Nein", + "NOTHING_HERE": "", + "UPLOAD": "Hochladen", + "IMPORT": "Importieren", + "ADD_PHOTOS": "Fotos hinzufügen", + "ADD_MORE_PHOTOS": "Mehr Fotos hinzufügen", + "add_photos_one": "", + "add_photos_other": "", + "SELECT_PHOTOS": "Foto auswählen", + "FILE_UPLOAD": "Datei hochladen", + "UPLOAD_STAGE_MESSAGE": { + "0": "Hochladen wird vorbereitet", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "Sicherung abgeschlossen" + }, + "FILE_NOT_UPLOADED_LIST": "", + "SUBSCRIPTION_EXPIRED": "Abonnement abgelaufen", + "SUBSCRIPTION_EXPIRED_MESSAGE": "", + "STORAGE_QUOTA_EXCEEDED": "Speichergrenze überschritten", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "", + "ACCOUNT_EXISTS": "", + "CREATE": "Erstellen", + "DOWNLOAD": "Herunterladen", + "DOWNLOAD_OPTION": "Herunterladen (D)", + "DOWNLOAD_FAVORITES": "Favoriten herunterladen", + "DOWNLOAD_UNCATEGORIZED": "", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "Als PNG kopieren (Strg / Cmd - C)", + "TOGGLE_FULLSCREEN": "", + "ZOOM_IN_OUT": "Herein-/Herauszoomen", + "PREVIOUS": "", + "NEXT": "", + "TITLE_PHOTOS": "", + "TITLE_ALBUMS": "", + "TITLE_AUTH": "", + "UPLOAD_FIRST_PHOTO": "Lade dein erstes Foto hoch", + "IMPORT_YOUR_FOLDERS": "Importiere deiner Ordner", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "Dateien löschen?", + "TRASH_FILE_TITLE": "Datei löschen?", + "DELETE_FILES_TITLE": "Sofort löschen?", + "DELETE_FILES_MESSAGE": "", + "DELETE": "Löschen", + "DELETE_OPTION": "Löschen (DEL)", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Ein einzelnes Album", + "OR": "oder", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "Ihre Sitzung ist abgelaufen. Bitte loggen Sie sich erneut ein, um fortzufahren", + "SESSION_EXPIRED": "Sitzung abgelaufen", + "PASSWORD_GENERATION_FAILED": "Dein Browser konnte keinen starken Schlüssel generieren, der den Verschlüsselungsstandards des Entes entspricht, bitte versuche die mobile App oder einen anderen Browser zu verwenden", + "CHANGE_PASSWORD": "Passwort ändern", + "GO_BACK": "Zurück", + "RECOVERY_KEY": "Wiederherstellungsschlüssel", + "SAVE_LATER": "Auf später verschieben", + "SAVE": "Schlüssel speichern", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "Passwort vergessen", + "RECOVER_ACCOUNT": "Konto wiederherstellen", + "RECOVERY_KEY_HINT": "Wiederherstellungsschlüssel", + "RECOVER": "Wiederherstellen", + "NO_RECOVERY_KEY": "Kein Wiederherstellungsschlüssel?", + "INCORRECT_RECOVERY_KEY": "Falscher Wiederherstellungs-Schlüssel", + "SORRY": "Entschuldigung", + "NO_RECOVERY_KEY_MESSAGE": "Aufgrund unseres Ende-zu-Ende-Verschlüsselungsprotokolls können Ihre Daten nicht ohne Ihr Passwort oder Ihren Wiederherstellungsschlüssel entschlüsselt werden", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Bitte sende eine E-Mail an {{emailID}} von deiner registrierten E-Mail-Adresse", + "CONTACT_SUPPORT": "Support kontaktieren", + "REQUEST_FEATURE": "Feature anfragen", + "SUPPORT": "Support", + "CONFIRM": "Bestätigen", + "CANCEL": "Abbrechen", + "LOGOUT": "Ausloggen", + "DELETE_ACCOUNT": "Konto löschen", + "DELETE_ACCOUNT_MESSAGE": "", + "LOGOUT_MESSAGE": "Sind sie sicher, dass sie sich ausloggen möchten?", + "CHANGE_EMAIL": "E-Mail-Adresse ändern", + "OK": "OK", + "SUCCESS": "Erfolgreich", + "ERROR": "Fehler", + "MESSAGE": "Nachricht", + "INSTALL_MOBILE_APP": "", + "DOWNLOAD_APP_MESSAGE": "", + "DOWNLOAD_APP": "Desktopanwendung herunterladen", + "EXPORT": "Daten exportieren", + "SUBSCRIPTION": "Abonnement", + "SUBSCRIBE": "Abonnieren", + "MANAGEMENT_PORTAL": "Zahlungsmethode verwalten", + "MANAGE_FAMILY_PORTAL": "Familiengruppe verwalten", + "LEAVE_FAMILY_PLAN": "Familienabo verlassen", + "LEAVE": "Verlassen", + "LEAVE_FAMILY_CONFIRM": "Bist du sicher, dass du den Familien-Tarif verlassen möchtest?", + "CHOOSE_PLAN": "Wähle dein Abonnement", + "MANAGE_PLAN": "Verwalte dein Abonnement", + "ACTIVE": "Aktiv", + "OFFLINE_MSG": "Du bist offline, gecachte Erinnerungen werden angezeigt", + "FREE_SUBSCRIPTION_INFO": "", + "FAMILY_SUBSCRIPTION_INFO": "Sie haben einen Familienplan verwaltet von", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Erneuert am {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Endet am {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Ihr Abo endet am {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Sie haben Ihr Speichervolumen überschritten, bitte upgraden Sie", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "Kauf des Abonnements fehlgeschlagen Bitte versuchen Sie es erneut", + "SUBSCRIPTION_UPDATE_FAILED": "Aktualisierung des Abonnements fehlgeschlagen Bitte versuchen Sie es erneut", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "Zahlungsmethode aktualisieren", + "MONTHLY": "Monatlich", + "YEARLY": "Jährlich", + "UPDATE_SUBSCRIPTION_MESSAGE": "Sind Sie sicher, dass Sie Ihren Tarif ändern möchten?", + "UPDATE_SUBSCRIPTION": "Plan ändern", + "CANCEL_SUBSCRIPTION": "Abonnement kündigen", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "Abonnement reaktivieren", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "RENAME": "Umbenennen", + "RENAME_FILE": "Datei umbenennen", + "RENAME_COLLECTION": "Album umbenennen", + "DELETE_COLLECTION_TITLE": "Album löschen?", + "DELETE_COLLECTION": "Album löschen", + "DELETE_COLLECTION_MESSAGE": "Auch die Fotos (und Videos) in diesem Album aus allen anderen Alben löschen, die sie enthalten?", + "DELETE_PHOTOS": "Fotos löschen", + "KEEP_PHOTOS": "Fotos behalten", + "SHARE": "Teilen", + "SHARE_COLLECTION": "Album teilen", + "SHAREES": "Geteilt mit", + "SHARE_WITH_SELF": "Du kannst nicht mit dir selbst teilen", + "ALREADY_SHARED": "Hoppla, Sie teilen dies bereits mit {{email}}", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "DOWNLOAD_COLLECTION": "Album herunterladen", + "DOWNLOAD_COLLECTION_MESSAGE": "", + "CREATE_ALBUM_FAILED": "", + "SEARCH": "Suchen", + "SEARCH_RESULTS": "Ergebnisse durchsuchen", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Standort", + "CITY": "", + "DATE": "Datum", + "FILE_NAME": "Dateiname", + "THING": "Inhalt", + "FILE_CAPTION": "Beschreibung", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "Keine Erinnerungen", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "Zum Album hinzufügen", + "SELECTED": "", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "", + "PEOPLE": "Personen", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "Info ", + "INFO_OPTION": "", + "FILE_NAME": "Dateiname", + "CAPTION_PLACEHOLDER": "Eine Beschreibung hinzufügen", + "LOCATION": "Standort", + "SHOW_ON_MAP": "In OpenStreetMap öffnen", + "MAP": "Karte", + "MAP_SETTINGS": "Karten\nEinstellungen", + "ENABLE_MAPS": "Karten aktivieren?", + "ENABLE_MAP": "Karte aktivieren", + "DISABLE_MAPS": "Karten deaktivieren?", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "Karte deaktivieren", + "DETAILS": "Details", + "VIEW_EXIF": "Alle EXIF-Daten anzeigen", + "NO_EXIF": "Keine EXIF-Daten", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Zwei-Faktor", + "TWO_FACTOR_AUTHENTICATION": "Zwei-Faktor-Authentifizierung", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "Geben Sie den Code manuell ein", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "QR‐Code stattdessen scannen", + "ENABLE_TWO_FACTOR": "Zwei-Faktor-Authentifizierung aktivieren", + "ENABLE": "Aktivieren", + "LOST_DEVICE": "", + "INCORRECT_CODE": "Falscher Code", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "Deaktiviere die Zwei-Faktor-Authentifizierung", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "Deaktivieren", + "RECONFIGURE": "Neu einrichten", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "Daten exportieren", + "SELECT_FOLDER": "Ordner auswählen", + "DESTINATION": "Zielort", + "START": "Start", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "OTP senden", + "EMAIl_ALREADY_OWNED": "Diese E-Mail wird bereits verwendet", + "ETAGS_BLOCKED": "", + "SKIPPED_VIDEOS_INFO": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "Fehlgeschlagene Uploads ", + "SKIPPED_FILES": "Ignorierte Uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Das Vorschaubild konnte nicht erzeugt werden", + "UNSUPPORTED_FILES": "Nicht unterstützte Dateien", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "ente unterstützt diese Dateiformate noch nicht", + "BLOCKED_UPLOADS": "Blockierte Uploads", + "SKIPPED_VIDEOS": "Übersprungene Videos", + "INPROGRESS_METADATA_EXTRACTION": "In Bearbeitung", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "Große Dateien", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Zu wenig Speicher", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Diese Dateien wurden nicht hochgeladen, da sie die maximale Größe für Ihren Speicherplan überschreiten", + "TOO_LARGE_INFO": "Diese Dateien wurden nicht hochgeladen, da sie unsere maximale Dateigröße überschreiten", + "THUMBNAIL_GENERATION_FAILED_INFO": "Diese Dateien wurden hochgeladen, aber leider konnten wir nicht die Thumbnails für sie generieren.", + "UPLOAD_TO_COLLECTION": "In Album hochladen", + "UNCATEGORIZED": "", + "ARCHIVE": "Archiv", + "FAVORITES": "Favoriten", + "ARCHIVE_COLLECTION": "Album archivieren", + "ARCHIVE_SECTION_NAME": "Archiv", + "ALL_SECTION_NAME": "Alle", + "MOVE_TO_COLLECTION": "Zum Album verschieben", + "UNARCHIVE": "", + "UNARCHIVE_COLLECTION": "", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "Verschieben", + "ADD": "Hinzufügen", + "REMOVE": "Entfernen", + "YES_REMOVE": "Ja, entfernen", + "REMOVE_FROM_COLLECTION": "Aus Album entfernen", + "TRASH": "Papierkorb", + "MOVE_TO_TRASH": "In Papierkorb verschieben", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "Dauerhaft löschen", + "RESTORE": "Wiederherstellen", + "RESTORE_TO_COLLECTION": "In Album wiederherstellen", + "EMPTY_TRASH": "Papierkorb leeren", + "EMPTY_TRASH_TITLE": "Papierkorb leeren?", + "EMPTY_TRASH_MESSAGE": "", + "LEAVE_SHARED_ALBUM": "Ja, verlassen", + "LEAVE_ALBUM": "Album verlassen", + "LEAVE_SHARED_ALBUM_TITLE": "Geteiltes Album verlassen?", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "Dateien in einem freigegebenen Album können nicht gelöscht werden", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "Ältestem", + "SORT_BY_UPDATION_TIME_DESCENDING": "Zuletzt aktualisiert", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "", + "THUMBNAIL_REPLACED": "", + "FIX_THUMBNAIL": "Komprimiere", + "FIX_THUMBNAIL_LATER": "", + "REPLACE_THUMBNAIL_NOT_STARTED": "", + "REPLACE_THUMBNAIL_COMPLETED": "", + "REPLACE_THUMBNAIL_NOOP": "", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "Installieren", + "SHARING_DETAILS": "Details teilen", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "PARTICIPANTS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "Entfernen?", + "CONFIRM_REMOVE": "Ja, entfernen", + "MANAGE": "Verwalten", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "Teilnehmer entfernen", + "OWNER": "Besitzer", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "404 - Nicht gefunden", + "LINK_EXPIRED": "Link ist abgelaufen", + "LINK_EXPIRED_MESSAGE": "Dieser Link ist abgelaufen oder wurde deaktiviert!", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "Sorry, dieses Album wurde auf zu vielen Geräten angezeigt!", + "FILE_DOWNLOAD": "Downloads erlauben", + "LINK_PASSWORD_LOCK": "Passwort Sperre", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "Geräte Limit", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "Ablaufdatum des Links", + "NEVER": "Niemals", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "MALICIOUS_CONTENT": "", + "COPYRIGHT": "", + "SHARED_USING": "", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "Passwort Sperre", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "UPLOAD_FILES": "Datei", + "UPLOAD_DIRS": "Ordner", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "Du hast keine Duplikate, die gelöscht werden können", + "CLUB_BY_CAPTURE_TIME": "", + "FILES": "Dateien", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "Hochladen stoppen?", + "YES_STOP_UPLOADS": "Ja, Hochladen stoppen", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "1 Album", + "albums_other": "", + "ALL_ALBUMS": "Alle Alben", + "ALBUMS": "Alben", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "HIDDEN_ITEMS_SECTION_NAME": "", + "ENTER_TWO_FACTOR_OTP": "Gib den 6-stelligen Code aus\ndeiner Authentifizierungs-App ein.", + "CREATE_ACCOUNT": "Account erstellen", + "COPIED": "Kopiert", + "CANVAS_BLOCKED_TITLE": "Vorschaubild konnte nicht erstellt werden", + "CANVAS_BLOCKED_MESSAGE": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "Jetzt upgraden", + "RENEW_NOW": "", + "STORAGE": "Speicher", + "USED": "verwendet", + "YOU": "Sie", + "FAMILY": "Familie", + "FREE": "frei", + "OF": "von", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "Ordner hinzufügen", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "Ja, Stopp", + "MONTH_SHORT": "", + "YEAR": "Jahr", + "FAMILY_PLAN": "Familientarif", + "DOWNLOAD_LOGS": "Logs herunterladen", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "", + "TWO_MONTHS_FREE": "", + "GB": "GB", + "POPULAR": "Beliebt", + "FREE_PLAN_OPTION_LABEL": "", + "FREE_PLAN_DESCRIPTION": "1 GB für 1 Jahr", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "DRAG_AND_DROP_HINT": "", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "", + "AUTHENTICATE": "Authentifizieren", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "Egal", + "UPDATE_AVAILABLE": "Neue Version verfügbar", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "Jetzt installieren", + "INSTALL_ON_NEXT_LAUNCH": "Beim nächsten Start installieren", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "Diese Version ignorieren", + "TODAY": "Heute", + "YESTERDAY": "Gestern", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "Beta deaktivieren", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "Erweitert", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "Passwortstärke: Schwach", + "PASSPHRASE_STRENGTH_MODERATE": "", + "PASSPHRASE_STRENGTH_STRONG": "Passwortstärke: Stark", + "PREFERENCES": "Einstellungen", + "LANGUAGE": "Sprache", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "STORAGE_UNITS": { + "B": "", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "nach einer Stunde", + "DAY": "nach einem Tag", + "WEEK": "nach 1 Woche", + "MONTH": "nach einem Monat", + "YEAR": "nach einem Jahr" + }, + "COPY_LINK": "Link kopieren", + "DONE": "Fertig", + "LINK_SHARE_TITLE": "Oder einen Link teilen", + "REMOVE_LINK": "Link entfernen", + "CREATE_PUBLIC_SHARING": "Öffentlichen Link erstellen", + "PUBLIC_LINK_CREATED": "Öffentlicher Link erstellt", + "PUBLIC_LINK_ENABLED": "Öffentlicher Link aktiviert", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "EXPORT_NOTIFICATION": { + "START": "Export gestartet", + "IN_PROGRESS": "", + "FINISH": "Export abgeschlossen", + "UP_TO_DATE": "" + }, + "CONTINUOUS_EXPORT": "", + "TOTAL_ITEMS": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "DELETE_ACCOUNT_REASON_LABEL": "", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "", + "DELETE_REASON": { + "MISSING_FEATURE": "", + "BROKEN_BEHAVIOR": "", + "FOUND_ANOTHER_SERVICE": "", + "NOT_LISTED": "" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "", + "CONFIRM_DELETE_ACCOUNT": "Kontolöschung bestätigen", + "FEEDBACK_REQUIRED": "", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "Weiter", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "Versteckt", + "HIDE": "Ausblenden", + "UNHIDE": "Einblenden", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "Sortieren nach", + "NEWEST_FIRST": "Neueste zuerst", + "OLDEST_FIRST": "Älteste zuerst", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Diese Datei konnte nicht in der Vorschau angezeigt werden. Klicken Sie hier, um das Original herunterzuladen.", + "SELECT_COLLECTION": "Album auswählen", + "PIN_ALBUM": "Album anheften", + "UNPIN_ALBUM": "Album lösen", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CRASH_REPORTING": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/en-US/translation.json b/web/apps/photos/public/locales/en-US/translation.json new file mode 100644 index 000000000..6870df319 --- /dev/null +++ b/web/apps/photos/public/locales/en-US/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Private backups
for your memories
", + "HERO_SLIDE_1": "End-to-end encrypted by default", + "HERO_SLIDE_2_TITLE": "
Safely stored
at a fallout shelter
", + "HERO_SLIDE_2": "Designed to outlive", + "HERO_SLIDE_3_TITLE": "
Available
everywhere
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Login", + "SIGN_UP": "Signup", + "NEW_USER": "New to ente", + "EXISTING_USER": "Existing user", + "ENTER_NAME": "Enter name", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Add a name so that your friends know who to thank for these great photos!", + "ENTER_EMAIL": "Enter email address", + "EMAIL_ERROR": "Enter a valid email", + "REQUIRED": "Required", + "EMAIL_SENT": "Verification code sent to {{email}}", + "CHECK_INBOX": "Please check your inbox (and spam) to complete verification", + "ENTER_OTT": "Verification code", + "RESEND_MAIL": "Resend code", + "VERIFY": "Verify", + "UNKNOWN_ERROR": "Something went wrong, please try again", + "INVALID_CODE": "Invalid verification code", + "EXPIRED_CODE": "Your verification code has expired", + "SENDING": "Sending...", + "SENT": "Sent!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Enter password to unlock the album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Set password", + "VERIFY_PASSPHRASE": "Sign in", + "INCORRECT_PASSPHRASE": "Incorrect password", + "ENTER_ENC_PASSPHRASE": "Please enter a password that we can use to encrypt your data", + "PASSPHRASE_DISCLAIMER": "We don't store your password, so if you forget it, we will not be able to help you recover your data without a recovery key.", + "WELCOME_TO_ENTE_HEADING": "Welcome to ", + "WELCOME_TO_ENTE_SUBHEADING": "End to end encrypted photo storage and sharing", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Where your best photos live", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generating encryption keys...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Confirm password", + "REFERRAL_CODE_HINT": "How did you hear about Ente? (optional)", + "REFERRAL_INFO": "We don't track app installs, It'd help us if you told us where you found us!", + "PASSPHRASE_MATCH_ERROR": "Passwords don't match", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "This is a browser feature intended for developers. Please don't copy-paste unverified code here.", + "CREATE_COLLECTION": "New album", + "ENTER_ALBUM_NAME": "Album name", + "CLOSE_OPTION": "Close (Esc)", + "ENTER_FILE_NAME": "File name", + "CLOSE": "Close", + "NO": "No", + "NOTHING_HERE": "Nothing to see here yet 👀", + "UPLOAD": "Upload", + "IMPORT": "Import", + "ADD_PHOTOS": "Add photos", + "ADD_MORE_PHOTOS": "Add more photos", + "add_photos_one": "Add 1 item", + "add_photos_other": "Add {{count, number}} items", + "SELECT_PHOTOS": "Select photos", + "FILE_UPLOAD": "File Upload", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparing to upload", + "1": "Reading google metadata files", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files metadata extracted", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} files processed", + "4": "Cancelling remaining uploads", + "5": "Backup complete" + }, + "FILE_NOT_UPLOADED_LIST": "The following files were not uploaded", + "SUBSCRIPTION_EXPIRED": "Subscription expired", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Your subscription has expired, please renew", + "STORAGE_QUOTA_EXCEEDED": "Storage limit exceeded", + "INITIAL_LOAD_DELAY_WARNING": "First load may take some time", + "USER_DOES_NOT_EXIST": "Sorry, could not find a user with that email", + "NO_ACCOUNT": "Don't have an account", + "ACCOUNT_EXISTS": "Already have an account", + "CREATE": "Create", + "DOWNLOAD": "Download", + "DOWNLOAD_OPTION": "Download (D)", + "DOWNLOAD_FAVORITES": "Download favorites", + "DOWNLOAD_UNCATEGORIZED": "Download uncategorized", + "DOWNLOAD_HIDDEN_ITEMS": "Download hidden items", + "COPY_OPTION": "Copy as PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Toggle fullscreen (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Previous (←)", + "NEXT": "Next (→)", + "TITLE_PHOTOS": "Ente Photos", + "TITLE_ALBUMS": "Ente Photos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Upload your first photo", + "IMPORT_YOUR_FOLDERS": "Import your folders", + "UPLOAD_DROPZONE_MESSAGE": "Drop to backup your files", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Drop to add watched folder", + "TRASH_FILES_TITLE": "Delete files?", + "TRASH_FILE_TITLE": "Delete file?", + "DELETE_FILES_TITLE": "Delete immediately?", + "DELETE_FILES_MESSAGE": "Selected files will be permanently deleted from your ente account.", + "DELETE": "Delete", + "DELETE_OPTION": "Delete (DEL)", + "FAVORITE_OPTION": "Favorite (L)", + "UNFAVORITE_OPTION": "Unfavorite (L)", + "MULTI_FOLDER_UPLOAD": "Multiple folders detected", + "UPLOAD_STRATEGY_CHOICE": "Would you like to upload them into", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "A single album", + "OR": "or", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separate albums", + "SESSION_EXPIRED_MESSAGE": "Your session has expired, please login again to continue", + "SESSION_EXPIRED": "Session expired", + "PASSWORD_GENERATION_FAILED": "Your browser was unable to generate a strong key that meets ente's encryption standards, please try using the mobile app or another browser", + "CHANGE_PASSWORD": "Change password", + "GO_BACK": "Go back", + "RECOVERY_KEY": "Recovery key", + "SAVE_LATER": "Do this later", + "SAVE": "Save Key", + "RECOVERY_KEY_DESCRIPTION": "If you forget your password, the only way you can recover your data is with this key.", + "RECOVER_KEY_GENERATION_FAILED": "Recovery code could not be generated, please try again", + "KEY_NOT_STORED_DISCLAIMER": "We don't store this key, so please save this in a safe place", + "FORGOT_PASSWORD": "Forgot password", + "RECOVER_ACCOUNT": "Recover account", + "RECOVERY_KEY_HINT": "Recovery key", + "RECOVER": "Recover", + "NO_RECOVERY_KEY": "No recovery key?", + "INCORRECT_RECOVERY_KEY": "Incorrect recovery key", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Please drop an email to {{emailID}} from your registered email address", + "CONTACT_SUPPORT": "Contact support", + "REQUEST_FEATURE": "Request Feature", + "SUPPORT": "Support", + "CONFIRM": "Confirm", + "CANCEL": "Cancel", + "LOGOUT": "Logout", + "DELETE_ACCOUNT": "Delete account", + "DELETE_ACCOUNT_MESSAGE": "

Please send an email to {{emailID}} from your registered email address.

Your request will be processed within 72 hours.

", + "LOGOUT_MESSAGE": "Are you sure you want to logout?", + "CHANGE_EMAIL": "Change email", + "OK": "OK", + "SUCCESS": "Success", + "ERROR": "Error", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Install our Android or iOS app to automatically backup all your photos", + "DOWNLOAD_APP_MESSAGE": "Sorry, this operation is currently only supported on our desktop app", + "DOWNLOAD_APP": "Download desktop app", + "EXPORT": "Export Data", + "SUBSCRIPTION": "Subscription", + "SUBSCRIBE": "Subscribe", + "MANAGEMENT_PORTAL": "Manage payment method", + "MANAGE_FAMILY_PORTAL": "Manage family", + "LEAVE_FAMILY_PLAN": "Leave family plan", + "LEAVE": "Leave", + "LEAVE_FAMILY_CONFIRM": "Are you sure that you want to leave family plan?", + "CHOOSE_PLAN": "Choose your plan", + "MANAGE_PLAN": "Manage your subscription", + "ACTIVE": "Active", + "OFFLINE_MSG": "You are offline, cached memories are being shown", + "FREE_SUBSCRIPTION_INFO": "You are on the free plan that expires on {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "You are on a family plan managed by", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renews on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Ends on {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Your subscription will be cancelled on {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Your {{storage, string}} add-on is valid till {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "You have exceeded your storage quota, please upgrade", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We've received your payment

Your subscription is valid till {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Your purchase was canceled, please try again if you want to subscribe", + "SUBSCRIPTION_PURCHASE_FAILED": "Subscription purchase failed , please try again", + "SUBSCRIPTION_UPDATE_FAILED": "Subscription updated failed , please try again", + "UPDATE_PAYMENT_METHOD_MESSAGE": "We are sorry, payment failed when we tried to charge your card, please update your payment method and try again", + "STRIPE_AUTHENTICATION_FAILED": "We are unable to authenticate your payment method. please choose a different payment method and try again", + "UPDATE_PAYMENT_METHOD": "Update payment method", + "MONTHLY": "Monthly", + "YEARLY": "Yearly", + "UPDATE_SUBSCRIPTION_MESSAGE": "Are you sure you want to change your plan?", + "UPDATE_SUBSCRIPTION": "Change plan", + "CANCEL_SUBSCRIPTION": "Cancel subscription", + "CANCEL_SUBSCRIPTION_MESSAGE": "

All of your data will be deleted from our servers at the end of this billing period.

Are you sure that you want to cancel your subscription?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Are you sure you want to cancel your subscription?

", + "SUBSCRIPTION_CANCEL_FAILED": "Failed to cancel subscription", + "SUBSCRIPTION_CANCEL_SUCCESS": "Subscription canceled successfully", + "REACTIVATE_SUBSCRIPTION": "Reactivate subscription", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Once reactivated, you will be billed on {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Subscription activated successfully ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Failed to reactivate subscription renewals", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Thank you", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancel mobile subscription", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Please cancel your subscription from the mobile app to activate a subscription here", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Please contact us at {{emailID}} to manage your subscription", + "RENAME": "Rename", + "RENAME_FILE": "Rename file", + "RENAME_COLLECTION": "Rename album", + "DELETE_COLLECTION_TITLE": "Delete album?", + "DELETE_COLLECTION": "Delete album", + "DELETE_COLLECTION_MESSAGE": "Also delete the photos (and videos) present in this album from all other albums they are part of?", + "DELETE_PHOTOS": "Delete photos", + "KEEP_PHOTOS": "Keep photos", + "SHARE": "Share", + "SHARE_COLLECTION": "Share album", + "SHAREES": "Shared with", + "SHARE_WITH_SELF": "Oops, you cannot share with yourself", + "ALREADY_SHARED": "Oops, you're already sharing this with {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Sharing album not allowed", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Sharing is disabled for free accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Are you sure you want to download the complete album?

All files will be queued for download sequentially

", + "CREATE_ALBUM_FAILED": "Failed to create album , please try again", + "SEARCH": "Search", + "SEARCH_RESULTS": "Search results", + "NO_RESULTS": "No results found", + "SEARCH_HINT": "Search for albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Location", + "CITY": "Location", + "DATE": "Date", + "FILE_NAME": "File name", + "THING": "Content", + "FILE_CAPTION": "Description", + "FILE_TYPE": "File type", + "CLIP": "Magic" + }, + "photos_count_zero": "No memories", + "photos_count_one": "1 memory", + "photos_count_other": "{{count, number}} memories", + "TERMS_AND_CONDITIONS": "I agree to the terms and privacy policy", + "ADD_TO_COLLECTION": "Add to album", + "SELECTED": "selected", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "This video cannot be played on your browser", + "PEOPLE": "People", + "INDEXING_SCHEDULED": "Indexing is scheduled...", + "ANALYZING_PHOTOS": "Indexing photos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexing people in {{indexStatus.nSyncedFiles,number}} photos...", + "INDEXING_DONE": "Indexed {{indexStatus.nSyncedFiles,number}} photos", + "UNIDENTIFIED_FACES": "unidentified faces", + "OBJECTS": "objects", + "TEXT": "text", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "File name", + "CAPTION_PLACEHOLDER": "Add a description", + "LOCATION": "Location", + "SHOW_ON_MAP": "View on OpenStreetMap", + "MAP": "Map", + "MAP_SETTINGS": "Map Settings", + "ENABLE_MAPS": "Enable Maps?", + "ENABLE_MAP": "Enable map", + "DISABLE_MAPS": "Disable Maps?", + "ENABLE_MAP_DESCRIPTION": "

This will show your photos on a world map.

The map is hosted by OpenStreetMap, and the exact locations of your photos are never shared.

You can disable this feature anytime from Settings.

", + "DISABLE_MAP_DESCRIPTION": "

This will disable the display of your photos on a world map.

You can enable this feature anytime from Settings.

", + "DISABLE_MAP": "Disable map", + "DETAILS": "Details", + "VIEW_EXIF": "View all EXIF data", + "NO_EXIF": "No EXIF data", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Two-factor", + "TWO_FACTOR_AUTHENTICATION": "Two-factor authentication", + "TWO_FACTOR_QR_INSTRUCTION": "Scan the QR code below with your favorite authenticator app", + "ENTER_CODE_MANUALLY": "Enter the code manually", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Please enter this code in your favorite authenticator app", + "SCAN_QR_CODE": "Scan QR code instead", + "ENABLE_TWO_FACTOR": "Enable two-factor", + "ENABLE": "Enable", + "LOST_DEVICE": "Lost two-factor device", + "INCORRECT_CODE": "Incorrect code", + "TWO_FACTOR_INFO": "Add an additional layer of security by requiring more than your email and password to log in to your account", + "DISABLE_TWO_FACTOR_LABEL": "Disable two-factor authentication", + "UPDATE_TWO_FACTOR_LABEL": "Update your authenticator device", + "DISABLE": "Disable", + "RECONFIGURE": "Reconfigure", + "UPDATE_TWO_FACTOR": "Update two-factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuing forward will void any previously configured authenticators", + "UPDATE": "Update", + "DISABLE_TWO_FACTOR": "Disable two-factor", + "DISABLE_TWO_FACTOR_MESSAGE": "Are you sure you want to disable your two-factor authentication", + "TWO_FACTOR_DISABLE_FAILED": "Failed to disable two factor, please try again", + "EXPORT_DATA": "Export data", + "SELECT_FOLDER": "Select folder", + "DESTINATION": "Destination", + "START": "Start", + "LAST_EXPORT_TIME": "Last export time", + "EXPORT_AGAIN": "Resync", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Local storage not accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Your browser or an addon is blocking ente from saving data into local storage. please try loading this page after switching your browsing mode.", + "SEND_OTT": "Send OTP", + "EMAIl_ALREADY_OWNED": "Email already taken", + "ETAGS_BLOCKED": "

We were unable to upload the following files because of your browser configuration.

Please disable any addons that might be preventing ente from using eTags to upload large files, or use our desktop app for a more reliable import experience.

", + "SKIPPED_VIDEOS_INFO": "

Presently we do not support adding videos via public links.

To share videos, please signup for ente and share with the intended recipients using their email.

", + "LIVE_PHOTOS_DETECTED": "The photo and video files from your Live Photos have been merged into a single file", + "RETRY_FAILED": "Retry failed uploads", + "FAILED_UPLOADS": "Failed uploads ", + "SKIPPED_FILES": "Ignored uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generation failed", + "UNSUPPORTED_FILES": "Unsupported files", + "SUCCESSFUL_UPLOADS": "Successful uploads", + "SKIPPED_INFO": "Skipped these as there are files with matching names in the same album", + "UNSUPPORTED_INFO": "ente does not support these file formats yet", + "BLOCKED_UPLOADS": "Blocked uploads", + "SKIPPED_VIDEOS": "Skipped videos", + "INPROGRESS_METADATA_EXTRACTION": "In progress", + "INPROGRESS_UPLOADS": "Uploads in progress", + "TOO_LARGE_UPLOADS": "Large files", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Insufficient storage", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "These files were not uploaded as they exceed the maximum size limit for your storage plan", + "TOO_LARGE_INFO": "These files were not uploaded as they exceed our maximum file size limit", + "THUMBNAIL_GENERATION_FAILED_INFO": "These files were uploaded, but unfortunately we could not generate the thumbnails for them.", + "UPLOAD_TO_COLLECTION": "Upload to album", + "UNCATEGORIZED": "Uncategorized", + "ARCHIVE": "Archive", + "FAVORITES": "Favorites", + "ARCHIVE_COLLECTION": "Archive album", + "ARCHIVE_SECTION_NAME": "Archive", + "ALL_SECTION_NAME": "All", + "MOVE_TO_COLLECTION": "Move to album", + "UNARCHIVE": "Unarchive", + "UNARCHIVE_COLLECTION": "Unarchive album", + "HIDE_COLLECTION": "Hide album", + "UNHIDE_COLLECTION": "Unhide album", + "MOVE": "Move", + "ADD": "Add", + "REMOVE": "Remove", + "YES_REMOVE": "Yes, remove", + "REMOVE_FROM_COLLECTION": "Remove from album", + "TRASH": "Trash", + "MOVE_TO_TRASH": "Move to trash", + "TRASH_FILES_MESSAGE": "Selected files will be removed from all albums and moved to trash.", + "TRASH_FILE_MESSAGE": "The file will be removed from all albums and moved to trash.", + "DELETE_PERMANENTLY": "Delete permanently", + "RESTORE": "Restore", + "RESTORE_TO_COLLECTION": "Restore to album", + "EMPTY_TRASH": "Empty trash", + "EMPTY_TRASH_TITLE": "Empty trash?", + "EMPTY_TRASH_MESSAGE": "These files will be permanently deleted from your ente account.", + "LEAVE_SHARED_ALBUM": "Yes, leave", + "LEAVE_ALBUM": "Leave album", + "LEAVE_SHARED_ALBUM_TITLE": "Leave shared album?", + "LEAVE_SHARED_ALBUM_MESSAGE": "You will leave the album, and it will stop being visible to you.", + "NOT_FILE_OWNER": "You cannot delete files in a shared album", + "CONFIRM_SELF_REMOVE_MESSAGE": "Selected items will be removed from this album. Items which are only in this album will be moved to Uncategorized.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Some of the items you are removing were added by other people, and you will lose access to them.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oldest", + "SORT_BY_UPDATION_TIME_DESCENDING": "Last updated", + "SORT_BY_NAME": "Name", + "COMPRESS_THUMBNAILS": "Compress thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails compressed", + "FIX_THUMBNAIL": "Compress", + "FIX_THUMBNAIL_LATER": "Compress later", + "REPLACE_THUMBNAIL_NOT_STARTED": "Some of your videos thumbnails can be compressed to save space. would you like ente to compress them?", + "REPLACE_THUMBNAIL_COMPLETED": "Successfully compressed all thumbnails", + "REPLACE_THUMBNAIL_NOOP": "You have no thumbnails that can be compressed further", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Could not compress some of your thumbnails, please retry", + "FIX_CREATION_TIME": "Fix time", + "FIX_CREATION_TIME_IN_PROGRESS": "Fixing time", + "CREATION_TIME_UPDATED": "File time updated", + "UPDATE_CREATION_TIME_NOT_STARTED": "Select the option you want to use", + "UPDATE_CREATION_TIME_COMPLETED": "Successfully updated all files", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "File time updation failed for some files, please retry", + "CAPTION_CHARACTER_LIMIT": "5000 characters max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Custom time", + "REOPEN_PLAN_SELECTOR_MODAL": "Re-open plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Failed to open plans", + "INSTALL": "Install", + "SHARING_DETAILS": "Sharing details", + "MODIFY_SHARING": "Modify sharing", + "ADD_COLLABORATORS": "Add collaborators", + "ADD_NEW_EMAIL": "Add a new email", + "shared_with_people_zero": "Share with specific people", + "shared_with_people_one": "Shared with 1 person", + "shared_with_people_other": "Shared with {{count, number}} people", + "participants_zero": "No participants", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Add viewers", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} will not be able to add more photos to the album

They will still be able to remove photos added by them

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} will be able to add photos to the album", + "CONVERT_TO_VIEWER": "Yes, convert to viewer", + "CONVERT_TO_COLLABORATOR": "Yes, convert to collaborator", + "CHANGE_PERMISSION": "Change permission?", + "REMOVE_PARTICIPANT": "Remove?", + "CONFIRM_REMOVE": "Yes, remove", + "MANAGE": "Manage", + "ADDED_AS": "Added as", + "COLLABORATOR_RIGHTS": "Collaborators can add photos and videos to the shared album", + "REMOVE_PARTICIPANT_HEAD": "Remove participant", + "OWNER": "Owner", + "COLLABORATORS": "Collaborators", + "ADD_MORE": "Add more", + "VIEWERS": "Viewers", + "OR_ADD_EXISTING": "Or pick an existing one", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} will be removed from the album

Any photos added by them will also be removed from the album

", + "NOT_FOUND": "404 - not found", + "LINK_EXPIRED": "Link expired", + "LINK_EXPIRED_MESSAGE": "This link has either expired or been disabled!", + "MANAGE_LINK": "Manage link", + "LINK_TOO_MANY_REQUESTS": "Sorry, this album has been viewed on too many devices!", + "FILE_DOWNLOAD": "Allow downloads", + "LINK_PASSWORD_LOCK": "Password lock", + "PUBLIC_COLLECT": "Allow adding photos", + "LINK_DEVICE_LIMIT": "Device limit", + "NO_DEVICE_LIMIT": "None", + "LINK_EXPIRY": "Link expiry", + "NEVER": "Never", + "DISABLE_FILE_DOWNLOAD": "Disable download", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Are you sure that you want to disable the download button for files?

Viewers can still take screenshots or save a copy of your photos using external tools.

", + "MALICIOUS_CONTENT": "Contains malicious content", + "COPYRIGHT": "Infringes on the copyright of someone I am authorized to represent", + "SHARED_USING": "Shared using ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use code {{referralCode}} to get 10 GB free", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Disable password lock", + "DISABLE_PASSWORD_MESSAGE": "Are you sure that you want to disable the password lock?", + "PASSWORD_LOCK": "Password lock", + "LOCK": "Lock", + "DOWNLOAD_UPLOAD_LOGS": "Debug logs", + "UPLOAD_FILES": "File", + "UPLOAD_DIRS": "Folder", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Deduplicate files", + "AUTHENTICATOR_SECTION": "Authenticator", + "NO_DUPLICATES_FOUND": "You've no duplicate files that can be cleared", + "CLUB_BY_CAPTURE_TIME": "Club by capture time", + "FILES": "Files", + "EACH": "Each", + "DEDUPLICATE_BASED_ON_SIZE": "The following files were clubbed based on their sizes, please review and delete items you believe are duplicates", + "STOP_ALL_UPLOADS_MESSAGE": "Are you sure that you want to stop all the uploads in progress?", + "STOP_UPLOADS_HEADER": "Stop uploads?", + "YES_STOP_UPLOADS": "Yes, stop uploads", + "STOP_DOWNLOADS_HEADER": "Stop downloads?", + "YES_STOP_DOWNLOADS": "Yes, stop downloads", + "STOP_ALL_DOWNLOADS_MESSAGE": "Are you sure that you want to stop all the downloads in progress?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "All Albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "All hidden albums", + "HIDDEN_ALBUMS": "Hidden albums", + "HIDDEN_ITEMS": "Hidden items", + "HIDDEN_ITEMS_SECTION_NAME": "Hidden_items", + "ENTER_TWO_FACTOR_OTP": "Enter the 6-digit code from your authenticator app.", + "CREATE_ACCOUNT": "Create account", + "COPIED": "Copied", + "CANVAS_BLOCKED_TITLE": "Unable to generate thumbnail", + "CANVAS_BLOCKED_MESSAGE": "

It looks like your browser has disabled access to canvas, which is necessary to generate thumbnails for your photos

Please enable access to your browser's canvas, or check out our desktop app

", + "WATCH_FOLDERS": "Watch folders", + "UPGRADE_NOW": "Upgrade now", + "RENEW_NOW": "Renew now", + "STORAGE": "Storage", + "USED": "used", + "YOU": "You", + "FAMILY": "Family", + "FREE": "free", + "OF": "of", + "WATCHED_FOLDERS": "Watched folders", + "NO_FOLDERS_ADDED": "No folders added yet!", + "FOLDERS_AUTOMATICALLY_MONITORED": "The folders you add here will monitored to automatically", + "UPLOAD_NEW_FILES_TO_ENTE": "Upload new files to ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remove deleted files from ente", + "ADD_FOLDER": "Add folder", + "STOP_WATCHING": "Stop watching", + "STOP_WATCHING_FOLDER": "Stop watching folder?", + "STOP_WATCHING_DIALOG_MESSAGE": "Your existing files will not be deleted, but ente will stop automatically updating the linked ente album on changes in this folder.", + "YES_STOP": "Yes, stop", + "MONTH_SHORT": "mo", + "YEAR": "year", + "FAMILY_PLAN": "Family plan", + "DOWNLOAD_LOGS": "Download logs", + "DOWNLOAD_LOGS_MESSAGE": "

This will download debug logs, which you can email to us to help debug your issue.

Please note that file names will be included to help track issues with specific files.

", + "CHANGE_FOLDER": "Change Folder", + "TWO_MONTHS_FREE": "Get 2 months free on yearly plans", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continue with free trial", + "FREE_PLAN_DESCRIPTION": "1 GB for 1 year", + "CURRENT_USAGE": "Current usage is {{usage}}", + "WEAK_DEVICE": "The web browser you're using is not powerful enough to encrypt your photos. Please try to log in to ente on your computer, or download the ente mobile/desktop app.", + "DRAG_AND_DROP_HINT": "Or drag and drop into the ente window", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Your uploaded data will be scheduled for deletion, and your account will be permanently deleted.

This action is not reversible.", + "AUTHENTICATE": "Authenticate", + "UPLOADED_TO_SINGLE_COLLECTION": "Uploaded to single collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Uploaded to separate collections", + "NEVERMIND": "Nevermind", + "UPDATE_AVAILABLE": "Update available", + "UPDATE_INSTALLABLE_MESSAGE": "A new version of ente is ready to be installed.", + "INSTALL_NOW": "Install now", + "INSTALL_ON_NEXT_LAUNCH": "Install on next launch", + "UPDATE_AVAILABLE_MESSAGE": "A new version of ente has been released, but it cannot be automatically downloaded and installed.", + "DOWNLOAD_AND_INSTALL": "Download and install", + "IGNORE_THIS_VERSION": "Ignore this version", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "NAME_PLACEHOLDER": "Name...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Cannot create albums from file/folder mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

You have dragged and dropped a mixture of files and folders.

Please provide either only files, or only folders when selecting option to create separate albums

", + "CHOSE_THEME": "Choose theme", + "ML_SEARCH": "Face recognition", + "ENABLE_ML_SEARCH_DESCRIPTION": "

This will enable on-device machine learning and face search which will start analyzing your uploaded photos locally.

For the first run after login or enabling this feature, it will download all images on local device to analyze them. So please only enable this if you are ok with bandwidth and local processing of all images in your photo library.

If this is the first time you're enabling this, we'll also ask your permission to process face data.

", + "ML_MORE_DETAILS": "More details", + "ENABLE_FACE_SEARCH": "Enable face recognition", + "ENABLE_FACE_SEARCH_TITLE": "Enable face recognition?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face recognition, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Pause recognition", + "DISABLE_FACE_SEARCH": "Disable face recognition", + "DISABLE_FACE_SEARCH_TITLE": "Disable face recognition?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente will stop processing face geometry.

You can reenable face recognition again if you wish, so this operation is safe.

", + "ADVANCED": "Advanced", + "FACE_SEARCH_CONFIRMATION": "I understand, and wish to allow ente to process face geometry", + "LABS": "Labs", + "YOURS": "yours", + "PASSPHRASE_STRENGTH_WEAK": "Password strength: Weak", + "PASSPHRASE_STRENGTH_MODERATE": "Password strength: Moderate", + "PASSPHRASE_STRENGTH_STRONG": "Password strength: Strong", + "PREFERENCES": "Preferences", + "LANGUAGE": "Language", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Invalid export directory", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

The export directory you have selected does not exist.

Please select a valid directory.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Subscription verification failed", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "after an hour", + "DAY": "after a day", + "WEEK": "after a week", + "MONTH": "after a month", + "YEAR": "after a year" + }, + "COPY_LINK": "Copy link", + "DONE": "Done", + "LINK_SHARE_TITLE": "Or share a link", + "REMOVE_LINK": "Remove link", + "CREATE_PUBLIC_SHARING": "Create public link", + "PUBLIC_LINK_CREATED": "Public link created", + "PUBLIC_LINK_ENABLED": "Public link enabled", + "COLLECT_PHOTOS": "Collect photos", + "PUBLIC_COLLECT_SUBTEXT": "Allow people with the link to also add photos to the shared album.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} items synced", + "MIGRATING_EXPORT": "Preparing...", + "RENAMING_COLLECTION_FOLDERS": "Renaming album folders...", + "TRASHING_DELETED_FILES": "Trashing deleted files...", + "TRASHING_DELETED_COLLECTIONS": "Trashing deleted albums...", + "EXPORT_NOTIFICATION": { + "START": "Export started", + "IN_PROGRESS": "Export already in progress", + "FINISH": "Export finished", + "UP_TO_DATE": "No new files to export" + }, + "CONTINUOUS_EXPORT": "Sync continuously", + "TOTAL_ITEMS": "Total items", + "PENDING_ITEMS": "Pending items", + "EXPORT_STARTING": "Export starting...", + "DELETE_ACCOUNT_REASON_LABEL": "What is the main reason you are deleting your account?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Select a reason", + "DELETE_REASON": { + "MISSING_FEATURE": "It's missing a key feature that I need", + "BROKEN_BEHAVIOR": "The app or a certain feature does not behave as I think it should", + "FOUND_ANOTHER_SERVICE": "I found another service that I like better", + "NOT_LISTED": "My reason isn't listed" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We are sorry to see you go. Please explain why you are leaving to help us improve.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Yes, I want to permanently delete this account and all its data", + "CONFIRM_DELETE_ACCOUNT": "Confirm Account Deletion", + "FEEDBACK_REQUIRED": "Kindly help us with this information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "What does the other service do better?", + "RECOVER_TWO_FACTOR": "Recover two-factor", + "at": "at", + "AUTH_NEXT": "next", + "AUTH_DOWNLOAD_MOBILE_APP": "Download our mobile app to manage your secrets", + "HIDDEN": "Hidden", + "HIDE": "Hide", + "UNHIDE": "Unhide", + "UNHIDE_TO_COLLECTION": "Unhide to album", + "SORT_BY": "Sort by", + "NEWEST_FIRST": "Newest first", + "OLDEST_FIRST": "Oldest first", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "This file could not be previewed. Click here to download the original.", + "SELECT_COLLECTION": "Select album", + "PIN_ALBUM": "Pin album", + "UNPIN_ALBUM": "Unpin album", + "DOWNLOAD_COMPLETE": "Download complete", + "DOWNLOADING_COLLECTION": "Downloading {{name}}", + "DOWNLOAD_FAILED": "Download failed", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} files", + "CRASH_REPORTING": "Crash reporting", + "CHRISTMAS": "Christmas", + "CHRISTMAS_EVE": "Christmas Eve", + "NEW_YEAR": "New Year", + "NEW_YEAR_EVE": "New Year's Eve", + "IMAGE": "Image", + "VIDEO": "Video", + "LIVE_PHOTO": "Live Photo", + "CONVERT": "Convert", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Are you sure you want to close the editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download your edited image or save a copy to ente to persist your changes.", + "BRIGHTNESS": "Brightness", + "CONTRAST": "Contrast", + "SATURATION": "Saturation", + "BLUR": "Blur", + "INVERT_COLORS": "Invert Colors", + "ASPECT_RATIO": "Aspect Ratio", + "SQUARE": "Square", + "ROTATE_LEFT": "Rotate Left", + "ROTATE_RIGHT": "Rotate Right", + "FLIP_VERTICALLY": "Flip Vertically", + "FLIP_HORIZONTALLY": "Flip Horizontally", + "DOWNLOAD_EDITED": "Download Edited", + "SAVE_A_COPY_TO_ENTE": "Save a copy to ente", + "RESTORE_ORIGINAL": "Restore Original", + "TRANSFORM": "Transform", + "COLORS": "Colors", + "FLIP": "Flip", + "ROTATION": "Rotation", + "RESET": "Reset", + "PHOTO_EDITOR": "Photo Editor", + "FASTER_UPLOAD": "Faster uploads", + "FASTER_UPLOAD_DESCRIPTION": "Route uploads through nearby servers", + "MAGIC_SEARCH_STATUS": "Magic Search Status", + "INDEXED_ITEMS": "Indexed items", + "CAST_ALBUM_TO_TV": "Play album on TV", + "ENTER_CAST_PIN_CODE": "Enter the code you see on the TV below to pair this device.", + "PAIR_DEVICE_TO_TV": "Pair devices", + "TV_NOT_FOUND": "TV not found. Did you enter the PIN correctly?", + "AUTO_CAST_PAIR": "Auto Pair", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "Auto Pair requires connecting to Google servers and only works with Chromecast supported devices. Google will not receive sensitive data, such as your photos.", + "PAIR_WITH_PIN": "Pair with PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Choose a cast-compatible device from the browser popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Pair with PIN works for any large screen device you want to play your album on.", + "VISIT_CAST_ENTE_IO": "Visit cast.ente.io on the device you want to pair.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair failed. Please try again.", + "CACHE_DIRECTORY": "Cache folder", + "PASSKEYS": "Passkeys", + "FREEHAND": "Freehand", + "APPLY_CROP": "Apply Crop", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "At least one transformation or color adjustment must be performed before saving." +} diff --git a/web/apps/photos/public/locales/es-ES/translation.json b/web/apps/photos/public/locales/es-ES/translation.json new file mode 100644 index 000000000..4adb22ee5 --- /dev/null +++ b/web/apps/photos/public/locales/es-ES/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Copias de seguridad privadas
para su recuerdos
", + "HERO_SLIDE_1": "Encriptado de extremo a extremo por defecto", + "HERO_SLIDE_2_TITLE": "
Almacenado de forma segura
en un refugio de llenos
", + "HERO_SLIDE_2": "Diseñado para superar", + "HERO_SLIDE_3_TITLE": "
Disponible
en todas partes
", + "HERO_SLIDE_3": "Android, iOS, web, computadora", + "LOGIN": "Conectar", + "SIGN_UP": "Registro", + "NEW_USER": "Nuevo en ente", + "EXISTING_USER": "Usuario existente", + "ENTER_NAME": "Introducir nombre", + "PUBLIC_UPLOADER_NAME_MESSAGE": "¡Añade un nombre para que tus amigos sepan a quién dar las gracias por estas fotos geniales!", + "ENTER_EMAIL": "Introducir email", + "EMAIL_ERROR": "Introduce un email válido", + "REQUIRED": "Requerido", + "EMAIL_SENT": "Código de verificación enviado al {{email}}", + "CHECK_INBOX": "Revisa tu bandeja de entrada (y spam) para completar la verificación", + "ENTER_OTT": "Código de verificación", + "RESEND_MAIL": "Reenviar el código", + "VERIFY": "Verificar", + "UNKNOWN_ERROR": "Se produjo un error. Por favor, inténtalo de nuevo", + "INVALID_CODE": "Código de verificación inválido", + "EXPIRED_CODE": "Código de verificación expirado", + "SENDING": "Enviando...", + "SENT": "Enviado!", + "PASSWORD": "Contraseña", + "LINK_PASSWORD": "Introducir contraseña para desbloquear el álbum", + "RETURN_PASSPHRASE_HINT": "Contraseña", + "SET_PASSPHRASE": "Definir contraseña", + "VERIFY_PASSPHRASE": "Ingresar", + "INCORRECT_PASSPHRASE": "Contraseña incorrecta", + "ENTER_ENC_PASSPHRASE": "Introducir una contraseña que podamos usar para cifrar sus datos", + "PASSPHRASE_DISCLAIMER": "No guardamos su contraseña, así que si la olvida, no podremos ayudarte a recuperar tus datos sin una clave de recuperación.", + "WELCOME_TO_ENTE_HEADING": "Bienvenido a ", + "WELCOME_TO_ENTE_SUBHEADING": "Almacenamiento y compartición de fotos cifradas de extremo a extremo", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Donde vivan su mejores fotos", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generando claves de encriptación...", + "PASSPHRASE_HINT": "Contraseña", + "CONFIRM_PASSPHRASE": "Confirmar contraseña", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "Las contraseñas no coinciden", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "Esta es una característica del navegador destinada a los desarrolladores. Por favor, no copie y pegue código sin verificar aquí.", + "CREATE_COLLECTION": "Nuevo álbum", + "ENTER_ALBUM_NAME": "Nombre del álbum", + "CLOSE_OPTION": "Cerrar (Esc)", + "ENTER_FILE_NAME": "Nombre del archivo", + "CLOSE": "Cerrar", + "NO": "No", + "NOTHING_HERE": "Nada para ver aquí aún 👀", + "UPLOAD": "Cargar", + "IMPORT": "Importar", + "ADD_PHOTOS": "Añadir fotos", + "ADD_MORE_PHOTOS": "Añadir más fotos", + "add_photos_one": "Añadir 1 foto", + "add_photos_other": "Añadir {{count}} fotos", + "SELECT_PHOTOS": "Seleccionar fotos", + "FILE_UPLOAD": "Subir archivo", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparando la subida", + "1": "Leyendo archivos de metadatos de google", + "2": "{{uploadCounter.finished}} / {{uploadCounter.total}} archivos metadatos extraídos", + "3": "{{uploadCounter.finished}} / {{uploadCounter.total}} archivos metadatos extraídos", + "4": "Cancelar subidas restantes", + "5": "Copia de seguridad completa" + }, + "FILE_NOT_UPLOADED_LIST": "Los siguientes archivos no se han subido", + "SUBSCRIPTION_EXPIRED": "Suscripción caducada", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Tu suscripción ha caducado, por favor renuévala", + "STORAGE_QUOTA_EXCEEDED": "Límite de datos excedido", + "INITIAL_LOAD_DELAY_WARNING": "La primera carga puede tomar algún tiempo", + "USER_DOES_NOT_EXIST": "Lo sentimos, no se pudo encontrar un usuario con ese email", + "NO_ACCOUNT": "No tienes una cuenta", + "ACCOUNT_EXISTS": "Ya tienes una cuenta", + "CREATE": "Crear", + "DOWNLOAD": "Descargar", + "DOWNLOAD_OPTION": "Descargar (D)", + "DOWNLOAD_FAVORITES": "Descargar favoritos", + "DOWNLOAD_UNCATEGORIZED": "Descargar no categorizados", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "Copiar como PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Alternar pantalla completa (F)", + "ZOOM_IN_OUT": "Acercar/alejar", + "PREVIOUS": "Anterior (←)", + "NEXT": "Siguiente (→)", + "TITLE_PHOTOS": "ente Fotos", + "TITLE_ALBUMS": "ente Fotos", + "TITLE_AUTH": "ente Auth", + "UPLOAD_FIRST_PHOTO": "Carga tu primer archivo", + "IMPORT_YOUR_FOLDERS": "Importar tus carpetas", + "UPLOAD_DROPZONE_MESSAGE": "Soltar para respaldar tus archivos", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Soltar para añadir carpeta vigilada", + "TRASH_FILES_TITLE": "Eliminar archivos?", + "TRASH_FILE_TITLE": "Eliminar archivo?", + "DELETE_FILES_TITLE": "Eliminar inmediatamente?", + "DELETE_FILES_MESSAGE": "Los archivos seleccionados serán eliminados permanentemente de tu cuenta ente.", + "DELETE": "Eliminar", + "DELETE_OPTION": "Eliminar (DEL)", + "FAVORITE_OPTION": "Favorito (L)", + "UNFAVORITE_OPTION": "No favorito (L)", + "MULTI_FOLDER_UPLOAD": "Múltiples carpetas detectadas", + "UPLOAD_STRATEGY_CHOICE": "Quieres subirlos a", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Un solo álbum", + "OR": "o", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Separar álbumes", + "SESSION_EXPIRED_MESSAGE": "Tu sesión ha caducado. Inicia sesión de nuevo para continuar", + "SESSION_EXPIRED": "Sesión caducado", + "PASSWORD_GENERATION_FAILED": "Su navegador no ha podido generar una clave fuerte que cumpla con los estándares de cifrado de la entidad, por favor intente usar la aplicación móvil u otro navegador", + "CHANGE_PASSWORD": "Cambiar contraseña", + "GO_BACK": "Retroceder", + "RECOVERY_KEY": "Clave de recuperación", + "SAVE_LATER": "Hacer más tarde", + "SAVE": "Guardar Clave", + "RECOVERY_KEY_DESCRIPTION": "Si olvida su contraseña, la única forma de recuperar sus datos es con esta clave.", + "RECOVER_KEY_GENERATION_FAILED": "El código de recuperación no pudo ser generado, por favor inténtalo de nuevo", + "KEY_NOT_STORED_DISCLAIMER": "No almacenamos esta clave, así que por favor guarde esto en un lugar seguro", + "FORGOT_PASSWORD": "Contraseña olvidada", + "RECOVER_ACCOUNT": "Recuperar cuenta", + "RECOVERY_KEY_HINT": "Clave de recuperación", + "RECOVER": "Recuperar", + "NO_RECOVERY_KEY": "No hay clave de recuperación?", + "INCORRECT_RECOVERY_KEY": "Clave de recuperación incorrecta", + "SORRY": "Lo sentimos", + "NO_RECOVERY_KEY_MESSAGE": "Debido a la naturaleza de nuestro protocolo de cifrado de extremo a extremo, sus datos no pueden ser descifrados sin su contraseña o clave de recuperación", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Por favor, envíe un email a {{emailID}} desde su dirección de correo electrónico registrada", + "CONTACT_SUPPORT": "Contacta con soporte", + "REQUEST_FEATURE": "Solicitar una función", + "SUPPORT": "Soporte", + "CONFIRM": "Confirmar", + "CANCEL": "Cancelar", + "LOGOUT": "Cerrar sesión", + "DELETE_ACCOUNT": "Eliminar cuenta", + "DELETE_ACCOUNT_MESSAGE": "

Por favor, envíe un email a {{emailID}} desde su dirección de correo electrónico registrada

Su solicitud será procesada en 72 horas.

", + "LOGOUT_MESSAGE": "Seguro que quiere cerrar la sesión?", + "CHANGE_EMAIL": "Cambiar email", + "OK": "OK", + "SUCCESS": "Completado", + "ERROR": "Error", + "MESSAGE": "Mensaje", + "INSTALL_MOBILE_APP": "Instala nuestra aplicación Android o iOS para hacer una copia de seguridad automática de todas usted fotos", + "DOWNLOAD_APP_MESSAGE": "Lo sentimos, esta operación sólo es compatible con nuestra aplicación de computadora", + "DOWNLOAD_APP": "Descargar aplicación de computadora", + "EXPORT": "Exportar datos", + "SUBSCRIPTION": "Suscripción", + "SUBSCRIBE": "Suscribir", + "MANAGEMENT_PORTAL": "Gestionar métodos de pago", + "MANAGE_FAMILY_PORTAL": "Administrar familia", + "LEAVE_FAMILY_PLAN": "Dejar plan familiar", + "LEAVE": "Dejar", + "LEAVE_FAMILY_CONFIRM": "Está seguro de que desea abandonar el plan familiar?", + "CHOOSE_PLAN": "Elije tu plan", + "MANAGE_PLAN": "Administra tu suscripción", + "ACTIVE": "Activo", + "OFFLINE_MSG": "Estás desconectado, se están mostrando recuerdos en caché", + "FREE_SUBSCRIPTION_INFO": "Estás en el plan gratis que expira el {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Estás en un plan familiar administrado por", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Se renueva en {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Termina el {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Tu suscripción será cancelada el {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Ha excedido su cuota de almacenamiento, por favor actualice", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Hemos recibido tu pago

¡Tu suscripción es válida hasta {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Tu compra ha sido cancelada, por favor inténtalo de nuevo si quieres suscribirte", + "SUBSCRIPTION_PURCHASE_FAILED": "Compra de suscripción fallida, por favor inténtalo de nuevo", + "SUBSCRIPTION_UPDATE_FAILED": "Suscripción actualizada falló, inténtelo de nuevo", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Lo sentimos, el pago falló cuando intentamos cargar a su tarjeta, por favor actualice su método de pago y vuelva a intentarlo", + "STRIPE_AUTHENTICATION_FAILED": "No podemos autenticar tu método de pago. Por favor, elige un método de pago diferente e inténtalo de nuevo", + "UPDATE_PAYMENT_METHOD": "Actualizar medio de pago", + "MONTHLY": "Mensual", + "YEARLY": "Anual", + "UPDATE_SUBSCRIPTION_MESSAGE": "Seguro de que desea cambiar su plan?", + "UPDATE_SUBSCRIPTION": "Cambiar de plan", + "CANCEL_SUBSCRIPTION": "Cancelar suscripción", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Todos tus datos serán eliminados de nuestros servidores al final de este periodo de facturación.

¿Está seguro de que desea cancelar su suscripción?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "No se pudo cancelar la suscripción", + "SUBSCRIPTION_CANCEL_SUCCESS": "Suscripción cancelada correctamente", + "REACTIVATE_SUBSCRIPTION": "Reactivar la suscripción", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Una vez reactivado, serás facturado el {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Suscripción activada correctamente ", + "SUBSCRIPTION_ACTIVATE_FAILED": "No se pudo reactivar las renovaciones de suscripción", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Gracias", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancelar suscripción a móviles", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Por favor, cancele su suscripción de la aplicación móvil para activar una suscripción aquí", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Por favor, contáctenos en {{emailID}} para gestionar su suscripción", + "RENAME": "Renombrar", + "RENAME_FILE": "Renombrar archivo", + "RENAME_COLLECTION": "Renombrar álbum", + "DELETE_COLLECTION_TITLE": "Eliminar álbum?", + "DELETE_COLLECTION": "Eliminar álbum", + "DELETE_COLLECTION_MESSAGE": "También eliminar las fotos (y los vídeos) presentes en este álbum de todos álbumes de los que forman parte?", + "DELETE_PHOTOS": "Eliminar fotos", + "KEEP_PHOTOS": "Conservar fotos", + "SHARE": "Compartir", + "SHARE_COLLECTION": "Compartir álbum", + "SHAREES": "Compartido con", + "SHARE_WITH_SELF": "Uy, no puedes compartir contigo mismo", + "ALREADY_SHARED": "Uy, ya estás compartiendo esto con {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Compartir álbum no permitido", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Compartir está desactivado para cuentas gratis", + "DOWNLOAD_COLLECTION": "Descargar álbum", + "DOWNLOAD_COLLECTION_MESSAGE": "

¿Está seguro de que desea descargar el álbum completo?

Todos los archivos se pondrán en cola para su descarga secuencialmente

", + "CREATE_ALBUM_FAILED": "Error al crear el álbum, inténtalo de nuevo", + "SEARCH": "Buscar", + "SEARCH_RESULTS": "Buscar resultados", + "NO_RESULTS": "No se han encontrado resultados", + "SEARCH_HINT": "Buscar álbumes, fechas...", + "SEARCH_TYPE": { + "COLLECTION": "Álbum", + "LOCATION": "Localización", + "CITY": "", + "DATE": "Fecha", + "FILE_NAME": "Nombre del archivo", + "THING": "Contenido", + "FILE_CAPTION": "Descripción", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "No hay recuerdos", + "photos_count_one": "1 recuerdo", + "photos_count_other": "{{count}} recuerdos", + "TERMS_AND_CONDITIONS": "Acepto los términos y política de privacidad", + "ADD_TO_COLLECTION": "Añadir al álbum", + "SELECTED": "seleccionado", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Este vídeo no se puede reproducir en tu navegador", + "PEOPLE": "Personajes", + "INDEXING_SCHEDULED": "el indexado está programado...", + "ANALYZING_PHOTOS": "analizando nuevas fotos {{indexStatus.nSyncedFiles}} de {{indexStatus.nTotalFiles}} hecho)...", + "INDEXING_PEOPLE": "indexando personas en {{indexStatus.nSyncedFiles}} fotos... ", + "INDEXING_DONE": "fotos {{indexStatus.nSyncedFiles}} indexadas", + "UNIDENTIFIED_FACES": "caras no identificadas", + "OBJECTS": "objetos", + "TEXT": "texto", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "Nombre del archivo", + "CAPTION_PLACEHOLDER": "Añadir una descripción", + "LOCATION": "Localización", + "SHOW_ON_MAP": "Ver en OpenStreetMap", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "Detalles", + "VIEW_EXIF": "Ver todos los datos de EXIF", + "NO_EXIF": "No hay datos EXIF", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Dos factores", + "TWO_FACTOR_AUTHENTICATION": "Autenticación de dos factores", + "TWO_FACTOR_QR_INSTRUCTION": "Escanea el código QR de abajo con tu aplicación de autenticación favorita", + "ENTER_CODE_MANUALLY": "Ingrese el código manualmente", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Por favor, introduce este código en tu aplicación de autenticación favorita", + "SCAN_QR_CODE": "Escanear código QR en su lugar", + "ENABLE_TWO_FACTOR": "Activar dos factores", + "ENABLE": "Activar", + "LOST_DEVICE": "Perdido el dispositivo de doble factor", + "INCORRECT_CODE": "Código incorrecto", + "TWO_FACTOR_INFO": "Añade una capa adicional de seguridad al requerir más de tu email y contraseña para iniciar sesión en tu cuenta", + "DISABLE_TWO_FACTOR_LABEL": "Deshabilitar la autenticación de dos factores", + "UPDATE_TWO_FACTOR_LABEL": "Actualice su dispositivo de autenticación", + "DISABLE": "Desactivar", + "RECONFIGURE": "Reconfigurar", + "UPDATE_TWO_FACTOR": "Actualizar doble factor", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuar adelante anulará los autenticadores previamente configurados", + "UPDATE": "Actualizar", + "DISABLE_TWO_FACTOR": "Desactivar doble factor", + "DISABLE_TWO_FACTOR_MESSAGE": "¿Estás seguro de que desea deshabilitar la autenticación de doble factor?", + "TWO_FACTOR_DISABLE_FAILED": "Error al desactivar dos factores, inténtalo de nuevo", + "EXPORT_DATA": "Exportar datos", + "SELECT_FOLDER": "Seleccionar carpeta", + "DESTINATION": "Destinación", + "START": "Inicio", + "LAST_EXPORT_TIME": "Fecha de la última exportación", + "EXPORT_AGAIN": "Resinc", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Almacenamiento local inaccesible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Su navegador o un addon está bloqueando a ente de guardar datos en almacenamiento local. Por favor, intente cargar esta página después de cambiar su modo de navegación.", + "SEND_OTT": "Enviar OTP", + "EMAIl_ALREADY_OWNED": "Email ya tomado", + "ETAGS_BLOCKED": "

No hemos podido subir los siguientes archivos debido a la configuración de tu navegador.

Por favor, deshabilite cualquier complemento que pueda estar impidiendo que ente utilice eTags para subir archivos grandes, o utilice nuestra aplicación de escritorio para una experiencia de importación más fiable.

", + "SKIPPED_VIDEOS_INFO": "

Actualmente no podemos añadir vídeos a través de enlaces públicos.

Para compartir vídeos, por favor regístrate en ente y comparte con los destinatarios a través de su correo electrónico.

", + "LIVE_PHOTOS_DETECTED": "Los archivos de foto y vídeo de tus fotos en vivo se han fusionado en un solo archivo", + "RETRY_FAILED": "Reintentar subidas fallidas", + "FAILED_UPLOADS": "Subidas fallidas ", + "SKIPPED_FILES": "Subidas ignoradas", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Generación de miniaturas fallida", + "UNSUPPORTED_FILES": "Archivos no soportados", + "SUCCESSFUL_UPLOADS": "Subidas exitosas", + "SKIPPED_INFO": "Se han omitido ya que hay archivos con nombres coincidentes en el mismo álbum", + "UNSUPPORTED_INFO": "ente no soporta estos formatos de archivo aún", + "BLOCKED_UPLOADS": "Subidas bloqueadas", + "SKIPPED_VIDEOS": "Vídeos saltados", + "INPROGRESS_METADATA_EXTRACTION": "En proceso", + "INPROGRESS_UPLOADS": "Subidas en progreso", + "TOO_LARGE_UPLOADS": "Archivos grandes", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Espacio insuficiente", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Estos archivos no se han subido porque exceden el límite de tamaño máximo para tu plan de almacenamiento", + "TOO_LARGE_INFO": "Estos archivos no se han subido porque exceden nuestro límite máximo de tamaño de archivo", + "THUMBNAIL_GENERATION_FAILED_INFO": "Estos archivos fueron cargados, pero por desgracia no pudimos generar las miniaturas para ellos.", + "UPLOAD_TO_COLLECTION": "Subir al álbum", + "UNCATEGORIZED": "No clasificado", + "ARCHIVE": "Archivo", + "FAVORITES": "Favoritos", + "ARCHIVE_COLLECTION": "Archivo álbum", + "ARCHIVE_SECTION_NAME": "Archivo", + "ALL_SECTION_NAME": "Todo", + "MOVE_TO_COLLECTION": "Mover al álbum", + "UNARCHIVE": "Desarchivar", + "UNARCHIVE_COLLECTION": "Desarchivar álbum", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "Mover", + "ADD": "Añadir", + "REMOVE": "Eliminar", + "YES_REMOVE": "Sí, eliminar", + "REMOVE_FROM_COLLECTION": "Eliminar del álbum", + "TRASH": "Papelera", + "MOVE_TO_TRASH": "Mover a la papelera", + "TRASH_FILES_MESSAGE": "Los archivos seleccionados serán eliminados de todos los álbumes y movidos a la papelera.", + "TRASH_FILE_MESSAGE": "El archivo será eliminado de todos los álbumes y movido a la papelera.", + "DELETE_PERMANENTLY": "Eliminar para siempre", + "RESTORE": "Restaurar", + "RESTORE_TO_COLLECTION": "Restaurar al álbum", + "EMPTY_TRASH": "Vaciar papelera", + "EMPTY_TRASH_TITLE": "Vaciar papelera?", + "EMPTY_TRASH_MESSAGE": "Estos archivos serán eliminados permanentemente de su cuenta ente.", + "LEAVE_SHARED_ALBUM": "Sí, dejar", + "LEAVE_ALBUM": "Dejar álbum", + "LEAVE_SHARED_ALBUM_TITLE": "¿Dejar álbum compartido?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Dejará el álbum, y dejará de ser visible para usted.", + "NOT_FILE_OWNER": "No puedes eliminar archivos de un álbum compartido", + "CONFIRM_SELF_REMOVE_MESSAGE": "Los elementos seleccionados serán eliminados de este álbum. Los elementos que estén sólo en este álbum serán movidos a Sin categorizar.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Algunos de los elementos que estás eliminando fueron añadidos por otras personas, y perderás el acceso a ellos.", + "SORT_BY_CREATION_TIME_ASCENDING": "Antiguo", + "SORT_BY_UPDATION_TIME_DESCENDING": "Última actualización", + "SORT_BY_NAME": "Nombre", + "COMPRESS_THUMBNAILS": "Comprimir las miniaturas", + "THUMBNAIL_REPLACED": "Miniaturas comprimidas", + "FIX_THUMBNAIL": "Comprimir", + "FIX_THUMBNAIL_LATER": "Comprimir más tarde", + "REPLACE_THUMBNAIL_NOT_STARTED": "Algunas de tus miniaturas de vídeos pueden ser comprimidas para ahorrar espacio. ¿Te gustaría que ente las comprima?", + "REPLACE_THUMBNAIL_COMPLETED": "Todas las miniaturas se comprimieron con éxito", + "REPLACE_THUMBNAIL_NOOP": "No tienes miniaturas que se puedan comprimir más", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "No se pudieron comprimir algunas de tus miniaturas, por favor inténtalo de nuevo", + "FIX_CREATION_TIME": "Fijar hora", + "FIX_CREATION_TIME_IN_PROGRESS": "Fijar hora", + "CREATION_TIME_UPDATED": "Hora del archivo actualizada", + "UPDATE_CREATION_TIME_NOT_STARTED": "Seleccione la cartera que desea utilizar", + "UPDATE_CREATION_TIME_COMPLETED": "Todos los archivos se han actualizado correctamente", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "Fallo en la hora del archivo para algunos archivos, por favor inténtelo de nuevo", + "CAPTION_CHARACTER_LIMIT": "Máximo 5000 caracteres", + "DATE_TIME_ORIGINAL": "EXIF: Fecha original", + "DATE_TIME_DIGITIZED": "EXIF: Fecha Digitalizado", + "METADATA_DATE": "", + "CUSTOM_TIME": "Hora personalizada", + "REOPEN_PLAN_SELECTOR_MODAL": "Reabrir planes", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Error al abrir los planes", + "INSTALL": "Instalar", + "SHARING_DETAILS": "Compartir detalles", + "MODIFY_SHARING": "Modificar compartir", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "PARTICIPANTS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "Propietario", + "COLLABORATORS": "Colaboradores", + "ADD_MORE": "Añadir más", + "VIEWERS": "", + "OR_ADD_EXISTING": "O elige uno existente", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "404 - No Encontrado", + "LINK_EXPIRED": "Enlace expirado", + "LINK_EXPIRED_MESSAGE": "Este enlace ha caducado o ha sido desactivado!", + "MANAGE_LINK": "Administrar enlace", + "LINK_TOO_MANY_REQUESTS": "Este álbum es demasiado popular para que podamos manejarlo!", + "FILE_DOWNLOAD": "Permitir descargas", + "LINK_PASSWORD_LOCK": "Contraseña bloqueada", + "PUBLIC_COLLECT": "Permitir añadir fotos", + "LINK_DEVICE_LIMIT": "Límites del dispositivo", + "NO_DEVICE_LIMIT": "Ninguno", + "LINK_EXPIRY": "Enlace vencio", + "NEVER": "Nunca", + "DISABLE_FILE_DOWNLOAD": "Deshabilitar descarga", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

¿Está seguro que desea desactivar el botón de descarga de archivos?

Los visualizadores todavía pueden tomar capturas de pantalla o guardar una copia de sus fotos usando herramientas externas.

", + "MALICIOUS_CONTENT": "Contiene contenido malicioso", + "COPYRIGHT": "Infracciones sobre los derechos de autor de alguien que estoy autorizado a representar", + "SHARED_USING": "Compartido usando ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Usa el código {{referralCode}} para obtener 10 GB gratis", + "LIVE": "VIVO", + "DISABLE_PASSWORD": "Desactivar contraseña", + "DISABLE_PASSWORD_MESSAGE": "Seguro que quieres cambiar la contrasena?", + "PASSWORD_LOCK": "Contraseña bloqueada", + "LOCK": "Bloquear", + "DOWNLOAD_UPLOAD_LOGS": "Logs de depuración", + "UPLOAD_FILES": "Archivo", + "UPLOAD_DIRS": "Carpeta", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "Deduplicar archivos", + "AUTHENTICATOR_SECTION": "Autenticación", + "NO_DUPLICATES_FOUND": "No tienes archivos duplicados que puedan ser borrados", + "CLUB_BY_CAPTURE_TIME": "Club por tiempo de captura", + "FILES": "Archivos", + "EACH": "Cada", + "DEDUPLICATE_BASED_ON_SIZE": "Los siguientes archivos fueron organizados en base a sus tamaños, por favor revise y elimine elementos que cree que son duplicados", + "STOP_ALL_UPLOADS_MESSAGE": "¿Está seguro que desea detener todas las subidas en curso?", + "STOP_UPLOADS_HEADER": "Detener las subidas?", + "YES_STOP_UPLOADS": "Sí, detener las subidas", + "STOP_DOWNLOADS_HEADER": "¿Detener las descargas?", + "YES_STOP_DOWNLOADS": "Sí, detener las descargas", + "STOP_ALL_DOWNLOADS_MESSAGE": "¿Estás seguro de que quieres detener todas las descargas en curso?", + "albums_one": "1 álbum", + "albums_other": "{{count}} álbumes", + "ALL_ALBUMS": "Todos los álbumes", + "ALBUMS": "Álbumes", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "HIDDEN_ITEMS_SECTION_NAME": "", + "ENTER_TWO_FACTOR_OTP": "Ingrese el código de seis dígitos de su aplicación de autenticación a continuación.", + "CREATE_ACCOUNT": "Crear cuenta", + "COPIED": "Copiado", + "CANVAS_BLOCKED_TITLE": "No se puede generar la miniatura", + "CANVAS_BLOCKED_MESSAGE": "

Parece que su navegador ha deshabilitado el acceso al lienzo, que es necesario para generar miniaturas para tus fotos

Por favor, activa el acceso al lienzo de tu navegador, o revisa nuestra aplicación de escritorio

", + "WATCH_FOLDERS": "Ver carpetas", + "UPGRADE_NOW": "Mejorar ahora", + "RENEW_NOW": "Renovar ahora", + "STORAGE": "Almacén", + "USED": "usado", + "YOU": "Usted", + "FAMILY": "Familia", + "FREE": "gratis", + "OF": "de", + "WATCHED_FOLDERS": "Ver carpetas", + "NO_FOLDERS_ADDED": "No hay carpetas añadidas!", + "FOLDERS_AUTOMATICALLY_MONITORED": "Las carpetas que añadas aquí serán supervisadas automáticamente", + "UPLOAD_NEW_FILES_TO_ENTE": "Subir nuevos archivos a ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Eliminar archivos borrados de ente", + "ADD_FOLDER": "Añadir carpeta", + "STOP_WATCHING": "Dejar de ver", + "STOP_WATCHING_FOLDER": "Dejar de ver carpeta?", + "STOP_WATCHING_DIALOG_MESSAGE": "Tus archivos existentes no serán eliminados, pero ente dejará de actualizar automáticamente el álbum enlazado en caso de cambios en esta carpeta.", + "YES_STOP": "Sí, detener", + "MONTH_SHORT": "mes", + "YEAR": "año", + "FAMILY_PLAN": "Plan familiar", + "DOWNLOAD_LOGS": "Descargar logs", + "DOWNLOAD_LOGS_MESSAGE": "

Esto descargará los registros de depuración, que puede enviarnos por correo electrónico para ayudarnos a depurar su problema.

Tenga en cuenta que los nombres de los archivos se incluirán para ayudar al seguimiento de problemas con archivos específicos.

", + "CHANGE_FOLDER": "Cambiar carpeta", + "TWO_MONTHS_FREE": "Obtén 2 meses gratis en planes anuales", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continuar con el plan gratuito", + "FREE_PLAN_DESCRIPTION": "1 GB por 1 año", + "CURRENT_USAGE": "El uso actual es {{usage}}", + "WEAK_DEVICE": "El navegador web que está utilizando no es lo suficientemente poderoso para cifrar sus fotos. Por favor, intente iniciar sesión en ente en su computadora, o descargue la aplicación ente para móvil/escritorio.", + "DRAG_AND_DROP_HINT": "O arrastre y suelte en la ventana ente", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Los datos subidos se eliminarán y su cuenta se eliminará de forma permanente.

Esta acción no es reversible.", + "AUTHENTICATE": "Autenticado", + "UPLOADED_TO_SINGLE_COLLECTION": "Subir a una sola colección", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Subir a colecciones separadas", + "NEVERMIND": "No importa", + "UPDATE_AVAILABLE": "Actualizacion disponible", + "UPDATE_INSTALLABLE_MESSAGE": "Una nueva versión de ente está lista para ser instalada.", + "INSTALL_NOW": "Instalar ahora", + "INSTALL_ON_NEXT_LAUNCH": "Instalar en el próximo lanzamiento", + "UPDATE_AVAILABLE_MESSAGE": "Una nueva versión de ente ha sido lanzada, pero no se puede descargar e instalar automáticamente.", + "DOWNLOAD_AND_INSTALL": "Descargar e instalar", + "IGNORE_THIS_VERSION": "Ignorar esta versión", + "TODAY": "Hoy", + "YESTERDAY": "Ayer", + "NAME_PLACEHOLDER": "Nombre...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "No se puede crear álbumes de mezcla de archivos/carpetas", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Has arrastrado y soltado una mezcla de archivos y carpetas.

Por favor proporcione sólo archivos o carpetas cuando seleccione la opción de crear álbumes separados

", + "CHOSE_THEME": "Elegir tema", + "ML_SEARCH": "Buscar ML (beta)", + "ENABLE_ML_SEARCH_DESCRIPTION": "

Esto permitirá el aprendizaje automático en el dispositivo y la búsqueda facial que comenzará a analizar las fotos subidas localmente.

Para la primera ejecución después de iniciar sesión o habilitar esta función, se descargarán todas las imágenes en el dispositivo local para analizarlas. Así que por favor actívalo sólo si dispones ancho de banda y el almacenamiento suficiente para el procesamiento local de todas las imágenes en tu biblioteca de fotos.

Si esta es la primera vez que está habilitando, también le pediremos su permiso para procesar los datos faciales.

", + "ML_MORE_DETAILS": "Más detalles", + "ENABLE_FACE_SEARCH": "Activar búsqueda facial", + "ENABLE_FACE_SEARCH_TITLE": "Activar búsqueda facial?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Si activas la búsqueda facial, ente extraerá la geometría facial de tus fotos. Esto sucederá en su dispositivo y cualquier dato biométrico generado será cifrado de extremo a extremo.

Haga clic aquí para obtener más detalles sobre esta característica en nuestra política de privacidad

", + "DISABLE_BETA": "Desactivar beta", + "DISABLE_FACE_SEARCH": "Desactivar búsqueda facial", + "DISABLE_FACE_SEARCH_TITLE": "Desactivar búsqueda facial?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente dejará de procesar la geometría facial, y también desactivará la búsqueda ML (beta)

Puede volver a activar la búsqueda facial si lo desea, ya que esta operación es segura.

", + "ADVANCED": "Avanzado", + "FACE_SEARCH_CONFIRMATION": "Comprendo y deseo permitir que ente procese la geometría de la cara", + "LABS": "Labs", + "YOURS": "tuyo", + "PASSPHRASE_STRENGTH_WEAK": "Fortaleza de la contraseña: débil", + "PASSPHRASE_STRENGTH_MODERATE": "Fortaleza de contraseña: Moderar", + "PASSPHRASE_STRENGTH_STRONG": "Fortaleza de contraseña: fuerte", + "PREFERENCES": "Preferencias", + "LANGUAGE": "Idioma", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Archivo de exportación inválido", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

El directorio de exportación seleccionado no existe.

Por favor, seleccione un directorio válido.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Falló la verificación de la suscripción", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "después de una hora", + "DAY": "después de un día", + "WEEK": "después de una semana", + "MONTH": "después de un mes", + "YEAR": "después de un año" + }, + "COPY_LINK": "Copiar enlace", + "DONE": "Hecho", + "LINK_SHARE_TITLE": "O comparte un enlace", + "REMOVE_LINK": "Eliminar enlace", + "CREATE_PUBLIC_SHARING": "Crear un enlace público", + "PUBLIC_LINK_CREATED": "Enlace público creado", + "PUBLIC_LINK_ENABLED": "Enlace público activado", + "COLLECT_PHOTOS": "Obtener fotos", + "PUBLIC_COLLECT_SUBTEXT": "Permitir a las personas con el enlace añadir fotos al álbum compartido.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success}} / {{progress.total}} archivos exportados", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "EXPORT_NOTIFICATION": { + "START": "Exportar iniciando", + "IN_PROGRESS": "Exportación ya en curso", + "FINISH": "Exportación finalizada", + "UP_TO_DATE": "No hay nuevos archivos para exportar" + }, + "CONTINUOUS_EXPORT": "Sincronizar continuamente", + "TOTAL_ITEMS": "Total de elementos", + "PENDING_ITEMS": "Elementos pendientes", + "EXPORT_STARTING": "Exportar iniciando...", + "DELETE_ACCOUNT_REASON_LABEL": "¿Cuál es la razón principal por la que eliminas tu cuenta?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Selecciona una razón", + "DELETE_REASON": { + "MISSING_FEATURE": "Falta una característica clave que necesito", + "BROKEN_BEHAVIOR": "La aplicación o una característica determinada no se comporta como creo que debería", + "FOUND_ANOTHER_SERVICE": "He encontrado otro servicio que me gusta más", + "NOT_LISTED": "Mi motivo no se encuentra en la lista" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "Lamentamos que te vayas. Explica por qué te vas para ayudarnos a mejorar.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Sugerencias", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Sí, quiero eliminar permanentemente esta cuenta y todos sus datos", + "CONFIRM_DELETE_ACCOUNT": "Corfirmar borrado de cuenta", + "FEEDBACK_REQUIRED": "Ayúdanos con esta información", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "Qué hace mejor el otro servicio?", + "RECOVER_TWO_FACTOR": "Recuperar dos factores", + "at": "a las", + "AUTH_NEXT": "siguiente", + "AUTH_DOWNLOAD_MOBILE_APP": "Descarga nuestra aplicación móvil para administrar tus secretos", + "HIDDEN": "", + "HIDE": "Ocultar", + "UNHIDE": "Mostrar", + "UNHIDE_TO_COLLECTION": "Hacer visible al álbum", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CRASH_REPORTING": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "Video", + "LIVE_PHOTO": "", + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "Transformar", + "COLORS": "Colores", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/fa-IR/translation.json b/web/apps/photos/public/locales/fa-IR/translation.json new file mode 100644 index 000000000..3817bccd8 --- /dev/null +++ b/web/apps/photos/public/locales/fa-IR/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "", + "HERO_SLIDE_1": "", + "HERO_SLIDE_2_TITLE": "", + "HERO_SLIDE_2": "", + "HERO_SLIDE_3_TITLE": "", + "HERO_SLIDE_3": "", + "LOGIN": "", + "SIGN_UP": "", + "NEW_USER": "", + "EXISTING_USER": "", + "ENTER_NAME": "", + "PUBLIC_UPLOADER_NAME_MESSAGE": "", + "ENTER_EMAIL": "", + "EMAIL_ERROR": "", + "REQUIRED": "", + "EMAIL_SENT": "", + "CHECK_INBOX": "", + "ENTER_OTT": "", + "RESEND_MAIL": "", + "VERIFY": "", + "UNKNOWN_ERROR": "", + "INVALID_CODE": "", + "EXPIRED_CODE": "", + "SENDING": "", + "SENT": "", + "PASSWORD": "", + "LINK_PASSWORD": "", + "RETURN_PASSPHRASE_HINT": "", + "SET_PASSPHRASE": "", + "VERIFY_PASSPHRASE": "", + "INCORRECT_PASSPHRASE": "", + "ENTER_ENC_PASSPHRASE": "", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "به خوش آمدید", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "", + "PASSPHRASE_HINT": "", + "CONFIRM_PASSPHRASE": "", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "", + "CONSOLE_WARNING_STOP": "", + "CONSOLE_WARNING_DESC": "", + "CREATE_COLLECTION": "", + "ENTER_ALBUM_NAME": "", + "CLOSE_OPTION": "", + "ENTER_FILE_NAME": "", + "CLOSE": "", + "NO": "", + "NOTHING_HERE": "", + "UPLOAD": "", + "IMPORT": "", + "ADD_PHOTOS": "", + "ADD_MORE_PHOTOS": "", + "add_photos_one": "", + "add_photos_other": "", + "SELECT_PHOTOS": "", + "FILE_UPLOAD": "", + "UPLOAD_STAGE_MESSAGE": { + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "FILE_NOT_UPLOADED_LIST": "", + "SUBSCRIPTION_EXPIRED": "", + "SUBSCRIPTION_EXPIRED_MESSAGE": "", + "STORAGE_QUOTA_EXCEEDED": "", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "", + "ACCOUNT_EXISTS": "", + "CREATE": "", + "DOWNLOAD": "", + "DOWNLOAD_OPTION": "", + "DOWNLOAD_FAVORITES": "", + "DOWNLOAD_UNCATEGORIZED": "", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "", + "TOGGLE_FULLSCREEN": "", + "ZOOM_IN_OUT": "", + "PREVIOUS": "", + "NEXT": "", + "TITLE_PHOTOS": "", + "TITLE_ALBUMS": "", + "TITLE_AUTH": "", + "UPLOAD_FIRST_PHOTO": "", + "IMPORT_YOUR_FOLDERS": "", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "", + "TRASH_FILE_TITLE": "", + "DELETE_FILES_TITLE": "", + "DELETE_FILES_MESSAGE": "", + "DELETE": "", + "DELETE_OPTION": "", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "", + "OR": "", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "", + "SESSION_EXPIRED": "", + "PASSWORD_GENERATION_FAILED": "", + "CHANGE_PASSWORD": "", + "GO_BACK": "", + "RECOVERY_KEY": "", + "SAVE_LATER": "", + "SAVE": "", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "", + "RECOVER_ACCOUNT": "", + "RECOVERY_KEY_HINT": "", + "RECOVER": "", + "NO_RECOVERY_KEY": "", + "INCORRECT_RECOVERY_KEY": "", + "SORRY": "", + "NO_RECOVERY_KEY_MESSAGE": "", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", + "CONTACT_SUPPORT": "", + "REQUEST_FEATURE": "", + "SUPPORT": "", + "CONFIRM": "", + "CANCEL": "", + "LOGOUT": "", + "DELETE_ACCOUNT": "", + "DELETE_ACCOUNT_MESSAGE": "", + "LOGOUT_MESSAGE": "", + "CHANGE_EMAIL": "", + "OK": "", + "SUCCESS": "", + "ERROR": "", + "MESSAGE": "", + "INSTALL_MOBILE_APP": "", + "DOWNLOAD_APP_MESSAGE": "", + "DOWNLOAD_APP": "", + "EXPORT": "", + "SUBSCRIPTION": "", + "SUBSCRIBE": "", + "MANAGEMENT_PORTAL": "", + "MANAGE_FAMILY_PORTAL": "", + "LEAVE_FAMILY_PLAN": "", + "LEAVE": "", + "LEAVE_FAMILY_CONFIRM": "", + "CHOOSE_PLAN": "", + "MANAGE_PLAN": "", + "ACTIVE": "", + "OFFLINE_MSG": "", + "FREE_SUBSCRIPTION_INFO": "", + "FAMILY_SUBSCRIPTION_INFO": "", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "", + "SUBSCRIPTION_UPDATE_FAILED": "", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "", + "MONTHLY": "", + "YEARLY": "", + "UPDATE_SUBSCRIPTION_MESSAGE": "", + "UPDATE_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "RENAME": "", + "RENAME_FILE": "", + "RENAME_COLLECTION": "", + "DELETE_COLLECTION_TITLE": "", + "DELETE_COLLECTION": "", + "DELETE_COLLECTION_MESSAGE": "", + "DELETE_PHOTOS": "", + "KEEP_PHOTOS": "", + "SHARE": "", + "SHARE_COLLECTION": "", + "SHAREES": "", + "SHARE_WITH_SELF": "", + "ALREADY_SHARED": "", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "DOWNLOAD_COLLECTION": "", + "DOWNLOAD_COLLECTION_MESSAGE": "", + "CREATE_ALBUM_FAILED": "", + "SEARCH": "", + "SEARCH_RESULTS": "", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "", + "LOCATION": "", + "CITY": "", + "DATE": "", + "FILE_NAME": "", + "THING": "", + "FILE_CAPTION": "", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "", + "SELECTED": "", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "", + "PEOPLE": "", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "", + "INFO_OPTION": "", + "FILE_NAME": "", + "CAPTION_PLACEHOLDER": "", + "LOCATION": "", + "SHOW_ON_MAP": "", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "VIEW_EXIF": "", + "NO_EXIF": "", + "EXIF": "", + "ISO": "", + "TWO_FACTOR": "", + "TWO_FACTOR_AUTHENTICATION": "", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "", + "ENABLE_TWO_FACTOR": "", + "ENABLE": "", + "LOST_DEVICE": "", + "INCORRECT_CODE": "", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "", + "RECONFIGURE": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "", + "SELECT_FOLDER": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "", + "EMAIl_ALREADY_OWNED": "", + "ETAGS_BLOCKED": "", + "SKIPPED_VIDEOS_INFO": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "", + "SKIPPED_FILES": "", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "SKIPPED_VIDEOS": "", + "INPROGRESS_METADATA_EXTRACTION": "", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "", + "TOO_LARGE_INFO": "", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "UPLOAD_TO_COLLECTION": "", + "UNCATEGORIZED": "", + "ARCHIVE": "", + "FAVORITES": "", + "ARCHIVE_COLLECTION": "", + "ARCHIVE_SECTION_NAME": "", + "ALL_SECTION_NAME": "", + "MOVE_TO_COLLECTION": "", + "UNARCHIVE": "", + "UNARCHIVE_COLLECTION": "", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "", + "ADD": "", + "REMOVE": "", + "YES_REMOVE": "", + "REMOVE_FROM_COLLECTION": "", + "TRASH": "", + "MOVE_TO_TRASH": "", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "", + "RESTORE": "", + "RESTORE_TO_COLLECTION": "", + "EMPTY_TRASH": "", + "EMPTY_TRASH_TITLE": "", + "EMPTY_TRASH_MESSAGE": "", + "LEAVE_SHARED_ALBUM": "", + "LEAVE_ALBUM": "", + "LEAVE_SHARED_ALBUM_TITLE": "", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "", + "SORT_BY_UPDATION_TIME_DESCENDING": "", + "SORT_BY_NAME": "", + "COMPRESS_THUMBNAILS": "", + "THUMBNAIL_REPLACED": "", + "FIX_THUMBNAIL": "", + "FIX_THUMBNAIL_LATER": "", + "REPLACE_THUMBNAIL_NOT_STARTED": "", + "REPLACE_THUMBNAIL_COMPLETED": "", + "REPLACE_THUMBNAIL_NOOP": "", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "", + "SHARING_DETAILS": "", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "PARTICIPANTS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "", + "LINK_EXPIRED": "", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "LINK_PASSWORD_LOCK": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "MALICIOUS_CONTENT": "", + "COPYRIGHT": "", + "SHARED_USING": "", + "ENTE_IO": "", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "UPLOAD_FILES": "", + "UPLOAD_DIRS": "", + "UPLOAD_GOOGLE_TAKEOUT": "", + "DEDUPLICATE_FILES": "", + "AUTHENTICATOR_SECTION": "", + "NO_DUPLICATES_FOUND": "", + "CLUB_BY_CAPTURE_TIME": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "", + "albums_other": "", + "ALL_ALBUMS": "", + "ALBUMS": "", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "HIDDEN_ITEMS_SECTION_NAME": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "", + "COPIED": "", + "CANVAS_BLOCKED_TITLE": "", + "CANVAS_BLOCKED_MESSAGE": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "", + "RENEW_NOW": "", + "STORAGE": "", + "USED": "", + "YOU": "", + "FAMILY": "", + "FREE": "", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "MONTH_SHORT": "", + "YEAR": "", + "FAMILY_PLAN": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "", + "TWO_MONTHS_FREE": "", + "GB": "", + "POPULAR": "", + "FREE_PLAN_OPTION_LABEL": "", + "FREE_PLAN_DESCRIPTION": "", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "DRAG_AND_DROP_HINT": "", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "", + "AUTHENTICATE": "", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "", + "YESTERDAY": "", + "NAME_PLACEHOLDER": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "", + "PASSPHRASE_STRENGTH_MODERATE": "", + "PASSPHRASE_STRENGTH_STRONG": "", + "PREFERENCES": "", + "LANGUAGE": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "STORAGE_UNITS": { + "B": "", + "KB": "", + "MB": "", + "GB": "", + "TB": "" + }, + "AFTER_TIME": { + "HOUR": "", + "DAY": "", + "WEEK": "", + "MONTH": "", + "YEAR": "" + }, + "COPY_LINK": "", + "DONE": "", + "LINK_SHARE_TITLE": "", + "REMOVE_LINK": "", + "CREATE_PUBLIC_SHARING": "", + "PUBLIC_LINK_CREATED": "", + "PUBLIC_LINK_ENABLED": "", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "EXPORT_NOTIFICATION": { + "START": "", + "IN_PROGRESS": "", + "FINISH": "", + "UP_TO_DATE": "" + }, + "CONTINUOUS_EXPORT": "", + "TOTAL_ITEMS": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "DELETE_ACCOUNT_REASON_LABEL": "", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "", + "DELETE_REASON": { + "MISSING_FEATURE": "", + "BROKEN_BEHAVIOR": "", + "FOUND_ANOTHER_SERVICE": "", + "NOT_LISTED": "" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "", + "CONFIRM_DELETE_ACCOUNT": "", + "FEEDBACK_REQUIRED": "", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "", + "HIDE": "", + "UNHIDE": "", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CRASH_REPORTING": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/fi-FI/translation.json b/web/apps/photos/public/locales/fi-FI/translation.json new file mode 100644 index 000000000..bc335bc77 --- /dev/null +++ b/web/apps/photos/public/locales/fi-FI/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "", + "HERO_SLIDE_1": "", + "HERO_SLIDE_2_TITLE": "", + "HERO_SLIDE_2": "", + "HERO_SLIDE_3_TITLE": "", + "HERO_SLIDE_3": "", + "LOGIN": "", + "SIGN_UP": "", + "NEW_USER": "", + "EXISTING_USER": "", + "ENTER_NAME": "", + "PUBLIC_UPLOADER_NAME_MESSAGE": "", + "ENTER_EMAIL": "", + "EMAIL_ERROR": "", + "REQUIRED": "", + "EMAIL_SENT": "", + "CHECK_INBOX": "", + "ENTER_OTT": "", + "RESEND_MAIL": "", + "VERIFY": "", + "UNKNOWN_ERROR": "", + "INVALID_CODE": "", + "EXPIRED_CODE": "", + "SENDING": "", + "SENT": "", + "PASSWORD": "", + "LINK_PASSWORD": "", + "RETURN_PASSPHRASE_HINT": "", + "SET_PASSPHRASE": "", + "VERIFY_PASSPHRASE": "", + "INCORRECT_PASSPHRASE": "", + "ENTER_ENC_PASSPHRASE": "", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "", + "PASSPHRASE_HINT": "", + "CONFIRM_PASSPHRASE": "", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "", + "CONSOLE_WARNING_STOP": "", + "CONSOLE_WARNING_DESC": "", + "CREATE_COLLECTION": "", + "ENTER_ALBUM_NAME": "", + "CLOSE_OPTION": "", + "ENTER_FILE_NAME": "", + "CLOSE": "", + "NO": "", + "NOTHING_HERE": "", + "UPLOAD": "", + "IMPORT": "", + "ADD_PHOTOS": "", + "ADD_MORE_PHOTOS": "", + "add_photos_one": "", + "add_photos_other": "", + "SELECT_PHOTOS": "", + "FILE_UPLOAD": "", + "UPLOAD_STAGE_MESSAGE": { + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "FILE_NOT_UPLOADED_LIST": "", + "SUBSCRIPTION_EXPIRED": "", + "SUBSCRIPTION_EXPIRED_MESSAGE": "", + "STORAGE_QUOTA_EXCEEDED": "", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "", + "ACCOUNT_EXISTS": "", + "CREATE": "", + "DOWNLOAD": "", + "DOWNLOAD_OPTION": "", + "DOWNLOAD_FAVORITES": "", + "DOWNLOAD_UNCATEGORIZED": "", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "", + "TOGGLE_FULLSCREEN": "", + "ZOOM_IN_OUT": "", + "PREVIOUS": "", + "NEXT": "", + "TITLE_PHOTOS": "", + "TITLE_ALBUMS": "", + "TITLE_AUTH": "", + "UPLOAD_FIRST_PHOTO": "", + "IMPORT_YOUR_FOLDERS": "", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "", + "TRASH_FILE_TITLE": "", + "DELETE_FILES_TITLE": "", + "DELETE_FILES_MESSAGE": "", + "DELETE": "", + "DELETE_OPTION": "", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "", + "OR": "", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "", + "SESSION_EXPIRED": "", + "PASSWORD_GENERATION_FAILED": "", + "CHANGE_PASSWORD": "", + "GO_BACK": "", + "RECOVERY_KEY": "", + "SAVE_LATER": "", + "SAVE": "", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "", + "RECOVER_ACCOUNT": "", + "RECOVERY_KEY_HINT": "", + "RECOVER": "", + "NO_RECOVERY_KEY": "", + "INCORRECT_RECOVERY_KEY": "", + "SORRY": "", + "NO_RECOVERY_KEY_MESSAGE": "", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", + "CONTACT_SUPPORT": "", + "REQUEST_FEATURE": "", + "SUPPORT": "", + "CONFIRM": "", + "CANCEL": "", + "LOGOUT": "", + "DELETE_ACCOUNT": "", + "DELETE_ACCOUNT_MESSAGE": "", + "LOGOUT_MESSAGE": "", + "CHANGE_EMAIL": "", + "OK": "", + "SUCCESS": "", + "ERROR": "", + "MESSAGE": "", + "INSTALL_MOBILE_APP": "", + "DOWNLOAD_APP_MESSAGE": "", + "DOWNLOAD_APP": "", + "EXPORT": "", + "SUBSCRIPTION": "", + "SUBSCRIBE": "", + "MANAGEMENT_PORTAL": "", + "MANAGE_FAMILY_PORTAL": "", + "LEAVE_FAMILY_PLAN": "", + "LEAVE": "", + "LEAVE_FAMILY_CONFIRM": "", + "CHOOSE_PLAN": "", + "MANAGE_PLAN": "", + "ACTIVE": "", + "OFFLINE_MSG": "", + "FREE_SUBSCRIPTION_INFO": "", + "FAMILY_SUBSCRIPTION_INFO": "", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "", + "SUBSCRIPTION_UPDATE_FAILED": "", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "", + "MONTHLY": "", + "YEARLY": "", + "UPDATE_SUBSCRIPTION_MESSAGE": "", + "UPDATE_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "RENAME": "", + "RENAME_FILE": "", + "RENAME_COLLECTION": "", + "DELETE_COLLECTION_TITLE": "", + "DELETE_COLLECTION": "", + "DELETE_COLLECTION_MESSAGE": "", + "DELETE_PHOTOS": "", + "KEEP_PHOTOS": "", + "SHARE": "", + "SHARE_COLLECTION": "", + "SHAREES": "", + "SHARE_WITH_SELF": "", + "ALREADY_SHARED": "", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "DOWNLOAD_COLLECTION": "", + "DOWNLOAD_COLLECTION_MESSAGE": "", + "CREATE_ALBUM_FAILED": "", + "SEARCH": "", + "SEARCH_RESULTS": "", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "", + "LOCATION": "", + "CITY": "", + "DATE": "", + "FILE_NAME": "", + "THING": "", + "FILE_CAPTION": "", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "", + "SELECTED": "", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "", + "PEOPLE": "", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "", + "INFO_OPTION": "", + "FILE_NAME": "", + "CAPTION_PLACEHOLDER": "", + "LOCATION": "", + "SHOW_ON_MAP": "", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "VIEW_EXIF": "", + "NO_EXIF": "", + "EXIF": "", + "ISO": "", + "TWO_FACTOR": "", + "TWO_FACTOR_AUTHENTICATION": "", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "", + "ENABLE_TWO_FACTOR": "", + "ENABLE": "", + "LOST_DEVICE": "", + "INCORRECT_CODE": "", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "", + "RECONFIGURE": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "", + "SELECT_FOLDER": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "", + "EMAIl_ALREADY_OWNED": "", + "ETAGS_BLOCKED": "", + "SKIPPED_VIDEOS_INFO": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "", + "SKIPPED_FILES": "", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "SKIPPED_VIDEOS": "", + "INPROGRESS_METADATA_EXTRACTION": "", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "", + "TOO_LARGE_INFO": "", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "UPLOAD_TO_COLLECTION": "", + "UNCATEGORIZED": "", + "ARCHIVE": "", + "FAVORITES": "", + "ARCHIVE_COLLECTION": "", + "ARCHIVE_SECTION_NAME": "", + "ALL_SECTION_NAME": "", + "MOVE_TO_COLLECTION": "", + "UNARCHIVE": "", + "UNARCHIVE_COLLECTION": "", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "", + "ADD": "", + "REMOVE": "", + "YES_REMOVE": "", + "REMOVE_FROM_COLLECTION": "", + "TRASH": "", + "MOVE_TO_TRASH": "", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "", + "RESTORE": "", + "RESTORE_TO_COLLECTION": "", + "EMPTY_TRASH": "", + "EMPTY_TRASH_TITLE": "", + "EMPTY_TRASH_MESSAGE": "", + "LEAVE_SHARED_ALBUM": "", + "LEAVE_ALBUM": "", + "LEAVE_SHARED_ALBUM_TITLE": "", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "", + "SORT_BY_UPDATION_TIME_DESCENDING": "", + "SORT_BY_NAME": "", + "COMPRESS_THUMBNAILS": "", + "THUMBNAIL_REPLACED": "", + "FIX_THUMBNAIL": "", + "FIX_THUMBNAIL_LATER": "", + "REPLACE_THUMBNAIL_NOT_STARTED": "", + "REPLACE_THUMBNAIL_COMPLETED": "", + "REPLACE_THUMBNAIL_NOOP": "", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "", + "SHARING_DETAILS": "", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "PARTICIPANTS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "", + "LINK_EXPIRED": "", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "LINK_PASSWORD_LOCK": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "MALICIOUS_CONTENT": "", + "COPYRIGHT": "", + "SHARED_USING": "", + "ENTE_IO": "", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "UPLOAD_FILES": "", + "UPLOAD_DIRS": "", + "UPLOAD_GOOGLE_TAKEOUT": "", + "DEDUPLICATE_FILES": "", + "AUTHENTICATOR_SECTION": "", + "NO_DUPLICATES_FOUND": "", + "CLUB_BY_CAPTURE_TIME": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "", + "albums_other": "", + "ALL_ALBUMS": "", + "ALBUMS": "", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "HIDDEN_ITEMS_SECTION_NAME": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "", + "COPIED": "", + "CANVAS_BLOCKED_TITLE": "", + "CANVAS_BLOCKED_MESSAGE": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "", + "RENEW_NOW": "", + "STORAGE": "", + "USED": "", + "YOU": "", + "FAMILY": "", + "FREE": "", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "MONTH_SHORT": "", + "YEAR": "", + "FAMILY_PLAN": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "", + "TWO_MONTHS_FREE": "", + "GB": "", + "POPULAR": "", + "FREE_PLAN_OPTION_LABEL": "", + "FREE_PLAN_DESCRIPTION": "", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "DRAG_AND_DROP_HINT": "", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "", + "AUTHENTICATE": "", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "", + "YESTERDAY": "", + "NAME_PLACEHOLDER": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "", + "PASSPHRASE_STRENGTH_MODERATE": "", + "PASSPHRASE_STRENGTH_STRONG": "", + "PREFERENCES": "", + "LANGUAGE": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "STORAGE_UNITS": { + "B": "", + "KB": "", + "MB": "", + "GB": "", + "TB": "" + }, + "AFTER_TIME": { + "HOUR": "", + "DAY": "", + "WEEK": "", + "MONTH": "", + "YEAR": "" + }, + "COPY_LINK": "", + "DONE": "", + "LINK_SHARE_TITLE": "", + "REMOVE_LINK": "", + "CREATE_PUBLIC_SHARING": "", + "PUBLIC_LINK_CREATED": "", + "PUBLIC_LINK_ENABLED": "", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "EXPORT_NOTIFICATION": { + "START": "", + "IN_PROGRESS": "", + "FINISH": "", + "UP_TO_DATE": "" + }, + "CONTINUOUS_EXPORT": "", + "TOTAL_ITEMS": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "DELETE_ACCOUNT_REASON_LABEL": "", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "", + "DELETE_REASON": { + "MISSING_FEATURE": "", + "BROKEN_BEHAVIOR": "", + "FOUND_ANOTHER_SERVICE": "", + "NOT_LISTED": "" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "", + "CONFIRM_DELETE_ACCOUNT": "", + "FEEDBACK_REQUIRED": "", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "", + "HIDE": "", + "UNHIDE": "", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CRASH_REPORTING": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/fr-FR/translation.json b/web/apps/photos/public/locales/fr-FR/translation.json new file mode 100644 index 000000000..b82c58b35 --- /dev/null +++ b/web/apps/photos/public/locales/fr-FR/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Sauvegardes privées
pour vos souvenirs
", + "HERO_SLIDE_1": "Chiffrement de bout en bout par défaut", + "HERO_SLIDE_2_TITLE": "
Sécurisé
dans un abri antiatomique
", + "HERO_SLIDE_2": "Conçu pour survivre", + "HERO_SLIDE_3_TITLE": "
Disponible
en tout lieu
", + "HERO_SLIDE_3": "Android, iOS, Web, Ordinateur", + "LOGIN": "Connexion", + "SIGN_UP": "Inscription", + "NEW_USER": "Nouveau sur ente", + "EXISTING_USER": "Utilisateur existant", + "ENTER_NAME": "Saisir un nom", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Ajouter un nom afin que vos amis sachent qui remercier pour ces magnifiques photos!", + "ENTER_EMAIL": "Saisir l'adresse e-mail", + "EMAIL_ERROR": "Saisir un e-mail valide", + "REQUIRED": "Nécessaire", + "EMAIL_SENT": "Code de vérification envoyé à
{{email}}", + "CHECK_INBOX": "Veuillez consulter votre boite de réception (et indésirables) pour poursuivre la vérification", + "ENTER_OTT": "Code de vérification", + "RESEND_MAIL": "Renvoyer le code", + "VERIFY": "Vérifier", + "UNKNOWN_ERROR": "Quelque chose s'est mal passé, veuillez recommencer", + "INVALID_CODE": "Code de vérification non valide", + "EXPIRED_CODE": "Votre code de vérification a expiré", + "SENDING": "Envoi...", + "SENT": "Envoyé!", + "PASSWORD": "Mot de passe", + "LINK_PASSWORD": "Saisir le mot de passe pour déverrouiller l'album", + "RETURN_PASSPHRASE_HINT": "Mot de passe", + "SET_PASSPHRASE": "Définir le mot de passe", + "VERIFY_PASSPHRASE": "Connexion", + "INCORRECT_PASSPHRASE": "Mot de passe non valide", + "ENTER_ENC_PASSPHRASE": "Veuillez saisir un mot de passe que nous pourrons utiliser pour chiffrer vos données", + "PASSPHRASE_DISCLAIMER": "Nous ne stockons pas votre mot de passe, donc si vous le perdez, nous ne pourrons pas vous aider à récupérer vos données sans une clé de récupération.", + "WELCOME_TO_ENTE_HEADING": "Bienvenue sur ", + "WELCOME_TO_ENTE_SUBHEADING": "Stockage et partage photo avec cryptage de bout en bout", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Là où vivent vos meilleures photos", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Génération des clés de chiffrement...", + "PASSPHRASE_HINT": "Mot de passe", + "CONFIRM_PASSPHRASE": "Confirmer le mot de passe", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "Les mots de passe ne correspondent pas", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "Ceci est une fonction de navigateur dédiée aux développeurs. Veuillez ne pas copier-coller un code non vérifié à cet endroit.", + "CREATE_COLLECTION": "Nouvel album", + "ENTER_ALBUM_NAME": "Nom de l'album", + "CLOSE_OPTION": "Fermer (Échap)", + "ENTER_FILE_NAME": "Nom du fichier", + "CLOSE": "Fermer", + "NO": "Non", + "NOTHING_HERE": "Il n'y a encore rien à voir ici 👀", + "UPLOAD": "Charger", + "IMPORT": "Importer", + "ADD_PHOTOS": "Ajouter des photos", + "ADD_MORE_PHOTOS": "Ajouter plus de photos", + "add_photos_one": "Ajouter une photo", + "add_photos_other": "Ajouter {{count}} photos", + "SELECT_PHOTOS": "Sélectionner des photos", + "FILE_UPLOAD": "Fichier chargé", + "UPLOAD_STAGE_MESSAGE": { + "0": "Préparation du chargement", + "1": "Lecture des fichiers de métadonnées de Google", + "2": "Métadonnées des fichiers {{uploadCounter.finished}} / {{uploadCounter.total}} extraites", + "3": "{{uploadCounter.finished}} / {{uploadCounter.total}} fichiers sauvegardés", + "4": "Annulation des chargements restants", + "5": "Sauvegarde terminée" + }, + "FILE_NOT_UPLOADED_LIST": "Les fichiers suivants n'ont pas été chargés", + "SUBSCRIPTION_EXPIRED": "Abonnement expiré", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Votre abonnement a expiré, veuillez le renouveler ", + "STORAGE_QUOTA_EXCEEDED": "Limite de stockage atteinte", + "INITIAL_LOAD_DELAY_WARNING": "La première consultation peut prendre du temps", + "USER_DOES_NOT_EXIST": "Désolé, impossible de trouver un utilisateur avec cet e-mail", + "NO_ACCOUNT": "Je n'ai pas de compte", + "ACCOUNT_EXISTS": "J'ai déjà un compte", + "CREATE": "Créer", + "DOWNLOAD": "Télécharger", + "DOWNLOAD_OPTION": "Télécharger (D)", + "DOWNLOAD_FAVORITES": "Télécharger les favoris", + "DOWNLOAD_UNCATEGORIZED": "Télécharger les hors catégories", + "DOWNLOAD_HIDDEN_ITEMS": "Télécharger les fichiers masqués", + "COPY_OPTION": "Copier en PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Plein écran (F)", + "ZOOM_IN_OUT": "Zoom +/-", + "PREVIOUS": "Précédent (←)", + "NEXT": "Suivant (→)", + "TITLE_PHOTOS": "", + "TITLE_ALBUMS": "", + "TITLE_AUTH": "", + "UPLOAD_FIRST_PHOTO": "Chargez votre 1ere photo", + "IMPORT_YOUR_FOLDERS": "Importez vos dossiers", + "UPLOAD_DROPZONE_MESSAGE": "Déposez pour sauvegarder vos fichiers", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Déposez pour ajouter un dossier surveillé", + "TRASH_FILES_TITLE": "Supprimer les fichiers ?", + "TRASH_FILE_TITLE": "Supprimer le fichier ?", + "DELETE_FILES_TITLE": "Supprimer immédiatement?", + "DELETE_FILES_MESSAGE": "Les fichiers sélectionnés seront définitivement supprimés de votre compte ente.", + "DELETE": "Supprimer", + "DELETE_OPTION": "Supprimer (DEL)", + "FAVORITE_OPTION": "Favori (L)", + "UNFAVORITE_OPTION": "Non favori (L)", + "MULTI_FOLDER_UPLOAD": "Plusieurs dossiers détectés", + "UPLOAD_STRATEGY_CHOICE": "Voulez-vous les charger dans", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Un seul album", + "OR": "ou", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Albums séparés", + "SESSION_EXPIRED_MESSAGE": "Votre session a expiré, veuillez vous reconnecter pour poursuivre", + "SESSION_EXPIRED": "Session expiré", + "PASSWORD_GENERATION_FAILED": "Votre navigateur ne permet pas de générer une clé forte correspondant aux standards de chiffrement de ente, veuillez réessayer en utilisant l'appli mobile ou un autre navigateur", + "CHANGE_PASSWORD": "Modifier le mot de passe", + "GO_BACK": "Retour", + "RECOVERY_KEY": "Clé de récupération", + "SAVE_LATER": "Plus tard", + "SAVE": "Sauvegarder la clé", + "RECOVERY_KEY_DESCRIPTION": "Si vous oubliez votre mot de passe, la seule façon de récupérer vos données sera grâce à cette clé.", + "RECOVER_KEY_GENERATION_FAILED": "Le code de récupération ne peut être généré, veuillez réessayer", + "KEY_NOT_STORED_DISCLAIMER": "Nous ne stockons pas cette clé, veuillez donc la sauvegarder dans un endroit sûr", + "FORGOT_PASSWORD": "Mot de passe oublié", + "RECOVER_ACCOUNT": "Récupérer le compte", + "RECOVERY_KEY_HINT": "Clé de récupération", + "RECOVER": "Récupérer", + "NO_RECOVERY_KEY": "Pas de clé de récupération?", + "INCORRECT_RECOVERY_KEY": "Clé de récupération non valide", + "SORRY": "Désolé", + "NO_RECOVERY_KEY_MESSAGE": "En raison de notre protocole de chiffrement de bout en bout, vos données ne peuvent être décryptées sans votre mot de passe ou clé de récupération", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Veuillez envoyer un e-mail à {{emailID}} depuis votre adresse enregistrée", + "CONTACT_SUPPORT": "Contacter le support", + "REQUEST_FEATURE": "Soumettre une idée", + "SUPPORT": "Support", + "CONFIRM": "Confirmer", + "CANCEL": "Annuler", + "LOGOUT": "Déconnexion", + "DELETE_ACCOUNT": "Supprimer le compte", + "DELETE_ACCOUNT_MESSAGE": "

Veuillez envoyer un e-mail à {{emailID}}depuis Votre adresse enregistrée.

Votre demande sera traitée dans les 72 heures.

", + "LOGOUT_MESSAGE": "Voulez-vous vraiment vous déconnecter?", + "CHANGE_EMAIL": "Modifier l'e-mail", + "OK": "Ok", + "SUCCESS": "Parfait", + "ERROR": "Erreur", + "MESSAGE": "Message", + "INSTALL_MOBILE_APP": "Installez notre application Android or iOS pour sauvegarder automatiquement toutes vos photos", + "DOWNLOAD_APP_MESSAGE": "Désolé, cette opération est actuellement supportée uniquement sur notre appli pour ordinateur", + "DOWNLOAD_APP": "Télécharger l'appli pour ordinateur", + "EXPORT": "Exporter des données", + "SUBSCRIPTION": "Abonnement", + "SUBSCRIBE": "S'abonner", + "MANAGEMENT_PORTAL": "Gérer le mode de paiement", + "MANAGE_FAMILY_PORTAL": "Gérer la famille", + "LEAVE_FAMILY_PLAN": "Quitter le plan famille", + "LEAVE": "Quitter", + "LEAVE_FAMILY_CONFIRM": "Êtes-vous certains de vouloir quitter le plan famille?", + "CHOOSE_PLAN": "Choisir votre plan", + "MANAGE_PLAN": "Gérer votre abonnement", + "ACTIVE": "Actif", + "OFFLINE_MSG": "Vous êtes hors-ligne, les mémoires cache sont affichées", + "FREE_SUBSCRIPTION_INFO": "Vous êtes sur le plan gratuit qui expire le {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Vous êtes sur le plan famille géré par", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renouveler le {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Pris fin le {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Votre abonnement sera annulé le {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Vous avez dépassé votre quota de stockage, veuillez mettre à niveau ", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Nous avons reçu votre paiement

Votre abonnement est valide jusqu'au {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Votre achat est annulé, veuillez réessayer si vous souhaitez vous abonner", + "SUBSCRIPTION_PURCHASE_FAILED": "Échec lors de l'achat de l'abonnement, veuillez réessayer", + "SUBSCRIPTION_UPDATE_FAILED": "Échec lors de la mise à niveau de l'abonnement, veuillez réessayer", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Désolé, échec de paiement lors de la saisie de votre carte, veuillez mettr eà jour votre moyen de paiement et réessayer", + "STRIPE_AUTHENTICATION_FAILED": "Nous n'avons pas pu authentifier votre moyen de paiement. Veuillez choisir un moyen différent et réessayer", + "UPDATE_PAYMENT_METHOD": "Mise à jour du moyen de paiement", + "MONTHLY": "Mensuel", + "YEARLY": "Annuel", + "UPDATE_SUBSCRIPTION_MESSAGE": "Êtes-vous certains de vouloir changer de plan?", + "UPDATE_SUBSCRIPTION": "Changer de plan", + "CANCEL_SUBSCRIPTION": "Annuler l'abonnement", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Toutes vos données seront supprimées de nos serveurs à la fin de cette période d'abonnement.

Voulez-vous vraiment annuler votre abonnement?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "Échec lors de l'annulation de l'abonnement", + "SUBSCRIPTION_CANCEL_SUCCESS": "Votre abonnement a bien été annulé", + "REACTIVATE_SUBSCRIPTION": "Réactiver l'abonnement", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Une fois réactivée, vous serrez facturé de {{val, datetime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Votre abonnement est bien activé ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Échec lors de la réactivation de l'abonnement", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Merci", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Annuler l'abonnement mobile", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Veuillez annuler votre abonnement depuis l'appli mobile pour activer un abonnement ici", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Veuillez nous contacter à {{emailID}} pour gérer votre abonnement", + "RENAME": "Renommer", + "RENAME_FILE": "Renommer le fichier", + "RENAME_COLLECTION": "Renommer l'album", + "DELETE_COLLECTION_TITLE": "Supprimer l'album?", + "DELETE_COLLECTION": "Supprimer l'album", + "DELETE_COLLECTION_MESSAGE": "Supprimer aussi les photos (et vidéos) présentes dans cet album depuis tous les autres albums dont ils font partie?", + "DELETE_PHOTOS": "Supprimer des photos", + "KEEP_PHOTOS": "Conserver des photos", + "SHARE": "Partager", + "SHARE_COLLECTION": "Partager l'album", + "SHAREES": "Partager avec", + "SHARE_WITH_SELF": "Oups, vous ne pouvez pas partager avec vous-même", + "ALREADY_SHARED": "Oups, vous partager déjà cela avec {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Partage d'album non autorisé", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Le partage est désactivé pour les comptes gratuits", + "DOWNLOAD_COLLECTION": "Télécharger l'album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Êtes-vous certains de vouloir télécharger l'album complet?

Tous les fichiers seront mis en file d'attente pour un téléchargement fractionné

", + "CREATE_ALBUM_FAILED": "Échec de création de l'album , veuillez réessayer", + "SEARCH": "Recherche", + "SEARCH_RESULTS": "Résultats de la recherche", + "NO_RESULTS": "Aucun résultat trouvé", + "SEARCH_HINT": "Recherche d'albums, dates, descriptions, ...", + "SEARCH_TYPE": { + "COLLECTION": "l'album", + "LOCATION": "Emplacement", + "CITY": "", + "DATE": "Date", + "FILE_NAME": "Nom de fichier", + "THING": "Chose", + "FILE_CAPTION": "Description", + "FILE_TYPE": "Type de fichier", + "CLIP": "Magique" + }, + "photos_count_zero": "Pas de souvenirs", + "photos_count_one": "1 souvenir", + "photos_count_other": "{{count}} souvenirs", + "TERMS_AND_CONDITIONS": "J'accepte les conditions et la politique de confidentialité", + "ADD_TO_COLLECTION": "Ajouter à l'album", + "SELECTED": "Sélectionné", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Cette vidéo ne peut pas être lue sur votre navigateur", + "PEOPLE": "Visages", + "INDEXING_SCHEDULED": "L'indexation est planifiée...", + "ANALYZING_PHOTOS": "analyse des nouvelles photos {{indexStatus.nSyncedFiles}} sur {{indexStatus.nTotalFiles}} effectué)...", + "INDEXING_PEOPLE": "indexation des visages dans {{indexStatus.nSyncedFiles}} photos...", + "INDEXING_DONE": "{{indexStatus.nSyncedFiles}} photos indexées", + "UNIDENTIFIED_FACES": "visages non-identifiés", + "OBJECTS": "objets", + "TEXT": "texte", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "Nom de fichier", + "CAPTION_PLACEHOLDER": "Ajouter une description", + "LOCATION": "Emplacement", + "SHOW_ON_MAP": "Visualiser sur OpenStreetMap", + "MAP": "Carte", + "MAP_SETTINGS": "Paramètres de la carte", + "ENABLE_MAPS": "Activer la carte?", + "ENABLE_MAP": "Activer la carte", + "DISABLE_MAPS": "Désactiver la carte?", + "ENABLE_MAP_DESCRIPTION": "

Cette fonction affiche vos photos sur une carte du monde.

La carte est hébergée par OpenStreetMap, et les emplacements exacts de vos photos ne sont jamais partagés.

Vous pouvez désactiver cette fonction à tout moment dans des paramètres.

", + "DISABLE_MAP_DESCRIPTION": "

Cette fonction désactive l'affichage de vos photos sur une carte du monde.

Vous pouvez activer cette fonction à tout moment dans les Paramètres.

", + "DISABLE_MAP": "Désactiver la carte", + "DETAILS": "Détails", + "VIEW_EXIF": "Visualiser toutes les données EXIF", + "NO_EXIF": "Aucune donnée EXIF", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Double authentification", + "TWO_FACTOR_AUTHENTICATION": "Authentification double-facteur", + "TWO_FACTOR_QR_INSTRUCTION": "Scannez le QRCode ci-dessous avec une appli d'authentification", + "ENTER_CODE_MANUALLY": "Saisir le code manuellement", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Veuillez saisir ce code dans votre appli d'authentification", + "SCAN_QR_CODE": "Scannez le QRCode de préférence", + "ENABLE_TWO_FACTOR": "Activer la double-authentification", + "ENABLE": "Activer", + "LOST_DEVICE": "Perte de l'appareil identificateur", + "INCORRECT_CODE": "Code non valide", + "TWO_FACTOR_INFO": "Rajoutez une couche de sécurité supplémentaire afin de pas utiliser simplement votre e-mail et mot de passe pour vous connecter à votre compte", + "DISABLE_TWO_FACTOR_LABEL": "Désactiver la double-authentification", + "UPDATE_TWO_FACTOR_LABEL": "Mise à jour de votre appareil identificateur", + "DISABLE": "Désactiver", + "RECONFIGURE": "Reconfigurer", + "UPDATE_TWO_FACTOR": "Mise à jour de la double-authentification", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuer annulera tous les identificateurs précédemment configurés", + "UPDATE": "Mise à jour", + "DISABLE_TWO_FACTOR": "Désactiver la double-authentification", + "DISABLE_TWO_FACTOR_MESSAGE": "Êtes-vous certains de vouloir désactiver la double-authentification", + "TWO_FACTOR_DISABLE_FAILED": "Échec de désactivation de la double-authentification, veuillez réessayer", + "EXPORT_DATA": "Exporter les données", + "SELECT_FOLDER": "Sélectionner un dossier", + "DESTINATION": "Destination", + "START": "Démarrer", + "LAST_EXPORT_TIME": "Horaire du dernier export", + "EXPORT_AGAIN": "Resynchro", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Stockage local non accessible", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Votre navigateur ou un complément bloque ente qui ne peut sauvegarder les données sur votre stockage local. Veuillez relancer cette page après avoir changé de mode de navigation.", + "SEND_OTT": "Envoyer l'OTP", + "EMAIl_ALREADY_OWNED": "Cet e-mail est déjà pris", + "ETAGS_BLOCKED": "

Nosu n'avons pas pu charger les fichiers suivants à cause de la configuration de votre navigateur.

Veuillez désactiver tous les compléments qui pourraient empêcher ente d'utiliser les eTags pour charger de larges fichiers, ou bien utilisez notre appli pour ordinateurpour une meilleure expérience lors des chargements.

", + "SKIPPED_VIDEOS_INFO": "

Actuellement, nous ne supportons pas l'ajout de videos via des liens publics.

Pour partager des vidéos, veuillez vous connecter àente et partager en utilisant l'e-mail concerné.

", + "LIVE_PHOTOS_DETECTED": "Les fichiers photos et vidéos depuis votre espace Live Photos ont été fusionnés en un seul fichier", + "RETRY_FAILED": "Réessayer les chargements ayant échoués", + "FAILED_UPLOADS": "Chargements échoués ", + "SKIPPED_FILES": "Chargements ignorés", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Échec de création d'une miniature", + "UNSUPPORTED_FILES": "Fichiers non supportés", + "SUCCESSFUL_UPLOADS": "Chargements réussis", + "SKIPPED_INFO": "Ignorés car il y a des fichiers avec des noms identiques dans le même album", + "UNSUPPORTED_INFO": "ente ne supporte pas encore ces formats de fichiers", + "BLOCKED_UPLOADS": "Chargements bloqués", + "SKIPPED_VIDEOS": "Vidéos ignorées", + "INPROGRESS_METADATA_EXTRACTION": "En cours", + "INPROGRESS_UPLOADS": "Chargements en cours", + "TOO_LARGE_UPLOADS": "Gros fichiers", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Stockage insuffisant", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Ces fichiers n'ont pas été chargés car ils dépassent la taille maximale de votre plan de stockage", + "TOO_LARGE_INFO": "Ces fichiers n'ont pas été chargés car ils dépassent notre taille limite par fichier", + "THUMBNAIL_GENERATION_FAILED_INFO": "Ces fichiers sont bien chargés, mais nous ne pouvons pas créer de miniatures pour eux.", + "UPLOAD_TO_COLLECTION": "Charger dans l'album", + "UNCATEGORIZED": "Aucune catégorie", + "ARCHIVE": "Archiver", + "FAVORITES": "Favoris", + "ARCHIVE_COLLECTION": "Archiver l'album", + "ARCHIVE_SECTION_NAME": "Archivé", + "ALL_SECTION_NAME": "Tous", + "MOVE_TO_COLLECTION": "Déplacer vers l'album", + "UNARCHIVE": "Désarchiver", + "UNARCHIVE_COLLECTION": "Désarchiver l'album", + "HIDE_COLLECTION": "Masquer l'album", + "UNHIDE_COLLECTION": "Dévoiler l'album", + "MOVE": "Déplacer", + "ADD": "Ajouter", + "REMOVE": "Retirer", + "YES_REMOVE": "Oui, retirer", + "REMOVE_FROM_COLLECTION": "Retirer de l'album", + "TRASH": "Corbeille", + "MOVE_TO_TRASH": "Déplacer vers la corbeille", + "TRASH_FILES_MESSAGE": "Les fichiers sélectionnés seront retirés de tous les albums puis déplacés dans la corbeille.", + "TRASH_FILE_MESSAGE": "Le fichier sera retiré de tous les albums puis déplacé dans la corbeille.", + "DELETE_PERMANENTLY": "Supprimer définitivement", + "RESTORE": "Restaurer", + "RESTORE_TO_COLLECTION": "Restaurer vers l'album", + "EMPTY_TRASH": "Corbeille vide", + "EMPTY_TRASH_TITLE": "Vider la corbeille ?", + "EMPTY_TRASH_MESSAGE": "Ces fichiers seront définitivement supprimés de votre compte ente.", + "LEAVE_SHARED_ALBUM": "Oui, quitter", + "LEAVE_ALBUM": "Quitter l'album", + "LEAVE_SHARED_ALBUM_TITLE": "Quitter l'album partagé?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Vous allez quitter cet album, il ne sera plus visible pour vous.", + "NOT_FILE_OWNER": "Vous ne pouvez pas supprimer les fichiers d'un album partagé", + "CONFIRM_SELF_REMOVE_MESSAGE": "Choisir les objets qui seront retirés de cet album. Ceux qui sont présents uniquement dans cet album seront déplacés comme hors catégorie.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Certains des objets que vous êtes en train de retirer ont été ajoutés par d'autres personnes, vous perdrez l'accès vers ces objets.", + "SORT_BY_CREATION_TIME_ASCENDING": "Plus anciens", + "SORT_BY_UPDATION_TIME_DESCENDING": "Dernière mise à jour", + "SORT_BY_NAME": "Nom", + "COMPRESS_THUMBNAILS": "Compresser les miniatures", + "THUMBNAIL_REPLACED": "Les miniatures sont compressées", + "FIX_THUMBNAIL": "Compresser", + "FIX_THUMBNAIL_LATER": "Compresser plus tard", + "REPLACE_THUMBNAIL_NOT_STARTED": "Certaines miniatures de vidéos peuvent être compressées pour gagner de la place. Voulez-vous que ente les compresse?", + "REPLACE_THUMBNAIL_COMPLETED": "Toutes les miniatures ont été compressées", + "REPLACE_THUMBNAIL_NOOP": "Vous n'avez aucune miniature qui peut être encore plus compressée", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Impossible de compresser certaines miniatures, veuillez réessayer", + "FIX_CREATION_TIME": "Réajuster l'heure", + "FIX_CREATION_TIME_IN_PROGRESS": "Réajustement de l'heure", + "CREATION_TIME_UPDATED": "L'heure du fichier a été réajustée", + "UPDATE_CREATION_TIME_NOT_STARTED": "Sélectionnez l'option que vous souhaitez utiliser", + "UPDATE_CREATION_TIME_COMPLETED": "Mise à jour effectuée pour tous les fichiers", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "L'heure du fichier n'a pas été mise à jour pour certains fichiers, veuillez réessayer", + "CAPTION_CHARACTER_LIMIT": "5000 caractères max", + "DATE_TIME_ORIGINAL": "EXIF:DateTimeOriginal", + "DATE_TIME_DIGITIZED": "EXIF:DateTimeDigitized", + "METADATA_DATE": "EXIF:MetadataDate", + "CUSTOM_TIME": "Heure personnalisée", + "REOPEN_PLAN_SELECTOR_MODAL": "Rouvrir les plans", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Échec pour rouvrir les plans", + "INSTALL": "Installer", + "SHARING_DETAILS": "Détails du partage", + "MODIFY_SHARING": "Modifier le partage", + "ADD_COLLABORATORS": "Ajouter des collaborateurs", + "ADD_NEW_EMAIL": "Ajouter un nouvel email", + "shared_with_people_zero": "Partager avec des personnes spécifiques", + "shared_with_people_one": "Partagé avec 1 personne", + "shared_with_people_other": "Partagé avec {{count, number}} personnes", + "participants_zero": "Aucun participant", + "participants_one": "1 participant", + "participants_other": "{{count, number}} participants", + "ADD_VIEWERS": "Ajouter un observateur", + "PARTICIPANTS": "Participants", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} ne pourra plus ajouter de photos à l'album

Il pourra toujours supprimer les photos qu'il a ajoutées

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} pourra ajouter des photos à l'album", + "CONVERT_TO_VIEWER": "Oui, convertir en observateur", + "CONVERT_TO_COLLABORATOR": "Oui, convertir en collaborateur", + "CHANGE_PERMISSION": "Modifier la permission?", + "REMOVE_PARTICIPANT": "Retirer?", + "CONFIRM_REMOVE": "Oui, supprimer", + "MANAGE": "Gérer", + "ADDED_AS": "Ajouté comme", + "COLLABORATOR_RIGHTS": "Les collaborateurs peuvent ajouter des photos et des vidéos à l'album partagé", + "REMOVE_PARTICIPANT_HEAD": "Supprimer le participant", + "OWNER": "Propriétaire", + "COLLABORATORS": "Collaborateurs", + "ADD_MORE": "Ajouter plus", + "VIEWERS": "Visionneurs", + "OR_ADD_EXISTING": "ou sélectionner un fichier existant", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} sera supprimé de l'album

Toutes les photos ajoutées par cette personne seront également supprimées de l'album

", + "NOT_FOUND": "404 - non trouvé", + "LINK_EXPIRED": "Lien expiré", + "LINK_EXPIRED_MESSAGE": "Ce lien à soit expiré soit est supprimé!", + "MANAGE_LINK": "Gérer le lien", + "LINK_TOO_MANY_REQUESTS": "Désolé, cet album a été consulté sur trop d'appareils !", + "FILE_DOWNLOAD": "Autoriser les téléchargements", + "LINK_PASSWORD_LOCK": "Verrou par mot de passe", + "PUBLIC_COLLECT": "Autoriser l'ajout de photos", + "LINK_DEVICE_LIMIT": "Limite d'appareil", + "NO_DEVICE_LIMIT": "Aucune", + "LINK_EXPIRY": "Expiration du lien", + "NEVER": "Jamais", + "DISABLE_FILE_DOWNLOAD": "Désactiver le téléchargement", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Êtes-vous certains de vouloir désactiver le bouton de téléchargement pour les fichiers?

Ceux qui les visualisent pourront tout de même faire des captures d'écrans ou sauvegarder une copie de vos photos en utilisant des outils externes.

", + "MALICIOUS_CONTENT": "Contient du contenu malveillant", + "COPYRIGHT": "Enfreint les droits d'une personne que je réprésente", + "SHARED_USING": "Partagé en utilisant ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Utilisez le code {{referralCode}} pour obtenir 10 Go gratuits", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Désactiver le verrouillage par mot de passe", + "DISABLE_PASSWORD_MESSAGE": "Êtes-vous certains de vouloir désactiver le verrouillage par mot de passe ?", + "PASSWORD_LOCK": "Mot de passe verrou", + "LOCK": "Verrouiller", + "DOWNLOAD_UPLOAD_LOGS": "Journaux de débugs", + "UPLOAD_FILES": "Fichier", + "UPLOAD_DIRS": "Dossier", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "Déduplication de fichiers", + "AUTHENTICATOR_SECTION": "Authentificateur", + "NO_DUPLICATES_FOUND": "Vous n'avez aucun fichier dédupliqué pouvant être nettoyé", + "CLUB_BY_CAPTURE_TIME": "Durée de la capture par club", + "FILES": "Fichiers", + "EACH": "Chacun", + "DEDUPLICATE_BASED_ON_SIZE": "Les fichiers suivants ont été clubbed, basé sur leurs tailles, veuillez corriger et supprimer les objets que vous pensez être dupliqués", + "STOP_ALL_UPLOADS_MESSAGE": "Êtes-vous certains de vouloir arrêter tous les chargements en cours?", + "STOP_UPLOADS_HEADER": "Arrêter les chargements ?", + "YES_STOP_UPLOADS": "Oui, arrêter tout", + "STOP_DOWNLOADS_HEADER": "Arrêter le téléchargement ?", + "YES_STOP_DOWNLOADS": "Oui, arrêter les téléchargements", + "STOP_ALL_DOWNLOADS_MESSAGE": "Êtes-vous certains de vouloir arrêter tous les chargements en cours?", + "albums_one": "1 album", + "albums_other": "{{count}} albums", + "ALL_ALBUMS": "Tous les albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "Tous les albums masqués", + "HIDDEN_ALBUMS": "Albums masqués", + "HIDDEN_ITEMS": "Éléments masqués", + "HIDDEN_ITEMS_SECTION_NAME": "Éléments masqués", + "ENTER_TWO_FACTOR_OTP": "Saisir le code à 6 caractères de votre appli d'authentification.", + "CREATE_ACCOUNT": "Créer un compte", + "COPIED": "Copié", + "CANVAS_BLOCKED_TITLE": "Impossible de créer une miniature", + "CANVAS_BLOCKED_MESSAGE": "

Il semblerait que votre navigateur ait désactivé l'accès au canevas, qui est nécessaire pour créer les miniatures de vos photos

Veuillez activer l'accès au canevas du navigateur, ou consulter notre appli pour ordinateur

", + "WATCH_FOLDERS": "Voir les dossiers", + "UPGRADE_NOW": "Mettre à niveau maintenant", + "RENEW_NOW": "Renouveler maintenant", + "STORAGE": "Stockage", + "USED": "utilisé", + "YOU": "Vous", + "FAMILY": "Famille", + "FREE": "gratuit", + "OF": "de", + "WATCHED_FOLDERS": "Voir les dossiers", + "NO_FOLDERS_ADDED": "Aucun dossiers d'ajouté!", + "FOLDERS_AUTOMATICALLY_MONITORED": "Les dossiers que vous ajoutez ici seront supervisés automatiquement", + "UPLOAD_NEW_FILES_TO_ENTE": "Charger de nouveaux fichiers sur ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Retirer de ente les fichiers supprimés", + "ADD_FOLDER": "Ajouter un dossier", + "STOP_WATCHING": "Arrêter de voir", + "STOP_WATCHING_FOLDER": "Arrêter de voir le dossier?", + "STOP_WATCHING_DIALOG_MESSAGE": "Vos fichiers existants ne seront pas supprimés, mais ente arrêtera automatiquement de mettre à jour le lien de l'album à chaque changements sur ce dossier.", + "YES_STOP": "Oui, arrêter", + "MONTH_SHORT": "mo", + "YEAR": "année", + "FAMILY_PLAN": "Plan famille", + "DOWNLOAD_LOGS": "Télécharger les logs", + "DOWNLOAD_LOGS_MESSAGE": "

Cela va télécharger les journaux de débug, que vous pourrez nosu envoyer par e-mail pour nous aider à résoudre votre problàme .

Veuillez noter que les noms de fichiers seront inclus .

", + "CHANGE_FOLDER": "Modifier le dossier", + "TWO_MONTHS_FREE": "Obtenir 2 mois gratuits sur les plans annuels", + "GB": "Go", + "POPULAR": "Populaire", + "FREE_PLAN_OPTION_LABEL": "Poursuivre avec la version d'essai gratuite", + "FREE_PLAN_DESCRIPTION": "1 Go pour 1 an", + "CURRENT_USAGE": "L'utilisation actuelle est de {{usage}}", + "WEAK_DEVICE": "Le navigateur que vous utilisez n'est pas assez puissant pour chiffrer vos photos. Veuillez essayer de vous connecter à ente sur votre ordinateur, ou télécharger l'appli ente mobile/ordinateur.", + "DRAG_AND_DROP_HINT": "Sinon glissez déposez dans la fenêtre ente", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "

Vos données chargées seront programmées pour suppression, et votre comptre sera supprimé définitivement .

Cette action n'est pas reversible.

", + "AUTHENTICATE": "Authentification", + "UPLOADED_TO_SINGLE_COLLECTION": "Chargé dans une seule collection", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Chargé dans des collections séparées", + "NEVERMIND": "Peu-importe", + "UPDATE_AVAILABLE": "Une mise à jour est disponible", + "UPDATE_INSTALLABLE_MESSAGE": "Une nouvelle version de ente est prête à être installée.", + "INSTALL_NOW": "Installer maintenant", + "INSTALL_ON_NEXT_LAUNCH": "Installer au prochain démarrage", + "UPDATE_AVAILABLE_MESSAGE": "Une nouvelle version de ente est sortie, mais elle ne peut pas être automatiquement téléchargée puis installée.", + "DOWNLOAD_AND_INSTALL": "Télécharger et installer", + "IGNORE_THIS_VERSION": "Ignorer cette version", + "TODAY": "Aujourd'hui", + "YESTERDAY": "Hier", + "NAME_PLACEHOLDER": "Nom...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Impossible de créer des albums depuis un mix fichier/dossier", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Vous avez glissé déposé un mélange de fichiers et dossiers.

Veuillez sélectionner soit uniquement des fichiers, ou des dossiers lors du choix d'options pour créer des albums séparés

", + "CHOSE_THEME": "Choisir un thème", + "ML_SEARCH": "ML search (beta)", + "ENABLE_ML_SEARCH_DESCRIPTION": "

Ceci activera l'apprentissage automatique sur l'appareil et la recherche faciale qui commencera à analyser vos photos chargées.

Pour la première exécution après la connexion ou l'activation de cette fonctionnalité, cela téléchargera toutes les images sur l'appareil local pour les analyser. Veuillez donc activer ceci uniquement si vous avez de la bande passante et le traitement local de toutes les images dans votre photothèque.

Si c'est la première fois que vous activez ceci, nous vous demanderons également la permission de traiter les données faciales.

", + "ML_MORE_DETAILS": "Plus de détails", + "ENABLE_FACE_SEARCH": "Activer la recherche faciale", + "ENABLE_FACE_SEARCH_TITLE": "Activer la recherche faciale ?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

If you enable face search, ente will extract face geometry from your photos. This will happen on your device, and any generated biometric data will be end-to-encrypted.

Please click here for more details about this feature in our privacy policy

", + "DISABLE_BETA": "Désactiver la bêta", + "DISABLE_FACE_SEARCH": "Désactiver la recherche faciale", + "DISABLE_FACE_SEARCH_TITLE": "Désactiver la recherche faciale ?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente will stop processing face geometry, and will also disable ML search (beta)

You can reenable face search again if you wish, so this operation is safe

", + "ADVANCED": "Avancé", + "FACE_SEARCH_CONFIRMATION": "Je comprends, et je souhaite permettre à ente de traiter la géométrie faciale", + "LABS": "Labs", + "YOURS": "Le vôtre", + "PASSPHRASE_STRENGTH_WEAK": "Sécurité du mot de passe : faible", + "PASSPHRASE_STRENGTH_MODERATE": "Sécurité du mot de passe : moyenne", + "PASSPHRASE_STRENGTH_STRONG": "Sécurité du mot de passe : forte", + "PREFERENCES": "Préférences", + "LANGUAGE": "Langue", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Dossier d'export invalide", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

Le dossier d'export que vous avez sélectionné n'existe pas

Veuillez sélectionner un dossier valide

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Échec de la vérification de l'abonnement", + "STORAGE_UNITS": { + "B": "o", + "KB": "Ko", + "MB": "Mo", + "GB": "Go", + "TB": "To" + }, + "AFTER_TIME": { + "HOUR": "dans une heure", + "DAY": "dans un jour", + "WEEK": "dans une semaine", + "MONTH": "dans un mois", + "YEAR": "dans un an" + }, + "COPY_LINK": "Copier le lien", + "DONE": "Terminé", + "LINK_SHARE_TITLE": "Ou partager un lien", + "REMOVE_LINK": "Supprimer le lien", + "CREATE_PUBLIC_SHARING": "Créer un lien public", + "PUBLIC_LINK_CREATED": "Lien public créé", + "PUBLIC_LINK_ENABLED": "Lien public activé", + "COLLECT_PHOTOS": "Récupérer les photos", + "PUBLIC_COLLECT_SUBTEXT": "Autoriser les personnes ayant le lien d'ajouter des photos à l'album partagé.", + "STOP_EXPORT": "Stop", + "EXPORT_PROGRESS": "{{progress.success}} / {{progress.total}} fichiers exportés", + "MIGRATING_EXPORT": "Préparations...", + "RENAMING_COLLECTION_FOLDERS": "Renommage des dossiers de l'album en cours...", + "TRASHING_DELETED_FILES": "Mise à la corbeille des fichiers supprimés...", + "TRASHING_DELETED_COLLECTIONS": "Mise à la corbeille des albums supprimés...", + "EXPORT_NOTIFICATION": { + "START": "L'export a démarré", + "IN_PROGRESS": "Un export est déjà en cours", + "FINISH": "Export terminé", + "UP_TO_DATE": "Aucun nouveau fichier à exporter" + }, + "CONTINUOUS_EXPORT": "Synchronisation en continu", + "TOTAL_ITEMS": "Total d'objets", + "PENDING_ITEMS": "Objets en attente", + "EXPORT_STARTING": "Démarrage de l'export...", + "DELETE_ACCOUNT_REASON_LABEL": "Quelle est la raison principale de la suppression de votre compte ?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Choisir une raison", + "DELETE_REASON": { + "MISSING_FEATURE": "Il manque une fonctionnalité essentielle dont j'ai besoin", + "BROKEN_BEHAVIOR": "L'application ou une certaine fonctionnalité ne se comporte pas comme je pense qu'elle devrait", + "FOUND_ANOTHER_SERVICE": "J'ai trouvé un autre service que je préfère", + "NOT_LISTED": "Ma raison n'est pas listée" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "Nous sommes désolés de vous voir partir. Expliquez-nous les raisons de votre départ pour que nous puissions nous améliorer.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Vos commentaires", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Oui, je veux supprimer définitivement ce compte et toutes ses données", + "CONFIRM_DELETE_ACCOUNT": "Confirmer la suppression du compte", + "FEEDBACK_REQUIRED": "Merci de nous aider avec cette information", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "Qu'est-ce que l'autre service fait de mieux ?", + "RECOVER_TWO_FACTOR": "Récupérer la double-authentification", + "at": "à", + "AUTH_NEXT": "suivant", + "AUTH_DOWNLOAD_MOBILE_APP": "Téléchargez notre application mobile pour gérer vos secrets", + "HIDDEN": "Masqué", + "HIDE": "Masquer", + "UNHIDE": "Dévoiler", + "UNHIDE_TO_COLLECTION": "Afficher dans l'album", + "SORT_BY": "Trier par", + "NEWEST_FIRST": "Plus récent en premier", + "OLDEST_FIRST": "Plus ancien en premier", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Ce fichier n'a pas pu être aperçu. Cliquez ici pour télécharger l'original.", + "SELECT_COLLECTION": "Sélectionner album", + "PIN_ALBUM": "Épingler l'album", + "UNPIN_ALBUM": "Désépingler l'album", + "DOWNLOAD_COMPLETE": "Téléchargement terminé", + "DOWNLOADING_COLLECTION": "Téléchargement de {{name}}", + "DOWNLOAD_FAILED": "Échec du téléchargement", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} fichiers", + "CRASH_REPORTING": "Rapport de plantage", + "CHRISTMAS": "Noël", + "CHRISTMAS_EVE": "Réveillon de Noël", + "NEW_YEAR": "Nouvel an", + "NEW_YEAR_EVE": "Réveillon de Nouvel An", + "IMAGE": "Image", + "VIDEO": "Vidéo", + "LIVE_PHOTO": "Photos en direct", + "CONVERT": "Convertir", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Êtes-vous sûr de vouloir fermer l'éditeur ?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Téléchargez votre image modifiée ou enregistrez une copie sur ente pour maintenir vos modifications.", + "BRIGHTNESS": "Luminosité", + "CONTRAST": "Contraste", + "SATURATION": "Saturation", + "BLUR": "Flou", + "INVERT_COLORS": "Inverser les couleurs", + "ASPECT_RATIO": "Ratio de l'image", + "SQUARE": "Carré", + "ROTATE_LEFT": "Pivoter vers la gauche", + "ROTATE_RIGHT": "Pivoter vers la droite", + "FLIP_VERTICALLY": "Basculer verticalement", + "FLIP_HORIZONTALLY": "Retourner horizontalement", + "DOWNLOAD_EDITED": "Téléchargement modifié", + "SAVE_A_COPY_TO_ENTE": "Enregistrer une copie dans ente", + "RESTORE_ORIGINAL": "Restaurer l'original", + "TRANSFORM": "Transformer", + "COLORS": "Couleurs", + "FLIP": "Retourner", + "ROTATION": "Rotation", + "RESET": "Réinitialiser", + "PHOTO_EDITOR": "Éditeur de photos", + "FASTER_UPLOAD": "Chargements plus rapides", + "FASTER_UPLOAD_DESCRIPTION": "Router les chargements vers les serveurs à proximité", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "Éléments indexés", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/it-IT/translation.json b/web/apps/photos/public/locales/it-IT/translation.json new file mode 100644 index 000000000..3d8dcb3c6 --- /dev/null +++ b/web/apps/photos/public/locales/it-IT/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Backup privati
dei tuoi ricordi
", + "HERO_SLIDE_1": "Crittografia end-to-end", + "HERO_SLIDE_2_TITLE": "
Salvati in modo sicuro
in un rifugio antiatomico
", + "HERO_SLIDE_2": "Progettato per sopravvivere", + "HERO_SLIDE_3_TITLE": "
Disponibile
ovunque
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Accedi", + "SIGN_UP": "Registrati", + "NEW_USER": "Nuovo utente", + "EXISTING_USER": "Accedi", + "ENTER_NAME": "Inserisci il nome", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Aggiungi un nome in modo che i tuoi amici sappiano chi ringraziare per queste fantastiche foto!", + "ENTER_EMAIL": "Inserisci l'indirizzo email", + "EMAIL_ERROR": "Inserisci un indirizzo email valido", + "REQUIRED": "Campo obbligatorio", + "EMAIL_SENT": "Codice di verifica inviato a {{email}}", + "CHECK_INBOX": "Controlla la tua casella di posta (e lo spam) per completare la verifica", + "ENTER_OTT": "Codice di verifica", + "RESEND_MAIL": "Reinvia codice", + "VERIFY": "Verifica", + "UNKNOWN_ERROR": "Qualcosa è andato storto, per favore riprova", + "INVALID_CODE": "Codice di verifica non valido", + "EXPIRED_CODE": "Il tuo codice di verifica è scaduto", + "SENDING": "Invio in corso...", + "SENT": "Inviato!", + "PASSWORD": "Password", + "LINK_PASSWORD": "Inserisci la password per sbloccare l'album", + "RETURN_PASSPHRASE_HINT": "Password", + "SET_PASSPHRASE": "Imposta una password", + "VERIFY_PASSPHRASE": "Accedi", + "INCORRECT_PASSPHRASE": "Password sbagliata", + "ENTER_ENC_PASSPHRASE": "Inserisci una password per crittografare i tuoi dati", + "PASSPHRASE_DISCLAIMER": "Non memorizziamo la tua password, quindi se la dimentichi, non saremo in grado di aiutarti a recuperare i tuoi dati senza una chiave di recupero.", + "WELCOME_TO_ENTE_HEADING": "Benvenuto su ", + "WELCOME_TO_ENTE_SUBHEADING": "Archiviazione e condivisione di foto crittografate end-to-end", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Dove vivono le tue migliori foto", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Generazione delle chiavi di crittografia...", + "PASSPHRASE_HINT": "Password", + "CONFIRM_PASSPHRASE": "Conferma la password", + "REFERRAL_CODE_HINT": "Come hai conosciuto Ente? (opzionale)", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "Le password non corrispondono", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "Questa è una funzionalità del browser destinata agli sviluppatori. Non copiare né incollare codice non verificato qui.", + "CREATE_COLLECTION": "Nuovo album", + "ENTER_ALBUM_NAME": "Nome album", + "CLOSE_OPTION": "Chiudi (Esc)", + "ENTER_FILE_NAME": "Nome del file", + "CLOSE": "Chiudi", + "NO": "No", + "NOTHING_HERE": "Nulla da vedere qui! 👀", + "UPLOAD": "Carica", + "IMPORT": "Importa", + "ADD_PHOTOS": "Aggiungi foto", + "ADD_MORE_PHOTOS": "Aggiungi altre foto", + "add_photos_one": "Aggiungi elemento", + "add_photos_other": "Aggiungi {{count, number}} elementi", + "SELECT_PHOTOS": "Seleziona foto", + "FILE_UPLOAD": "Carica file", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparazione all'upload", + "1": "Lettura dei file metadati di google", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} file metadati estratti", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} file salvati", + "4": "Annullamento dei caricamenti rimanenti", + "5": "Backup completato" + }, + "FILE_NOT_UPLOADED_LIST": "I seguenti file non sono stati caricati", + "SUBSCRIPTION_EXPIRED": "Abbonamento scaduto", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Il tuo abbonamento è scaduto, per favore rinnova", + "STORAGE_QUOTA_EXCEEDED": "Limite d'archiviazione superato", + "INITIAL_LOAD_DELAY_WARNING": "Il primo caricamento potrebbe richiedere del tempo", + "USER_DOES_NOT_EXIST": "Purtroppo non abbiamo trovato nessun account con quell'indirizzo e-mail", + "NO_ACCOUNT": "Non ho un account", + "ACCOUNT_EXISTS": "Ho già un account", + "CREATE": "Crea", + "DOWNLOAD": "Scarica", + "DOWNLOAD_OPTION": "Scarica (D)", + "DOWNLOAD_FAVORITES": "Scarica i preferiti", + "DOWNLOAD_UNCATEGORIZED": "Scarica i file senza categoria", + "DOWNLOAD_HIDDEN_ITEMS": "Scarica gli elementi nascosti", + "COPY_OPTION": "Copia come PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Attiva/disattiva schermo intero (F)", + "ZOOM_IN_OUT": "Zoom in/out", + "PREVIOUS": "Precedente (←)", + "NEXT": "Successivo (→)", + "TITLE_PHOTOS": "", + "TITLE_ALBUMS": "", + "TITLE_AUTH": "", + "UPLOAD_FIRST_PHOTO": "Carica la tua prima foto", + "IMPORT_YOUR_FOLDERS": "Importa una cartella", + "UPLOAD_DROPZONE_MESSAGE": "Rilascia per eseguire il backup dei file", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Rilascia per aggiungere la cartella osservata", + "TRASH_FILES_TITLE": "Elimina file?", + "TRASH_FILE_TITLE": "Eliminare il file?", + "DELETE_FILES_TITLE": "Eliminare immediatamente?", + "DELETE_FILES_MESSAGE": "I file selezionati verranno eliminati definitivamente dal tuo account ente.", + "DELETE": "Cancella", + "DELETE_OPTION": "Cancella (DEL)", + "FAVORITE_OPTION": "Preferito (L)", + "UNFAVORITE_OPTION": "Rimuovi dai preferiti (L)", + "MULTI_FOLDER_UPLOAD": "Selezionate più cartelle", + "UPLOAD_STRATEGY_CHOICE": "Vuoi caricarli in", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Un album singolo", + "OR": "o", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Album separati", + "SESSION_EXPIRED_MESSAGE": "La sessione è scaduta. Per continuare, esegui nuovamente l'accesso", + "SESSION_EXPIRED": "Sessione scaduta", + "PASSWORD_GENERATION_FAILED": "Il tuo browser non è stato in grado di generare una chiave forte che soddisfa gli standard di crittografia ente, prova ad usare l'app per dispositivi mobili o un altro browser", + "CHANGE_PASSWORD": "Cambia password", + "GO_BACK": "Torna indietro", + "RECOVERY_KEY": "Chiave di recupero", + "SAVE_LATER": "Fallo più tardi", + "SAVE": "Salva Chiave", + "RECOVERY_KEY_DESCRIPTION": "Se dimentichi la tua password, l'unico modo per recuperare i tuoi dati è con questa chiave.", + "RECOVER_KEY_GENERATION_FAILED": "Impossibile generare il codice di recupero, riprova", + "KEY_NOT_STORED_DISCLAIMER": "Non memorizziamo questa chiave, quindi salvala in un luogo sicuro", + "FORGOT_PASSWORD": "Password dimenticata", + "RECOVER_ACCOUNT": "Recupera account", + "RECOVERY_KEY_HINT": "Chiave di recupero", + "RECOVER": "Recupera", + "NO_RECOVERY_KEY": "Nessuna chiave di recupero?", + "INCORRECT_RECOVERY_KEY": "Chiave di recupero errata", + "SORRY": "Siamo spiacenti", + "NO_RECOVERY_KEY_MESSAGE": "A causa della natura del nostro protocollo di crittografia end-to-end, i tuoi dati non possono essere decifrati senza la tua password o chiave di ripristino", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Per favore invia un'email a {{emailID}} dal tuo indirizzo email registrato", + "CONTACT_SUPPORT": "Contatta il supporto", + "REQUEST_FEATURE": "Richiedi una funzionalità", + "SUPPORT": "Supporto", + "CONFIRM": "Conferma", + "CANCEL": "Annulla", + "LOGOUT": "Disconnettiti", + "DELETE_ACCOUNT": "Elimina account", + "DELETE_ACCOUNT_MESSAGE": "

Per favore invia una email a {{emailID}} dal tuo indirizzo email registrato.

La tua richiesta verrà elaborata entro 72 ore.

", + "LOGOUT_MESSAGE": "Sei sicuro di volerti disconnettere?", + "CHANGE_EMAIL": "Cambia email", + "OK": "OK", + "SUCCESS": "Operazione riuscita", + "ERROR": "Errore", + "MESSAGE": "Messaggio", + "INSTALL_MOBILE_APP": "Installa la nostra app Android o iOS per eseguire il backup automatico di tutte le tue foto", + "DOWNLOAD_APP_MESSAGE": "Siamo spiacenti, questa operazione è attualmente supportata solo sulla nostra app desktop", + "DOWNLOAD_APP": "Scarica l'app per desktop", + "EXPORT": "Esporta Dati", + "SUBSCRIPTION": "Abbonamento", + "SUBSCRIBE": "Iscriviti", + "MANAGEMENT_PORTAL": "Gestisci i metodi di pagamento", + "MANAGE_FAMILY_PORTAL": "Gestisci piano famiglia", + "LEAVE_FAMILY_PLAN": "Abbandona il piano famiglia", + "LEAVE": "Lascia", + "LEAVE_FAMILY_CONFIRM": "Sei sicuro di voler uscire dal piano famiglia?", + "CHOOSE_PLAN": "Scegli il tuo piano", + "MANAGE_PLAN": "Gestisci il tuo abbonamento", + "ACTIVE": "Attivo", + "OFFLINE_MSG": "Sei offline, i ricordi memorizzati nella cache vengono mostrati", + "FREE_SUBSCRIPTION_INFO": "Sei sul piano gratuito che scade il {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Fai parte di un piano famiglia gestito da", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Si rinnova il {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Termina il {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Il tuo abbonamento verrà annullato il {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Hai superato la quota di archiviazione assegnata, si prega di aggiornare ", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Abbiamo ricevuto il tuo pagamento

Il tuo abbonamento è valido fino a {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Il tuo acquisto è stato annullato, riprova se vuoi iscriverti", + "SUBSCRIPTION_PURCHASE_FAILED": "Acquisto abbonamento non riuscito, riprova", + "SUBSCRIPTION_UPDATE_FAILED": "L'aggiornamento dell'abbonamento non è riuscito, riprova", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Siamo spiacenti, il pagamento non è andato a buon fine quando abbiamo provato ad addebitare alla sua carta, la preghiamo di aggiornare il suo metodo di pagamento e riprovare", + "STRIPE_AUTHENTICATION_FAILED": "Non siamo in grado di autenticare il tuo metodo di pagamento. Per favore scegli un metodo di pagamento diverso e riprova", + "UPDATE_PAYMENT_METHOD": "Aggiorna metodo di pagamento", + "MONTHLY": "Mensile", + "YEARLY": "Annuale", + "UPDATE_SUBSCRIPTION_MESSAGE": "Sei sicuro di voler cambiare il piano?", + "UPDATE_SUBSCRIPTION": "Cambia piano", + "CANCEL_SUBSCRIPTION": "Annulla abbonamento", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Tutti i tuoi dati saranno cancellati dai nostri server alla fine di questo periodo di fatturazione.

Sei sicuro di voler annullare il tuo abbonamento?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "Impossibile annullare l'abbonamento", + "SUBSCRIPTION_CANCEL_SUCCESS": "Abbonamento annullato con successo", + "REACTIVATE_SUBSCRIPTION": "Riattiva abbonamento", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Una volta riattivato, ti verrà addebitato il valore di {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Iscrizione attivata con successo ", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Grazie", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Annulla abbonamento mobile", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Per favore contattaci su {{emailID}} per gestire il tuo abbonamento", + "RENAME": "Rinomina", + "RENAME_FILE": "Rinomina file", + "RENAME_COLLECTION": "Rinomina album", + "DELETE_COLLECTION_TITLE": "Eliminare l'album?", + "DELETE_COLLECTION": "Elimina album", + "DELETE_COLLECTION_MESSAGE": "", + "DELETE_PHOTOS": "Elimina foto", + "KEEP_PHOTOS": "Mantieni foto", + "SHARE": "Condividi", + "SHARE_COLLECTION": "Condividi album", + "SHAREES": "Condividi con", + "SHARE_WITH_SELF": "Ops, non puoi condividere a te stesso", + "ALREADY_SHARED": "Ops, lo stai già condividendo con {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Condividere gli album non è consentito", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "La condivisione è disabilitata per gli account free", + "DOWNLOAD_COLLECTION": "Scarica album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Sei sicuro di volere scaricare l'album interamente?

Tutti i file saranno messi in coda per il download

", + "CREATE_ALBUM_FAILED": "Operazione di creazione dell'album fallita, per favore riprova", + "SEARCH": "Ricerca", + "SEARCH_RESULTS": "Risultati della ricerca", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Posizione", + "CITY": "Posizione", + "DATE": "Data", + "FILE_NAME": "Nome file", + "THING": "Contenuto", + "FILE_CAPTION": "Descrizione", + "FILE_TYPE": "Tipo del file", + "CLIP": "" + }, + "photos_count_zero": "Nessuna memoria", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "Aggiungi all'album", + "SELECTED": "", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Questo video non può essere riprodotto nel tuo browser", + "PEOPLE": "Persone", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "volti non identificati", + "OBJECTS": "", + "TEXT": "testo", + "INFO": "Info ", + "INFO_OPTION": "", + "FILE_NAME": "Nome file", + "CAPTION_PLACEHOLDER": "Aggiungi una descrizione", + "LOCATION": "Posizione", + "SHOW_ON_MAP": "Guarda su OpenStreetMap", + "MAP": "Mappa", + "MAP_SETTINGS": "Impostazioni Mappa", + "ENABLE_MAPS": "Attivare Mappa?", + "ENABLE_MAP": "Attivare mappa", + "DISABLE_MAPS": "Disattivare Mappa?", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "VIEW_EXIF": "", + "NO_EXIF": "", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Due fattori", + "TWO_FACTOR_AUTHENTICATION": "Autenticazione a due fattori", + "TWO_FACTOR_QR_INSTRUCTION": "Scansiona il codice QR qui sotto con la tua app di autenticazione preferita", + "ENTER_CODE_MANUALLY": "Inserisci il codice manualmente", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Inserisci questo codice nella tua app di autenticazione preferita", + "SCAN_QR_CODE": "Oppure scansiona il codice QR", + "ENABLE_TWO_FACTOR": "Attiva due fattori", + "ENABLE": "Attiva", + "LOST_DEVICE": "", + "INCORRECT_CODE": "Codice errato", + "TWO_FACTOR_INFO": "Aggiungi un ulteriore livello di sicurezza richiedendo più informazioni rispetto a email e password per eseguire l'accesso al tuo account", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "", + "RECONFIGURE": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "Esporta dati", + "SELECT_FOLDER": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "Invia OTP", + "EMAIl_ALREADY_OWNED": "Email già in uso", + "ETAGS_BLOCKED": "", + "SKIPPED_VIDEOS_INFO": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "Caricamento fallito ", + "SKIPPED_FILES": "Ignora caricamenti", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "Caricamenti eseguiti con successo", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "SKIPPED_VIDEOS": "Video saltati", + "INPROGRESS_METADATA_EXTRACTION": "In corso", + "INPROGRESS_UPLOADS": "Caricamenti in corso", + "TOO_LARGE_UPLOADS": "File pesanti", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Spazio insufficiente", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Questi file non sono stati caricati perché supererebbero la capacità massima del tuo piano di spazio d'archiviazione", + "TOO_LARGE_INFO": "Questi file non sono stati caricati perché superano il nostro limite di pesantezza di un file", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "UPLOAD_TO_COLLECTION": "", + "UNCATEGORIZED": "", + "ARCHIVE": "Archivio", + "FAVORITES": "Preferiti", + "ARCHIVE_COLLECTION": "Album archiviato", + "ARCHIVE_SECTION_NAME": "Archivio", + "ALL_SECTION_NAME": "Tutto", + "MOVE_TO_COLLECTION": "Sposta nell'album", + "UNARCHIVE": "Rimuovi dall'archivio", + "UNARCHIVE_COLLECTION": "Rimuovi album dall'archivio", + "HIDE_COLLECTION": "Nascondi album", + "UNHIDE_COLLECTION": "Rimuovi album dai nascosti", + "MOVE": "Sposta", + "ADD": "Aggiungi", + "REMOVE": "Rimuovi", + "YES_REMOVE": "Sì, rimuovi", + "REMOVE_FROM_COLLECTION": "Rimuovi dall'album", + "TRASH": "Cestino", + "MOVE_TO_TRASH": "Sposta nel cestino", + "TRASH_FILES_MESSAGE": "Gli elementi selezionati verranno eliminati da tutti gli album e spostati nel cestino.", + "TRASH_FILE_MESSAGE": "Il file verrà eliminato da tutti gli album e spostato nel cestino.", + "DELETE_PERMANENTLY": "Elimina definitivamente", + "RESTORE": "Ripristina", + "RESTORE_TO_COLLECTION": "Ripristina nell'album", + "EMPTY_TRASH": "Svuota il cestino", + "EMPTY_TRASH_TITLE": "Vuoi svuotare il cestino?", + "EMPTY_TRASH_MESSAGE": "I file selezionati verranno eliminati definitivamente dal tuo account ente.", + "LEAVE_SHARED_ALBUM": "Sì, esci", + "LEAVE_ALBUM": "Abbandona l'album", + "LEAVE_SHARED_ALBUM_TITLE": "Abbandonare l'album condiviso?", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "Meno recente", + "SORT_BY_UPDATION_TIME_DESCENDING": "Ultimo aggiornamento", + "SORT_BY_NAME": "Nome", + "COMPRESS_THUMBNAILS": "Comprimi miniature", + "THUMBNAIL_REPLACED": "Miniature compresse", + "FIX_THUMBNAIL": "Comprimi", + "FIX_THUMBNAIL_LATER": "Comprimi più tardi", + "REPLACE_THUMBNAIL_NOT_STARTED": "", + "REPLACE_THUMBNAIL_COMPLETED": "", + "REPLACE_THUMBNAIL_NOOP": "", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "Installa", + "SHARING_DETAILS": "", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "Nessun partecipante", + "participants_one": "1 partecipante", + "participants_other": "{{count, number}} partecipanti", + "ADD_VIEWERS": "", + "PARTICIPANTS": "Partecipanti", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "Rimuovere?", + "CONFIRM_REMOVE": "Sì, rimuovi", + "MANAGE": "Gestisci", + "ADDED_AS": "Aggiunto come", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "Rimuovi partecipante", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "404 - non trovato", + "LINK_EXPIRED": "Link scaduto", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "LINK_PASSWORD_LOCK": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "MALICIOUS_CONTENT": "", + "COPYRIGHT": "", + "SHARED_USING": "", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "UPLOAD_FILES": "", + "UPLOAD_DIRS": "Cartella", + "UPLOAD_GOOGLE_TAKEOUT": "", + "DEDUPLICATE_FILES": "", + "AUTHENTICATOR_SECTION": "", + "NO_DUPLICATES_FOUND": "", + "CLUB_BY_CAPTURE_TIME": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Album", + "ALL_ALBUMS": "Tutti gli Album", + "ALBUMS": "Album", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "HIDDEN_ITEMS_SECTION_NAME": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "Crea account", + "COPIED": "", + "CANVAS_BLOCKED_TITLE": "", + "CANVAS_BLOCKED_MESSAGE": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "", + "RENEW_NOW": "", + "STORAGE": "", + "USED": "", + "YOU": "Tu", + "FAMILY": "Famiglia", + "FREE": "gratis", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "Ancora nessuna cartella aggiunta!", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "MONTH_SHORT": "", + "YEAR": "", + "FAMILY_PLAN": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "Cambia Cartella", + "TWO_MONTHS_FREE": "Ottieni 2 mesi gratis sui piani annuali", + "GB": "GB", + "POPULAR": "", + "FREE_PLAN_OPTION_LABEL": "", + "FREE_PLAN_DESCRIPTION": "1 GB per 1 anno", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "DRAG_AND_DROP_HINT": "", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "", + "AUTHENTICATE": "Autenticati", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "Oggi", + "YESTERDAY": "Ieri", + "NAME_PLACEHOLDER": "Nome...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "Seleziona tema", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "Più dettagli", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "Avanzate", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "Sicurezza password: Debole", + "PASSPHRASE_STRENGTH_MODERATE": "Sicurezza password: Moderata", + "PASSPHRASE_STRENGTH_STRONG": "Sicurezza password: Forte", + "PREFERENCES": "", + "LANGUAGE": "Lingua", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "dopo un'ora", + "DAY": "dopo un giorno", + "WEEK": "dopo una settimana", + "MONTH": "dopo un mese", + "YEAR": "dopo un anno" + }, + "COPY_LINK": "Copia link", + "DONE": "Fatto", + "LINK_SHARE_TITLE": "O condividi un link", + "REMOVE_LINK": "Rimuovi link", + "CREATE_PUBLIC_SHARING": "Crea link pubblico", + "PUBLIC_LINK_CREATED": "Link pubblick creato", + "PUBLIC_LINK_ENABLED": "Link pubblico attivato", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "EXPORT_NOTIFICATION": { + "START": "", + "IN_PROGRESS": "", + "FINISH": "", + "UP_TO_DATE": "" + }, + "CONTINUOUS_EXPORT": "", + "TOTAL_ITEMS": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "DELETE_ACCOUNT_REASON_LABEL": "", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Seleziona un motivo", + "DELETE_REASON": { + "MISSING_FEATURE": "", + "BROKEN_BEHAVIOR": "", + "FOUND_ANOTHER_SERVICE": "", + "NOT_LISTED": "" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "", + "CONFIRM_DELETE_ACCOUNT": "", + "FEEDBACK_REQUIRED": "", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "", + "HIDE": "", + "UNHIDE": "", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CRASH_REPORTING": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/nl-NL/translation.json b/web/apps/photos/public/locales/nl-NL/translation.json new file mode 100644 index 000000000..df869b0dd --- /dev/null +++ b/web/apps/photos/public/locales/nl-NL/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Privé back-ups
voor uw herinneringen
", + "HERO_SLIDE_1": "Standaard end-to-end versleuteld", + "HERO_SLIDE_2_TITLE": "
Veilig opgeslagen
in een kernbunker
", + "HERO_SLIDE_2": "Ontworpen om levenslang mee te gaan", + "HERO_SLIDE_3_TITLE": "
Overal
beschikbaar
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Inloggen", + "SIGN_UP": "Registreren", + "NEW_USER": "Nieuw bij ente", + "EXISTING_USER": "Bestaande gebruiker", + "ENTER_NAME": "Naam invoeren", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Voeg een naam toe zodat je vrienden weten wie ze moeten bedanken voor deze geweldige foto's!", + "ENTER_EMAIL": "Vul e-mailadres in", + "EMAIL_ERROR": "Vul een geldig e-mailadres in", + "REQUIRED": "Vereist", + "EMAIL_SENT": "Verificatiecode verzonden naar {{email}}", + "CHECK_INBOX": "Controleer je inbox (en spam) om verificatie te voltooien", + "ENTER_OTT": "Verificatiecode", + "RESEND_MAIL": "Code opnieuw versturen", + "VERIFY": "Verifiëren", + "UNKNOWN_ERROR": "Er is iets fout gegaan, probeer het opnieuw", + "INVALID_CODE": "Ongeldige verificatiecode", + "EXPIRED_CODE": "Uw verificatiecode is verlopen", + "SENDING": "Verzenden...", + "SENT": "Verzonden!", + "PASSWORD": "Wachtwoord", + "LINK_PASSWORD": "Voer wachtwoord in om het album te ontgrendelen", + "RETURN_PASSPHRASE_HINT": "Wachtwoord", + "SET_PASSPHRASE": "Wachtwoord instellen", + "VERIFY_PASSPHRASE": "Aanmelden", + "INCORRECT_PASSPHRASE": "Onjuist wachtwoord", + "ENTER_ENC_PASSPHRASE": "Voer een wachtwoord in dat we kunnen gebruiken om je gegevens te versleutelen", + "PASSPHRASE_DISCLAIMER": "We slaan je wachtwoord niet op, dus als je het vergeet, zullen we u niet kunnen helpen uw data te herstellen zonder een herstelcode.", + "WELCOME_TO_ENTE_HEADING": "Welkom bij ", + "WELCOME_TO_ENTE_SUBHEADING": "Foto opslag en delen met end to end encryptie", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Waar je beste foto's leven", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Encryptiecodes worden gegenereerd...", + "PASSPHRASE_HINT": "Wachtwoord", + "CONFIRM_PASSPHRASE": "Wachtwoord bevestigen", + "REFERRAL_CODE_HINT": "Hoe hoorde je over Ente? (optioneel)", + "REFERRAL_INFO": "Wij gebruiken geen tracking. Het zou helpen als je ons vertelt waar je ons gevonden hebt!", + "PASSPHRASE_MATCH_ERROR": "Wachtwoorden komen niet overeen", + "CONSOLE_WARNING_STOP": "STOP!", + "CONSOLE_WARNING_DESC": "Dit is een browserfunctie bedoeld voor ontwikkelaars. Gelieve hier geen niet-geverifieerde code te kopiëren/plakken.", + "CREATE_COLLECTION": "Nieuw album", + "ENTER_ALBUM_NAME": "Album naam", + "CLOSE_OPTION": "Sluiten (Esc)", + "ENTER_FILE_NAME": "Bestandsnaam", + "CLOSE": "Sluiten", + "NO": "Nee", + "NOTHING_HERE": "Nog niets te zien hier 👀", + "UPLOAD": "Uploaden", + "IMPORT": "Importeren", + "ADD_PHOTOS": "Foto's toevoegen", + "ADD_MORE_PHOTOS": "Meer foto's toevoegen", + "add_photos_one": "1 foto toevoegen", + "add_photos_other": "{{count, number}} foto's toevoegen", + "SELECT_PHOTOS": "Selecteer foto's", + "FILE_UPLOAD": "Bestand uploaden", + "UPLOAD_STAGE_MESSAGE": { + "0": "Upload wordt voorbereid", + "1": "Lezen van Google metadata bestanden", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} bestanden metadata uitgepakt", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} bestanden geback-upt", + "4": "Resterende uploads worden geannuleerd", + "5": "Back-up voltooid" + }, + "FILE_NOT_UPLOADED_LIST": "De volgende bestanden zijn niet geüpload", + "SUBSCRIPTION_EXPIRED": "Abonnement verlopen", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Uw abonnement is verlopen, gelieve vernieuwen", + "STORAGE_QUOTA_EXCEEDED": "Opslaglimiet overschreden", + "INITIAL_LOAD_DELAY_WARNING": "Eerste keer laden kan enige tijd duren", + "USER_DOES_NOT_EXIST": "Sorry, we konden geen account met dat e-mailadres vinden", + "NO_ACCOUNT": "Heb nog geen account", + "ACCOUNT_EXISTS": "Heb al een account", + "CREATE": "Creëren", + "DOWNLOAD": "Downloaden", + "DOWNLOAD_OPTION": "Downloaden (D)", + "DOWNLOAD_FAVORITES": "Favorieten downloaden", + "DOWNLOAD_UNCATEGORIZED": "Ongecategoriseerd downloaden", + "DOWNLOAD_HIDDEN_ITEMS": "Verborgen bestanden downloaden", + "COPY_OPTION": "Kopiëren als PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Schakelen volledig scherm modus (F)", + "ZOOM_IN_OUT": "In/uitzoomen", + "PREVIOUS": "Vorige (←)", + "NEXT": "Volgende (→)", + "TITLE_PHOTOS": "Ente Foto's", + "TITLE_ALBUMS": "Ente Foto's", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Je eerste foto uploaden", + "IMPORT_YOUR_FOLDERS": "Importeer uw mappen", + "UPLOAD_DROPZONE_MESSAGE": "Sleep om een back-up van je bestanden te maken", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Sleep om map aan watched folders toe te voegen", + "TRASH_FILES_TITLE": "Bestanden verwijderen?", + "TRASH_FILE_TITLE": "Verwijder bestand?", + "DELETE_FILES_TITLE": "Onmiddellijk verwijderen?", + "DELETE_FILES_MESSAGE": "Geselecteerde bestanden zullen permanent worden verwijderd van je ente account.", + "DELETE": "Verwijderen", + "DELETE_OPTION": "Verwijderen (DEL)", + "FAVORITE_OPTION": "Favoriet (L)", + "UNFAVORITE_OPTION": "Verwijderen uit Favorieten (L)", + "MULTI_FOLDER_UPLOAD": "Meerdere mappen gedetecteerd", + "UPLOAD_STRATEGY_CHOICE": "Wilt u deze uploaden naar", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Één enkel album", + "OR": "of", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Aparte albums maken", + "SESSION_EXPIRED_MESSAGE": "Uw sessie is verlopen. Meld u opnieuw aan om verder te gaan", + "SESSION_EXPIRED": "Sessie verlopen", + "PASSWORD_GENERATION_FAILED": "Uw browser kon geen sterke sleutel genereren die voldoet aan onze versleutelingsstandaarden. Probeer de mobiele app of een andere browser te gebruiken", + "CHANGE_PASSWORD": "Wachtwoord wijzigen", + "GO_BACK": "Ga terug", + "RECOVERY_KEY": "Herstelsleutel", + "SAVE_LATER": "Doe dit later", + "SAVE": "Sleutel opslaan", + "RECOVERY_KEY_DESCRIPTION": "Als je je wachtwoord vergeet, kun je alleen met deze sleutel je gegevens herstellen.", + "RECOVER_KEY_GENERATION_FAILED": "Herstelcode kon niet worden gegenereerd, probeer het opnieuw", + "KEY_NOT_STORED_DISCLAIMER": "We slaan deze sleutel niet op, bewaar dit op een veilige plaats", + "FORGOT_PASSWORD": "Wachtwoord vergeten", + "RECOVER_ACCOUNT": "Account herstellen", + "RECOVERY_KEY_HINT": "Herstelsleutel", + "RECOVER": "Herstellen", + "NO_RECOVERY_KEY": "Geen herstelsleutel?", + "INCORRECT_RECOVERY_KEY": "Onjuiste herstelsleutel", + "SORRY": "Sorry", + "NO_RECOVERY_KEY_MESSAGE": "Door de aard van ons end-to-end encryptieprotocol kunnen je gegevens niet worden ontsleuteld zonder je wachtwoord of herstelsleutel", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Stuur een e-mail naar {{emailID}} vanaf het door jou geregistreerde e-mailadres", + "CONTACT_SUPPORT": "Klantenservice", + "REQUEST_FEATURE": "Vraag nieuwe functie aan", + "SUPPORT": "Ondersteuning", + "CONFIRM": "Bevestigen", + "CANCEL": "Annuleren", + "LOGOUT": "Uitloggen", + "DELETE_ACCOUNT": "Account verwijderen", + "DELETE_ACCOUNT_MESSAGE": "

Stuur een e-mail naar {{emailID}} vanaf uw geregistreerde e-mailadres.

Uw aanvraag wordt binnen 72 uur verwerkt.

", + "LOGOUT_MESSAGE": "Weet u zeker dat u wilt uitloggen?", + "CHANGE_EMAIL": "E-mail wijzigen", + "OK": "Oké", + "SUCCESS": "Succes", + "ERROR": "Foutmelding", + "MESSAGE": "Melding", + "INSTALL_MOBILE_APP": "Installeer onze Android of iOS app om automatisch een back-up te maken van al uw foto's", + "DOWNLOAD_APP_MESSAGE": "Sorry, deze bewerking wordt momenteel alleen ondersteund op onze desktop app", + "DOWNLOAD_APP": "Download de desktop app", + "EXPORT": "Data exporteren", + "SUBSCRIPTION": "Abonnement", + "SUBSCRIBE": "Abonneren", + "MANAGEMENT_PORTAL": "Betaalmethode beheren", + "MANAGE_FAMILY_PORTAL": "Familie abonnement beheren", + "LEAVE_FAMILY_PLAN": "Familie abonnement verlaten", + "LEAVE": "Verlaten", + "LEAVE_FAMILY_CONFIRM": "Weet je zeker dat je het familie-plan wilt verlaten?", + "CHOOSE_PLAN": "Kies uw abonnement", + "MANAGE_PLAN": "Beheer uw abonnement", + "ACTIVE": "Actief", + "OFFLINE_MSG": "Je bent offline, lokaal opgeslagen herinneringen worden getoond", + "FREE_SUBSCRIPTION_INFO": "Je hebt het gratis abonnement dat verloopt op {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "U hebt een familieplan dat beheerd wordt door", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Vernieuwt op {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Eindigt op {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Uw abonnement loopt af op {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Jouw {{storage, string}} add-on is geldig tot {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "U heeft uw opslaglimiet overschreden, gelieve upgraden", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

We hebben uw betaling ontvangen

Uw abonnement is geldig tot {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Uw aankoop is geannuleerd, probeer het opnieuw als u zich wilt abonneren", + "SUBSCRIPTION_PURCHASE_FAILED": "Betaling van abonnement mislukt Probeer het opnieuw", + "SUBSCRIPTION_UPDATE_FAILED": "Niet gelukt om abonnement bij te werken, probeer het opnieuw", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Het spijt ons, maar de betaling is mislukt bij het in rekening brengen van uw kaart, gelieve uw betaalmethode bij te werken en het opnieuw te proberen", + "STRIPE_AUTHENTICATION_FAILED": "We zijn niet in staat om uw betaalmethode te verifiëren. Kies een andere betaalmethode en probeer het opnieuw", + "UPDATE_PAYMENT_METHOD": "Betalingsmethode bijwerken", + "MONTHLY": "Maandelijks", + "YEARLY": "Jaarlijks", + "UPDATE_SUBSCRIPTION_MESSAGE": "Weet u zeker dat u uw abonnement wilt wijzigen?", + "UPDATE_SUBSCRIPTION": "Abonnement wijzigen", + "CANCEL_SUBSCRIPTION": "Abonnement opzeggen", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Al je gegevens zullen worden verwijderd van onze servers aan het einde van deze factureringsperiode.

Weet u zeker dat u uw abonnement wilt opzeggen?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Weet je zeker dat je je abonnement wilt opzeggen?

", + "SUBSCRIPTION_CANCEL_FAILED": "Abonnement opzeggen mislukt", + "SUBSCRIPTION_CANCEL_SUCCESS": "Abonnement succesvol geannuleerd", + "REACTIVATE_SUBSCRIPTION": "Abonnement opnieuw activeren", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Zodra je weer bent geactiveerd, zal je worden gefactureerd op {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Abonnement succesvol geactiveerd ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Heractiveren van abonnementsverlenging is mislukt", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Bedankt", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Mobiel abonnement opzeggen", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Annuleer je abonnement via de mobiele app om je abonnement hier te activeren", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Neem contact met ons op via {{emailID}} om uw abonnement te beheren", + "RENAME": "Naam wijzigen", + "RENAME_FILE": "Bestandsnaam wijzigen", + "RENAME_COLLECTION": "Albumnaam wijzigen", + "DELETE_COLLECTION_TITLE": "Verwijder album?", + "DELETE_COLLECTION": "Verwijder album", + "DELETE_COLLECTION_MESSAGE": "Verwijder de foto's (en video's) van dit album ook uit alle andere albums waar deze deel van uitmaken?", + "DELETE_PHOTOS": "Foto's verwijderen", + "KEEP_PHOTOS": "Foto's behouden", + "SHARE": "Delen", + "SHARE_COLLECTION": "Album delen", + "SHAREES": "Gedeeld met", + "SHARE_WITH_SELF": "Oeps, je kunt niet met jezelf delen", + "ALREADY_SHARED": "Oeps, je deelt dit al met {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Album delen niet toegestaan", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Delen is uitgeschakeld voor gratis accounts", + "DOWNLOAD_COLLECTION": "Download album", + "DOWNLOAD_COLLECTION_MESSAGE": "

Weet je zeker dat je het volledige album wilt downloaden?

Alle bestanden worden in de wachtrij geplaatst voor downloaden

", + "CREATE_ALBUM_FAILED": "Aanmaken van album mislukt, probeer het opnieuw", + "SEARCH": "Zoeken", + "SEARCH_RESULTS": "Zoekresultaten", + "NO_RESULTS": "Geen resultaten gevonden", + "SEARCH_HINT": "Zoeken naar albums, datums ...", + "SEARCH_TYPE": { + "COLLECTION": "Album", + "LOCATION": "Locatie", + "CITY": "Locatie", + "DATE": "Datum", + "FILE_NAME": "Bestandsnaam", + "THING": "Inhoud", + "FILE_CAPTION": "Omschrijving", + "FILE_TYPE": "Bestandstype", + "CLIP": "Magische" + }, + "photos_count_zero": "Geen herinneringen", + "photos_count_one": "1 herinnering", + "photos_count_other": "{{count, number}} herinneringen", + "TERMS_AND_CONDITIONS": "Ik ga akkoord met de gebruiksvoorwaarden en privacybeleid", + "ADD_TO_COLLECTION": "Toevoegen aan album", + "SELECTED": "geselecteerd", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Deze video kan niet afgespeeld worden op uw browser", + "PEOPLE": "Personen", + "INDEXING_SCHEDULED": "indexering is gepland...", + "ANALYZING_PHOTOS": "analyseren van nieuwe foto's {{indexStatus.nSyncedFiles}} van {{indexStatus.nTotalFiles}} gedaan)...", + "INDEXING_PEOPLE": "mensen indexeren in {{indexStatus.nSyncedFiles}} foto's...", + "INDEXING_DONE": "{{indexStatus.nSyncedFiles}} geïndexeerde foto's", + "UNIDENTIFIED_FACES": "ongeïdentificeerde gezichten", + "OBJECTS": "objecten", + "TEXT": "tekst", + "INFO": "Info ", + "INFO_OPTION": "Info (I)", + "FILE_NAME": "Bestandsnaam", + "CAPTION_PLACEHOLDER": "Voeg een beschrijving toe", + "LOCATION": "Locatie", + "SHOW_ON_MAP": "Bekijk op OpenStreetMap", + "MAP": "Kaart", + "MAP_SETTINGS": "Kaart instellingen", + "ENABLE_MAPS": "Kaarten inschakelen?", + "ENABLE_MAP": "Kaarten inschakelen", + "DISABLE_MAPS": "Kaarten uitzetten?", + "ENABLE_MAP_DESCRIPTION": "

Dit toont jouw foto's op een wereldkaart.

Deze kaart wordt gehost door Open Street Map, en de exacte locaties van jouw foto's worden nooit gedeeld.

Je kunt deze functie op elk gewenst moment uitschakelen via de instellingen.

", + "DISABLE_MAP_DESCRIPTION": "

Dit schakelt de weergave van je foto's op een wereldkaart uit.

Je kunt deze functie op elk gewenst moment inschakelen via Instellingen.

", + "DISABLE_MAP": "Kaarten uitzetten", + "DETAILS": "Details", + "VIEW_EXIF": "Bekijk alle EXIF gegevens", + "NO_EXIF": "Geen EXIF gegevens", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Tweestaps", + "TWO_FACTOR_AUTHENTICATION": "Tweestapsverificatie", + "TWO_FACTOR_QR_INSTRUCTION": "Scan de onderstaande QR-code met uw favoriete verificatie app", + "ENTER_CODE_MANUALLY": "Voer de code handmatig in", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Voer deze code in in uw favoriete verificatie app", + "SCAN_QR_CODE": "Scan QR-code in plaats daarvan", + "ENABLE_TWO_FACTOR": "Tweestapsverificatie inschakelen", + "ENABLE": "Inschakelen", + "LOST_DEVICE": "Tweestapsverificatie apparaat verloren", + "INCORRECT_CODE": "Onjuiste code", + "TWO_FACTOR_INFO": "Voeg een extra beveiligingslaag toe door meer dan uw e-mailadres en wachtwoord te vereisen om in te loggen op uw account", + "DISABLE_TWO_FACTOR_LABEL": "Schakel tweestapsverificatie uit", + "UPDATE_TWO_FACTOR_LABEL": "Update uw verificatie apparaat", + "DISABLE": "Uitschakelen", + "RECONFIGURE": "Herconfigureren", + "UPDATE_TWO_FACTOR": "Tweestapsverificatie bijwerken", + "UPDATE_TWO_FACTOR_MESSAGE": "Verder gaan zal elk eerder geconfigureerde verificatie apparaat ontzeggen", + "UPDATE": "Bijwerken", + "DISABLE_TWO_FACTOR": "Tweestapsverificatie uitschakelen", + "DISABLE_TWO_FACTOR_MESSAGE": "Weet u zeker dat u tweestapsverificatie wilt uitschakelen", + "TWO_FACTOR_DISABLE_FAILED": "Uitschakelen van tweestapsverificatie is mislukt, probeer het opnieuw", + "EXPORT_DATA": "Gegevens exporteren", + "SELECT_FOLDER": "Map selecteren", + "DESTINATION": "Bestemming", + "START": "Start", + "LAST_EXPORT_TIME": "Tijd laatste export", + "EXPORT_AGAIN": "Opnieuw synchroniseren", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Lokale opslag niet toegankelijk", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Je browser of een extensie blokkeert ente om gegevens op te slaan in de lokale opslag. Probeer deze pagina te laden na het aanpassen van de browser surfmodus.", + "SEND_OTT": "Stuur OTP", + "EMAIl_ALREADY_OWNED": "E-mail al in gebruik", + "ETAGS_BLOCKED": "

We kunnen de volgende bestanden niet uploaden vanwege uw browserconfiguratie.

Schakel alle extensies uit die mogelijk voorkomen dat ente eTags kan gebruiken om grote bestanden te uploaden, of gebruik onze desktop app voor een betrouwbaardere import ervaring.

", + "SKIPPED_VIDEOS_INFO": "

We ondersteunen het toevoegen van video's via openbare links momenteel niet.

Om video's te delen, meld je aan bij ente en deel met de beoogde ontvangers via hun e-mail

", + "LIVE_PHOTOS_DETECTED": "De foto en video bestanden van je Live Photos zijn samengevoegd tot één enkel bestand", + "RETRY_FAILED": "Probeer mislukte uploads nogmaals", + "FAILED_UPLOADS": "Mislukte uploads ", + "SKIPPED_FILES": "Genegeerde uploads", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Thumbnail generatie mislukt", + "UNSUPPORTED_FILES": "Niet-ondersteunde bestanden", + "SUCCESSFUL_UPLOADS": "Succesvolle uploads", + "SKIPPED_INFO": "Deze zijn overgeslagen omdat er bestanden zijn met overeenkomende namen in hetzelfde album", + "UNSUPPORTED_INFO": "ente ondersteunt deze bestandsformaten nog niet", + "BLOCKED_UPLOADS": "Geblokkeerde uploads", + "SKIPPED_VIDEOS": "Overgeslagen video's", + "INPROGRESS_METADATA_EXTRACTION": "In behandeling", + "INPROGRESS_UPLOADS": "Bezig met uploaden", + "TOO_LARGE_UPLOADS": "Grote bestanden", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Onvoldoende opslagruimte", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Deze bestanden zijn niet geüpload omdat ze de maximale grootte van uw opslagplan overschrijden", + "TOO_LARGE_INFO": "Deze bestanden zijn niet geüpload omdat ze onze limiet voor bestandsgrootte overschrijden", + "THUMBNAIL_GENERATION_FAILED_INFO": "Deze bestanden zijn geüpload, maar helaas konden we geen thumbnails voor ze genereren.", + "UPLOAD_TO_COLLECTION": "Uploaden naar album", + "UNCATEGORIZED": "Ongecategoriseerd", + "ARCHIVE": "Archiveren", + "FAVORITES": "Favorieten", + "ARCHIVE_COLLECTION": "Album archiveren", + "ARCHIVE_SECTION_NAME": "Archief", + "ALL_SECTION_NAME": "Alle", + "MOVE_TO_COLLECTION": "Verplaats naar album", + "UNARCHIVE": "Uit archief halen", + "UNARCHIVE_COLLECTION": "Album uit archief halen", + "HIDE_COLLECTION": "Verberg album", + "UNHIDE_COLLECTION": "Album zichtbaar maken", + "MOVE": "Verplaatsen", + "ADD": "Toevoegen", + "REMOVE": "Verwijderen", + "YES_REMOVE": "Ja, verwijderen", + "REMOVE_FROM_COLLECTION": "Verwijderen uit album", + "TRASH": "Prullenbak", + "MOVE_TO_TRASH": "Verplaatsen naar prullenbak", + "TRASH_FILES_MESSAGE": "De geselecteerde bestanden worden verwijderd uit alle albums en verplaatst naar de prullenbak.", + "TRASH_FILE_MESSAGE": "Het bestand wordt uit alle albums verwijderd en verplaatst naar de prullenbak.", + "DELETE_PERMANENTLY": "Permanent verwijderen", + "RESTORE": "Herstellen", + "RESTORE_TO_COLLECTION": "Terugzetten naar album", + "EMPTY_TRASH": "Prullenbak leegmaken", + "EMPTY_TRASH_TITLE": "Prullenbak leegmaken?", + "EMPTY_TRASH_MESSAGE": "Geselecteerde bestanden zullen permanent worden verwijderd van uw ente account.", + "LEAVE_SHARED_ALBUM": "Ja, verwijderen", + "LEAVE_ALBUM": "Album verlaten", + "LEAVE_SHARED_ALBUM_TITLE": "Gedeeld album verwijderen?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Je verlaat het album, en het zal niet meer zichtbaar voor je zijn.", + "NOT_FILE_OWNER": "U kunt bestanden niet verwijderen in een gedeeld album", + "CONFIRM_SELF_REMOVE_MESSAGE": "De geselecteerde items worden verwijderd uit dit album. De items die alleen in dit album staan, worden verplaatst naar 'Niet gecategoriseerd'.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Sommige van de items die u verwijdert zijn door andere mensen toegevoegd, en u verliest de toegang daartoe.", + "SORT_BY_CREATION_TIME_ASCENDING": "Oudste", + "SORT_BY_UPDATION_TIME_DESCENDING": "Laatst gewijzigd op", + "SORT_BY_NAME": "Naam", + "COMPRESS_THUMBNAILS": "Comprimeren van thumbnails", + "THUMBNAIL_REPLACED": "Thumbnails gecomprimeerd", + "FIX_THUMBNAIL": "Comprimeren", + "FIX_THUMBNAIL_LATER": "Later comprimeren", + "REPLACE_THUMBNAIL_NOT_STARTED": "Sommige van uw video thumbnails kunnen worden gecomprimeerd om ruimte te besparen. Wilt u dat ente ze comprimeert?", + "REPLACE_THUMBNAIL_COMPLETED": "Alle thumbnails zijn gecomprimeerd", + "REPLACE_THUMBNAIL_NOOP": "Je hebt geen thumbnails die verder gecomprimeerd kunnen worden", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Kon sommige van uw thumbnails niet comprimeren, probeer het opnieuw", + "FIX_CREATION_TIME": "Herstel tijd", + "FIX_CREATION_TIME_IN_PROGRESS": "Tijd aan het herstellen", + "CREATION_TIME_UPDATED": "Bestandstijd bijgewerkt", + "UPDATE_CREATION_TIME_NOT_STARTED": "Selecteer de optie die u wilt gebruiken", + "UPDATE_CREATION_TIME_COMPLETED": "Alle bestanden succesvol bijgewerkt", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "Bestandstijd update mislukt voor sommige bestanden, probeer het opnieuw", + "CAPTION_CHARACTER_LIMIT": "5000 tekens max", + "DATE_TIME_ORIGINAL": "EXIF:DatumTijdOrigineel", + "DATE_TIME_DIGITIZED": "EXIF:DatumTijdDigitaliseerd", + "METADATA_DATE": "EXIF:MetadataDatum", + "CUSTOM_TIME": "Aangepaste tijd", + "REOPEN_PLAN_SELECTOR_MODAL": "Abonnementen heropenen", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Kon abonnementen niet openen", + "INSTALL": "Installeren", + "SHARING_DETAILS": "Delen van informatie", + "MODIFY_SHARING": "Delen wijzigen", + "ADD_COLLABORATORS": "Samenwerker toevoegen", + "ADD_NEW_EMAIL": "Nieuw e-mailadres toevoegen", + "shared_with_people_zero": "Delen met specifieke mensen", + "shared_with_people_one": "Gedeeld met 1 persoon", + "shared_with_people_other": "Gedeeld met {{count, number}} mensen", + "participants_zero": "Geen deelnemers", + "participants_one": "1 deelnemer", + "participants_other": "{{count, number}} deelnemers", + "ADD_VIEWERS": "Voeg kijkers toe", + "PARTICIPANTS": "Deelnemers", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} zullen geen foto's meer kunnen toevoegen aan dit album

Ze zullen nog steeds bestaande foto's kunnen verwijderen die door hen zijn toegevoegd

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} zal foto's aan het album kunnen toevoegen", + "CONVERT_TO_VIEWER": "Ja, converteren naar kijker", + "CONVERT_TO_COLLABORATOR": "Ja, converteren naar samenwerker", + "CHANGE_PERMISSION": "Rechten aanpassen?", + "REMOVE_PARTICIPANT": "Verwijderen?", + "CONFIRM_REMOVE": "Ja, verwijderen", + "MANAGE": "Beheren", + "ADDED_AS": "Toegevoegd als", + "COLLABORATOR_RIGHTS": "Samenwerkers kunnen foto's en video's toevoegen aan het gedeelde album", + "REMOVE_PARTICIPANT_HEAD": "Deelnemer verwijderen", + "OWNER": "Eigenaar", + "COLLABORATORS": "Samenwerker", + "ADD_MORE": "Meer toevoegen", + "VIEWERS": "Kijkers", + "OR_ADD_EXISTING": "Of kies een bestaande", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} zullen worden verwijderd uit het gedeelde album

Alle door hen toegevoegde foto's worden ook uit het album verwijderd

", + "NOT_FOUND": "404 - niet gevonden", + "LINK_EXPIRED": "Link verlopen", + "LINK_EXPIRED_MESSAGE": "Deze link is verlopen of uitgeschakeld!", + "MANAGE_LINK": "Link beheren", + "LINK_TOO_MANY_REQUESTS": "Dit album is te populair voor ons om te verwerken!", + "FILE_DOWNLOAD": "Downloads toestaan", + "LINK_PASSWORD_LOCK": "Wachtwoord versleuteling", + "PUBLIC_COLLECT": "Foto's toevoegen toestaan", + "LINK_DEVICE_LIMIT": "Apparaat limiet", + "NO_DEVICE_LIMIT": "Geen", + "LINK_EXPIRY": "Vervaldatum link", + "NEVER": "Nooit", + "DISABLE_FILE_DOWNLOAD": "Download uitschakelen", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Weet u zeker dat u de downloadknop voor bestanden wilt uitschakelen?

Kijkers kunnen nog steeds screenshots maken of een kopie van uw foto's opslaan met behulp van externe hulpmiddelen.

", + "MALICIOUS_CONTENT": "Bevat kwaadwillende inhoud", + "COPYRIGHT": "Schending van het auteursrecht van iemand die ik mag vertegenwoordigen", + "SHARED_USING": "Gedeeld via ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Gebruik code {{referralCode}} om 10 GB gratis te krijgen", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "Schakel cijfercode vergrendeling uit", + "DISABLE_PASSWORD_MESSAGE": "Weet u zeker dat u de cijfercode vergrendeling wilt uitschakelen?", + "PASSWORD_LOCK": "Cijfercode vergrendeling", + "LOCK": "Vergrendeling", + "DOWNLOAD_UPLOAD_LOGS": "Logboeken voor foutmeldingen", + "UPLOAD_FILES": "Bestand", + "UPLOAD_DIRS": "Map", + "UPLOAD_GOOGLE_TAKEOUT": "Google takeout", + "DEDUPLICATE_FILES": "Dubbele bestanden verwijderen", + "AUTHENTICATOR_SECTION": "Verificatie apparaat", + "NO_DUPLICATES_FOUND": "Je hebt geen dubbele bestanden die kunnen worden gewist", + "CLUB_BY_CAPTURE_TIME": "Samenvoegen op tijd", + "FILES": "Bestanden", + "EACH": "Elke", + "DEDUPLICATE_BASED_ON_SIZE": "De volgende bestanden zijn samengevoegd op basis van hun groottes. Controleer en verwijder items waarvan je denkt dat ze dubbel zijn", + "STOP_ALL_UPLOADS_MESSAGE": "Weet u zeker dat u wilt stoppen met alle uploads die worden uitgevoerd?", + "STOP_UPLOADS_HEADER": "Stoppen met uploaden?", + "YES_STOP_UPLOADS": "Ja, stop uploaden", + "STOP_DOWNLOADS_HEADER": "Downloaden stoppen?", + "YES_STOP_DOWNLOADS": "Ja, downloads stoppen", + "STOP_ALL_DOWNLOADS_MESSAGE": "Weet je zeker dat je wilt stoppen met alle downloads die worden uitgevoerd?", + "albums_one": "1 Album", + "albums_other": "{{count, number}} Albums", + "ALL_ALBUMS": "Alle albums", + "ALBUMS": "Albums", + "ALL_HIDDEN_ALBUMS": "Alle verborgen albums", + "HIDDEN_ALBUMS": "Verborgen albums", + "HIDDEN_ITEMS": "Verborgen bestanden", + "HIDDEN_ITEMS_SECTION_NAME": "Verborgen_items", + "ENTER_TWO_FACTOR_OTP": "Voer de 6-cijferige code van uw verificatie app in.", + "CREATE_ACCOUNT": "Account aanmaken", + "COPIED": "Gekopieerd", + "CANVAS_BLOCKED_TITLE": "Kan thumbnail niet genereren", + "CANVAS_BLOCKED_MESSAGE": "

Het lijkt erop dat uw browser geen toegang heeft tot canvas, die nodig is om thumbnails voor uw foto's te genereren

Schakel toegang tot het canvas van uw browser in, of bekijk onze desktop app

", + "WATCH_FOLDERS": "Monitor mappen", + "UPGRADE_NOW": "Nu upgraden", + "RENEW_NOW": "Nu verlengen", + "STORAGE": "Opslagruimte", + "USED": "gebruikt", + "YOU": "Jij", + "FAMILY": "Familie", + "FREE": "free", + "OF": "van", + "WATCHED_FOLDERS": "Gemonitorde mappen", + "NO_FOLDERS_ADDED": "Nog geen mappen toegevoegd!", + "FOLDERS_AUTOMATICALLY_MONITORED": "De mappen die u hier toevoegt worden automatisch gemonitord", + "UPLOAD_NEW_FILES_TO_ENTE": "Nieuwe bestanden uploaden naar ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Verwijderde bestanden van ente opruimen", + "ADD_FOLDER": "Map toevoegen", + "STOP_WATCHING": "Stop monitoren", + "STOP_WATCHING_FOLDER": "Stop monitoren van map?", + "STOP_WATCHING_DIALOG_MESSAGE": "Uw bestaande bestanden zullen niet worden verwijderd, maar ente stopt met het automatisch bijwerken van het gekoppelde ente album bij wijzigingen in deze map.", + "YES_STOP": "Ja, stop", + "MONTH_SHORT": "mo", + "YEAR": "jaar", + "FAMILY_PLAN": "Familie abonnement", + "DOWNLOAD_LOGS": "Logboek downloaden", + "DOWNLOAD_LOGS_MESSAGE": "

Dit zal logboeken downloaden, die u ons kunt e-mailen om te helpen bij het debuggen van uw probleem.

Houd er rekening mee dat bestandsnamen worden opgenomen om problemen met specifieke bestanden bij te houden.

", + "CHANGE_FOLDER": "Map wijzigen", + "TWO_MONTHS_FREE": "Krijg 2 maanden gratis op jaarlijkse abonnementen", + "GB": "GB", + "POPULAR": "Populair", + "FREE_PLAN_OPTION_LABEL": "Doorgaan met gratis account", + "FREE_PLAN_DESCRIPTION": "1 GB voor 1 jaar", + "CURRENT_USAGE": "Huidig gebruik is {{usage}}", + "WEAK_DEVICE": "De webbrowser die u gebruikt is niet krachtig genoeg om uw foto's te versleutelen. Probeer in te loggen op uw computer, of download de ente mobiel/desktop app.", + "DRAG_AND_DROP_HINT": "Of sleep en plaats in het ente venster", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Uw geüploade gegevens worden gepland voor verwijdering, en uw account zal permanent worden verwijderd.

Deze actie is onomkeerbaar.", + "AUTHENTICATE": "Verifiëren", + "UPLOADED_TO_SINGLE_COLLECTION": "Geüpload naar enkele collectie", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Geüpload naar verschillende collecties", + "NEVERMIND": "Laat maar", + "UPDATE_AVAILABLE": "Update beschikbaar", + "UPDATE_INSTALLABLE_MESSAGE": "Er staat een nieuwe versie van ente klaar om te worden geïnstalleerd.", + "INSTALL_NOW": "Nu installeren", + "INSTALL_ON_NEXT_LAUNCH": "Installeren bij volgende start", + "UPDATE_AVAILABLE_MESSAGE": "Er is een nieuwe versie van ente vrijgegeven, maar deze kan niet automatisch worden gedownload en geïnstalleerd.", + "DOWNLOAD_AND_INSTALL": "Downloaden en installeren", + "IGNORE_THIS_VERSION": "Negeer deze versie", + "TODAY": "Vandaag", + "YESTERDAY": "Gisteren", + "NAME_PLACEHOLDER": "Naam...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Kan geen albums maken uit bestand/map mix", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Je hebt een mix van bestanden en mappen gesleept en laten vallen.

Geef ofwel alleen bestanden aan, of alleen mappen bij het selecteren van de optie om afzonderlijke albums te maken

", + "CHOSE_THEME": "Kies thema", + "ML_SEARCH": "ML zoeken (bèta)", + "ENABLE_ML_SEARCH_DESCRIPTION": "

Dit zal algoritmes op het apparaat inschakelen die zullen beginnen met het lokaal analyseren van uw geüploade foto's.

Voor het eerst na inloggen of het inschakelen van deze functie zal het alle afbeeldingen op het lokale apparaat downloaden om ze te analyseren. Schakel dit dus alleen in als je akkoord bent met gegevensverbruik en lokale verwerking van alle afbeeldingen in uw fotobibliotheek.

Als dit de eerste keer is dat uw dit inschakelt, vragen we u ook om toestemming om gegevens te verwerken.

", + "ML_MORE_DETAILS": "Meer details", + "ENABLE_FACE_SEARCH": "Zoeken op gezichten inschakelen", + "ENABLE_FACE_SEARCH_TITLE": "Zoeken op gezichten inschakelen?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Als u zoeken op gezichten inschakelt, analyseert ente de gezichtsgeometrie uit uw foto's. Dit gebeurt op uw apparaat en alle gegenereerde biometrische gegevens worden end-to-end versleuteld.

Klik hier voor meer informatie over deze functie in ons privacybeleid

", + "DISABLE_BETA": "Bèta uitschakelen", + "DISABLE_FACE_SEARCH": "Zoeken op gezichten uitschakelen", + "DISABLE_FACE_SEARCH_TITLE": "Zoeken op gezichten uitschakelen?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente zal stoppen met het analyseren van de gezichtsgeometrie, en zal ML zoeken (beta) uitschakelen

U kan zoeken op gezichten opnieuw inschakelen wanneer u wilt, dus deze handeling is veilig.

", + "ADVANCED": "Geavanceerd", + "FACE_SEARCH_CONFIRMATION": "Ik begrijp het, en wil ente toestaan om gezichten te analyseren", + "LABS": "Lab's", + "YOURS": "jouw", + "PASSPHRASE_STRENGTH_WEAK": "Wachtwoord sterkte: Zwak", + "PASSPHRASE_STRENGTH_MODERATE": "Wachtwoord sterkte: Matig", + "PASSPHRASE_STRENGTH_STRONG": "Wachtwoord sterkte: Sterk", + "PREFERENCES": "Instellingen", + "LANGUAGE": "Taal", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Ongeldige export map", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

De export map die u heeft geselecteerd bestaat niet.

Selecteer een geldige map.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Abonnementsverificatie mislukt", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "na één uur", + "DAY": "na één dag", + "WEEK": "na één week", + "MONTH": "na één maand", + "YEAR": "na één jaar" + }, + "COPY_LINK": "Link kopiëren", + "DONE": "Voltooid", + "LINK_SHARE_TITLE": "Of deel een link", + "REMOVE_LINK": "Link verwijderen", + "CREATE_PUBLIC_SHARING": "Maak publieke link", + "PUBLIC_LINK_CREATED": "Publieke link aangemaakt", + "PUBLIC_LINK_ENABLED": "Publieke link ingeschakeld", + "COLLECT_PHOTOS": "Foto's verzamelen", + "PUBLIC_COLLECT_SUBTEXT": "Sta toe dat mensen met de link ook foto's kunnen toevoegen aan het gedeelde album.", + "STOP_EXPORT": "Stoppen", + "EXPORT_PROGRESS": "{{progress.success}} / {{progress.total}} bestanden geëxporteerd", + "MIGRATING_EXPORT": "Voorbereiden...", + "RENAMING_COLLECTION_FOLDERS": "Albumnamen hernoemen...", + "TRASHING_DELETED_FILES": "Verwijderde bestanden naar prullenbak...", + "TRASHING_DELETED_COLLECTIONS": "Verwijderde albums naar prullenbak...", + "EXPORT_NOTIFICATION": { + "START": "Exporteren begonnen", + "IN_PROGRESS": "Exporteren is al bezig", + "FINISH": "Exporteren voltooid", + "UP_TO_DATE": "Geen nieuwe bestanden om te exporteren" + }, + "CONTINUOUS_EXPORT": "Continue synchroniseren", + "TOTAL_ITEMS": "Totaal aantal bestanden", + "PENDING_ITEMS": "Bestanden in behandeling", + "EXPORT_STARTING": "Exporteren begonnen...", + "DELETE_ACCOUNT_REASON_LABEL": "Wat is de belangrijkste reden waarom je jouw account verwijdert?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Kies een reden", + "DELETE_REASON": { + "MISSING_FEATURE": "Ik mis een belangrijke functie", + "BROKEN_BEHAVIOR": "De app of een bepaalde functie functioneert niet zoals ik verwacht", + "FOUND_ANOTHER_SERVICE": "Ik heb een andere dienst gevonden die me beter bevalt", + "NOT_LISTED": "Mijn reden wordt niet vermeld" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "We vinden het jammer je te zien gaan. Deel alsjeblieft je feedback om ons te helpen verbeteren.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Feedback", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Ja, ik wil permanent mijn account inclusief alle gegevens verwijderen", + "CONFIRM_DELETE_ACCOUNT": "Account verwijderen bevestigen", + "FEEDBACK_REQUIRED": "Help ons alsjeblieft met deze informatie", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "Wat doet de andere dienst beter?", + "RECOVER_TWO_FACTOR": "Herstel tweestaps", + "at": "om", + "AUTH_NEXT": "volgende", + "AUTH_DOWNLOAD_MOBILE_APP": "Download onze mobiele app om uw geheimen te beheren", + "HIDDEN": "Verborgen", + "HIDE": "Verbergen", + "UNHIDE": "Zichtbaar maken", + "UNHIDE_TO_COLLECTION": "Zichtbaar maken in album", + "SORT_BY": "Sorteren op", + "NEWEST_FIRST": "Nieuwste eerst", + "OLDEST_FIRST": "Oudste eerst", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Dit bestand kan niet worden bekeken in de app, klik hier om het origineel te downloaden", + "SELECT_COLLECTION": "Album selecteren", + "PIN_ALBUM": "Album bovenaan vastzetten", + "UNPIN_ALBUM": "Album losmaken", + "DOWNLOAD_COMPLETE": "Download compleet", + "DOWNLOADING_COLLECTION": "{{name}} downloaden", + "DOWNLOAD_FAILED": "Download mislukt", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} bestanden", + "CRASH_REPORTING": "Foutenrapportering", + "CHRISTMAS": "Kerst", + "CHRISTMAS_EVE": "Kerstavond", + "NEW_YEAR": "Nieuwjaar", + "NEW_YEAR_EVE": "Oudjaarsavond", + "IMAGE": "Afbeelding", + "VIDEO": "Video", + "LIVE_PHOTO": "Live foto", + "CONVERT": "Converteren", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Weet u zeker dat u de editor wilt afsluiten?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Download uw bewerkte afbeelding of sla een kopie op in ente om uw wijzigingen te behouden.", + "BRIGHTNESS": "Helderheid", + "CONTRAST": "Contrast", + "SATURATION": "Saturatie", + "BLUR": "Vervagen", + "INVERT_COLORS": "Kleuren omkeren", + "ASPECT_RATIO": "Beeldverhouding", + "SQUARE": "Vierkant", + "ROTATE_LEFT": "Roteer links", + "ROTATE_RIGHT": "Roteer rechts", + "FLIP_VERTICALLY": "Verticaal spiegelen", + "FLIP_HORIZONTALLY": "Horizontaal spiegelen", + "DOWNLOAD_EDITED": "Download Bewerkt", + "SAVE_A_COPY_TO_ENTE": "Kopie in ente opslaan", + "RESTORE_ORIGINAL": "Origineel herstellen", + "TRANSFORM": "Transformeer", + "COLORS": "Kleuren", + "FLIP": "Omdraaien", + "ROTATION": "Draaiing", + "RESET": "Herstellen", + "PHOTO_EDITOR": "Fotobewerker", + "FASTER_UPLOAD": "Snellere uploads", + "FASTER_UPLOAD_DESCRIPTION": "Uploaden door nabije servers", + "MAGIC_SEARCH_STATUS": "Magische Zoekfunctie Status", + "INDEXED_ITEMS": "Geïndexeerde bestanden", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "Cache map", + "PASSKEYS": "", + "FREEHAND": "Losse hand", + "APPLY_CROP": "Bijsnijden toepassen", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "Tenminste één transformatie of kleuraanpassing moet worden uitgevoerd voordat u opslaat." +} diff --git a/web/apps/photos/public/locales/pt-BR/translation.json b/web/apps/photos/public/locales/pt-BR/translation.json new file mode 100644 index 000000000..5145a24aa --- /dev/null +++ b/web/apps/photos/public/locales/pt-BR/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Backups privados
para as suas memórias
", + "HERO_SLIDE_1": "Criptografia de ponta a ponta por padrão", + "HERO_SLIDE_2_TITLE": "
Armazenado com segurança
em um abrigo avançado
", + "HERO_SLIDE_2": "Feito para ter logenvidade", + "HERO_SLIDE_3_TITLE": "
Disponível
em qualquer lugar
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Entrar", + "SIGN_UP": "Registrar", + "NEW_USER": "Novo no ente", + "EXISTING_USER": "Utilizador existente", + "ENTER_NAME": "Insira o nome", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Adicione um nome para que os seus amigos saibam a quem agradecer por estas ótimas fotos!", + "ENTER_EMAIL": "Insira o endereço de e-mail", + "EMAIL_ERROR": "Inserir um endereço de e-mail válido", + "REQUIRED": "Obrigatório", + "EMAIL_SENT": "Código de verificação enviado para {{email}}", + "CHECK_INBOX": "Verifique a sua caixa de entrada (e spam) para concluir a verificação", + "ENTER_OTT": "Código de verificação", + "RESEND_MAIL": "Reenviar código", + "VERIFY": "Verificar", + "UNKNOWN_ERROR": "Ocorreu um erro. Tente novamente", + "INVALID_CODE": "Código de verificação inválido", + "EXPIRED_CODE": "O seu código de verificação expirou", + "SENDING": "Enviando...", + "SENT": "Enviado!", + "PASSWORD": "Senha", + "LINK_PASSWORD": "Insira a senha para desbloquear o álbum", + "RETURN_PASSPHRASE_HINT": "Senha", + "SET_PASSPHRASE": "Definir senha", + "VERIFY_PASSPHRASE": "Iniciar sessão", + "INCORRECT_PASSPHRASE": "Palavra-passe incorreta", + "ENTER_ENC_PASSPHRASE": "Por favor, digite uma senha que podemos usar para criptografar seus dados", + "PASSPHRASE_DISCLAIMER": "Não armazenamos sua senha, portanto, se você esquecê-la, não poderemos ajudarna recuperação de seus dados sem uma chave de recuperação.", + "WELCOME_TO_ENTE_HEADING": "Bem-vindo ao ", + "WELCOME_TO_ENTE_SUBHEADING": "Armazenamento criptografado de ponta a ponta de fotos e compartilhamento", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "Onde suas melhores fotos vivem", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "Gerando chaves de criptografia...", + "PASSPHRASE_HINT": "Senha", + "CONFIRM_PASSPHRASE": "Confirmar senha", + "REFERRAL_CODE_HINT": "Como você ouviu sobre o Ente? (opcional)", + "REFERRAL_INFO": "Não rastreamos instalações do aplicativo. Seria útil se você nos contasse onde nos encontrou!", + "PASSPHRASE_MATCH_ERROR": "As senhas não coincidem", + "CONSOLE_WARNING_STOP": "PARAR!", + "CONSOLE_WARNING_DESC": "Este é um recurso de navegador destinado a desenvolvedores. Por favor, não copie e cole o código não confirmado aqui.", + "CREATE_COLLECTION": "Novo álbum", + "ENTER_ALBUM_NAME": "Nome do álbum", + "CLOSE_OPTION": "Fechar (Esc)", + "ENTER_FILE_NAME": "Nome do arquivo", + "CLOSE": "Fechar", + "NO": "Não", + "NOTHING_HERE": "Nada para ver aqui! 👀", + "UPLOAD": "Enviar", + "IMPORT": "Importar", + "ADD_PHOTOS": "Adicionar fotos", + "ADD_MORE_PHOTOS": "Adicionar mais fotos", + "add_photos_one": "Adicionar item", + "add_photos_other": "Adicionar {{count, number}} itens", + "SELECT_PHOTOS": "Selecionar fotos", + "FILE_UPLOAD": "Envio de Arquivo", + "UPLOAD_STAGE_MESSAGE": { + "0": "Preparando para enviar", + "1": "Lendo arquivos de metadados do google", + "2": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} metadados dos arquivos extraídos", + "3": "{{uploadCounter.finished, number}} / {{uploadCounter.total, number}} arquivos processados", + "4": "Cancelando envios restante", + "5": "Backup concluído" + }, + "FILE_NOT_UPLOADED_LIST": "Os seguintes arquivos não foram enviados", + "SUBSCRIPTION_EXPIRED": "Assinatura expirada", + "SUBSCRIPTION_EXPIRED_MESSAGE": "Sua assinatura expirou, por favor renove-a", + "STORAGE_QUOTA_EXCEEDED": "Limite de armazenamento excedido", + "INITIAL_LOAD_DELAY_WARNING": "Primeiro carregamento pode levar algum tempo", + "USER_DOES_NOT_EXIST": "Desculpe, não foi possível encontrar um usuário com este e-mail", + "NO_ACCOUNT": "Não possui uma conta", + "ACCOUNT_EXISTS": "Já possui uma conta", + "CREATE": "Criar", + "DOWNLOAD": "Baixar", + "DOWNLOAD_OPTION": "Baixar (D)", + "DOWNLOAD_FAVORITES": "Baixar favoritos", + "DOWNLOAD_UNCATEGORIZED": "Baixar não categorizado", + "DOWNLOAD_HIDDEN_ITEMS": "Baixar itens ocultos", + "COPY_OPTION": "Copiar como PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "Mudar para tela cheia (F)", + "ZOOM_IN_OUT": "Ampliar/Reduzir", + "PREVIOUS": "Anterior (←)", + "NEXT": "Próximo (→)", + "TITLE_PHOTOS": "Ente Fotos", + "TITLE_ALBUMS": "Ente Fotos", + "TITLE_AUTH": "Ente Auth", + "UPLOAD_FIRST_PHOTO": "Envie sua primeira foto", + "IMPORT_YOUR_FOLDERS": "Importar suas pastas", + "UPLOAD_DROPZONE_MESSAGE": "Arraste para salvar seus arquivos", + "WATCH_FOLDER_DROPZONE_MESSAGE": "Arraste para adicionar pasta monitorada", + "TRASH_FILES_TITLE": "Excluir arquivos?", + "TRASH_FILE_TITLE": "Excluir arquivo?", + "DELETE_FILES_TITLE": "Excluir imediatamente?", + "DELETE_FILES_MESSAGE": "Os arquivos selecionados serão excluídos permanentemente da sua conta ente.", + "DELETE": "Excluir", + "DELETE_OPTION": "Excluir (DEL)", + "FAVORITE_OPTION": "Favorito (L)", + "UNFAVORITE_OPTION": "Remover Favorito (L)", + "MULTI_FOLDER_UPLOAD": "Várias pastas detectadas", + "UPLOAD_STRATEGY_CHOICE": "Gostaria de enviá-los para", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "Um único álbum", + "OR": "ou", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "Álbuns separados", + "SESSION_EXPIRED_MESSAGE": "A sua sessão expirou. Por favor inicie sessão novamente para continuar", + "SESSION_EXPIRED": "Sessão expirada", + "PASSWORD_GENERATION_FAILED": "Seu navegador foi incapaz de gerar uma chave forte que atende aos padrões de criptografia, por favor, tente usar o aplicativo móvel ou outro navegador", + "CHANGE_PASSWORD": "Alterar senha", + "GO_BACK": "Voltar", + "RECOVERY_KEY": "Chave de recuperação", + "SAVE_LATER": "Fazer isso mais tarde", + "SAVE": "Salvar Chave", + "RECOVERY_KEY_DESCRIPTION": "Caso você esqueça sua senha, a única maneira de recuperar seus dados é com essa chave.", + "RECOVER_KEY_GENERATION_FAILED": "Não foi possível gerar o código de recuperação, tente novamente", + "KEY_NOT_STORED_DISCLAIMER": "Não armazenamos essa chave, por favor, salve essa chave de palavras em um lugar seguro", + "FORGOT_PASSWORD": "Esqueci a senha", + "RECOVER_ACCOUNT": "Recuperar conta", + "RECOVERY_KEY_HINT": "Chave de recuperação", + "RECOVER": "Recuperar", + "NO_RECOVERY_KEY": "Não possui a chave de recuperação?", + "INCORRECT_RECOVERY_KEY": "Chave de recuperação incorreta", + "SORRY": "Desculpe", + "NO_RECOVERY_KEY_MESSAGE": "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, seus dados não podem ser descriptografados sem sua senha ou chave de recuperação", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "Por favor, envie um e-mail para {{emailID}} a partir do seu endereço de e-mail registrado", + "CONTACT_SUPPORT": "Falar com o suporte", + "REQUEST_FEATURE": "Solicitar Funcionalidade", + "SUPPORT": "Suporte", + "CONFIRM": "Confirmar", + "CANCEL": "Cancelar", + "LOGOUT": "Encerrar sessão", + "DELETE_ACCOUNT": "Excluir conta", + "DELETE_ACCOUNT_MESSAGE": "

Por favor, envie um e-mail para {{emailID}} a partir do seu endereço de e-mail registrado.

Seu pedido será processado dentro de 72 horas.

", + "LOGOUT_MESSAGE": "Você tem certeza que deseja encerrar a sessão?", + "CHANGE_EMAIL": "Mudar e-mail", + "OK": "Aceitar", + "SUCCESS": "Bem-sucedido", + "ERROR": "Erro", + "MESSAGE": "Mensagem", + "INSTALL_MOBILE_APP": "Instale nosso aplicativo Android ou iOS para fazer backup automático de todas as suas fotos", + "DOWNLOAD_APP_MESSAGE": "Desculpe, esta operação só é suportada em nosso aplicativo para computador", + "DOWNLOAD_APP": "Baixar aplicativo para computador", + "EXPORT": "Exportar dados", + "SUBSCRIPTION": "Assinatura", + "SUBSCRIBE": "Assinar", + "MANAGEMENT_PORTAL": "Gerenciar métodos de pagamento", + "MANAGE_FAMILY_PORTAL": "Gerenciar Família", + "LEAVE_FAMILY_PLAN": "Sair do plano familiar", + "LEAVE": "Sair", + "LEAVE_FAMILY_CONFIRM": "Tem certeza que deseja sair do plano familiar?", + "CHOOSE_PLAN": "Escolha seu plano", + "MANAGE_PLAN": "Gerenciar sua assinatura", + "ACTIVE": "Ativo", + "OFFLINE_MSG": "Você está offline, memórias em cache estão sendo mostradas", + "FREE_SUBSCRIPTION_INFO": "Você está no plano gratuito que expira em {{date, dateTime}}", + "FAMILY_SUBSCRIPTION_INFO": "Você está em um plano familiar gerenciado por", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "Renovações em {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "Termina em {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "Sua assinatura será cancelada em {{date, dateTime}}", + "ADD_ON_AVAILABLE_TILL": "Seu complemento {{storage, string}} é válido até o dia {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "Você excedeu sua cota de armazenamento, por favor atualize", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

Recebemos o seu pagamento

Sua assinatura é válida até {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "Sua compra foi cancelada, por favor, tente novamente se quiser assinar", + "SUBSCRIPTION_PURCHASE_FAILED": "Falha na compra de assinatura, tente novamente", + "SUBSCRIPTION_UPDATE_FAILED": "Falha ao atualizar assinatura, tente novamente", + "UPDATE_PAYMENT_METHOD_MESSAGE": "Desculpe-nos, o pagamento falhou quando tentamos cobrar o seu cartão, por favor atualize seu método de pagamento e tente novamente", + "STRIPE_AUTHENTICATION_FAILED": "Não foi possível autenticar seu método de pagamento. Por favor, escolha outro método de pagamento e tente novamente", + "UPDATE_PAYMENT_METHOD": "Atualizar forma de pagamento", + "MONTHLY": "Mensal", + "YEARLY": "Anual", + "UPDATE_SUBSCRIPTION_MESSAGE": "Tem certeza que deseja trocar de plano?", + "UPDATE_SUBSCRIPTION": "Mudar de plano", + "CANCEL_SUBSCRIPTION": "Cancelar assinatura", + "CANCEL_SUBSCRIPTION_MESSAGE": "

Todos os seus dados serão excluídos dos nossos servidores no final deste período de cobrança.

Você tem certeza que deseja cancelar sua assinatura?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

Tem certeza que deseja cancelar sua assinatura?

", + "SUBSCRIPTION_CANCEL_FAILED": "Falha ao cancelar a assinatura", + "SUBSCRIPTION_CANCEL_SUCCESS": "Assinatura cancelada com sucesso", + "REACTIVATE_SUBSCRIPTION": "Reativar assinatura", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "Uma vez reativado, você será cobrado em {{date, dateTime}}", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "Assinatura ativada com sucesso ", + "SUBSCRIPTION_ACTIVATE_FAILED": "Falha ao reativar as renovações de assinaturas", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "Obrigado", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "Cancelar assinatura móvel", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "Por favor, cancele sua assinatura do aplicativo móvel para ativar uma assinatura aqui", + "MAIL_TO_MANAGE_SUBSCRIPTION": "Entre em contato com {{emailID}} para gerenciar sua assinatura", + "RENAME": "Renomear", + "RENAME_FILE": "Renomear arquivo", + "RENAME_COLLECTION": "Renomear álbum", + "DELETE_COLLECTION_TITLE": "Excluir álbum?", + "DELETE_COLLECTION": "Excluir álbum", + "DELETE_COLLECTION_MESSAGE": "Também excluir as fotos (e vídeos) presentes neste álbum de todos os outros álbuns dos quais eles fazem parte?", + "DELETE_PHOTOS": "Excluir fotos", + "KEEP_PHOTOS": "Manter fotos", + "SHARE": "Compartilhar", + "SHARE_COLLECTION": "Compartilhar álbum", + "SHAREES": "Compartilhado com", + "SHARE_WITH_SELF": "Você não pode compartilhar consigo mesmo", + "ALREADY_SHARED": "Ops, você já está compartilhando isso com {{email}}", + "SHARING_BAD_REQUEST_ERROR": "Álbum compartilhado não permitido", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "Compartilhamento está desabilitado para contas gratuitas", + "DOWNLOAD_COLLECTION": "Baixar álbum", + "DOWNLOAD_COLLECTION_MESSAGE": "

Tem certeza que deseja baixar o álbum completo?

Todos os arquivos serão colocados na fila para baixar sequencialmente

", + "CREATE_ALBUM_FAILED": "Falha ao criar álbum, por favor tente novamente", + "SEARCH": "Pesquisar", + "SEARCH_RESULTS": "Resultados de pesquisa", + "NO_RESULTS": "Nenhum resultado encontrado", + "SEARCH_HINT": "Pesquisar por álbuns, datas, descrições, ...", + "SEARCH_TYPE": { + "COLLECTION": "Álbum", + "LOCATION": "Local", + "CITY": "Local", + "DATE": "Data", + "FILE_NAME": "Nome do arquivo", + "THING": "Conteúdo", + "FILE_CAPTION": "Descrição", + "FILE_TYPE": "Tipo de arquivo", + "CLIP": "Mágica" + }, + "photos_count_zero": "Sem memórias", + "photos_count_one": "1 memória", + "photos_count_other": "{{count, number}} memórias", + "TERMS_AND_CONDITIONS": "Eu concordo com os termos e a política de privacidade", + "ADD_TO_COLLECTION": "Adicionar ao álbum", + "SELECTED": "selecionado", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "Este vídeo não pode ser reproduzido no seu navegador", + "PEOPLE": "Pessoas", + "INDEXING_SCHEDULED": "Indexação está programada...", + "ANALYZING_PHOTOS": "Indexando fotos ({{indexStatus.nSyncedFiles,number}} / {{indexStatus.nTotalFiles,number}})", + "INDEXING_PEOPLE": "Indexando pessoas em {{indexStatus.nSyncedFiles,number}} fotos...", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "rostos não identificados", + "OBJECTS": "objetos", + "TEXT": "texto", + "INFO": "Informação ", + "INFO_OPTION": "Informação (I)", + "FILE_NAME": "Nome do arquivo", + "CAPTION_PLACEHOLDER": "Adicionar uma descrição", + "LOCATION": "Local", + "SHOW_ON_MAP": "Ver no OpenStreetMap", + "MAP": "Mapa", + "MAP_SETTINGS": "Ajustes do mapa", + "ENABLE_MAPS": "Habilitar mapa?", + "ENABLE_MAP": "Habilitar mapa", + "DISABLE_MAPS": "Desativar Mapas?", + "ENABLE_MAP_DESCRIPTION": "Isto mostrará suas fotos em um mapa do mundo.

Este mapa é hospedado pelo OpenStreetMap , e os exatos locais de suas fotos nunca são compartilhados.

Você pode desativar esse recurso a qualquer momento nas Configurações.

", + "DISABLE_MAP_DESCRIPTION": "

Isto irá desativar a exibição de suas fotos em um mapa mundial.

Você pode ativar este recurso a qualquer momento nas Configurações.

", + "DISABLE_MAP": "Desabilitar mapa", + "DETAILS": "Detalhes", + "VIEW_EXIF": "Ver todos os dados EXIF", + "NO_EXIF": "Sem dados EXIF", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "Dois fatores", + "TWO_FACTOR_AUTHENTICATION": "Autenticação de dois fatores", + "TWO_FACTOR_QR_INSTRUCTION": "Digitalize o código QR abaixo com o seu aplicativo de autenticador favorito", + "ENTER_CODE_MANUALLY": "Inserir código manualmente", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "Por favor, insira este código no seu aplicativo autenticador favorito", + "SCAN_QR_CODE": "Em vez disso, escaneie um Código QR", + "ENABLE_TWO_FACTOR": "Ativar autenticação de dois fatores", + "ENABLE": "Habilitar", + "LOST_DEVICE": "Dispositivo de dois fatores perdido", + "INCORRECT_CODE": "Código incorreto", + "TWO_FACTOR_INFO": "Adicione uma camada adicional de segurança, exigindo mais do que seu e-mail e senha para entrar na sua conta", + "DISABLE_TWO_FACTOR_LABEL": "Desativar autenticação de dois fatores", + "UPDATE_TWO_FACTOR_LABEL": "Atualize seu dispositivo autenticador", + "DISABLE": "Desativar", + "RECONFIGURE": "Reconfigurar", + "UPDATE_TWO_FACTOR": "Atualizar dois fatores", + "UPDATE_TWO_FACTOR_MESSAGE": "Continuar adiante anulará qualquer autenticador configurado anteriormente", + "UPDATE": "Atualização", + "DISABLE_TWO_FACTOR": "Desativar autenticação de dois fatores", + "DISABLE_TWO_FACTOR_MESSAGE": "Você tem certeza de que deseja desativar a autenticação de dois fatores", + "TWO_FACTOR_DISABLE_FAILED": "Não foi possível desativar dois fatores, por favor tente novamente", + "EXPORT_DATA": "Exportar dados", + "SELECT_FOLDER": "Selecione a pasta", + "DESTINATION": "Destino", + "START": "Iniciar", + "LAST_EXPORT_TIME": "Data da última exportação", + "EXPORT_AGAIN": "Resincronizar", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "Armazenamento local não acessível", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "Seu navegador ou uma extensão está bloqueando o ente de salvar os dados no armazenamento local. Por favor, tente carregar esta página depois de alternar o modo de navegação.", + "SEND_OTT": "Enviar códigos OTP", + "EMAIl_ALREADY_OWNED": "Este e-mail já está em uso", + "ETAGS_BLOCKED": "

Não foi possível fazer o envio dos seguintes arquivos devido à configuração do seu navegador.

Por favor, desative quaisquer complementos que possam estar impedindo o ente de utilizar eTags para enviar arquivos grandes, ou utilize nosso aplicativo para computador para uma experiência de importação mais confiável.

", + "SKIPPED_VIDEOS_INFO": "

Atualmente, não oferecemos suporte para adicionar vídeos através de links públicos.

Para compartilhar vídeos, por favor, faça cadastro no ente e compartilhe com os destinatários pretendidos usando seus e-mails.

", + "LIVE_PHOTOS_DETECTED": "Os arquivos de foto e vídeo das suas Fotos em Movimento foram mesclados em um único arquivo", + "RETRY_FAILED": "Repetir envios que falharam", + "FAILED_UPLOADS": "Envios com falhas ", + "SKIPPED_FILES": "Envios ignorados", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "Falha ao gerar miniaturas", + "UNSUPPORTED_FILES": "Arquivos não suportados", + "SUCCESSFUL_UPLOADS": "Envios bem sucedidos", + "SKIPPED_INFO": "Ignorar estes como existem arquivos com nomes correspondentes no mesmo álbum", + "UNSUPPORTED_INFO": "ente ainda não suporta estes formatos de arquivo", + "BLOCKED_UPLOADS": "Envios bloqueados", + "SKIPPED_VIDEOS": "Vídeos ignorados", + "INPROGRESS_METADATA_EXTRACTION": "Em andamento", + "INPROGRESS_UPLOADS": "Envios em andamento", + "TOO_LARGE_UPLOADS": "Arquivos grandes", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Armazenamento insuficiente", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "Estes arquivos não foram carregados pois excedem o tamanho máximo para seu plano de armazenamento", + "TOO_LARGE_INFO": "Estes arquivos não foram carregados pois excedem nosso limite máximo de tamanho de arquivo", + "THUMBNAIL_GENERATION_FAILED_INFO": "Estes arquivos foram enviados, mas infelizmente não conseguimos gerar as miniaturas para eles.", + "UPLOAD_TO_COLLECTION": "Enviar para o álbum", + "UNCATEGORIZED": "Sem categoria", + "ARCHIVE": "Arquivar", + "FAVORITES": "Favoritos", + "ARCHIVE_COLLECTION": "Arquivar álbum", + "ARCHIVE_SECTION_NAME": "Arquivar", + "ALL_SECTION_NAME": "Todos", + "MOVE_TO_COLLECTION": "Mover para álbum", + "UNARCHIVE": "Desarquivar", + "UNARCHIVE_COLLECTION": "Desarquivar álbum", + "HIDE_COLLECTION": "Ocultar álbum", + "UNHIDE_COLLECTION": "Reexibir álbum", + "MOVE": "Mover", + "ADD": "Adicionar", + "REMOVE": "Remover", + "YES_REMOVE": "Sim, remover", + "REMOVE_FROM_COLLECTION": "Remover do álbum", + "TRASH": "Lixeira", + "MOVE_TO_TRASH": "Mover para a lixeira", + "TRASH_FILES_MESSAGE": "Os itens selecionados serão excluídos de todos os álbuns e movidos para o lixo.", + "TRASH_FILE_MESSAGE": "Os itens selecionados serão excluídos de todos os álbuns e movidos para o lixo.", + "DELETE_PERMANENTLY": "Excluir permanentemente", + "RESTORE": "Restaurar", + "RESTORE_TO_COLLECTION": "Restaurar para álbum", + "EMPTY_TRASH": "Esvaziar a lixeira", + "EMPTY_TRASH_TITLE": "Esvaziar a lixeira?", + "EMPTY_TRASH_MESSAGE": "Estes arquivos serão excluídos permanentemente da sua conta do ente.", + "LEAVE_SHARED_ALBUM": "Sim, sair", + "LEAVE_ALBUM": "Sair do álbum", + "LEAVE_SHARED_ALBUM_TITLE": "Sair do álbum compartilhado?", + "LEAVE_SHARED_ALBUM_MESSAGE": "Você deixará o álbum e ele deixará de ser visível para você.", + "NOT_FILE_OWNER": "Você não pode excluir arquivos em um álbum compartilhado", + "CONFIRM_SELF_REMOVE_MESSAGE": "Os itens selecionados serão removidos deste álbum. Itens que estão somente neste álbum serão movidos a aba Sem Categoria.", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "Alguns dos itens que você está removendo foram adicionados por outras pessoas, e você perderá o acesso a eles.", + "SORT_BY_CREATION_TIME_ASCENDING": "Mais antigo", + "SORT_BY_UPDATION_TIME_DESCENDING": "Última atualização", + "SORT_BY_NAME": "Nome", + "COMPRESS_THUMBNAILS": "Compactar miniaturas", + "THUMBNAIL_REPLACED": "Miniaturas compactadas", + "FIX_THUMBNAIL": "Compactar", + "FIX_THUMBNAIL_LATER": "Compactar depois", + "REPLACE_THUMBNAIL_NOT_STARTED": "Algumas miniaturas de seus vídeos podem ser compactadas para economizar espaço. Você gostaria de compactá-las?", + "REPLACE_THUMBNAIL_COMPLETED": "Miniaturas compactadas com sucesso", + "REPLACE_THUMBNAIL_NOOP": "Você não tem nenhuma miniatura que possa ser compactadas mais", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "Não foi possível compactar algumas das suas miniaturas, por favor tente novamente", + "FIX_CREATION_TIME": "Corrigir hora", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "Selecione a carteira que você deseja usar", + "UPDATE_CREATION_TIME_COMPLETED": "Todos os arquivos atualizados com sucesso", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "5000 caracteres no máximo", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "Tempo personalizado", + "REOPEN_PLAN_SELECTOR_MODAL": "Reabrir planos", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "Falha ao abrir planos", + "INSTALL": "Instalar", + "SHARING_DETAILS": "Detalhes de compartilhamento", + "MODIFY_SHARING": "Modificar compartilhamento", + "ADD_COLLABORATORS": "Adicionar colaboradores", + "ADD_NEW_EMAIL": "Adicionar um novo email", + "shared_with_people_zero": "Compartilhar com pessoas específicas", + "shared_with_people_one": "Compartilhado com 1 pessoa", + "shared_with_people_other": "Compartilhado com {{count, number}} pessoas", + "participants_zero": "Nenhum participante", + "participants_one": "1 participante", + "participants_other": "{{count, number}} participantes", + "ADD_VIEWERS": "Adicionar visualizações", + "PARTICIPANTS": "Participantes", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} Não poderá adicionar mais fotos a este álbum

Eles ainda poderão remover as fotos existentes adicionadas por eles

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} poderá adicionar fotos ao álbum", + "CONVERT_TO_VIEWER": "Sim, converter para visualizador", + "CONVERT_TO_COLLABORATOR": "Sim, converter para colaborador", + "CHANGE_PERMISSION": "Alterar permissões?", + "REMOVE_PARTICIPANT": "Remover?", + "CONFIRM_REMOVE": "Sim, remover", + "MANAGE": "Gerenciar", + "ADDED_AS": "Adicionado como", + "COLLABORATOR_RIGHTS": "Os colaboradores podem adicionar fotos e vídeos ao álbum compartilhado", + "REMOVE_PARTICIPANT_HEAD": "Remover participante", + "OWNER": "Proprietário", + "COLLABORATORS": "Colaboradores", + "ADD_MORE": "Adicionar mais", + "VIEWERS": "Visualizações", + "OR_ADD_EXISTING": "Ou escolha um existente", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} será removido deste álbum compartilhado

Quaisquer fotos adicionadas por eles também serão removidas do álbum

", + "NOT_FOUND": "404 Página não encontrada", + "LINK_EXPIRED": "Link expirado", + "LINK_EXPIRED_MESSAGE": "Este link expirou ou foi desativado!", + "MANAGE_LINK": "Gerenciar link", + "LINK_TOO_MANY_REQUESTS": "Desculpe, este álbum foi visualizado em muitos dispositivos!", + "FILE_DOWNLOAD": "Permitir transferências", + "LINK_PASSWORD_LOCK": "Bloqueio de senha", + "PUBLIC_COLLECT": "Permitir adicionar fotos", + "LINK_DEVICE_LIMIT": "Limite de dispositivos", + "NO_DEVICE_LIMIT": "Nenhum", + "LINK_EXPIRY": "Expiração do link", + "NEVER": "Nunca", + "DISABLE_FILE_DOWNLOAD": "Desabilitar transferência", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

Tem certeza de que deseja desativar o botão de download para arquivos?

Os visualizadores ainda podem capturar imagens da tela ou salvar uma cópia de suas fotos usando ferramentas externas.

", + "MALICIOUS_CONTENT": "Contém conteúdo malicioso", + "COPYRIGHT": "Viola os direitos autorais de alguém que estou autorizado a representar", + "SHARED_USING": "Compartilhar usando ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "Use o código {{referralCode}} para obter 10 GB de graça", + "LIVE": "", + "DISABLE_PASSWORD": "Desativar bloqueio por senha", + "DISABLE_PASSWORD_MESSAGE": "Tem certeza que deseja desativar o bloqueio por senha?", + "PASSWORD_LOCK": "Bloqueio de senha", + "LOCK": "Bloquear", + "DOWNLOAD_UPLOAD_LOGS": "Logs de depuração", + "UPLOAD_FILES": "Arquivo", + "UPLOAD_DIRS": "Pasta", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "Arquivos Deduplicados", + "AUTHENTICATOR_SECTION": "Autenticação", + "NO_DUPLICATES_FOUND": "Você não tem arquivos duplicados que possam ser limpos", + "CLUB_BY_CAPTURE_TIME": "Agrupar por tempo de captura", + "FILES": "Arquivos", + "EACH": "Cada", + "DEDUPLICATE_BASED_ON_SIZE": "Os seguintes arquivos foram listados com base em seus tamanhos, por favor, reveja e exclua os itens que você acredita que são duplicados", + "STOP_ALL_UPLOADS_MESSAGE": "Tem certeza que deseja parar todos os envios em andamento?", + "STOP_UPLOADS_HEADER": "Parar envios?", + "YES_STOP_UPLOADS": "Sim, parar envios", + "STOP_DOWNLOADS_HEADER": "Parar transferências?", + "YES_STOP_DOWNLOADS": "Sim, parar transferências", + "STOP_ALL_DOWNLOADS_MESSAGE": "Tem certeza que deseja parar todos as transferências em andamento?", + "albums_one": "1 Álbum", + "albums_other": "{{count, number}} Álbuns", + "ALL_ALBUMS": "Todos os álbuns", + "ALBUMS": "Álbuns", + "ALL_HIDDEN_ALBUMS": "Todos os álbuns ocultos", + "HIDDEN_ALBUMS": "Álbuns ocultos", + "HIDDEN_ITEMS": "Itens ocultos", + "HIDDEN_ITEMS_SECTION_NAME": "Itens_ocultos", + "ENTER_TWO_FACTOR_OTP": "Digite o código de 6 dígitos de\nseu aplicativo autenticador.", + "CREATE_ACCOUNT": "Criar uma conta", + "COPIED": "Copiado", + "CANVAS_BLOCKED_TITLE": "Não foi possível gerar miniatura", + "CANVAS_BLOCKED_MESSAGE": "

Parece que o seu navegador desativou o acesso à tela que é necessário para gerar miniaturas para as suas fotos

Por favor, habilite o acesso à tela do seu navegador, ou veja nosso aplicativo para computador

", + "WATCH_FOLDERS": "Pastas monitoradas", + "UPGRADE_NOW": "Aprimorar agora", + "RENEW_NOW": "Renovar agora", + "STORAGE": "Armazenamento", + "USED": "usado", + "YOU": "Você", + "FAMILY": "Família", + "FREE": "grátis", + "OF": "de", + "WATCHED_FOLDERS": "Pastas monitoradas", + "NO_FOLDERS_ADDED": "Nenhuma pasta adicionada ainda!", + "FOLDERS_AUTOMATICALLY_MONITORED": "As pastas que você adicionar aqui serão monitoradas automaticamente", + "UPLOAD_NEW_FILES_TO_ENTE": "Enviar novos arquivos para o ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "Remover arquivos excluídos do ente", + "ADD_FOLDER": "Adicionar pasta", + "STOP_WATCHING": "Parar de acompanhar", + "STOP_WATCHING_FOLDER": "Parar de acompanhar a pasta?", + "STOP_WATCHING_DIALOG_MESSAGE": "Seus arquivos existentes não serão excluídos, mas ente irá parar de atualizar automaticamente o álbum associado em alterações nesta pasta.", + "YES_STOP": "Sim, parar", + "MONTH_SHORT": "mês", + "YEAR": "ano", + "FAMILY_PLAN": "Plano familiar", + "DOWNLOAD_LOGS": "Baixar logs", + "DOWNLOAD_LOGS_MESSAGE": "

Isto irá baixar os logs de depuração, que você pode enviar para nós para ajudar a depurar seu problema.

Por favor, note que os nomes de arquivos serão incluídos para ajudar a rastrear problemas com arquivos específicos.

", + "CHANGE_FOLDER": "Alterar pasta", + "TWO_MONTHS_FREE": "Obtenha 2 meses gratuitos em planos anuais", + "GB": "GB", + "POPULAR": "Popular", + "FREE_PLAN_OPTION_LABEL": "Continuar com teste gratuito", + "FREE_PLAN_DESCRIPTION": "1 GB por 1 ano", + "CURRENT_USAGE": "O uso atual é {{usage}}", + "WEAK_DEVICE": "O navegador da web que você está usando não é poderoso o suficiente para criptografar suas fotos. Por favor, tente entrar para o ente no computador ou baixe o aplicativo móvel.", + "DRAG_AND_DROP_HINT": "Ou arraste e solte na janela ente", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "Seus dados enviados serão agendados para exclusão e sua conta será excluída permanentemente.

Essa ação não é reversível.", + "AUTHENTICATE": "Autenticar", + "UPLOADED_TO_SINGLE_COLLECTION": "Enviado para coleção única", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "Enviada para separar coleções", + "NEVERMIND": "Esquecer", + "UPDATE_AVAILABLE": "Atualização disponível", + "UPDATE_INSTALLABLE_MESSAGE": "Uma nova versão do ente está pronta para ser instalada.", + "INSTALL_NOW": "Instalar agora", + "INSTALL_ON_NEXT_LAUNCH": "Instalar na próxima inicialização", + "UPDATE_AVAILABLE_MESSAGE": "Uma nova versão do ente foi lançada, mas não pode ser baixada e instalada automaticamente.", + "DOWNLOAD_AND_INSTALL": "Baixar e instalar", + "IGNORE_THIS_VERSION": "Ignorar esta versão", + "TODAY": "Hoje", + "YESTERDAY": "Ontem", + "NAME_PLACEHOLDER": "Nome...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "Não foi possível criar álbuns a partir da mistura de arquivos/pastas", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

Você arrastou e deixou uma mistura de arquivos e pastas.

Por favor, forneça apenas arquivos ou apenas pastas ao selecionar a opção para criar álbuns separados

", + "CHOSE_THEME": "Escolher tema", + "ML_SEARCH": "Reconhecimento facial", + "ENABLE_ML_SEARCH_DESCRIPTION": "

Isso permitirá aprendizado de máquina no dispositivo e busca facial, iniciando a análise de suas fotos enviadas localmente.

Na primeira execução após o login ou habilitação desta funcionalidade, será feito o download de todas as imagens no dispositivo local para análise. Portanto, ative isso apenas se estiver confortável com o consumo de largura de banda e processamento local de todas as imagens em sua biblioteca de fotos.

Se esta for a primeira vez que você está habilitando isso, também solicitaremos sua permissão para processar dados faciais.

", + "ML_MORE_DETAILS": "Mais detalhes", + "ENABLE_FACE_SEARCH": "Habilitar reconhecimento facial", + "ENABLE_FACE_SEARCH_TITLE": "Habilitar reconhecimento facial?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

Se você habilitar o reconhecimento facial, o aplicativo extrairá a geometria do rosto de suas fotos. Isso ocorrerá em seu dispositivo, e quaisquer dados biométricos gerados serão criptografados de ponta a ponta.

Por favor, clique aqui para obter mais detalhes sobre esta funcionalidade em nossa política de privacidade

", + "DISABLE_BETA": "Pausar reconhecimento", + "DISABLE_FACE_SEARCH": "Desativar reconhecimento facial", + "DISABLE_FACE_SEARCH_TITLE": "Desativar reconhecimento facial?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

Ente irá parar de processar geometria facial.

Você pode reativar o reconhecimento facial novamente, se desejar, então esta operação está segura.

", + "ADVANCED": "Avançado", + "FACE_SEARCH_CONFIRMATION": "Eu entendo, e desejo permitir que o ente processe a geometria do rosto", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "Força da senha: fraca", + "PASSPHRASE_STRENGTH_MODERATE": "Força da senha: moderada", + "PASSPHRASE_STRENGTH_STRONG": "Força da senha: forte", + "PREFERENCES": "Preferências", + "LANGUAGE": "Idioma", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "Diretório de exportação inválido", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

O diretório de exportação que você selecionou não existe.

Por favor, selecione um diretório válido.

", + "SUBSCRIPTION_VERIFICATION_ERROR": "Falha na verificação de assinatura", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "após uma hora", + "DAY": "após um dia", + "WEEK": "após uma semana", + "MONTH": "após um mês", + "YEAR": "após um ano" + }, + "COPY_LINK": "Copiar link", + "DONE": "Concluído", + "LINK_SHARE_TITLE": "Ou compartilhe um link", + "REMOVE_LINK": "Remover link", + "CREATE_PUBLIC_SHARING": "Criar link público", + "PUBLIC_LINK_CREATED": "Link público criado", + "PUBLIC_LINK_ENABLED": "Link público ativado", + "COLLECT_PHOTOS": "Coletar fotos", + "PUBLIC_COLLECT_SUBTEXT": "Permita que as pessoas com o link também adicionem fotos ao álbum compartilhado.", + "STOP_EXPORT": "Parar", + "EXPORT_PROGRESS": "{{progress.success, number}} / {{progress.total, number}} itens sincronizados", + "MIGRATING_EXPORT": "Preparando...", + "RENAMING_COLLECTION_FOLDERS": "Renomeando pastas do álbum...", + "TRASHING_DELETED_FILES": "Descartando arquivos excluídos...", + "TRASHING_DELETED_COLLECTIONS": "Descartando álbuns excluídos...", + "EXPORT_NOTIFICATION": { + "START": "Exportação iniciada", + "IN_PROGRESS": "Exportação já em andamento", + "FINISH": "Exportação finalizada", + "UP_TO_DATE": "Não há arquivos novos para exportar" + }, + "CONTINUOUS_EXPORT": "Sincronizar continuamente", + "TOTAL_ITEMS": "Total de itens", + "PENDING_ITEMS": "Itens pendentes", + "EXPORT_STARTING": "Iniciando a exportação...", + "DELETE_ACCOUNT_REASON_LABEL": "Qual é o principal motivo para você excluir sua conta?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "Selecione um motivo", + "DELETE_REASON": { + "MISSING_FEATURE": "Está faltando um recurso que eu preciso", + "BROKEN_BEHAVIOR": "O aplicativo ou um determinado recurso não está funcionando como eu acredito que deveria", + "FOUND_ANOTHER_SERVICE": "Encontrei outro serviço que gosto mais", + "NOT_LISTED": "Meu motivo não está listado" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "Sentimos muito em vê-lo partir. Explique por que você está partindo para nos ajudar a melhorar.", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "Comentários", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "Sim, desejo excluir permanentemente esta conta e todos os seus dados", + "CONFIRM_DELETE_ACCOUNT": "Confirmar exclusão da conta", + "FEEDBACK_REQUIRED": "Por favor, ajude-nos com esta informação", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "O que o outro serviço faz melhor?", + "RECOVER_TWO_FACTOR": "Recuperar dois fatores", + "at": "", + "AUTH_NEXT": "próximo", + "AUTH_DOWNLOAD_MOBILE_APP": "Baixe nosso aplicativo móvel para gerenciar seus segredos", + "HIDDEN": "Escondido", + "HIDE": "Ocultar", + "UNHIDE": "Desocultar", + "UNHIDE_TO_COLLECTION": "Reexibir para o álbum", + "SORT_BY": "Ordenar por", + "NEWEST_FIRST": "Mais recentes primeiro", + "OLDEST_FIRST": "Mais antigo primeiro", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "Este arquivo não pôde ser pré-visualizado. Clique aqui para baixar o original.", + "SELECT_COLLECTION": "Selecionar álbum", + "PIN_ALBUM": "Fixar álbum", + "UNPIN_ALBUM": "Desafixar álbum", + "DOWNLOAD_COMPLETE": "Transferência concluída", + "DOWNLOADING_COLLECTION": "Transferindo {{name}}", + "DOWNLOAD_FAILED": "Falha ao baixar", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} arquivos", + "CRASH_REPORTING": "Relatório de falhas", + "CHRISTMAS": "Natal", + "CHRISTMAS_EVE": "Véspera de Natal", + "NEW_YEAR": "Ano Novo", + "NEW_YEAR_EVE": "Véspera de Ano Novo", + "IMAGE": "Imagem", + "VIDEO": "Vídeo", + "LIVE_PHOTO": "Fotos em movimento", + "CONVERT": "Converter", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "Tem certeza de que deseja fechar o editor?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "Baixe sua imagem editada ou salve uma cópia para o ente para persistir nas alterações.", + "BRIGHTNESS": "Brilho", + "CONTRAST": "Contraste", + "SATURATION": "Saturação", + "BLUR": "Desfoque", + "INVERT_COLORS": "Inverter Cores", + "ASPECT_RATIO": "Proporção da imagem", + "SQUARE": "", + "ROTATE_LEFT": "Girar para a Esquerda", + "ROTATE_RIGHT": "Girar para a Direita", + "FLIP_VERTICALLY": "Inverter verticalmente", + "FLIP_HORIZONTALLY": "Inverter horizontalmente", + "DOWNLOAD_EDITED": "Transferência Editada", + "SAVE_A_COPY_TO_ENTE": "Salvar uma cópia para o ente", + "RESTORE_ORIGINAL": "Restaurar original", + "TRANSFORM": "Transformar", + "COLORS": "Cores", + "FLIP": "Inverter", + "ROTATION": "Rotação", + "RESET": "Redefinir", + "PHOTO_EDITOR": "Editor de Fotos", + "FASTER_UPLOAD": "Envios mais rápidos", + "FASTER_UPLOAD_DESCRIPTION": "Rotas enviam em servidores próximos", + "MAGIC_SEARCH_STATUS": "Estado da busca mágica", + "INDEXED_ITEMS": "Itens indexados", + "CAST_ALBUM_TO_TV": "Reproduzir álbum na TV", + "ENTER_CAST_PIN_CODE": "Digite o código que você vê na TV abaixo para parear este dispositivo.", + "PAIR_DEVICE_TO_TV": "Parear dispositivos", + "TV_NOT_FOUND": "TV não encontrada. Você inseriu o PIN correto?", + "AUTO_CAST_PAIR": "Pareamento automático", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "O Auto Pair requer a conexão com servidores do Google e só funciona com dispositivos Chromecast. O Google não receberá dados confidenciais, como suas fotos.", + "PAIR_WITH_PIN": "Parear com PIN", + "CHOOSE_DEVICE_FROM_BROWSER": "Escolha um dispositivo compatível com casts no navegador popup.", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "Parear com o PIN funciona para qualquer dispositivo de tela grande onde você deseja reproduzir seu álbum.", + "VISIT_CAST_ENTE_IO": "Acesse cast.ente.io no dispositivo que você deseja parear.", + "CAST_AUTO_PAIR_FAILED": "Chromecast Auto Pair falhou. Por favor, tente novamente.", + "CACHE_DIRECTORY": "Pasta de Cache", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "Aplicar Recorte", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "Pelo menos uma transformação ou ajuste de cor deve ser feito antes de salvar." +} diff --git a/web/apps/photos/public/locales/pt-PT/translation.json b/web/apps/photos/public/locales/pt-PT/translation.json new file mode 100644 index 000000000..fb33bb972 --- /dev/null +++ b/web/apps/photos/public/locales/pt-PT/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
Backups privados
para as suas memórias
", + "HERO_SLIDE_1": "", + "HERO_SLIDE_2_TITLE": "", + "HERO_SLIDE_2": "", + "HERO_SLIDE_3_TITLE": "
Disponível
em qualquer lugar
", + "HERO_SLIDE_3": "Android, iOS, Web, Desktop", + "LOGIN": "Entrar", + "SIGN_UP": "Registar", + "NEW_USER": "Novo no ente", + "EXISTING_USER": "Utilizador existente", + "ENTER_NAME": "Insira o nome", + "PUBLIC_UPLOADER_NAME_MESSAGE": "Adicione um nome para que os seus amigos saibam a quem agradecer por estas ótimas fotos!", + "ENTER_EMAIL": "Insira o endereço de email", + "EMAIL_ERROR": "Inserir um endereço de email válido", + "REQUIRED": "Obrigatório", + "EMAIL_SENT": "Código de verificação enviado para {{email}}", + "CHECK_INBOX": "Verifique a sua caixa de entrada (e spam) para concluir a verificação", + "ENTER_OTT": "Código de verificação", + "RESEND_MAIL": "Reenviar código", + "VERIFY": "Verificar", + "UNKNOWN_ERROR": "Ocorreu um erro. Tente novamente", + "INVALID_CODE": "Código de verificação inválido", + "EXPIRED_CODE": "O seu código de verificação expirou", + "SENDING": "A enviar...", + "SENT": "Enviado!", + "PASSWORD": "Palavra-passe", + "LINK_PASSWORD": "Introduza a palavra-passe para desbloquear o álbum", + "RETURN_PASSPHRASE_HINT": "Palavra-passe", + "SET_PASSPHRASE": "Definir palavra-passe", + "VERIFY_PASSPHRASE": "Entrar", + "INCORRECT_PASSPHRASE": "Palavra-passe incorreta", + "ENTER_ENC_PASSPHRASE": "", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "Bem-vindo ao ", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "", + "PASSPHRASE_HINT": "", + "CONFIRM_PASSPHRASE": "", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "", + "CONSOLE_WARNING_STOP": "PARAR!", + "CONSOLE_WARNING_DESC": "", + "CREATE_COLLECTION": "Novo álbum", + "ENTER_ALBUM_NAME": "Nome do álbum", + "CLOSE_OPTION": "Fechar (Esc)", + "ENTER_FILE_NAME": "Nome do ficheiro", + "CLOSE": "Fechar", + "NO": "Não", + "NOTHING_HERE": "", + "UPLOAD": "", + "IMPORT": "Importar", + "ADD_PHOTOS": "Adicionar fotos", + "ADD_MORE_PHOTOS": "Adicionar mais fotos", + "add_photos_one": "Adicionar item", + "add_photos_other": "Adicionar {{count, number}} itens", + "SELECT_PHOTOS": "Selecionar fotos", + "FILE_UPLOAD": "Enviar Ficheiro", + "UPLOAD_STAGE_MESSAGE": { + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "FILE_NOT_UPLOADED_LIST": "", + "SUBSCRIPTION_EXPIRED": "", + "SUBSCRIPTION_EXPIRED_MESSAGE": "", + "STORAGE_QUOTA_EXCEEDED": "", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "Não possui uma conta", + "ACCOUNT_EXISTS": "Já possui uma conta", + "CREATE": "Criar", + "DOWNLOAD": "", + "DOWNLOAD_OPTION": "", + "DOWNLOAD_FAVORITES": "", + "DOWNLOAD_UNCATEGORIZED": "", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "", + "TOGGLE_FULLSCREEN": "", + "ZOOM_IN_OUT": "", + "PREVIOUS": "", + "NEXT": "", + "TITLE_PHOTOS": "", + "TITLE_ALBUMS": "", + "TITLE_AUTH": "", + "UPLOAD_FIRST_PHOTO": "", + "IMPORT_YOUR_FOLDERS": "", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "", + "TRASH_FILE_TITLE": "", + "DELETE_FILES_TITLE": "", + "DELETE_FILES_MESSAGE": "", + "DELETE": "", + "DELETE_OPTION": "", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "", + "OR": "", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "", + "SESSION_EXPIRED": "", + "PASSWORD_GENERATION_FAILED": "", + "CHANGE_PASSWORD": "", + "GO_BACK": "", + "RECOVERY_KEY": "", + "SAVE_LATER": "", + "SAVE": "", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "", + "RECOVER_ACCOUNT": "", + "RECOVERY_KEY_HINT": "", + "RECOVER": "", + "NO_RECOVERY_KEY": "", + "INCORRECT_RECOVERY_KEY": "", + "SORRY": "", + "NO_RECOVERY_KEY_MESSAGE": "", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", + "CONTACT_SUPPORT": "", + "REQUEST_FEATURE": "", + "SUPPORT": "", + "CONFIRM": "", + "CANCEL": "", + "LOGOUT": "", + "DELETE_ACCOUNT": "", + "DELETE_ACCOUNT_MESSAGE": "", + "LOGOUT_MESSAGE": "", + "CHANGE_EMAIL": "", + "OK": "", + "SUCCESS": "", + "ERROR": "", + "MESSAGE": "", + "INSTALL_MOBILE_APP": "", + "DOWNLOAD_APP_MESSAGE": "", + "DOWNLOAD_APP": "", + "EXPORT": "", + "SUBSCRIPTION": "", + "SUBSCRIBE": "", + "MANAGEMENT_PORTAL": "", + "MANAGE_FAMILY_PORTAL": "", + "LEAVE_FAMILY_PLAN": "", + "LEAVE": "", + "LEAVE_FAMILY_CONFIRM": "", + "CHOOSE_PLAN": "", + "MANAGE_PLAN": "", + "ACTIVE": "", + "OFFLINE_MSG": "", + "FREE_SUBSCRIPTION_INFO": "", + "FAMILY_SUBSCRIPTION_INFO": "", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "", + "SUBSCRIPTION_UPDATE_FAILED": "", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "", + "MONTHLY": "", + "YEARLY": "", + "UPDATE_SUBSCRIPTION_MESSAGE": "", + "UPDATE_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "RENAME": "", + "RENAME_FILE": "", + "RENAME_COLLECTION": "", + "DELETE_COLLECTION_TITLE": "", + "DELETE_COLLECTION": "", + "DELETE_COLLECTION_MESSAGE": "", + "DELETE_PHOTOS": "", + "KEEP_PHOTOS": "", + "SHARE": "", + "SHARE_COLLECTION": "", + "SHAREES": "", + "SHARE_WITH_SELF": "", + "ALREADY_SHARED": "", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "DOWNLOAD_COLLECTION": "", + "DOWNLOAD_COLLECTION_MESSAGE": "", + "CREATE_ALBUM_FAILED": "", + "SEARCH": "", + "SEARCH_RESULTS": "", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "", + "LOCATION": "", + "CITY": "", + "DATE": "", + "FILE_NAME": "", + "THING": "", + "FILE_CAPTION": "", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "", + "SELECTED": "", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "", + "PEOPLE": "", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "", + "INFO_OPTION": "", + "FILE_NAME": "", + "CAPTION_PLACEHOLDER": "", + "LOCATION": "", + "SHOW_ON_MAP": "", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "VIEW_EXIF": "", + "NO_EXIF": "", + "EXIF": "", + "ISO": "", + "TWO_FACTOR": "", + "TWO_FACTOR_AUTHENTICATION": "", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "", + "ENABLE_TWO_FACTOR": "", + "ENABLE": "", + "LOST_DEVICE": "", + "INCORRECT_CODE": "", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "", + "RECONFIGURE": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "", + "SELECT_FOLDER": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "", + "EMAIl_ALREADY_OWNED": "", + "ETAGS_BLOCKED": "", + "SKIPPED_VIDEOS_INFO": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "", + "SKIPPED_FILES": "", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "SKIPPED_VIDEOS": "", + "INPROGRESS_METADATA_EXTRACTION": "", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "", + "TOO_LARGE_INFO": "", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "UPLOAD_TO_COLLECTION": "", + "UNCATEGORIZED": "", + "ARCHIVE": "", + "FAVORITES": "", + "ARCHIVE_COLLECTION": "", + "ARCHIVE_SECTION_NAME": "", + "ALL_SECTION_NAME": "", + "MOVE_TO_COLLECTION": "", + "UNARCHIVE": "", + "UNARCHIVE_COLLECTION": "", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "", + "ADD": "", + "REMOVE": "", + "YES_REMOVE": "", + "REMOVE_FROM_COLLECTION": "", + "TRASH": "", + "MOVE_TO_TRASH": "", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "", + "RESTORE": "", + "RESTORE_TO_COLLECTION": "", + "EMPTY_TRASH": "", + "EMPTY_TRASH_TITLE": "", + "EMPTY_TRASH_MESSAGE": "", + "LEAVE_SHARED_ALBUM": "", + "LEAVE_ALBUM": "", + "LEAVE_SHARED_ALBUM_TITLE": "", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "", + "SORT_BY_UPDATION_TIME_DESCENDING": "", + "SORT_BY_NAME": "", + "COMPRESS_THUMBNAILS": "", + "THUMBNAIL_REPLACED": "", + "FIX_THUMBNAIL": "", + "FIX_THUMBNAIL_LATER": "", + "REPLACE_THUMBNAIL_NOT_STARTED": "", + "REPLACE_THUMBNAIL_COMPLETED": "", + "REPLACE_THUMBNAIL_NOOP": "", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "", + "SHARING_DETAILS": "", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "PARTICIPANTS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "", + "LINK_EXPIRED": "", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "LINK_PASSWORD_LOCK": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "MALICIOUS_CONTENT": "", + "COPYRIGHT": "", + "SHARED_USING": "", + "ENTE_IO": "", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "UPLOAD_FILES": "", + "UPLOAD_DIRS": "", + "UPLOAD_GOOGLE_TAKEOUT": "", + "DEDUPLICATE_FILES": "", + "AUTHENTICATOR_SECTION": "", + "NO_DUPLICATES_FOUND": "", + "CLUB_BY_CAPTURE_TIME": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "", + "albums_other": "", + "ALL_ALBUMS": "", + "ALBUMS": "", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "HIDDEN_ITEMS_SECTION_NAME": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "", + "COPIED": "", + "CANVAS_BLOCKED_TITLE": "", + "CANVAS_BLOCKED_MESSAGE": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "", + "RENEW_NOW": "", + "STORAGE": "", + "USED": "", + "YOU": "", + "FAMILY": "", + "FREE": "", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "MONTH_SHORT": "", + "YEAR": "", + "FAMILY_PLAN": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "", + "TWO_MONTHS_FREE": "", + "GB": "", + "POPULAR": "", + "FREE_PLAN_OPTION_LABEL": "", + "FREE_PLAN_DESCRIPTION": "", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "DRAG_AND_DROP_HINT": "", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "", + "AUTHENTICATE": "", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "", + "YESTERDAY": "", + "NAME_PLACEHOLDER": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "", + "PASSPHRASE_STRENGTH_MODERATE": "", + "PASSPHRASE_STRENGTH_STRONG": "", + "PREFERENCES": "", + "LANGUAGE": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "STORAGE_UNITS": { + "B": "", + "KB": "", + "MB": "", + "GB": "", + "TB": "" + }, + "AFTER_TIME": { + "HOUR": "", + "DAY": "", + "WEEK": "", + "MONTH": "", + "YEAR": "" + }, + "COPY_LINK": "", + "DONE": "", + "LINK_SHARE_TITLE": "", + "REMOVE_LINK": "", + "CREATE_PUBLIC_SHARING": "", + "PUBLIC_LINK_CREATED": "", + "PUBLIC_LINK_ENABLED": "", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "EXPORT_NOTIFICATION": { + "START": "", + "IN_PROGRESS": "", + "FINISH": "", + "UP_TO_DATE": "" + }, + "CONTINUOUS_EXPORT": "", + "TOTAL_ITEMS": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "DELETE_ACCOUNT_REASON_LABEL": "", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "", + "DELETE_REASON": { + "MISSING_FEATURE": "", + "BROKEN_BEHAVIOR": "", + "FOUND_ANOTHER_SERVICE": "", + "NOT_LISTED": "" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "", + "CONFIRM_DELETE_ACCOUNT": "", + "FEEDBACK_REQUIRED": "", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "", + "HIDE": "", + "UNHIDE": "", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CRASH_REPORTING": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/ru-RU/translation.json b/web/apps/photos/public/locales/ru-RU/translation.json new file mode 100644 index 000000000..bc335bc77 --- /dev/null +++ b/web/apps/photos/public/locales/ru-RU/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "", + "HERO_SLIDE_1": "", + "HERO_SLIDE_2_TITLE": "", + "HERO_SLIDE_2": "", + "HERO_SLIDE_3_TITLE": "", + "HERO_SLIDE_3": "", + "LOGIN": "", + "SIGN_UP": "", + "NEW_USER": "", + "EXISTING_USER": "", + "ENTER_NAME": "", + "PUBLIC_UPLOADER_NAME_MESSAGE": "", + "ENTER_EMAIL": "", + "EMAIL_ERROR": "", + "REQUIRED": "", + "EMAIL_SENT": "", + "CHECK_INBOX": "", + "ENTER_OTT": "", + "RESEND_MAIL": "", + "VERIFY": "", + "UNKNOWN_ERROR": "", + "INVALID_CODE": "", + "EXPIRED_CODE": "", + "SENDING": "", + "SENT": "", + "PASSWORD": "", + "LINK_PASSWORD": "", + "RETURN_PASSPHRASE_HINT": "", + "SET_PASSPHRASE": "", + "VERIFY_PASSPHRASE": "", + "INCORRECT_PASSPHRASE": "", + "ENTER_ENC_PASSPHRASE": "", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "", + "PASSPHRASE_HINT": "", + "CONFIRM_PASSPHRASE": "", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "", + "CONSOLE_WARNING_STOP": "", + "CONSOLE_WARNING_DESC": "", + "CREATE_COLLECTION": "", + "ENTER_ALBUM_NAME": "", + "CLOSE_OPTION": "", + "ENTER_FILE_NAME": "", + "CLOSE": "", + "NO": "", + "NOTHING_HERE": "", + "UPLOAD": "", + "IMPORT": "", + "ADD_PHOTOS": "", + "ADD_MORE_PHOTOS": "", + "add_photos_one": "", + "add_photos_other": "", + "SELECT_PHOTOS": "", + "FILE_UPLOAD": "", + "UPLOAD_STAGE_MESSAGE": { + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "FILE_NOT_UPLOADED_LIST": "", + "SUBSCRIPTION_EXPIRED": "", + "SUBSCRIPTION_EXPIRED_MESSAGE": "", + "STORAGE_QUOTA_EXCEEDED": "", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "", + "ACCOUNT_EXISTS": "", + "CREATE": "", + "DOWNLOAD": "", + "DOWNLOAD_OPTION": "", + "DOWNLOAD_FAVORITES": "", + "DOWNLOAD_UNCATEGORIZED": "", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "", + "TOGGLE_FULLSCREEN": "", + "ZOOM_IN_OUT": "", + "PREVIOUS": "", + "NEXT": "", + "TITLE_PHOTOS": "", + "TITLE_ALBUMS": "", + "TITLE_AUTH": "", + "UPLOAD_FIRST_PHOTO": "", + "IMPORT_YOUR_FOLDERS": "", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "", + "TRASH_FILE_TITLE": "", + "DELETE_FILES_TITLE": "", + "DELETE_FILES_MESSAGE": "", + "DELETE": "", + "DELETE_OPTION": "", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "", + "OR": "", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "", + "SESSION_EXPIRED": "", + "PASSWORD_GENERATION_FAILED": "", + "CHANGE_PASSWORD": "", + "GO_BACK": "", + "RECOVERY_KEY": "", + "SAVE_LATER": "", + "SAVE": "", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "", + "RECOVER_ACCOUNT": "", + "RECOVERY_KEY_HINT": "", + "RECOVER": "", + "NO_RECOVERY_KEY": "", + "INCORRECT_RECOVERY_KEY": "", + "SORRY": "", + "NO_RECOVERY_KEY_MESSAGE": "", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", + "CONTACT_SUPPORT": "", + "REQUEST_FEATURE": "", + "SUPPORT": "", + "CONFIRM": "", + "CANCEL": "", + "LOGOUT": "", + "DELETE_ACCOUNT": "", + "DELETE_ACCOUNT_MESSAGE": "", + "LOGOUT_MESSAGE": "", + "CHANGE_EMAIL": "", + "OK": "", + "SUCCESS": "", + "ERROR": "", + "MESSAGE": "", + "INSTALL_MOBILE_APP": "", + "DOWNLOAD_APP_MESSAGE": "", + "DOWNLOAD_APP": "", + "EXPORT": "", + "SUBSCRIPTION": "", + "SUBSCRIBE": "", + "MANAGEMENT_PORTAL": "", + "MANAGE_FAMILY_PORTAL": "", + "LEAVE_FAMILY_PLAN": "", + "LEAVE": "", + "LEAVE_FAMILY_CONFIRM": "", + "CHOOSE_PLAN": "", + "MANAGE_PLAN": "", + "ACTIVE": "", + "OFFLINE_MSG": "", + "FREE_SUBSCRIPTION_INFO": "", + "FAMILY_SUBSCRIPTION_INFO": "", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "", + "SUBSCRIPTION_UPDATE_FAILED": "", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "", + "MONTHLY": "", + "YEARLY": "", + "UPDATE_SUBSCRIPTION_MESSAGE": "", + "UPDATE_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "RENAME": "", + "RENAME_FILE": "", + "RENAME_COLLECTION": "", + "DELETE_COLLECTION_TITLE": "", + "DELETE_COLLECTION": "", + "DELETE_COLLECTION_MESSAGE": "", + "DELETE_PHOTOS": "", + "KEEP_PHOTOS": "", + "SHARE": "", + "SHARE_COLLECTION": "", + "SHAREES": "", + "SHARE_WITH_SELF": "", + "ALREADY_SHARED": "", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "DOWNLOAD_COLLECTION": "", + "DOWNLOAD_COLLECTION_MESSAGE": "", + "CREATE_ALBUM_FAILED": "", + "SEARCH": "", + "SEARCH_RESULTS": "", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "", + "LOCATION": "", + "CITY": "", + "DATE": "", + "FILE_NAME": "", + "THING": "", + "FILE_CAPTION": "", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "", + "SELECTED": "", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "", + "PEOPLE": "", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "", + "INFO_OPTION": "", + "FILE_NAME": "", + "CAPTION_PLACEHOLDER": "", + "LOCATION": "", + "SHOW_ON_MAP": "", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "VIEW_EXIF": "", + "NO_EXIF": "", + "EXIF": "", + "ISO": "", + "TWO_FACTOR": "", + "TWO_FACTOR_AUTHENTICATION": "", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "", + "ENABLE_TWO_FACTOR": "", + "ENABLE": "", + "LOST_DEVICE": "", + "INCORRECT_CODE": "", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "", + "RECONFIGURE": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "", + "SELECT_FOLDER": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "", + "EMAIl_ALREADY_OWNED": "", + "ETAGS_BLOCKED": "", + "SKIPPED_VIDEOS_INFO": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "", + "SKIPPED_FILES": "", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "SKIPPED_VIDEOS": "", + "INPROGRESS_METADATA_EXTRACTION": "", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "", + "TOO_LARGE_INFO": "", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "UPLOAD_TO_COLLECTION": "", + "UNCATEGORIZED": "", + "ARCHIVE": "", + "FAVORITES": "", + "ARCHIVE_COLLECTION": "", + "ARCHIVE_SECTION_NAME": "", + "ALL_SECTION_NAME": "", + "MOVE_TO_COLLECTION": "", + "UNARCHIVE": "", + "UNARCHIVE_COLLECTION": "", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "", + "ADD": "", + "REMOVE": "", + "YES_REMOVE": "", + "REMOVE_FROM_COLLECTION": "", + "TRASH": "", + "MOVE_TO_TRASH": "", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "", + "RESTORE": "", + "RESTORE_TO_COLLECTION": "", + "EMPTY_TRASH": "", + "EMPTY_TRASH_TITLE": "", + "EMPTY_TRASH_MESSAGE": "", + "LEAVE_SHARED_ALBUM": "", + "LEAVE_ALBUM": "", + "LEAVE_SHARED_ALBUM_TITLE": "", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "", + "SORT_BY_UPDATION_TIME_DESCENDING": "", + "SORT_BY_NAME": "", + "COMPRESS_THUMBNAILS": "", + "THUMBNAIL_REPLACED": "", + "FIX_THUMBNAIL": "", + "FIX_THUMBNAIL_LATER": "", + "REPLACE_THUMBNAIL_NOT_STARTED": "", + "REPLACE_THUMBNAIL_COMPLETED": "", + "REPLACE_THUMBNAIL_NOOP": "", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "", + "SHARING_DETAILS": "", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "PARTICIPANTS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "", + "LINK_EXPIRED": "", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "LINK_PASSWORD_LOCK": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "MALICIOUS_CONTENT": "", + "COPYRIGHT": "", + "SHARED_USING": "", + "ENTE_IO": "", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "UPLOAD_FILES": "", + "UPLOAD_DIRS": "", + "UPLOAD_GOOGLE_TAKEOUT": "", + "DEDUPLICATE_FILES": "", + "AUTHENTICATOR_SECTION": "", + "NO_DUPLICATES_FOUND": "", + "CLUB_BY_CAPTURE_TIME": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "", + "albums_other": "", + "ALL_ALBUMS": "", + "ALBUMS": "", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "HIDDEN_ITEMS_SECTION_NAME": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "", + "COPIED": "", + "CANVAS_BLOCKED_TITLE": "", + "CANVAS_BLOCKED_MESSAGE": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "", + "RENEW_NOW": "", + "STORAGE": "", + "USED": "", + "YOU": "", + "FAMILY": "", + "FREE": "", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "MONTH_SHORT": "", + "YEAR": "", + "FAMILY_PLAN": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "", + "TWO_MONTHS_FREE": "", + "GB": "", + "POPULAR": "", + "FREE_PLAN_OPTION_LABEL": "", + "FREE_PLAN_DESCRIPTION": "", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "DRAG_AND_DROP_HINT": "", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "", + "AUTHENTICATE": "", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "", + "YESTERDAY": "", + "NAME_PLACEHOLDER": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "", + "PASSPHRASE_STRENGTH_MODERATE": "", + "PASSPHRASE_STRENGTH_STRONG": "", + "PREFERENCES": "", + "LANGUAGE": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "STORAGE_UNITS": { + "B": "", + "KB": "", + "MB": "", + "GB": "", + "TB": "" + }, + "AFTER_TIME": { + "HOUR": "", + "DAY": "", + "WEEK": "", + "MONTH": "", + "YEAR": "" + }, + "COPY_LINK": "", + "DONE": "", + "LINK_SHARE_TITLE": "", + "REMOVE_LINK": "", + "CREATE_PUBLIC_SHARING": "", + "PUBLIC_LINK_CREATED": "", + "PUBLIC_LINK_ENABLED": "", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "EXPORT_NOTIFICATION": { + "START": "", + "IN_PROGRESS": "", + "FINISH": "", + "UP_TO_DATE": "" + }, + "CONTINUOUS_EXPORT": "", + "TOTAL_ITEMS": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "DELETE_ACCOUNT_REASON_LABEL": "", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "", + "DELETE_REASON": { + "MISSING_FEATURE": "", + "BROKEN_BEHAVIOR": "", + "FOUND_ANOTHER_SERVICE": "", + "NOT_LISTED": "" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "", + "CONFIRM_DELETE_ACCOUNT": "", + "FEEDBACK_REQUIRED": "", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "", + "HIDE": "", + "UNHIDE": "", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CRASH_REPORTING": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/tr-TR/translation.json b/web/apps/photos/public/locales/tr-TR/translation.json new file mode 100644 index 000000000..bc335bc77 --- /dev/null +++ b/web/apps/photos/public/locales/tr-TR/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "", + "HERO_SLIDE_1": "", + "HERO_SLIDE_2_TITLE": "", + "HERO_SLIDE_2": "", + "HERO_SLIDE_3_TITLE": "", + "HERO_SLIDE_3": "", + "LOGIN": "", + "SIGN_UP": "", + "NEW_USER": "", + "EXISTING_USER": "", + "ENTER_NAME": "", + "PUBLIC_UPLOADER_NAME_MESSAGE": "", + "ENTER_EMAIL": "", + "EMAIL_ERROR": "", + "REQUIRED": "", + "EMAIL_SENT": "", + "CHECK_INBOX": "", + "ENTER_OTT": "", + "RESEND_MAIL": "", + "VERIFY": "", + "UNKNOWN_ERROR": "", + "INVALID_CODE": "", + "EXPIRED_CODE": "", + "SENDING": "", + "SENT": "", + "PASSWORD": "", + "LINK_PASSWORD": "", + "RETURN_PASSPHRASE_HINT": "", + "SET_PASSPHRASE": "", + "VERIFY_PASSPHRASE": "", + "INCORRECT_PASSPHRASE": "", + "ENTER_ENC_PASSPHRASE": "", + "PASSPHRASE_DISCLAIMER": "", + "WELCOME_TO_ENTE_HEADING": "", + "WELCOME_TO_ENTE_SUBHEADING": "", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "", + "PASSPHRASE_HINT": "", + "CONFIRM_PASSPHRASE": "", + "REFERRAL_CODE_HINT": "", + "REFERRAL_INFO": "", + "PASSPHRASE_MATCH_ERROR": "", + "CONSOLE_WARNING_STOP": "", + "CONSOLE_WARNING_DESC": "", + "CREATE_COLLECTION": "", + "ENTER_ALBUM_NAME": "", + "CLOSE_OPTION": "", + "ENTER_FILE_NAME": "", + "CLOSE": "", + "NO": "", + "NOTHING_HERE": "", + "UPLOAD": "", + "IMPORT": "", + "ADD_PHOTOS": "", + "ADD_MORE_PHOTOS": "", + "add_photos_one": "", + "add_photos_other": "", + "SELECT_PHOTOS": "", + "FILE_UPLOAD": "", + "UPLOAD_STAGE_MESSAGE": { + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "" + }, + "FILE_NOT_UPLOADED_LIST": "", + "SUBSCRIPTION_EXPIRED": "", + "SUBSCRIPTION_EXPIRED_MESSAGE": "", + "STORAGE_QUOTA_EXCEEDED": "", + "INITIAL_LOAD_DELAY_WARNING": "", + "USER_DOES_NOT_EXIST": "", + "NO_ACCOUNT": "", + "ACCOUNT_EXISTS": "", + "CREATE": "", + "DOWNLOAD": "", + "DOWNLOAD_OPTION": "", + "DOWNLOAD_FAVORITES": "", + "DOWNLOAD_UNCATEGORIZED": "", + "DOWNLOAD_HIDDEN_ITEMS": "", + "COPY_OPTION": "", + "TOGGLE_FULLSCREEN": "", + "ZOOM_IN_OUT": "", + "PREVIOUS": "", + "NEXT": "", + "TITLE_PHOTOS": "", + "TITLE_ALBUMS": "", + "TITLE_AUTH": "", + "UPLOAD_FIRST_PHOTO": "", + "IMPORT_YOUR_FOLDERS": "", + "UPLOAD_DROPZONE_MESSAGE": "", + "WATCH_FOLDER_DROPZONE_MESSAGE": "", + "TRASH_FILES_TITLE": "", + "TRASH_FILE_TITLE": "", + "DELETE_FILES_TITLE": "", + "DELETE_FILES_MESSAGE": "", + "DELETE": "", + "DELETE_OPTION": "", + "FAVORITE_OPTION": "", + "UNFAVORITE_OPTION": "", + "MULTI_FOLDER_UPLOAD": "", + "UPLOAD_STRATEGY_CHOICE": "", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "", + "OR": "", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "", + "SESSION_EXPIRED_MESSAGE": "", + "SESSION_EXPIRED": "", + "PASSWORD_GENERATION_FAILED": "", + "CHANGE_PASSWORD": "", + "GO_BACK": "", + "RECOVERY_KEY": "", + "SAVE_LATER": "", + "SAVE": "", + "RECOVERY_KEY_DESCRIPTION": "", + "RECOVER_KEY_GENERATION_FAILED": "", + "KEY_NOT_STORED_DISCLAIMER": "", + "FORGOT_PASSWORD": "", + "RECOVER_ACCOUNT": "", + "RECOVERY_KEY_HINT": "", + "RECOVER": "", + "NO_RECOVERY_KEY": "", + "INCORRECT_RECOVERY_KEY": "", + "SORRY": "", + "NO_RECOVERY_KEY_MESSAGE": "", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "", + "CONTACT_SUPPORT": "", + "REQUEST_FEATURE": "", + "SUPPORT": "", + "CONFIRM": "", + "CANCEL": "", + "LOGOUT": "", + "DELETE_ACCOUNT": "", + "DELETE_ACCOUNT_MESSAGE": "", + "LOGOUT_MESSAGE": "", + "CHANGE_EMAIL": "", + "OK": "", + "SUCCESS": "", + "ERROR": "", + "MESSAGE": "", + "INSTALL_MOBILE_APP": "", + "DOWNLOAD_APP_MESSAGE": "", + "DOWNLOAD_APP": "", + "EXPORT": "", + "SUBSCRIPTION": "", + "SUBSCRIBE": "", + "MANAGEMENT_PORTAL": "", + "MANAGE_FAMILY_PORTAL": "", + "LEAVE_FAMILY_PLAN": "", + "LEAVE": "", + "LEAVE_FAMILY_CONFIRM": "", + "CHOOSE_PLAN": "", + "MANAGE_PLAN": "", + "ACTIVE": "", + "OFFLINE_MSG": "", + "FREE_SUBSCRIPTION_INFO": "", + "FAMILY_SUBSCRIPTION_INFO": "", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "", + "ADD_ON_AVAILABLE_TILL": "", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "", + "SUBSCRIPTION_PURCHASE_SUCCESS": "", + "SUBSCRIPTION_PURCHASE_CANCELLED": "", + "SUBSCRIPTION_PURCHASE_FAILED": "", + "SUBSCRIPTION_UPDATE_FAILED": "", + "UPDATE_PAYMENT_METHOD_MESSAGE": "", + "STRIPE_AUTHENTICATION_FAILED": "", + "UPDATE_PAYMENT_METHOD": "", + "MONTHLY": "", + "YEARLY": "", + "UPDATE_SUBSCRIPTION_MESSAGE": "", + "UPDATE_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION": "", + "CANCEL_SUBSCRIPTION_MESSAGE": "", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "", + "SUBSCRIPTION_CANCEL_FAILED": "", + "SUBSCRIPTION_CANCEL_SUCCESS": "", + "REACTIVATE_SUBSCRIPTION": "", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "", + "SUBSCRIPTION_ACTIVATE_FAILED": "", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "", + "MAIL_TO_MANAGE_SUBSCRIPTION": "", + "RENAME": "", + "RENAME_FILE": "", + "RENAME_COLLECTION": "", + "DELETE_COLLECTION_TITLE": "", + "DELETE_COLLECTION": "", + "DELETE_COLLECTION_MESSAGE": "", + "DELETE_PHOTOS": "", + "KEEP_PHOTOS": "", + "SHARE": "", + "SHARE_COLLECTION": "", + "SHAREES": "", + "SHARE_WITH_SELF": "", + "ALREADY_SHARED": "", + "SHARING_BAD_REQUEST_ERROR": "", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "", + "DOWNLOAD_COLLECTION": "", + "DOWNLOAD_COLLECTION_MESSAGE": "", + "CREATE_ALBUM_FAILED": "", + "SEARCH": "", + "SEARCH_RESULTS": "", + "NO_RESULTS": "", + "SEARCH_HINT": "", + "SEARCH_TYPE": { + "COLLECTION": "", + "LOCATION": "", + "CITY": "", + "DATE": "", + "FILE_NAME": "", + "THING": "", + "FILE_CAPTION": "", + "FILE_TYPE": "", + "CLIP": "" + }, + "photos_count_zero": "", + "photos_count_one": "", + "photos_count_other": "", + "TERMS_AND_CONDITIONS": "", + "ADD_TO_COLLECTION": "", + "SELECTED": "", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "", + "PEOPLE": "", + "INDEXING_SCHEDULED": "", + "ANALYZING_PHOTOS": "", + "INDEXING_PEOPLE": "", + "INDEXING_DONE": "", + "UNIDENTIFIED_FACES": "", + "OBJECTS": "", + "TEXT": "", + "INFO": "", + "INFO_OPTION": "", + "FILE_NAME": "", + "CAPTION_PLACEHOLDER": "", + "LOCATION": "", + "SHOW_ON_MAP": "", + "MAP": "", + "MAP_SETTINGS": "", + "ENABLE_MAPS": "", + "ENABLE_MAP": "", + "DISABLE_MAPS": "", + "ENABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP_DESCRIPTION": "", + "DISABLE_MAP": "", + "DETAILS": "", + "VIEW_EXIF": "", + "NO_EXIF": "", + "EXIF": "", + "ISO": "", + "TWO_FACTOR": "", + "TWO_FACTOR_AUTHENTICATION": "", + "TWO_FACTOR_QR_INSTRUCTION": "", + "ENTER_CODE_MANUALLY": "", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "", + "SCAN_QR_CODE": "", + "ENABLE_TWO_FACTOR": "", + "ENABLE": "", + "LOST_DEVICE": "", + "INCORRECT_CODE": "", + "TWO_FACTOR_INFO": "", + "DISABLE_TWO_FACTOR_LABEL": "", + "UPDATE_TWO_FACTOR_LABEL": "", + "DISABLE": "", + "RECONFIGURE": "", + "UPDATE_TWO_FACTOR": "", + "UPDATE_TWO_FACTOR_MESSAGE": "", + "UPDATE": "", + "DISABLE_TWO_FACTOR": "", + "DISABLE_TWO_FACTOR_MESSAGE": "", + "TWO_FACTOR_DISABLE_FAILED": "", + "EXPORT_DATA": "", + "SELECT_FOLDER": "", + "DESTINATION": "", + "START": "", + "LAST_EXPORT_TIME": "", + "EXPORT_AGAIN": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "", + "SEND_OTT": "", + "EMAIl_ALREADY_OWNED": "", + "ETAGS_BLOCKED": "", + "SKIPPED_VIDEOS_INFO": "", + "LIVE_PHOTOS_DETECTED": "", + "RETRY_FAILED": "", + "FAILED_UPLOADS": "", + "SKIPPED_FILES": "", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "", + "UNSUPPORTED_FILES": "", + "SUCCESSFUL_UPLOADS": "", + "SKIPPED_INFO": "", + "UNSUPPORTED_INFO": "", + "BLOCKED_UPLOADS": "", + "SKIPPED_VIDEOS": "", + "INPROGRESS_METADATA_EXTRACTION": "", + "INPROGRESS_UPLOADS": "", + "TOO_LARGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "", + "TOO_LARGE_INFO": "", + "THUMBNAIL_GENERATION_FAILED_INFO": "", + "UPLOAD_TO_COLLECTION": "", + "UNCATEGORIZED": "", + "ARCHIVE": "", + "FAVORITES": "", + "ARCHIVE_COLLECTION": "", + "ARCHIVE_SECTION_NAME": "", + "ALL_SECTION_NAME": "", + "MOVE_TO_COLLECTION": "", + "UNARCHIVE": "", + "UNARCHIVE_COLLECTION": "", + "HIDE_COLLECTION": "", + "UNHIDE_COLLECTION": "", + "MOVE": "", + "ADD": "", + "REMOVE": "", + "YES_REMOVE": "", + "REMOVE_FROM_COLLECTION": "", + "TRASH": "", + "MOVE_TO_TRASH": "", + "TRASH_FILES_MESSAGE": "", + "TRASH_FILE_MESSAGE": "", + "DELETE_PERMANENTLY": "", + "RESTORE": "", + "RESTORE_TO_COLLECTION": "", + "EMPTY_TRASH": "", + "EMPTY_TRASH_TITLE": "", + "EMPTY_TRASH_MESSAGE": "", + "LEAVE_SHARED_ALBUM": "", + "LEAVE_ALBUM": "", + "LEAVE_SHARED_ALBUM_TITLE": "", + "LEAVE_SHARED_ALBUM_MESSAGE": "", + "NOT_FILE_OWNER": "", + "CONFIRM_SELF_REMOVE_MESSAGE": "", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "", + "SORT_BY_CREATION_TIME_ASCENDING": "", + "SORT_BY_UPDATION_TIME_DESCENDING": "", + "SORT_BY_NAME": "", + "COMPRESS_THUMBNAILS": "", + "THUMBNAIL_REPLACED": "", + "FIX_THUMBNAIL": "", + "FIX_THUMBNAIL_LATER": "", + "REPLACE_THUMBNAIL_NOT_STARTED": "", + "REPLACE_THUMBNAIL_COMPLETED": "", + "REPLACE_THUMBNAIL_NOOP": "", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "", + "FIX_CREATION_TIME": "", + "FIX_CREATION_TIME_IN_PROGRESS": "", + "CREATION_TIME_UPDATED": "", + "UPDATE_CREATION_TIME_NOT_STARTED": "", + "UPDATE_CREATION_TIME_COMPLETED": "", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "", + "CAPTION_CHARACTER_LIMIT": "", + "DATE_TIME_ORIGINAL": "", + "DATE_TIME_DIGITIZED": "", + "METADATA_DATE": "", + "CUSTOM_TIME": "", + "REOPEN_PLAN_SELECTOR_MODAL": "", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "", + "INSTALL": "", + "SHARING_DETAILS": "", + "MODIFY_SHARING": "", + "ADD_COLLABORATORS": "", + "ADD_NEW_EMAIL": "", + "shared_with_people_zero": "", + "shared_with_people_one": "", + "shared_with_people_other": "", + "participants_zero": "", + "participants_one": "", + "participants_other": "", + "ADD_VIEWERS": "", + "PARTICIPANTS": "", + "CHANGE_PERMISSIONS_TO_VIEWER": "", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "", + "CONVERT_TO_VIEWER": "", + "CONVERT_TO_COLLABORATOR": "", + "CHANGE_PERMISSION": "", + "REMOVE_PARTICIPANT": "", + "CONFIRM_REMOVE": "", + "MANAGE": "", + "ADDED_AS": "", + "COLLABORATOR_RIGHTS": "", + "REMOVE_PARTICIPANT_HEAD": "", + "OWNER": "", + "COLLABORATORS": "", + "ADD_MORE": "", + "VIEWERS": "", + "OR_ADD_EXISTING": "", + "REMOVE_PARTICIPANT_MESSAGE": "", + "NOT_FOUND": "", + "LINK_EXPIRED": "", + "LINK_EXPIRED_MESSAGE": "", + "MANAGE_LINK": "", + "LINK_TOO_MANY_REQUESTS": "", + "FILE_DOWNLOAD": "", + "LINK_PASSWORD_LOCK": "", + "PUBLIC_COLLECT": "", + "LINK_DEVICE_LIMIT": "", + "NO_DEVICE_LIMIT": "", + "LINK_EXPIRY": "", + "NEVER": "", + "DISABLE_FILE_DOWNLOAD": "", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "", + "MALICIOUS_CONTENT": "", + "COPYRIGHT": "", + "SHARED_USING": "", + "ENTE_IO": "", + "SHARING_REFERRAL_CODE": "", + "LIVE": "", + "DISABLE_PASSWORD": "", + "DISABLE_PASSWORD_MESSAGE": "", + "PASSWORD_LOCK": "", + "LOCK": "", + "DOWNLOAD_UPLOAD_LOGS": "", + "UPLOAD_FILES": "", + "UPLOAD_DIRS": "", + "UPLOAD_GOOGLE_TAKEOUT": "", + "DEDUPLICATE_FILES": "", + "AUTHENTICATOR_SECTION": "", + "NO_DUPLICATES_FOUND": "", + "CLUB_BY_CAPTURE_TIME": "", + "FILES": "", + "EACH": "", + "DEDUPLICATE_BASED_ON_SIZE": "", + "STOP_ALL_UPLOADS_MESSAGE": "", + "STOP_UPLOADS_HEADER": "", + "YES_STOP_UPLOADS": "", + "STOP_DOWNLOADS_HEADER": "", + "YES_STOP_DOWNLOADS": "", + "STOP_ALL_DOWNLOADS_MESSAGE": "", + "albums_one": "", + "albums_other": "", + "ALL_ALBUMS": "", + "ALBUMS": "", + "ALL_HIDDEN_ALBUMS": "", + "HIDDEN_ALBUMS": "", + "HIDDEN_ITEMS": "", + "HIDDEN_ITEMS_SECTION_NAME": "", + "ENTER_TWO_FACTOR_OTP": "", + "CREATE_ACCOUNT": "", + "COPIED": "", + "CANVAS_BLOCKED_TITLE": "", + "CANVAS_BLOCKED_MESSAGE": "", + "WATCH_FOLDERS": "", + "UPGRADE_NOW": "", + "RENEW_NOW": "", + "STORAGE": "", + "USED": "", + "YOU": "", + "FAMILY": "", + "FREE": "", + "OF": "", + "WATCHED_FOLDERS": "", + "NO_FOLDERS_ADDED": "", + "FOLDERS_AUTOMATICALLY_MONITORED": "", + "UPLOAD_NEW_FILES_TO_ENTE": "", + "REMOVE_DELETED_FILES_FROM_ENTE": "", + "ADD_FOLDER": "", + "STOP_WATCHING": "", + "STOP_WATCHING_FOLDER": "", + "STOP_WATCHING_DIALOG_MESSAGE": "", + "YES_STOP": "", + "MONTH_SHORT": "", + "YEAR": "", + "FAMILY_PLAN": "", + "DOWNLOAD_LOGS": "", + "DOWNLOAD_LOGS_MESSAGE": "", + "CHANGE_FOLDER": "", + "TWO_MONTHS_FREE": "", + "GB": "", + "POPULAR": "", + "FREE_PLAN_OPTION_LABEL": "", + "FREE_PLAN_DESCRIPTION": "", + "CURRENT_USAGE": "", + "WEAK_DEVICE": "", + "DRAG_AND_DROP_HINT": "", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "", + "AUTHENTICATE": "", + "UPLOADED_TO_SINGLE_COLLECTION": "", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "", + "NEVERMIND": "", + "UPDATE_AVAILABLE": "", + "UPDATE_INSTALLABLE_MESSAGE": "", + "INSTALL_NOW": "", + "INSTALL_ON_NEXT_LAUNCH": "", + "UPDATE_AVAILABLE_MESSAGE": "", + "DOWNLOAD_AND_INSTALL": "", + "IGNORE_THIS_VERSION": "", + "TODAY": "", + "YESTERDAY": "", + "NAME_PLACEHOLDER": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "", + "CHOSE_THEME": "", + "ML_SEARCH": "", + "ENABLE_ML_SEARCH_DESCRIPTION": "", + "ML_MORE_DETAILS": "", + "ENABLE_FACE_SEARCH": "", + "ENABLE_FACE_SEARCH_TITLE": "", + "ENABLE_FACE_SEARCH_DESCRIPTION": "", + "DISABLE_BETA": "", + "DISABLE_FACE_SEARCH": "", + "DISABLE_FACE_SEARCH_TITLE": "", + "DISABLE_FACE_SEARCH_DESCRIPTION": "", + "ADVANCED": "", + "FACE_SEARCH_CONFIRMATION": "", + "LABS": "", + "YOURS": "", + "PASSPHRASE_STRENGTH_WEAK": "", + "PASSPHRASE_STRENGTH_MODERATE": "", + "PASSPHRASE_STRENGTH_STRONG": "", + "PREFERENCES": "", + "LANGUAGE": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "", + "SUBSCRIPTION_VERIFICATION_ERROR": "", + "STORAGE_UNITS": { + "B": "", + "KB": "", + "MB": "", + "GB": "", + "TB": "" + }, + "AFTER_TIME": { + "HOUR": "", + "DAY": "", + "WEEK": "", + "MONTH": "", + "YEAR": "" + }, + "COPY_LINK": "", + "DONE": "", + "LINK_SHARE_TITLE": "", + "REMOVE_LINK": "", + "CREATE_PUBLIC_SHARING": "", + "PUBLIC_LINK_CREATED": "", + "PUBLIC_LINK_ENABLED": "", + "COLLECT_PHOTOS": "", + "PUBLIC_COLLECT_SUBTEXT": "", + "STOP_EXPORT": "", + "EXPORT_PROGRESS": "", + "MIGRATING_EXPORT": "", + "RENAMING_COLLECTION_FOLDERS": "", + "TRASHING_DELETED_FILES": "", + "TRASHING_DELETED_COLLECTIONS": "", + "EXPORT_NOTIFICATION": { + "START": "", + "IN_PROGRESS": "", + "FINISH": "", + "UP_TO_DATE": "" + }, + "CONTINUOUS_EXPORT": "", + "TOTAL_ITEMS": "", + "PENDING_ITEMS": "", + "EXPORT_STARTING": "", + "DELETE_ACCOUNT_REASON_LABEL": "", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "", + "DELETE_REASON": { + "MISSING_FEATURE": "", + "BROKEN_BEHAVIOR": "", + "FOUND_ANOTHER_SERVICE": "", + "NOT_LISTED": "" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "", + "CONFIRM_DELETE_ACCOUNT": "", + "FEEDBACK_REQUIRED": "", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "", + "RECOVER_TWO_FACTOR": "", + "at": "", + "AUTH_NEXT": "", + "AUTH_DOWNLOAD_MOBILE_APP": "", + "HIDDEN": "", + "HIDE": "", + "UNHIDE": "", + "UNHIDE_TO_COLLECTION": "", + "SORT_BY": "", + "NEWEST_FIRST": "", + "OLDEST_FIRST": "", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "", + "SELECT_COLLECTION": "", + "PIN_ALBUM": "", + "UNPIN_ALBUM": "", + "DOWNLOAD_COMPLETE": "", + "DOWNLOADING_COLLECTION": "", + "DOWNLOAD_FAILED": "", + "DOWNLOAD_PROGRESS": "", + "CRASH_REPORTING": "", + "CHRISTMAS": "", + "CHRISTMAS_EVE": "", + "NEW_YEAR": "", + "NEW_YEAR_EVE": "", + "IMAGE": "", + "VIDEO": "", + "LIVE_PHOTO": "", + "CONVERT": "", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "", + "BRIGHTNESS": "", + "CONTRAST": "", + "SATURATION": "", + "BLUR": "", + "INVERT_COLORS": "", + "ASPECT_RATIO": "", + "SQUARE": "", + "ROTATE_LEFT": "", + "ROTATE_RIGHT": "", + "FLIP_VERTICALLY": "", + "FLIP_HORIZONTALLY": "", + "DOWNLOAD_EDITED": "", + "SAVE_A_COPY_TO_ENTE": "", + "RESTORE_ORIGINAL": "", + "TRANSFORM": "", + "COLORS": "", + "FLIP": "", + "ROTATION": "", + "RESET": "", + "PHOTO_EDITOR": "", + "FASTER_UPLOAD": "", + "FASTER_UPLOAD_DESCRIPTION": "", + "MAGIC_SEARCH_STATUS": "", + "INDEXED_ITEMS": "", + "CAST_ALBUM_TO_TV": "", + "ENTER_CAST_PIN_CODE": "", + "PAIR_DEVICE_TO_TV": "", + "TV_NOT_FOUND": "", + "AUTO_CAST_PAIR": "", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "", + "PAIR_WITH_PIN": "", + "CHOOSE_DEVICE_FROM_BROWSER": "", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "", + "VISIT_CAST_ENTE_IO": "", + "CAST_AUTO_PAIR_FAILED": "", + "CACHE_DIRECTORY": "", + "PASSKEYS": "", + "FREEHAND": "", + "APPLY_CROP": "", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "" +} diff --git a/web/apps/photos/public/locales/zh-CN/translation.json b/web/apps/photos/public/locales/zh-CN/translation.json new file mode 100644 index 000000000..15ef565dd --- /dev/null +++ b/web/apps/photos/public/locales/zh-CN/translation.json @@ -0,0 +1,644 @@ +{ + "HERO_SLIDE_1_TITLE": "
私人备份
为您的回忆
", + "HERO_SLIDE_1": "默认端到端加密", + "HERO_SLIDE_2_TITLE": "
安全地存放
在一个掩护所中
", + "HERO_SLIDE_2": "经久耐用", + "HERO_SLIDE_3_TITLE": "
可用于
各处
", + "HERO_SLIDE_3": "安卓, iOS, 网页端, 桌面端", + "LOGIN": "登录", + "SIGN_UP": "注册", + "NEW_USER": "刚来到 ente", + "EXISTING_USER": "现有用户", + "ENTER_NAME": "现有用户", + "PUBLIC_UPLOADER_NAME_MESSAGE": "请添加一个名字,以便您的朋友知晓该感谢谁拍摄了这些精美的照片!", + "ENTER_EMAIL": "请输入电子邮件地址", + "EMAIL_ERROR": "请输入有效的电子邮件", + "REQUIRED": "必需的", + "EMAIL_SENT": "验证码已发送至
{{email}}", + "CHECK_INBOX": "请检查您的收件箱 (或者是在您的“垃圾邮件”列表内) 以完成验证", + "ENTER_OTT": "验证码", + "RESEND_MAIL": "重新发送验证码", + "VERIFY": "验证", + "UNKNOWN_ERROR": "出了点问题,请重试", + "INVALID_CODE": "验证码无效", + "EXPIRED_CODE": "您的验证码已过期", + "SENDING": "发送中……", + "SENT": "已发送!", + "PASSWORD": "密码", + "LINK_PASSWORD": "输入密码来解锁相册", + "RETURN_PASSPHRASE_HINT": "密码", + "SET_PASSPHRASE": "设置密码", + "VERIFY_PASSPHRASE": "登录", + "INCORRECT_PASSPHRASE": "密码错误", + "ENTER_ENC_PASSPHRASE": "请输入我们可以用来加密您数据的密码", + "PASSPHRASE_DISCLAIMER": "我们不会存储您的密码,因此如果您忘记密码, 我们将无法帮助您在没有恢复密钥的情况下恢复您的数据。", + "WELCOME_TO_ENTE_HEADING": "欢迎来到 ", + "WELCOME_TO_ENTE_SUBHEADING": "端到端加密的照片存储和共享", + "WHERE_YOUR_BEST_PHOTOS_LIVE": "可以让您存放照片的最好的地方", + "KEY_GENERATION_IN_PROGRESS_MESSAGE": "正在生成加密密钥...", + "PASSPHRASE_HINT": "密码", + "CONFIRM_PASSPHRASE": "请确认密码", + "REFERRAL_CODE_HINT": "您是如何知道Ente的? (可选的)", + "REFERRAL_INFO": "我们不跟踪应用程序安装情况,如果您告诉我们您是在哪里找到我们的,将会有所帮助!", + "PASSPHRASE_MATCH_ERROR": "两次输入的密码不一致", + "CONSOLE_WARNING_STOP": "停止!", + "CONSOLE_WARNING_DESC": "这是专为开发人员设计的浏览器功能。 请不要在此处复制粘贴未经验证的代码。", + "CREATE_COLLECTION": "新建相册", + "ENTER_ALBUM_NAME": "相册名称", + "CLOSE_OPTION": "关闭 (或按Esc键)", + "ENTER_FILE_NAME": "文件名", + "CLOSE": "关闭", + "NO": "否", + "NOTHING_HERE": "这里空空如也 👀", + "UPLOAD": "上传", + "IMPORT": "导入", + "ADD_PHOTOS": "添加照片", + "ADD_MORE_PHOTOS": "添加更多的照片", + "add_photos_one": "添加1个项目", + "add_photos_other": "添加 {{count, number}} 个项目", + "SELECT_PHOTOS": "选择图片", + "FILE_UPLOAD": "上传文件", + "UPLOAD_STAGE_MESSAGE": { + "0": "正在准备上传", + "1": "正在读取 Google 元数据文件", + "2": "文件元数据提取状态:已完成 {{uploadCounter.finished, number}} / 共 {{uploadCounter.total, number}}", + "3": "文件备份状态:已完成 {{uploadCounter.finished, number}} / 共 {{uploadCounter.total, number}}", + "4": "正在取消剩余的上传内容", + "5": "备份完成" + }, + "FILE_NOT_UPLOADED_LIST": "以下文件未上传", + "SUBSCRIPTION_EXPIRED": "您的订阅已过期", + "SUBSCRIPTION_EXPIRED_MESSAGE": "您的订阅已过期,请 续期", + "STORAGE_QUOTA_EXCEEDED": "已超出存储限制", + "INITIAL_LOAD_DELAY_WARNING": "第一次加载可能需要一些时间", + "USER_DOES_NOT_EXIST": "抱歉,找不到该电子邮件的用户", + "NO_ACCOUNT": "没有账号", + "ACCOUNT_EXISTS": "已有账户", + "CREATE": "创建", + "DOWNLOAD": "下载", + "DOWNLOAD_OPTION": "下载 (D)", + "DOWNLOAD_FAVORITES": "下载收藏", + "DOWNLOAD_UNCATEGORIZED": "下载未分类的", + "DOWNLOAD_HIDDEN_ITEMS": "下载隐藏项目", + "COPY_OPTION": "复制为 PNG (Ctrl/Cmd - C)", + "TOGGLE_FULLSCREEN": "切换至全屏 (F)", + "ZOOM_IN_OUT": "放大/缩小", + "PREVIOUS": "上一个 (←)", + "NEXT": "下一个 (→)", + "TITLE_PHOTOS": "ente 照片", + "TITLE_ALBUMS": "ente 照片", + "TITLE_AUTH": "ente 验证器", + "UPLOAD_FIRST_PHOTO": "上传您的第一张照片", + "IMPORT_YOUR_FOLDERS": "导入您的文件夹", + "UPLOAD_DROPZONE_MESSAGE": "拖放以备份您的文件", + "WATCH_FOLDER_DROPZONE_MESSAGE": "拖放以添加观看的文件夹", + "TRASH_FILES_TITLE": "要删除文件吗?", + "TRASH_FILE_TITLE": "要删除文件吗?", + "DELETE_FILES_TITLE": "要立即删除吗?", + "DELETE_FILES_MESSAGE": "所选文件将从您的账户中永久删除。", + "DELETE": "删除", + "DELETE_OPTION": "删除(DEL)", + "FAVORITE_OPTION": "收藏 (L)", + "UNFAVORITE_OPTION": "取消收藏 (L)", + "MULTI_FOLDER_UPLOAD": "检测到多个文件夹", + "UPLOAD_STRATEGY_CHOICE": "你想要上传他们到", + "UPLOAD_STRATEGY_SINGLE_COLLECTION": "单个相册", + "OR": "或者", + "UPLOAD_STRATEGY_COLLECTION_PER_FOLDER": "独立相册", + "SESSION_EXPIRED_MESSAGE": "您的会话已过期,请重新登录以继续", + "SESSION_EXPIRED": "会话已过期", + "PASSWORD_GENERATION_FAILED": "您的浏览器无法生成一个符合ente加密标准的强密钥,请尝试使用移动应用程序或其他浏览器", + "CHANGE_PASSWORD": "修改密码", + "GO_BACK": "返回", + "RECOVERY_KEY": "恢复密钥", + "SAVE_LATER": "稍后再做", + "SAVE": "保存密钥", + "RECOVERY_KEY_DESCRIPTION": "如果您忘记了密码,恢复数据的唯一方法就是使用此密钥。", + "RECOVER_KEY_GENERATION_FAILED": "无法生成恢复代码,请重试", + "KEY_NOT_STORED_DISCLAIMER": "我们不存储此密钥,因此请将其保存在安全的地方", + "FORGOT_PASSWORD": "忘记密码", + "RECOVER_ACCOUNT": "恢复账户", + "RECOVERY_KEY_HINT": "恢复密钥", + "RECOVER": "恢复", + "NO_RECOVERY_KEY": "没有恢复密钥?", + "INCORRECT_RECOVERY_KEY": "不正确的恢复密钥", + "SORRY": "抱歉", + "NO_RECOVERY_KEY_MESSAGE": "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密", + "NO_TWO_FACTOR_RECOVERY_KEY_MESSAGE": "请用您注册ente账户的电子邮箱发一封邮件给 {{emailID}}", + "CONTACT_SUPPORT": "联系支持", + "REQUEST_FEATURE": "功能建议", + "SUPPORT": "支持", + "CONFIRM": "确认", + "CANCEL": "取消", + "LOGOUT": "退出登录", + "DELETE_ACCOUNT": "删除账户", + "DELETE_ACCOUNT_MESSAGE": "

请从您注册的电子邮件地址发送一封电子邮件到 {{emailID}}

。您的请求将在72小时内处理。

", + "LOGOUT_MESSAGE": "你确定要退出登录吗?", + "CHANGE_EMAIL": "更换邮箱", + "OK": "确定", + "SUCCESS": "成功", + "ERROR": "错误", + "MESSAGE": "消息", + "INSTALL_MOBILE_APP": "安装我们的 AndroidiOS 应用程序来自动备份您的所有照片", + "DOWNLOAD_APP_MESSAGE": "抱歉,目前只有我们的桌面应用程序支持此操作", + "DOWNLOAD_APP": "下载桌面应用程序", + "EXPORT": "导出数据", + "SUBSCRIPTION": "订阅", + "SUBSCRIBE": "订阅", + "MANAGEMENT_PORTAL": "管理付款方式", + "MANAGE_FAMILY_PORTAL": "管理家庭", + "LEAVE_FAMILY_PLAN": "离开家庭计划", + "LEAVE": "离开", + "LEAVE_FAMILY_CONFIRM": "您确定要离开家庭计划吗?", + "CHOOSE_PLAN": "选择您的计划", + "MANAGE_PLAN": "管理您的订阅", + "ACTIVE": "已激活", + "OFFLINE_MSG": "您处于离线状态,正在显示已缓存的回忆", + "FREE_SUBSCRIPTION_INFO": "您使用的是将于{{date, dateTime}} 过期的免费计划", + "FAMILY_SUBSCRIPTION_INFO": "您正在使用由 管理的家庭计划", + "RENEWAL_ACTIVE_SUBSCRIPTION_STATUS": "于 {{date, dateTime}} 续费", + "RENEWAL_CANCELLED_SUBSCRIPTION_STATUS": "结束于 {{date, dateTime}}", + "RENEWAL_CANCELLED_SUBSCRIPTION_INFO": "您的订阅将于 {{date, dateTime}} 取消", + "ADD_ON_AVAILABLE_TILL": "您的 {{storage, string}} 插件有效期至 {{date, dateTime}}", + "STORAGE_QUOTA_EXCEEDED_SUBSCRIPTION_INFO": "您已超过您的存储配额,请 升级", + "SUBSCRIPTION_PURCHASE_SUCCESS": "

我们已经收到您的付款

您的订阅有效期至 {{date, dateTime}}

", + "SUBSCRIPTION_PURCHASE_CANCELLED": "您的购买已取消,如果您想订阅,请重试", + "SUBSCRIPTION_PURCHASE_FAILED": "订阅购买失败,请重试", + "SUBSCRIPTION_UPDATE_FAILED": "订阅更新失败,请重试", + "UPDATE_PAYMENT_METHOD_MESSAGE": "很抱歉,我们尝试从您的卡中扣款时支付失败,请更新您的付款方式并重试", + "STRIPE_AUTHENTICATION_FAILED": "我们无法验证您的付款方式。请选择不同的付款方式并重试", + "UPDATE_PAYMENT_METHOD": "更新付款方式", + "MONTHLY": "每月", + "YEARLY": "每年", + "UPDATE_SUBSCRIPTION_MESSAGE": "您确定要更改您的计划吗?", + "UPDATE_SUBSCRIPTION": "更改计划", + "CANCEL_SUBSCRIPTION": "取消订阅", + "CANCEL_SUBSCRIPTION_MESSAGE": "

您的所有数据将在此计费期结束时从我们的服务器中删除。

您确定要取消您的订阅吗?

", + "CANCEL_SUBSCRIPTION_WITH_ADDON_MESSAGE": "

您确定要取消订阅吗?

", + "SUBSCRIPTION_CANCEL_FAILED": "取消订阅失败", + "SUBSCRIPTION_CANCEL_SUCCESS": "订阅成功取消", + "REACTIVATE_SUBSCRIPTION": "重新激活订阅", + "REACTIVATE_SUBSCRIPTION_MESSAGE": "重新激活后,您将在 {{date, dateTime}} 前支付费用", + "SUBSCRIPTION_ACTIVATE_SUCCESS": "订阅已成功激活 ", + "SUBSCRIPTION_ACTIVATE_FAILED": "无法重新激活订阅续费", + "SUBSCRIPTION_PURCHASE_SUCCESS_TITLE": "非常感谢您", + "CANCEL_SUBSCRIPTION_ON_MOBILE": "取消手机订阅", + "CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE": "请从手机应用取消您的订阅以激活这里的订阅", + "MAIL_TO_MANAGE_SUBSCRIPTION": "请联系我们 {{emailID}} 来管理您的订阅", + "RENAME": "重命名", + "RENAME_FILE": "重命名文件", + "RENAME_COLLECTION": "重命名相册", + "DELETE_COLLECTION_TITLE": "要删除相册吗?", + "DELETE_COLLECTION": "删除相册", + "DELETE_COLLECTION_MESSAGE": "也删除此相册中存在的照片(和视频),从 他们所加入的所有 个其他相册?", + "DELETE_PHOTOS": "删除照片", + "KEEP_PHOTOS": "保留照片", + "SHARE": "分享", + "SHARE_COLLECTION": "分享相册", + "SHAREES": "已分享给", + "SHARE_WITH_SELF": "哎呀,您不能与自己分享", + "ALREADY_SHARED": "哎呀,您已经和 {{email}} 分享了", + "SHARING_BAD_REQUEST_ERROR": "不允许分享相册", + "SHARING_DISABLED_FOR_FREE_ACCOUNTS": "免费账户禁用共享", + "DOWNLOAD_COLLECTION": "下载相册", + "DOWNLOAD_COLLECTION_MESSAGE": "

您确定要下载完整相册吗?

所有文件都将按顺序排队进行下载

", + "CREATE_ALBUM_FAILED": "相册创建失败,请重试", + "SEARCH": "搜索", + "SEARCH_RESULTS": "搜索结果", + "NO_RESULTS": "未找到任何结果", + "SEARCH_HINT": "搜索相册、日期...", + "SEARCH_TYPE": { + "COLLECTION": "相册", + "LOCATION": "地理位置", + "CITY": "位置", + "DATE": "日期", + "FILE_NAME": "文件名", + "THING": "内容", + "FILE_CAPTION": "说明", + "FILE_TYPE": "文件类型", + "CLIP": "魔法" + }, + "photos_count_zero": "没有回忆", + "photos_count_one": "1个回忆", + "photos_count_other": "{{count, number}} 个回忆", + "TERMS_AND_CONDITIONS": "我同意 条款隐私政策", + "ADD_TO_COLLECTION": "添加到相册", + "SELECTED": "已选", + "VIDEO_PLAYBACK_FAILED_DOWNLOAD_INSTEAD": "此视频无法在您的浏览器中播放", + "PEOPLE": "人物", + "INDEXING_SCHEDULED": "索引已安排...", + "ANALYZING_PHOTOS": "分析 {{indexStatus.nTotalFiles}} 的新照片{{indexStatus.nSyncedFiles}} 已完成)...", + "INDEXING_PEOPLE": "正在为 {{indexStatus.nSyncedFiles}} 张照片中的人物建立索引...", + "INDEXING_DONE": "已索引 {{indexStatus.nSyncedFiles}} 张照片", + "UNIDENTIFIED_FACES": "身份不明的面孔", + "OBJECTS": "对象", + "TEXT": "文本", + "INFO": "图片信息 ", + "INFO_OPTION": "图片信息 (I)", + "FILE_NAME": "文件名", + "CAPTION_PLACEHOLDER": "添加说明", + "LOCATION": "地理位置", + "SHOW_ON_MAP": "在 OpenStreetMap 上查看", + "MAP": "地图", + "MAP_SETTINGS": "地图设置", + "ENABLE_MAPS": "要启用地图吗?", + "ENABLE_MAP": "启用地图", + "DISABLE_MAPS": "要禁用地图吗?", + "ENABLE_MAP_DESCRIPTION": "

这将在世界地图上显示您的照片。

该地图由 OpenStreetMap 托管,并且您照片的确切位置永远不会共享。

您可以随时从“设置”中禁用此功能。

", + "DISABLE_MAP_DESCRIPTION": "

这将禁止在世界地图上显示您的照片。

您可以随时从“设置”中启用此功能。

", + "DISABLE_MAP": "禁用地图", + "DETAILS": "详情", + "VIEW_EXIF": "查看所有 EXIF 数据", + "NO_EXIF": "无 EXIF 数据", + "EXIF": "EXIF", + "ISO": "ISO", + "TWO_FACTOR": "双因素", + "TWO_FACTOR_AUTHENTICATION": "双因素认证", + "TWO_FACTOR_QR_INSTRUCTION": "使用您最喜欢的身份验证器应用程序(2FA)扫描下面的二维码", + "ENTER_CODE_MANUALLY": "请手动输入代码", + "TWO_FACTOR_MANUAL_CODE_INSTRUCTION": "请在您最喜欢的验证器应用中输入此代码", + "SCAN_QR_CODE": "改为扫描二维码", + "ENABLE_TWO_FACTOR": "启用双因素认证", + "ENABLE": "启用", + "LOST_DEVICE": "丢失了双因素认证设备", + "INCORRECT_CODE": "代码错误", + "TWO_FACTOR_INFO": "登录您的账户不仅需要您的电子邮件和密码,还需要额外的安全层", + "DISABLE_TWO_FACTOR_LABEL": "禁用双因素认证", + "UPDATE_TWO_FACTOR_LABEL": "更新您的身份验证器设备", + "DISABLE": "禁用", + "RECONFIGURE": "重新配置", + "UPDATE_TWO_FACTOR": "更新双因素认证", + "UPDATE_TWO_FACTOR_MESSAGE": "向前继续将使之前配置的任何身份验证器无效", + "UPDATE": "更新", + "DISABLE_TWO_FACTOR": "禁用双因素认证", + "DISABLE_TWO_FACTOR_MESSAGE": "您确定要禁用您的双因素认证吗?", + "TWO_FACTOR_DISABLE_FAILED": "禁用双因素认证失败,请再试一次", + "EXPORT_DATA": "导出数据", + "SELECT_FOLDER": "选择文件夹", + "DESTINATION": "目标位置", + "START": "开始", + "LAST_EXPORT_TIME": "最后一次导出时间", + "EXPORT_AGAIN": "重新同步", + "LOCAL_STORAGE_NOT_ACCESSIBLE": "无法访问本地存储", + "LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE": "您的浏览器或插件阻止 ente 将数据保存到本地存储。 请在切换浏览模式后再尝试加载此页面。", + "SEND_OTT": "发送 OTP", + "EMAIl_ALREADY_OWNED": "电子邮箱已被注册", + "ETAGS_BLOCKED": "

由于您的浏览器配置,我们无法上传以下文件。

请禁用任何可能阻止ente 使用 eTags 上传大文件的附加组件, 或者使用我们的 桌面应用程序 获取更可靠的导入体验。

", + "SKIPPED_VIDEOS_INFO": "

目前,我们不支持在公共链接内添加视频。

若要分享视频,请 注册 并通过电子邮件与预定收件人分享。

", + "LIVE_PHOTOS_DETECTED": "Live Photos 中的照片和视频文件已合并为一个文件", + "RETRY_FAILED": "重试上传失败的文件", + "FAILED_UPLOADS": "上传失败 ", + "SKIPPED_FILES": "已忽略的上传内容", + "THUMBNAIL_GENERATION_FAILED_UPLOADS": "缩略图生成失败", + "UNSUPPORTED_FILES": "不支持的文件", + "SUCCESSFUL_UPLOADS": "上传成功", + "SKIPPED_INFO": "跳过这些,因为在同一相册中有具有匹配名称的文件", + "UNSUPPORTED_INFO": "ente 尚不支持这些文件格式", + "BLOCKED_UPLOADS": "已阻止上传", + "SKIPPED_VIDEOS": "已跳过的视频", + "INPROGRESS_METADATA_EXTRACTION": "进行中", + "INPROGRESS_UPLOADS": "上传进行中", + "TOO_LARGE_UPLOADS": "大文件", + "LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "存储空间不足", + "LARGER_THAN_AVAILABLE_STORAGE_INFO": "这些文件没有上传,因为它们超过了您的存储计划的最大大小限制", + "TOO_LARGE_INFO": "这些文件没有上传,因为它们超过了我们的最大文件大小限制", + "THUMBNAIL_GENERATION_FAILED_INFO": "这些文件已上传,但遗憾的是,我们无法为它们生成缩略图。", + "UPLOAD_TO_COLLECTION": "上传至相册", + "UNCATEGORIZED": "未分类的", + "ARCHIVE": "存档", + "FAVORITES": "收藏", + "ARCHIVE_COLLECTION": "存档相册", + "ARCHIVE_SECTION_NAME": "存档", + "ALL_SECTION_NAME": "全部", + "MOVE_TO_COLLECTION": "移动到相册", + "UNARCHIVE": "取消存档", + "UNARCHIVE_COLLECTION": "取消存档相册", + "HIDE_COLLECTION": "隐藏相册", + "UNHIDE_COLLECTION": "取消隐藏相册", + "MOVE": "移动", + "ADD": "添加", + "REMOVE": "移除", + "YES_REMOVE": "是,移除", + "REMOVE_FROM_COLLECTION": "从相册中移除", + "TRASH": "回收站", + "MOVE_TO_TRASH": "移动到回收站", + "TRASH_FILES_MESSAGE": "选中的文件将从所有相册中删除并移动到回收站。", + "TRASH_FILE_MESSAGE": "该文件将从所有相册中删除并移动到回收站。", + "DELETE_PERMANENTLY": "永久删除", + "RESTORE": "恢复", + "RESTORE_TO_COLLECTION": "恢复到相册", + "EMPTY_TRASH": "清空回收站", + "EMPTY_TRASH_TITLE": "要清空回收站吗?", + "EMPTY_TRASH_MESSAGE": "这些文件将从您的 ente 账户中永久删除。", + "LEAVE_SHARED_ALBUM": "是,离开", + "LEAVE_ALBUM": "离开相册", + "LEAVE_SHARED_ALBUM_TITLE": "要离开共享相册吗?", + "LEAVE_SHARED_ALBUM_MESSAGE": "您将离开相册,它将不再对您可见。", + "NOT_FILE_OWNER": "您不能删除共享相册中的文件", + "CONFIRM_SELF_REMOVE_MESSAGE": "所选项目将从该相册中删除。 仅在此相册中的项目将移至未分类。", + "CONFIRM_SELF_AND_OTHER_REMOVE_MESSAGE": "您要删除的某些项目是由其他人添加的,您将无法访问它们。", + "SORT_BY_CREATION_TIME_ASCENDING": "最早的", + "SORT_BY_UPDATION_TIME_DESCENDING": "最后更新", + "SORT_BY_NAME": "名称", + "COMPRESS_THUMBNAILS": "压缩缩略图", + "THUMBNAIL_REPLACED": "缩略图已压缩", + "FIX_THUMBNAIL": "压缩", + "FIX_THUMBNAIL_LATER": "稍后压缩", + "REPLACE_THUMBNAIL_NOT_STARTED": "您的一些视频缩略图可以被压缩以节省空间,您想要ente 压缩它们吗?", + "REPLACE_THUMBNAIL_COMPLETED": "已成功压缩所有缩略图", + "REPLACE_THUMBNAIL_NOOP": "您没有可以进一步压缩的缩略图", + "REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR": "无法压缩您的一些缩略图,请重试", + "FIX_CREATION_TIME": "固定时间", + "FIX_CREATION_TIME_IN_PROGRESS": "正在固定时间", + "CREATION_TIME_UPDATED": "文件时间已更新", + "UPDATE_CREATION_TIME_NOT_STARTED": "选择您想要使用的选项", + "UPDATE_CREATION_TIME_COMPLETED": "已成功更新所有文件", + "UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR": "部分文件的文件时间更新失败,请重试", + "CAPTION_CHARACTER_LIMIT": "5000个字符上限", + "DATE_TIME_ORIGINAL": "EXIF:日期 时间 原始文件", + "DATE_TIME_DIGITIZED": "EXIF:日期 时间 数字化", + "METADATA_DATE": "EXIF:元数据日期", + "CUSTOM_TIME": "自定义时间", + "REOPEN_PLAN_SELECTOR_MODAL": "重新启动计划", + "OPEN_PLAN_SELECTOR_MODAL_FAILED": "未能打开计划", + "INSTALL": "安装", + "SHARING_DETAILS": "共享的详细信息", + "MODIFY_SHARING": "更改共享", + "ADD_COLLABORATORS": "添加协作者", + "ADD_NEW_EMAIL": "添加新的电子邮件", + "shared_with_people_zero": "与特定人员分享", + "shared_with_people_one": "已与1个人共享", + "shared_with_people_other": "已与 {count, number} 个人共享", + "participants_zero": "暂无参与者", + "participants_one": "1 名参与者", + "participants_other": "{{count, number}} 名参与者", + "ADD_VIEWERS": "添加查看者", + "PARTICIPANTS": "参与者", + "CHANGE_PERMISSIONS_TO_VIEWER": "

{{selectedEmail}} 将无法向相册添加更多照片

他们仍然可以删除他们添加的照片

", + "CHANGE_PERMISSIONS_TO_COLLABORATOR": "{{selectedEmail}} 将能够将照片添加到相册", + "CONVERT_TO_VIEWER": "是的,转换为查看者", + "CONVERT_TO_COLLABORATOR": "是,转换为协作者", + "CHANGE_PERMISSION": "要修改权限吗?", + "REMOVE_PARTICIPANT": "要移除吗?", + "CONFIRM_REMOVE": "是,移除", + "MANAGE": "管理", + "ADDED_AS": "已添加为", + "COLLABORATOR_RIGHTS": "协作者可以将照片和视频添加到共享相册中", + "REMOVE_PARTICIPANT_HEAD": "移除参与者", + "OWNER": "所有者", + "COLLABORATORS": "协作者", + "ADD_MORE": "添加更多", + "VIEWERS": "查看者", + "OR_ADD_EXISTING": "或选择一个现有的", + "REMOVE_PARTICIPANT_MESSAGE": "

{{selectedEmail}} 将从相册中删除

他们添加的所有照片也将从相册中删除

", + "NOT_FOUND": "404 - 未找到", + "LINK_EXPIRED": "链接已过期", + "LINK_EXPIRED_MESSAGE": "此链接已过期或已被禁用!", + "MANAGE_LINK": "管理链接", + "LINK_TOO_MANY_REQUESTS": "这个相册太受欢迎,我们无法处理!", + "FILE_DOWNLOAD": "允许下载", + "LINK_PASSWORD_LOCK": "密码锁", + "PUBLIC_COLLECT": "允许添加照片", + "LINK_DEVICE_LIMIT": "设备限制", + "NO_DEVICE_LIMIT": "无", + "LINK_EXPIRY": "链接过期", + "NEVER": "永不", + "DISABLE_FILE_DOWNLOAD": "禁止下载", + "DISABLE_FILE_DOWNLOAD_MESSAGE": "

您确定要禁用文件下载按钮吗?

观看者仍然可以使用外部工具进行屏幕截图或保存您的照片副本。

", + "MALICIOUS_CONTENT": "哈哈哈急急急", + "COPYRIGHT": "不不不急急急就是", + "SHARED_USING": "分享方式 ", + "ENTE_IO": "ente.io", + "SHARING_REFERRAL_CODE": "使用代码 {{referralCode}} 获得 10 GB 免费空间", + "LIVE": "LIVE", + "DISABLE_PASSWORD": "禁用密码锁", + "DISABLE_PASSWORD_MESSAGE": "您确定要禁用密码锁吗?", + "PASSWORD_LOCK": "密码锁", + "LOCK": "锁定", + "DOWNLOAD_UPLOAD_LOGS": "调试日志", + "UPLOAD_FILES": "文件", + "UPLOAD_DIRS": "文件夹", + "UPLOAD_GOOGLE_TAKEOUT": "Google Takeout", + "DEDUPLICATE_FILES": "删除重复文件", + "AUTHENTICATOR_SECTION": "身份验证器", + "NO_DUPLICATES_FOUND": "您没有可以清除的重复文件", + "CLUB_BY_CAPTURE_TIME": "按抓取时间断开", + "FILES": "文件", + "EACH": "每个", + "DEDUPLICATE_BASED_ON_SIZE": "以下文件根据大小进行了合并,请检查并删除您认为重复的项目", + "STOP_ALL_UPLOADS_MESSAGE": "您确定要停止所有正在进行的上传吗?", + "STOP_UPLOADS_HEADER": "要停止上传吗?", + "YES_STOP_UPLOADS": "是的,停止上传", + "STOP_DOWNLOADS_HEADER": "要停止下载吗?", + "YES_STOP_DOWNLOADS": "是,停止下载", + "STOP_ALL_DOWNLOADS_MESSAGE": "您确定要停止所有正在进行的下载?", + "albums_one": "1个相册", + "albums_other": "{{count, number}} 个相册", + "ALL_ALBUMS": "所有相册", + "ALBUMS": "相册", + "ALL_HIDDEN_ALBUMS": "所有隐藏的相册", + "HIDDEN_ALBUMS": "隐藏的相册", + "HIDDEN_ITEMS": "隐藏的项目", + "HIDDEN_ITEMS_SECTION_NAME": "隐藏的项目", + "ENTER_TWO_FACTOR_OTP": "请输入您从身份验证应用上获得的6位数代码", + "CREATE_ACCOUNT": "创建账户", + "COPIED": "已复制", + "CANVAS_BLOCKED_TITLE": "无法生成缩略图", + "CANVAS_BLOCKED_MESSAGE": "

看起来您的浏览器已禁用了需要为您的照片生成缩略图的canvas访问权限

请允许访问您浏览器的canvas, 或使用我们的桌面应用程序

", + "WATCH_FOLDERS": "观看文件夹", + "UPGRADE_NOW": "立即升级", + "RENEW_NOW": "立即续费", + "STORAGE": "存储空间", + "USED": "已使用", + "YOU": "您", + "FAMILY": "家庭", + "FREE": "空闲", + "OF": "/", + "WATCHED_FOLDERS": "观看文件夹", + "NO_FOLDERS_ADDED": "尚未添加任何文件夹!", + "FOLDERS_AUTOMATICALLY_MONITORED": "您在此处添加的文件夹将自动监控", + "UPLOAD_NEW_FILES_TO_ENTE": "上传新文件至 ente", + "REMOVE_DELETED_FILES_FROM_ENTE": "从ente 移除已删除的文件", + "ADD_FOLDER": "添加文件夹", + "STOP_WATCHING": "停止监控", + "STOP_WATCHING_FOLDER": "要停止监控文件夹?", + "STOP_WATCHING_DIALOG_MESSAGE": "您现有的文件不会被删除,但 ente 将停止自动更新链接的 ente 相册在此文件夹中的更改。", + "YES_STOP": "是的,停止", + "MONTH_SHORT": "月", + "YEAR": "年", + "FAMILY_PLAN": "家庭计划", + "DOWNLOAD_LOGS": "下载日志", + "DOWNLOAD_LOGS_MESSAGE": "

这将下载调试日志,您可以发送电子邮件给我们来帮助调试您的问题。

请注意文件名将被包含,以帮助跟踪特定文件中的问题。

", + "CHANGE_FOLDER": "更改文件夹", + "TWO_MONTHS_FREE": "在年度计划上免费获得 2 个月", + "GB": "GB", + "POPULAR": "流行的", + "FREE_PLAN_OPTION_LABEL": "继续免费试用", + "FREE_PLAN_DESCRIPTION": "1 GB 1年", + "CURRENT_USAGE": "当前使用量是 {{usage}}", + "WEAK_DEVICE": "您使用的网络浏览器功能不够强大,无法加密您的照片。 请尝试在电脑上登录ente,或下载ente移动/桌面应用程序。", + "DRAG_AND_DROP_HINT": "或者拖动并拖动到 ente 窗口", + "CONFIRM_ACCOUNT_DELETION_MESSAGE": "您上传的数据将被安排删除,您的账户将被永久删除。

此操作不可逆。", + "AUTHENTICATE": "身份认证", + "UPLOADED_TO_SINGLE_COLLECTION": "已上传到单个收藏", + "UPLOADED_TO_SEPARATE_COLLECTIONS": "已上传到单独收藏", + "NEVERMIND": "没关系", + "UPDATE_AVAILABLE": "有可用的更新", + "UPDATE_INSTALLABLE_MESSAGE": "新版本的 ente 已准备好安装。", + "INSTALL_NOW": "立即安装", + "INSTALL_ON_NEXT_LAUNCH": "在下次启动时安装", + "UPDATE_AVAILABLE_MESSAGE": "新版本的 ente 已发布,但无法自动下载和安装。", + "DOWNLOAD_AND_INSTALL": "下载并安装", + "IGNORE_THIS_VERSION": "忽略该版本", + "TODAY": "今天", + "YESTERDAY": "昨天", + "NAME_PLACEHOLDER": "名称...", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED": "无法从文件/文件夹组合中创建相册", + "ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED_MESSAGE": "

你已拖放了文件和文件夹的组合。

选择创建单独相册的选项时,请只提供文件或只提供文件夹

", + "CHOSE_THEME": "选择主题", + "ML_SEARCH": "ML 搜索 (测试版)", + "ENABLE_ML_SEARCH_DESCRIPTION": "

这将启用设备上的机器学习和面部搜索,这将开始分析您上传的本地照片。

在登录或启用此功能后第一次运行时,它将下载本地设备上的所有图像来分析。 所以请只在您可以使用带宽和本地处理您的照片库中的所有图像时启用此功能。

如果这是您首次启用此功能,我们也会请求您处理面部数据的许可。

", + "ML_MORE_DETAILS": "更多详情", + "ENABLE_FACE_SEARCH": "启用面部搜索", + "ENABLE_FACE_SEARCH_TITLE": "要启用面部搜索吗?", + "ENABLE_FACE_SEARCH_DESCRIPTION": "

如果您启用面部搜索,ente 将从照片中提取脸部几何形状。 这将发生在您的设备上,任何生成的生物测定数据都将是端到端加密的。

请单击此处以在我们的隐私政策中了解有关此功能的更多详细信息

", + "DISABLE_BETA": "禁用beta", + "DISABLE_FACE_SEARCH": "禁用面部搜索", + "DISABLE_FACE_SEARCH_TITLE": "要禁用面部搜索吗?", + "DISABLE_FACE_SEARCH_DESCRIPTION": "

ente 将停止处理面部的几何形状, 并将禁用 ML 搜索 (测试版)

如果您愿意,您可以重新启用面部搜索,因此该操作是安全的。

", + "ADVANCED": "高级设置", + "FACE_SEARCH_CONFIRMATION": "我理解,并希望允许ente处理面部几何形状", + "LABS": "实验室", + "YOURS": "你的", + "PASSPHRASE_STRENGTH_WEAK": "密码强度:较弱", + "PASSPHRASE_STRENGTH_MODERATE": "密码强度:中度", + "PASSPHRASE_STRENGTH_STRONG": "密码强度:强", + "PREFERENCES": "首选项", + "LANGUAGE": "语言", + "EXPORT_DIRECTORY_DOES_NOT_EXIST": "无效的导出目录", + "EXPORT_DIRECTORY_DOES_NOT_EXIST_MESSAGE": "

您选择的导出目录不存在。

请选择一个有效的目录。

", + "SUBSCRIPTION_VERIFICATION_ERROR": "订阅验证失败", + "STORAGE_UNITS": { + "B": "B", + "KB": "KB", + "MB": "MB", + "GB": "GB", + "TB": "TB" + }, + "AFTER_TIME": { + "HOUR": "1小时后", + "DAY": "一天后", + "WEEK": "一周后", + "MONTH": "一个月后", + "YEAR": "一年后" + }, + "COPY_LINK": "复制链接", + "DONE": "已完成", + "LINK_SHARE_TITLE": "或共享一个链接", + "REMOVE_LINK": "移除链接", + "CREATE_PUBLIC_SHARING": "创建公开链接", + "PUBLIC_LINK_CREATED": "公开链接已创建", + "PUBLIC_LINK_ENABLED": "公开链接已启用", + "COLLECT_PHOTOS": "收集照片", + "PUBLIC_COLLECT_SUBTEXT": "允许具有链接的人也将照片添加到共享相册。", + "STOP_EXPORT": "停止", + "EXPORT_PROGRESS": "{{progress.success}} / {{progress.total}} 个文件已导出", + "MIGRATING_EXPORT": "准备中...", + "RENAMING_COLLECTION_FOLDERS": "正在重命名相册文件夹...", + "TRASHING_DELETED_FILES": "正在回收删除的文件...", + "TRASHING_DELETED_COLLECTIONS": "正在回收已删除的相册...", + "EXPORT_NOTIFICATION": { + "START": "导出已开始", + "IN_PROGRESS": "导出已在进行中", + "FINISH": "导出完成", + "UP_TO_DATE": "没有新文件可导出" + }, + "CONTINUOUS_EXPORT": "持续同步", + "TOTAL_ITEMS": "项目总计", + "PENDING_ITEMS": "待处理的项目", + "EXPORT_STARTING": "导出开始...", + "DELETE_ACCOUNT_REASON_LABEL": "您删除账户的主要原因是什么?", + "DELETE_ACCOUNT_REASON_PLACEHOLDER": "选择一个原因", + "DELETE_REASON": { + "MISSING_FEATURE": "找不到我想要的功能", + "BROKEN_BEHAVIOR": "该应用或某个功能不符合我认为应该做的行为", + "FOUND_ANOTHER_SERVICE": "我发现另一个产品更好用", + "NOT_LISTED": "我的原因未被列出" + }, + "DELETE_ACCOUNT_FEEDBACK_LABEL": "我们很抱歉看到您离开。请解释您为什么要离开来帮助我们改进。", + "DELETE_ACCOUNT_FEEDBACK_PLACEHOLDER": "反馈", + "CONFIRM_DELETE_ACCOUNT_CHECKBOX_LABEL": "是的,我想永久删除此账户及其相关数据", + "CONFIRM_DELETE_ACCOUNT": "确认删除账户", + "FEEDBACK_REQUIRED": "请帮助我们了解这个信息", + "FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE": "其他服务做得更好?", + "RECOVER_TWO_FACTOR": "恢复双因素认证", + "at": "在", + "AUTH_NEXT": "下一个", + "AUTH_DOWNLOAD_MOBILE_APP": "下载我们的移动应用程序来管理您的密钥", + "HIDDEN": "已隐藏", + "HIDE": "隐藏", + "UNHIDE": "取消隐藏", + "UNHIDE_TO_COLLECTION": "取消隐藏到相册", + "SORT_BY": "排序方式", + "NEWEST_FIRST": "最新在前", + "OLDEST_FIRST": "最旧在前", + "CONVERSION_FAILED_NOTIFICATION_MESSAGE": "无法预览此文件。点击这里下载原始文件。", + "SELECT_COLLECTION": "选择相册", + "PIN_ALBUM": "置顶相册", + "UNPIN_ALBUM": "取消置顶相册", + "DOWNLOAD_COMPLETE": "下载完成", + "DOWNLOADING_COLLECTION": "正在下载 {{name}}", + "DOWNLOAD_FAILED": "下载失败", + "DOWNLOAD_PROGRESS": "{{progress.current}} / {{progress.total}} 个文件", + "CRASH_REPORTING": "崩溃报告", + "CHRISTMAS": "圣诞", + "CHRISTMAS_EVE": "平安夜", + "NEW_YEAR": "新年", + "NEW_YEAR_EVE": "除夕", + "IMAGE": "图像", + "VIDEO": "视频", + "LIVE_PHOTO": "实况照片", + "CONVERT": "转换", + "CONFIRM_EDITOR_CLOSE_MESSAGE": "您确定要关闭编辑器吗?", + "CONFIRM_EDITOR_CLOSE_DESCRIPTION": "下载已编辑的图片或将副本保存到 ente 以保留您的更改。", + "BRIGHTNESS": "亮度", + "CONTRAST": "对比度", + "SATURATION": "饱和度", + "BLUR": "模糊", + "INVERT_COLORS": "反相颜色", + "ASPECT_RATIO": "长宽比", + "SQUARE": "面积", + "ROTATE_LEFT": "向左旋转", + "ROTATE_RIGHT": "向右旋转", + "FLIP_VERTICALLY": "垂直翻转", + "FLIP_HORIZONTALLY": "水平翻转", + "DOWNLOAD_EDITED": "下载已编辑图片", + "SAVE_A_COPY_TO_ENTE": "保存副本到 ente", + "RESTORE_ORIGINAL": "复原", + "TRANSFORM": "转换", + "COLORS": "颜色", + "FLIP": "上下翻转", + "ROTATION": "回转", + "RESET": "重设", + "PHOTO_EDITOR": "照片编辑器", + "FASTER_UPLOAD": "更快上传", + "FASTER_UPLOAD_DESCRIPTION": "通过附近的服务器路由上传", + "MAGIC_SEARCH_STATUS": "魔法搜索状态", + "INDEXED_ITEMS": "索引项目", + "CAST_ALBUM_TO_TV": "在电视上播放相册", + "ENTER_CAST_PIN_CODE": "输入您在下面的电视上看到的代码来配对此设备。", + "PAIR_DEVICE_TO_TV": "配对设备", + "TV_NOT_FOUND": "未找到电视。您输入的 PIN 码正确吗?", + "AUTO_CAST_PAIR": "自动配对", + "AUTO_CAST_PAIR_REQUIRES_CONNECTION_TO_GOOGLE": "自动配对需要连接到 Google 服务器,且仅适用于支持 Chromecast 的设备。Google 不会接收敏感数据,例如您的照片。", + "PAIR_WITH_PIN": "用 PIN 配对", + "CHOOSE_DEVICE_FROM_BROWSER": "从浏览器弹出窗口中选择兼容 Cast 的设备。", + "PAIR_WITH_PIN_WORKS_FOR_ANY_LARGE_SCREEN_DEVICE": "用 PIN 配对适用于任何大屏幕设备,您可以在这些设备上播放您的相册。", + "VISIT_CAST_ENTE_IO": "在您要配对的设备上访问 cast.ente.io 。", + "CAST_AUTO_PAIR_FAILED": "Chromecast 自动配对失败。请再试一次。", + "CACHE_DIRECTORY": "缓存文件夹", + "PASSKEYS": "通行密钥", + "FREEHAND": "手画", + "APPLY_CROP": "应用裁剪", + "PHOTO_EDIT_REQUIRED_TO_SAVE": "保存之前必须至少执行一项转换或颜色调整。" +} diff --git a/web/apps/photos/public/models/blazeface/back/group1-shard1of1.bin b/web/apps/photos/public/models/blazeface/back/group1-shard1of1.bin new file mode 100644 index 000000000..86b4b3231 Binary files /dev/null and b/web/apps/photos/public/models/blazeface/back/group1-shard1of1.bin differ diff --git a/web/apps/photos/public/models/blazeface/back/model.json b/web/apps/photos/public/models/blazeface/back/model.json new file mode 100644 index 000000000..981aab6e8 --- /dev/null +++ b/web/apps/photos/public/models/blazeface/back/model.json @@ -0,0 +1 @@ +{"format": "graph-model", "generatedBy": "2.3.0", "convertedBy": "TensorFlow.js Converter v2.3.0", "userDefinedMetadata": {"signature": {"inputs": {"input:0": {"name": "input:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "256"}, {"size": "256"}, {"size": "3"}]}}}, "outputs": {"Identity_3:0": {"name": "Identity_3:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "384"}, {"size": "16"}]}}, "Identity:0": {"name": "Identity:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "512"}, {"size": "1"}]}}, "Identity_1:0": {"name": "Identity_1:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "384"}, {"size": "1"}]}}, "Identity_2:0": {"name": "Identity_2:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "512"}, {"size": "16"}]}}}}}, "modelTopology": {"node": [{"name": "unknown_135", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "2"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_136", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_classificators_1/classificators_1/shape", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "3"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "unknown_133", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "6"}]}}}}}, {"name": "unknown_134", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "6"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_classificators_2/classificators_2/shape", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "3"}]}}}}}, {"name": "unknown_131", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_132", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_regressors_1/regressors_1/shape", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "3"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "unknown_93", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "48"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_95", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_96", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_61", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}}}, {"name": "unknown_63", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_64", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_57", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_59", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_60", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_53", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_55", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_56", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_49", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}}}, {"name": "unknown_51", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_52", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}}}, {"name": "unknown_29", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_31", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_32", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}}}, {"name": "unknown", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "3"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_0", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_3", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}}}, {"name": "unknown_4", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_5", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_7", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_8", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}}}, {"name": "unknown_9", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_11", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_12", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_13", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_15", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}}}, {"name": "unknown_16", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_17", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}}}, {"name": "unknown_19", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_20", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}}}, {"name": "unknown_21", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_23", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_24", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}}}, {"name": "unknown_25", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_27", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_28", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_33", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_35", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}}}, {"name": "unknown_36", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_37", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}}}, {"name": "unknown_39", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}}}, {"name": "unknown_40", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_41", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_43", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_44", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_45", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "24"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_47", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_48", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_Pad/Pad/paddings", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "4"}, {"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "unknown_65", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "48"}, {"size": "1"}]}}}}}, {"name": "unknown_67", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_68", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_69", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "48"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_71", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_72", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}}}, {"name": "unknown_73", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "48"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_75", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_76", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}}}, {"name": "unknown_77", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "48"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_79", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_80", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_81", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "48"}, {"size": "1"}]}}}}}, {"name": "unknown_83", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_84", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}}}, {"name": "unknown_85", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "48"}, {"size": "1"}]}}}}}, {"name": "unknown_87", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_88", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}}}, {"name": "unknown_89", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "48"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_91", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_92", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_Pad_1/Pad_1/paddings", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "4"}, {"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "unknown_97", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_99", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}}}, {"name": "unknown_100", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_101", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_103", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}}}, {"name": "unknown_104", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_105", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_107", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_108", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_109", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_111", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_112", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_113", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_115", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_116", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_117", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_119", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_120", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}}}, {"name": "unknown_121", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}}}, {"name": "unknown_123", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_124", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_125", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}}}, {"name": "unknown_127", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}}}, {"name": "unknown_128", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "unknown_129", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "96"}]}}}}}, {"name": "unknown_130", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_regressors_2/regressors_2/shape", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "3"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "input", "op": "Placeholder", "attr": {"dtype": {"type": "DT_FLOAT"}, "shape": {"shape": {"dim": [{"size": "1"}, {"size": "256"}, {"size": "256"}, {"size": "3"}]}}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d/Relu", "op": "_FusedConv2D", "input": ["input", "unknown", "unknown_0"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdQ=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/conv2d/Relu", "unknown_1"], "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_1/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d/depthwise", "unknown_3", "unknown_4"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/functional_1/add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/conv2d/Relu", "StatefulPartitionedCall/functional_1/conv2d_1/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_1/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu/Relu", "unknown_5"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_2/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_1/depthwise", "unknown_7", "unknown_8"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/add_1/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu/Relu", "StatefulPartitionedCall/functional_1/conv2d_2/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_1/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_1/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_2/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_1/Relu", "unknown_9"], "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_3/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_2/depthwise", "unknown_11", "unknown_12"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/functional_1/add_2/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_1/Relu", "StatefulPartitionedCall/functional_1/conv2d_3/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_2/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_2/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_3/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_2/Relu", "unknown_13"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_4/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_3/depthwise", "unknown_15", "unknown_16"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_3/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_2/Relu", "StatefulPartitionedCall/functional_1/conv2d_4/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_3/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_3/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_4/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_3/Relu", "unknown_17"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_5/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_4/depthwise", "unknown_19", "unknown_20"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}}}, {"name": "StatefulPartitionedCall/functional_1/add_4/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_3/Relu", "StatefulPartitionedCall/functional_1/conv2d_5/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_4/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_4/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_5/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_4/Relu", "unknown_21"], "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_6/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_5/depthwise", "unknown_23", "unknown_24"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_5/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_4/Relu", "StatefulPartitionedCall/functional_1/conv2d_6/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_5/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_5/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_6/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_5/Relu", "unknown_25"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_7/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_6/depthwise", "unknown_27", "unknown_28"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_6/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_5/Relu", "StatefulPartitionedCall/functional_1/conv2d_7/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_6/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_6/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_7/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_6/Relu", "unknown_29"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/max_pooling2d/MaxPool", "op": "MaxPool", "input": ["StatefulPartitionedCall/functional_1/re_lu_6/Relu"], "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "ksize": {"list": {"i": ["1", "2", "2", "1"]}}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_8/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_7/depthwise", "unknown_31", "unknown_32"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_7/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/conv2d_8/BiasAdd", "StatefulPartitionedCall/functional_1/max_pooling2d/MaxPool"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_7/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_7/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_8/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_7/Relu", "unknown_33"], "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_9/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_8/depthwise", "unknown_35", "unknown_36"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_8/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_7/Relu", "StatefulPartitionedCall/functional_1/conv2d_9/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_8/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_8/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_9/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_8/Relu", "unknown_37"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_10/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_9/depthwise", "unknown_39", "unknown_40"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/add_9/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_8/Relu", "StatefulPartitionedCall/functional_1/conv2d_10/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_9/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_9/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_10/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_9/Relu", "unknown_41"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_11/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_10/depthwise", "unknown_43", "unknown_44"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_10/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_9/Relu", "StatefulPartitionedCall/functional_1/conv2d_11/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_10/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_10/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_11/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_10/Relu", "unknown_45"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_12/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_11/depthwise", "unknown_47", "unknown_48"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/functional_1/add_11/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_10/Relu", "StatefulPartitionedCall/functional_1/conv2d_12/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_11/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_11/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_12/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_11/Relu", "unknown_49"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_13/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_12/depthwise", "unknown_51", "unknown_52"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/functional_1/add_12/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/conv2d_13/BiasAdd", "StatefulPartitionedCall/functional_1/re_lu_11/Relu"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_12/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_12/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_13/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_12/Relu", "unknown_53"], "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_14/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_13/depthwise", "unknown_55", "unknown_56"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_13/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/conv2d_14/BiasAdd", "StatefulPartitionedCall/functional_1/re_lu_12/Relu"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_13/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_13/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_14/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_13/Relu", "unknown_57"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_15/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_14/depthwise", "unknown_59", "unknown_60"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_14/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/conv2d_15/BiasAdd", "StatefulPartitionedCall/functional_1/re_lu_13/Relu"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_14/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_14/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_15/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_14/Relu", "unknown_61"], "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/functional_1/max_pooling2d_1/MaxPool", "op": "MaxPool", "input": ["StatefulPartitionedCall/functional_1/re_lu_14/Relu"], "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "ksize": {"list": {"i": ["1", "2", "2", "1"]}}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_16/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_15/depthwise", "unknown_63", "unknown_64"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_Pad/Pad", "op": "Pad", "input": ["StatefulPartitionedCall/functional_1/max_pooling2d_1/MaxPool", "StatefulPartitionedCall/functional_1/tf_op_layer_Pad/Pad/paddings"], "attr": {"T": {"type": "DT_FLOAT"}, "Tpaddings": {"type": "DT_INT32"}, "_cloned": {"b": true}}}, {"name": "StatefulPartitionedCall/functional_1/add_15/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/conv2d_16/BiasAdd", "StatefulPartitionedCall/functional_1/tf_op_layer_Pad/Pad"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_15/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_15/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_16/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_15/Relu", "unknown_65"], "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_17/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_16/depthwise", "unknown_67", "unknown_68"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_16/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_15/Relu", "StatefulPartitionedCall/functional_1/conv2d_17/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_16/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_16/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_17/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_16/Relu", "unknown_69"], "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_18/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_17/depthwise", "unknown_71", "unknown_72"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}}}, {"name": "StatefulPartitionedCall/functional_1/add_17/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_16/Relu", "StatefulPartitionedCall/functional_1/conv2d_18/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_17/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_17/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_18/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_17/Relu", "unknown_73"], "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_19/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_18/depthwise", "unknown_75", "unknown_76"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_18/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_17/Relu", "StatefulPartitionedCall/functional_1/conv2d_19/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_18/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_18/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_19/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_18/Relu", "unknown_77"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_20/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_19/depthwise", "unknown_79", "unknown_80"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_19/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_18/Relu", "StatefulPartitionedCall/functional_1/conv2d_20/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_19/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_19/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_20/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_19/Relu", "unknown_81"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_21/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_20/depthwise", "unknown_83", "unknown_84"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_20/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_19/Relu", "StatefulPartitionedCall/functional_1/conv2d_21/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_20/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_20/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_21/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_20/Relu", "unknown_85"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_22/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_21/depthwise", "unknown_87", "unknown_88"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_21/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_20/Relu", "StatefulPartitionedCall/functional_1/conv2d_22/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_21/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_21/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_22/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_21/Relu", "unknown_89"], "attr": {"T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_23/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_22/depthwise", "unknown_91", "unknown_92"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_22/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_21/Relu", "StatefulPartitionedCall/functional_1/conv2d_23/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_22/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_22/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_23/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_22/Relu", "unknown_93"], "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/functional_1/max_pooling2d_2/MaxPool", "op": "MaxPool", "input": ["StatefulPartitionedCall/functional_1/re_lu_22/Relu"], "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "ksize": {"list": {"i": ["1", "2", "2", "1"]}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_24/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_23/depthwise", "unknown_95", "unknown_96"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_Pad_1/Pad_1", "op": "Pad", "input": ["StatefulPartitionedCall/functional_1/max_pooling2d_2/MaxPool", "StatefulPartitionedCall/functional_1/tf_op_layer_Pad_1/Pad_1/paddings"], "attr": {"Tpaddings": {"type": "DT_INT32"}, "_cloned": {"b": true}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/add_23/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/conv2d_24/BiasAdd", "StatefulPartitionedCall/functional_1/tf_op_layer_Pad_1/Pad_1"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_23/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_23/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_24/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_23/Relu", "unknown_97"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_25/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_24/depthwise", "unknown_99", "unknown_100"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_24/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_23/Relu", "StatefulPartitionedCall/functional_1/conv2d_25/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_24/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_24/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_25/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_24/Relu", "unknown_101"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_26/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_25/depthwise", "unknown_103", "unknown_104"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_25/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_24/Relu", "StatefulPartitionedCall/functional_1/conv2d_26/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_25/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_25/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_26/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_25/Relu", "unknown_105"], "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_27/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_26/depthwise", "unknown_107", "unknown_108"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/functional_1/add_26/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_25/Relu", "StatefulPartitionedCall/functional_1/conv2d_27/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_26/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_26/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_27/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_26/Relu", "unknown_109"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_28/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_27/depthwise", "unknown_111", "unknown_112"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/functional_1/add_27/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_26/Relu", "StatefulPartitionedCall/functional_1/conv2d_28/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_27/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_27/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_28/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_27/Relu", "unknown_113"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_29/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_28/depthwise", "unknown_115", "unknown_116"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}}}, {"name": "StatefulPartitionedCall/functional_1/add_28/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_27/Relu", "StatefulPartitionedCall/functional_1/conv2d_29/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_28/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_28/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_29/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_28/Relu", "unknown_117"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_30/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_29/depthwise", "unknown_119", "unknown_120"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}}}, {"name": "StatefulPartitionedCall/functional_1/add_29/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_28/Relu", "StatefulPartitionedCall/functional_1/conv2d_30/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_29/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_29/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_30/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_29/Relu", "unknown_121"], "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_31/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_30/depthwise", "unknown_123", "unknown_124"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}}}, {"name": "StatefulPartitionedCall/functional_1/add_30/add", "op": "AddV2", "input": ["StatefulPartitionedCall/functional_1/re_lu_29/Relu", "StatefulPartitionedCall/functional_1/conv2d_31/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_30/Relu", "op": "Relu", "input": ["StatefulPartitionedCall/functional_1/add_30/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_33/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/re_lu_30/Relu", "unknown_135", "unknown_136"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_35/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/re_lu_30/Relu", "unknown_131", "unknown_132"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/functional_1/depthwise_conv2d_31/depthwise", "op": "DepthwiseConv2dNative", "input": ["StatefulPartitionedCall/functional_1/re_lu_30/Relu", "unknown_125"], "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_classificators_1/classificators_1", "op": "Reshape", "input": ["StatefulPartitionedCall/functional_1/conv2d_33/BiasAdd", "StatefulPartitionedCall/functional_1/tf_op_layer_classificators_1/classificators_1/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}, "_cloned": {"b": true}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_regressors_1/regressors_1", "op": "Reshape", "input": ["StatefulPartitionedCall/functional_1/conv2d_35/BiasAdd", "StatefulPartitionedCall/functional_1/tf_op_layer_regressors_1/regressors_1/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}, "_cloned": {"b": true}}}, {"name": "StatefulPartitionedCall/functional_1/re_lu_31/Relu", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/depthwise_conv2d_31/depthwise", "unknown_127", "unknown_128"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdQ=="]}}}}, {"name": "Identity", "op": "Identity", "input": ["StatefulPartitionedCall/functional_1/tf_op_layer_classificators_1/classificators_1"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "Identity_2", "op": "Identity", "input": ["StatefulPartitionedCall/functional_1/tf_op_layer_regressors_1/regressors_1"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_36/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/re_lu_31/Relu", "unknown_129", "unknown_130"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/functional_1/conv2d_34/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/functional_1/re_lu_31/Relu", "unknown_133", "unknown_134"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_regressors_2/regressors_2", "op": "Reshape", "input": ["StatefulPartitionedCall/functional_1/conv2d_36/BiasAdd", "StatefulPartitionedCall/functional_1/tf_op_layer_regressors_2/regressors_2/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}, "_cloned": {"b": true}}}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_classificators_2/classificators_2", "op": "Reshape", "input": ["StatefulPartitionedCall/functional_1/conv2d_34/BiasAdd", "StatefulPartitionedCall/functional_1/tf_op_layer_classificators_2/classificators_2/shape"], "attr": {"_cloned": {"b": true}, "T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "Identity_3", "op": "Identity", "input": ["StatefulPartitionedCall/functional_1/tf_op_layer_regressors_2/regressors_2"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "Identity_1", "op": "Identity", "input": ["StatefulPartitionedCall/functional_1/tf_op_layer_classificators_2/classificators_2"], "attr": {"T": {"type": "DT_FLOAT"}}}], "library": {}, "versions": {"producer": 440}}, "weightsManifest": [{"paths": ["group1-shard1of1.bin"], "weights": [{"name": "unknown_135", "shape": [1, 1, 96, 2], "dtype": "float32"}, {"name": "unknown_136", "shape": [2], "dtype": "float32"}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_classificators_1/classificators_1/shape", "shape": [3], "dtype": "int32"}, {"name": "unknown_133", "shape": [1, 1, 96, 6], "dtype": "float32"}, {"name": "unknown_134", "shape": [6], "dtype": "float32"}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_classificators_2/classificators_2/shape", "shape": [3], "dtype": "int32"}, {"name": "unknown_131", "shape": [1, 1, 96, 32], "dtype": "float32"}, {"name": "unknown_132", "shape": [32], "dtype": "float32"}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_regressors_1/regressors_1/shape", "shape": [3], "dtype": "int32"}, {"name": "unknown_93", "shape": [3, 3, 48, 1], "dtype": "float32"}, {"name": "unknown_95", "shape": [1, 1, 48, 96], "dtype": "float32"}, {"name": "unknown_96", "shape": [96], "dtype": "float32"}, {"name": "unknown_61", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_63", "shape": [1, 1, 24, 48], "dtype": "float32"}, {"name": "unknown_64", "shape": [48], "dtype": "float32"}, {"name": "unknown_57", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_59", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_60", "shape": [24], "dtype": "float32"}, {"name": "unknown_53", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_55", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_56", "shape": [24], "dtype": "float32"}, {"name": "unknown_49", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_51", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_52", "shape": [24], "dtype": "float32"}, {"name": "unknown_29", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_31", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_32", "shape": [24], "dtype": "float32"}, {"name": "unknown", "shape": [5, 5, 3, 24], "dtype": "float32"}, {"name": "unknown_0", "shape": [24], "dtype": "float32"}, {"name": "unknown_1", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_3", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_4", "shape": [24], "dtype": "float32"}, {"name": "unknown_5", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_7", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_8", "shape": [24], "dtype": "float32"}, {"name": "unknown_9", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_11", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_12", "shape": [24], "dtype": "float32"}, {"name": "unknown_13", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_15", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_16", "shape": [24], "dtype": "float32"}, {"name": "unknown_17", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_19", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_20", "shape": [24], "dtype": "float32"}, {"name": "unknown_21", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_23", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_24", "shape": [24], "dtype": "float32"}, {"name": "unknown_25", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_27", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_28", "shape": [24], "dtype": "float32"}, {"name": "unknown_33", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_35", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_36", "shape": [24], "dtype": "float32"}, {"name": "unknown_37", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_39", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_40", "shape": [24], "dtype": "float32"}, {"name": "unknown_41", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_43", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_44", "shape": [24], "dtype": "float32"}, {"name": "unknown_45", "shape": [3, 3, 24, 1], "dtype": "float32"}, {"name": "unknown_47", "shape": [1, 1, 24, 24], "dtype": "float32"}, {"name": "unknown_48", "shape": [24], "dtype": "float32"}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_Pad/Pad/paddings", "shape": [4, 2], "dtype": "int32"}, {"name": "unknown_65", "shape": [3, 3, 48, 1], "dtype": "float32"}, {"name": "unknown_67", "shape": [1, 1, 48, 48], "dtype": "float32"}, {"name": "unknown_68", "shape": [48], "dtype": "float32"}, {"name": "unknown_69", "shape": [3, 3, 48, 1], "dtype": "float32"}, {"name": "unknown_71", "shape": [1, 1, 48, 48], "dtype": "float32"}, {"name": "unknown_72", "shape": [48], "dtype": "float32"}, {"name": "unknown_73", "shape": [3, 3, 48, 1], "dtype": "float32"}, {"name": "unknown_75", "shape": [1, 1, 48, 48], "dtype": "float32"}, {"name": "unknown_76", "shape": [48], "dtype": "float32"}, {"name": "unknown_77", "shape": [3, 3, 48, 1], "dtype": "float32"}, {"name": "unknown_79", "shape": [1, 1, 48, 48], "dtype": "float32"}, {"name": "unknown_80", "shape": [48], "dtype": "float32"}, {"name": "unknown_81", "shape": [3, 3, 48, 1], "dtype": "float32"}, {"name": "unknown_83", "shape": [1, 1, 48, 48], "dtype": "float32"}, {"name": "unknown_84", "shape": [48], "dtype": "float32"}, {"name": "unknown_85", "shape": [3, 3, 48, 1], "dtype": "float32"}, {"name": "unknown_87", "shape": [1, 1, 48, 48], "dtype": "float32"}, {"name": "unknown_88", "shape": [48], "dtype": "float32"}, {"name": "unknown_89", "shape": [3, 3, 48, 1], "dtype": "float32"}, {"name": "unknown_91", "shape": [1, 1, 48, 48], "dtype": "float32"}, {"name": "unknown_92", "shape": [48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_Pad_1/Pad_1/paddings", "shape": [4, 2], "dtype": "int32"}, {"name": "unknown_97", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "unknown_99", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_100", "shape": [96], "dtype": "float32"}, {"name": "unknown_101", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "unknown_103", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_104", "shape": [96], "dtype": "float32"}, {"name": "unknown_105", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "unknown_107", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_108", "shape": [96], "dtype": "float32"}, {"name": "unknown_109", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "unknown_111", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_112", "shape": [96], "dtype": "float32"}, {"name": "unknown_113", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "unknown_115", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_116", "shape": [96], "dtype": "float32"}, {"name": "unknown_117", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "unknown_119", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_120", "shape": [96], "dtype": "float32"}, {"name": "unknown_121", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "unknown_123", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_124", "shape": [96], "dtype": "float32"}, {"name": "unknown_125", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "unknown_127", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_128", "shape": [96], "dtype": "float32"}, {"name": "unknown_129", "shape": [1, 1, 96, 96], "dtype": "float32"}, {"name": "unknown_130", "shape": [96], "dtype": "float32"}, {"name": "StatefulPartitionedCall/functional_1/tf_op_layer_regressors_2/regressors_2/shape", "shape": [3], "dtype": "int32"}]}]} \ No newline at end of file diff --git a/web/apps/photos/public/models/imagescene/group1-shard1of7.bin b/web/apps/photos/public/models/imagescene/group1-shard1of7.bin new file mode 100644 index 000000000..53c36fb2b Binary files /dev/null and b/web/apps/photos/public/models/imagescene/group1-shard1of7.bin differ diff --git a/web/apps/photos/public/models/imagescene/group1-shard2of7.bin b/web/apps/photos/public/models/imagescene/group1-shard2of7.bin new file mode 100644 index 000000000..89eb634c5 Binary files /dev/null and b/web/apps/photos/public/models/imagescene/group1-shard2of7.bin differ diff --git a/web/apps/photos/public/models/imagescene/group1-shard3of7.bin b/web/apps/photos/public/models/imagescene/group1-shard3of7.bin new file mode 100644 index 000000000..bfbd3bff9 Binary files /dev/null and b/web/apps/photos/public/models/imagescene/group1-shard3of7.bin differ diff --git a/web/apps/photos/public/models/imagescene/group1-shard4of7.bin b/web/apps/photos/public/models/imagescene/group1-shard4of7.bin new file mode 100644 index 000000000..8f76bee5c Binary files /dev/null and b/web/apps/photos/public/models/imagescene/group1-shard4of7.bin differ diff --git a/web/apps/photos/public/models/imagescene/group1-shard5of7.bin b/web/apps/photos/public/models/imagescene/group1-shard5of7.bin new file mode 100644 index 000000000..e0830484d Binary files /dev/null and b/web/apps/photos/public/models/imagescene/group1-shard5of7.bin differ diff --git a/web/apps/photos/public/models/imagescene/group1-shard6of7.bin b/web/apps/photos/public/models/imagescene/group1-shard6of7.bin new file mode 100644 index 000000000..a0c3c5009 Binary files /dev/null and b/web/apps/photos/public/models/imagescene/group1-shard6of7.bin differ diff --git a/web/apps/photos/public/models/imagescene/group1-shard7of7.bin b/web/apps/photos/public/models/imagescene/group1-shard7of7.bin new file mode 100644 index 000000000..a01330fd0 Binary files /dev/null and b/web/apps/photos/public/models/imagescene/group1-shard7of7.bin differ diff --git a/web/apps/photos/public/models/imagescene/model.json b/web/apps/photos/public/models/imagescene/model.json new file mode 100644 index 000000000..836bc0878 --- /dev/null +++ b/web/apps/photos/public/models/imagescene/model.json @@ -0,0 +1 @@ +{"format": "graph-model", "generatedBy": "2.8.0", "convertedBy": "TensorFlow.js Converter v3.18.0", "signature": {"inputs": {"input_1": {"name": "input_1:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "-1"}, {"size": "224"}, {"size": "224"}, {"size": "3"}]}}}, "outputs": {"dense_1": {"name": "Identity:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "-1"}, {"size": "30"}]}}}}, "modelTopology": {"node": [{"name": "StatefulPartitionedCall/model/block7b_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1920"}, {"size": "80"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "80"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "80"}, {"size": "1920"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1920"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "48"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6d_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "48"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6c_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "48"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6c_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6b_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6b_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "672"}, {"size": "28"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "28"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "28"}, {"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "672"}, {"size": "28"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "28"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "28"}, {"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "672"}, {"size": "28"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "28"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "28"}, {"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "480"}, {"size": "20"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "20"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4d_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "20"}, {"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4c_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "480"}, {"size": "20"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "20"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "20"}, {"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4c_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "480"}, {"size": "20"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "20"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4b_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "20"}, {"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4b_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3c_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "240"}, {"size": "10"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "10"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "10"}, {"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3b_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "240"}, {"size": "10"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "10"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3b_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "10"}, {"size": "240"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3b_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2c_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "144"}, {"size": "6"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "6"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "6"}, {"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "144"}, {"size": "6"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "6"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2b_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "6"}, {"size": "144"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2b_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1b_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "16"}, {"size": "4"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "4"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "4"}, {"size": "16"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1b_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "16"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/rescaling/Cast/x", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/rescaling/add", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1"}, {"size": "3"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "ConstantFolding/StatefulPartitionedCall/model/normalization/truediv_recip", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1"}, {"size": "3"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/stem_conv_pad/Pad/paddings", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "4"}, {"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "32"}, {"size": "8"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "8"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "8"}, {"size": "32"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1a_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_dwconv_pad/Pad/paddings", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "4"}, {"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "4"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "4"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "4"}, {"size": "96"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3a_dwconv_pad/Pad/paddings", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "4"}, {"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3a_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "144"}, {"size": "6"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "6"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "6"}, {"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_dwconv_pad/Pad/paddings", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "4"}, {"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "240"}, {"size": "10"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "10"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "10"}, {"size": "240"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "480"}, {"size": "20"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "20"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "20"}, {"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_dwconv_pad/Pad/paddings", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "4"}, {"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "672"}, {"size": "28"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "28"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "28"}, {"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_squeeze/Mean/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack_1", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack_2", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "1"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/1", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/2", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/3", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {}}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reduce/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "48"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reduce/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "48"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_expand/Conv2D/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "48"}, {"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_expand/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/global_average_pooling2d/Mean/reduction_indices", "op": "Const", "attr": {"dtype": {"type": "DT_INT32"}, "value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}}}, {"name": "StatefulPartitionedCall/model/dense/MatMul/ReadVariableOp", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1280"}, {"size": "512"}]}}}}}, {"name": "StatefulPartitionedCall/model/dense/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "512"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/dense_1/MatMul/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "512"}, {"size": "30"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/dense_1/BiasAdd/ReadVariableOp", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "30"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "input_1", "op": "Placeholder", "attr": {"dtype": {"type": "DT_FLOAT"}, "shape": {"shape": {"dim": [{"size": "-1"}, {"size": "224"}, {"size": "224"}, {"size": "3"}]}}}}, {"name": "StatefulPartitionedCall/model/stem_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "3"}, {"size": "32"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6e_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/stem_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1a_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "32"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1a_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1a_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "32"}, {"size": "16"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "16"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1b_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "16"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "16"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1b_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "16"}, {"size": "16"}]}}}}}, {"name": "StatefulPartitionedCall/model/block1b_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "16"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "16"}, {"size": "96"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2a_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "144"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2b_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "144"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2b_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}}}, {"name": "StatefulPartitionedCall/model/top_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "320"}, {"size": "1280"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "144"}, {"size": "24"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2b_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2c_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "144"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "192"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2c_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "144"}, {"size": "24"}]}}}}}, {"name": "StatefulPartitionedCall/model/block2c_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3a_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3a_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "144"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "144"}, {"size": "40"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7a_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "192"}, {"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "40"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3b_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "40"}, {"size": "240"}]}}}}}, {"name": "StatefulPartitionedCall/model/top_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1280"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "240"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7a_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "240"}, {"size": "40"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3b_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "40"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3c_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "40"}, {"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "240"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3c_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "1152"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3c_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "240"}, {"size": "40"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block3c_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "40"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4a_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "40"}, {"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "240"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4a_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "240"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "240"}, {"size": "80"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4a_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "80"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "80"}, {"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4b_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4b_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "480"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4b_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "480"}, {"size": "80"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4b_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "80"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "80"}, {"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4c_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "480"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "480"}, {"size": "80"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "80"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "80"}, {"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "480"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "480"}, {"size": "80"}]}}}}}, {"name": "StatefulPartitionedCall/model/block4d_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "80"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "80"}, {"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "320"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "480"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5a_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "480"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7a_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "320"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5a_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "480"}, {"size": "112"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "112"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "112"}, {"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "320"}, {"size": "1920"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "672"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1920"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "672"}, {"size": "112"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5b_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "112"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "112"}, {"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "672"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "1920"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "672"}, {"size": "112"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5c_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "112"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "112"}, {"size": "672"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1920"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_dwconv/depthwise_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "672"}, {"size": "1"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block5d_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "672"}, {"size": "112"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "112"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "112"}, {"size": "672"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "672"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "672"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "672"}, {"size": "192"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6a_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6b_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "192"}, {"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "1152"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6b_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "192"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6b_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6c_expand_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "192"}, {"size": "1152"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6c_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "1152"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6c_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "192"}, {"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6d_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6d_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "1152"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_dwconv/depthwise_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block7b_project_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1920"}, {"size": "320"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6d_project_conv/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "1152"}, {"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "320"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_project_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6e_expand_conv/Conv2D_weights", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "192"}, {"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6e_expand_conv/Conv2D_bn_offset", "op": "Const", "attr": {"dtype": {"type": "DT_FLOAT"}, "value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1152"}]}}}}}, {"name": "StatefulPartitionedCall/model/block6e_dwconv/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "5"}, {"size": "5"}, {"size": "1152"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/rescaling/mul", "op": "Mul", "input": ["input_1", "StatefulPartitionedCall/model/rescaling/Cast/x"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/normalization/sub", "op": "Add", "input": ["StatefulPartitionedCall/model/rescaling/mul", "StatefulPartitionedCall/model/rescaling/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/normalization/truediv", "op": "Mul", "input": ["StatefulPartitionedCall/model/normalization/sub", "ConstantFolding/StatefulPartitionedCall/model/normalization/truediv_recip"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/stem_conv_pad/Pad", "op": "Pad", "input": ["StatefulPartitionedCall/model/normalization/truediv", "StatefulPartitionedCall/model/stem_conv_pad/Pad/paddings"], "attr": {"T": {"type": "DT_FLOAT"}, "Tpaddings": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/stem_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/stem_conv_pad/Pad", "StatefulPartitionedCall/model/stem_conv/Conv2D_weights", "StatefulPartitionedCall/model/stem_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "padding": {"s": "VkFMSUQ="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/stem_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/stem_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/stem_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/stem_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/stem_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/stem_activation/mul_1", "StatefulPartitionedCall/model/block1a_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block1a_dwconv/depthwise_bn_offset"], "attr": {"padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block1a_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block1a_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block1a_dwconv/depthwise", "StatefulPartitionedCall/model/block1a_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block1a_activation/mul_1", "StatefulPartitionedCall/model/block1a_se_squeeze/Mean/reduction_indices"], "attr": {"T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block1a_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block1a_se_reshape/Shape", "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack_2"], "attr": {"ellipsis_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "Index": {"type": "DT_INT32"}, "begin_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "new_axis_mask": {"i": "0"}, "end_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block1a_se_reshape/strided_slice", "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "T": {"type": "DT_INT32"}, "N": {"i": "4"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block1a_se_squeeze/Mean", "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block1a_se_reshape/Reshape", "StatefulPartitionedCall/model/block1a_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block1a_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block1a_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block1a_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block1a_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block1a_se_reduce/mul_1", "StatefulPartitionedCall/model/block1a_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block1a_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block1a_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block1a_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block1a_activation/mul_1", "StatefulPartitionedCall/model/block1a_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1a_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block1a_se_excite/mul", "StatefulPartitionedCall/model/block1a_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block1a_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block1a_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block1b_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block1b_dwconv/depthwise_bn_offset"], "attr": {"explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block1b_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block1b_dwconv/depthwise", "StatefulPartitionedCall/model/block1b_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block1b_activation/mul_1", "StatefulPartitionedCall/model/block1b_se_squeeze/Mean/reduction_indices"], "attr": {"T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block1b_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block1b_se_reshape/Shape", "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack_2"], "attr": {"Index": {"type": "DT_INT32"}, "end_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "begin_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "T": {"type": "DT_INT32"}, "ellipsis_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block1b_se_reshape/strided_slice", "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/3"], "attr": {"N": {"i": "4"}, "T": {"type": "DT_INT32"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block1b_se_squeeze/Mean", "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block1b_se_reshape/Reshape", "StatefulPartitionedCall/model/block1b_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block1b_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block1b_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block1b_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block1b_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block1b_se_reduce/mul_1", "StatefulPartitionedCall/model/block1b_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block1b_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block1b_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block1b_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block1b_activation/mul_1", "StatefulPartitionedCall/model/block1b_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block1b_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block1b_se_excite/mul", "StatefulPartitionedCall/model/block1b_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block1b_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block1b_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block1b_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block1a_project_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block1b_add/add", "StatefulPartitionedCall/model/block2a_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block2a_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block2a_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2a_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2a_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block2a_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_dwconv_pad/Pad", "op": "Pad", "input": ["StatefulPartitionedCall/model/block2a_expand_activation/mul_1", "StatefulPartitionedCall/model/block2a_dwconv_pad/Pad/paddings"], "attr": {"Tpaddings": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block2a_dwconv_pad/Pad", "StatefulPartitionedCall/model/block2a_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block2a_dwconv/depthwise_bn_offset"], "attr": {"num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block2a_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2a_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2a_dwconv/depthwise", "StatefulPartitionedCall/model/block2a_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block2a_activation/mul_1", "StatefulPartitionedCall/model/block2a_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block2a_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block2a_se_reshape/Shape", "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack_2"], "attr": {"Index": {"type": "DT_INT32"}, "ellipsis_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "T": {"type": "DT_INT32"}, "new_axis_mask": {"i": "0"}, "end_mask": {"i": "0"}, "begin_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block2a_se_reshape/strided_slice", "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/3"], "attr": {"T": {"type": "DT_INT32"}, "axis": {"i": "0"}, "N": {"i": "4"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block2a_se_squeeze/Mean", "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2a_se_reshape/Reshape", "StatefulPartitionedCall/model/block2a_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block2a_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2a_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2a_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block2a_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2a_se_reduce/mul_1", "StatefulPartitionedCall/model/block2a_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block2a_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/block2a_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2a_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2a_activation/mul_1", "StatefulPartitionedCall/model/block2a_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2a_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2a_se_excite/mul", "StatefulPartitionedCall/model/block2a_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block2a_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "epsilon": {"f": 0.0}, "num_args": {"i": "1"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block2b_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2a_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block2b_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block2b_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block2b_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2b_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2b_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block2b_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block2b_expand_activation/mul_1", "StatefulPartitionedCall/model/block2b_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block2b_dwconv/depthwise_bn_offset"], "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block2b_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2b_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2b_dwconv/depthwise", "StatefulPartitionedCall/model/block2b_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block2b_activation/mul_1", "StatefulPartitionedCall/model/block2b_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block2b_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block2b_se_reshape/Shape", "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack_2"], "attr": {"T": {"type": "DT_INT32"}, "Index": {"type": "DT_INT32"}, "begin_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "end_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block2b_se_reshape/strided_slice", "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "T": {"type": "DT_INT32"}, "N": {"i": "4"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block2b_se_squeeze/Mean", "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2b_se_reshape/Reshape", "StatefulPartitionedCall/model/block2b_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block2b_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2b_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2b_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block2b_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2b_se_reduce/mul_1", "StatefulPartitionedCall/model/block2b_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block2b_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block2b_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2b_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2b_activation/mul_1", "StatefulPartitionedCall/model/block2b_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2b_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2b_se_excite/mul", "StatefulPartitionedCall/model/block2b_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block2b_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block2b_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block2b_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block2a_project_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2b_add/add", "StatefulPartitionedCall/model/block2c_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block2c_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block2c_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2c_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2c_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block2c_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block2c_expand_activation/mul_1", "StatefulPartitionedCall/model/block2c_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block2c_dwconv/depthwise_bn_offset"], "attr": {"strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}}}, {"name": "StatefulPartitionedCall/model/block2c_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2c_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2c_dwconv/depthwise", "StatefulPartitionedCall/model/block2c_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block2c_activation/mul_1", "StatefulPartitionedCall/model/block2c_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "T": {"type": "DT_FLOAT"}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block2c_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block2c_se_reshape/Shape", "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack_2"], "attr": {"end_mask": {"i": "0"}, "begin_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "T": {"type": "DT_INT32"}, "ellipsis_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "new_axis_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block2c_se_reshape/strided_slice", "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/3"], "attr": {"T": {"type": "DT_INT32"}, "N": {"i": "4"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block2c_se_squeeze/Mean", "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2c_se_reshape/Reshape", "StatefulPartitionedCall/model/block2c_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block2c_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2c_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2c_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block2c_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2c_se_reduce/mul_1", "StatefulPartitionedCall/model/block2c_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block2c_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block2c_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block2c_activation/mul_1", "StatefulPartitionedCall/model/block2c_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block2c_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2c_se_excite/mul", "StatefulPartitionedCall/model/block2c_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block2c_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/block2c_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block2c_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block2b_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block2c_add/add", "StatefulPartitionedCall/model/block3a_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block3a_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block3a_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3a_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3a_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block3a_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_dwconv_pad/Pad", "op": "Pad", "input": ["StatefulPartitionedCall/model/block3a_expand_activation/mul_1", "StatefulPartitionedCall/model/block3a_dwconv_pad/Pad/paddings"], "attr": {"T": {"type": "DT_FLOAT"}, "Tpaddings": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3a_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block3a_dwconv_pad/Pad", "StatefulPartitionedCall/model/block3a_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block3a_dwconv/depthwise_bn_offset"], "attr": {"padding": {"s": "VkFMSUQ="}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block3a_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3a_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3a_dwconv/depthwise", "StatefulPartitionedCall/model/block3a_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block3a_activation/mul_1", "StatefulPartitionedCall/model/block3a_se_squeeze/Mean/reduction_indices"], "attr": {"T": {"type": "DT_FLOAT"}, "Tidx": {"type": "DT_INT32"}, "keep_dims": {"b": false}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block3a_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block3a_se_reshape/Shape", "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack_2"], "attr": {"new_axis_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}, "end_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "begin_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block3a_se_reshape/strided_slice", "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "T": {"type": "DT_INT32"}, "N": {"i": "4"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block3a_se_squeeze/Mean", "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3a_se_reshape/Reshape", "StatefulPartitionedCall/model/block3a_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block3a_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3a_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3a_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block3a_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3a_se_reduce/mul_1", "StatefulPartitionedCall/model/block3a_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block3a_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3a_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3a_activation/mul_1", "StatefulPartitionedCall/model/block3a_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3a_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3a_se_excite/mul", "StatefulPartitionedCall/model/block3a_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block3a_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block3b_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3a_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block3b_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block3b_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "epsilon": {"f": 0.0}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3b_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3b_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block3b_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block3b_expand_activation/mul_1", "StatefulPartitionedCall/model/block3b_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block3b_dwconv/depthwise_bn_offset"], "attr": {"explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block3b_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3b_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3b_dwconv/depthwise", "StatefulPartitionedCall/model/block3b_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block3b_activation/mul_1", "StatefulPartitionedCall/model/block3b_se_squeeze/Mean/reduction_indices"], "attr": {"T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block3b_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block3b_se_reshape/Shape", "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack_2"], "attr": {"end_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "ellipsis_mask": {"i": "0"}, "begin_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block3b_se_reshape/strided_slice", "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/3"], "attr": {"T": {"type": "DT_INT32"}, "N": {"i": "4"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block3b_se_squeeze/Mean", "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3b_se_reshape/Reshape", "StatefulPartitionedCall/model/block3b_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block3b_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3b_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3b_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block3b_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3b_se_reduce/mul_1", "StatefulPartitionedCall/model/block3b_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block3b_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3b_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3b_activation/mul_1", "StatefulPartitionedCall/model/block3b_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3b_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3b_se_excite/mul", "StatefulPartitionedCall/model/block3b_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block3b_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}}}, {"name": "StatefulPartitionedCall/model/block3b_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block3b_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block3a_project_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3b_add/add", "StatefulPartitionedCall/model/block3c_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block3c_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}, "padding": {"s": "U0FNRQ=="}, "explicit_paddings": {"list": {}}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block3c_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3c_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3c_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block3c_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block3c_expand_activation/mul_1", "StatefulPartitionedCall/model/block3c_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block3c_dwconv/depthwise_bn_offset"], "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block3c_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3c_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3c_dwconv/depthwise", "StatefulPartitionedCall/model/block3c_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block3c_activation/mul_1", "StatefulPartitionedCall/model/block3c_se_squeeze/Mean/reduction_indices"], "attr": {"T": {"type": "DT_FLOAT"}, "Tidx": {"type": "DT_INT32"}, "keep_dims": {"b": false}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block3c_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block3c_se_reshape/Shape", "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack_2"], "attr": {"Index": {"type": "DT_INT32"}, "T": {"type": "DT_INT32"}, "ellipsis_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "begin_mask": {"i": "0"}, "end_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block3c_se_reshape/strided_slice", "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/3"], "attr": {"T": {"type": "DT_INT32"}, "N": {"i": "4"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block3c_se_squeeze/Mean", "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3c_se_reshape/Reshape", "StatefulPartitionedCall/model/block3c_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block3c_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3c_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3c_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block3c_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3c_se_reduce/mul_1", "StatefulPartitionedCall/model/block3c_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block3c_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block3c_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block3c_activation/mul_1", "StatefulPartitionedCall/model/block3c_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block3c_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3c_se_excite/mul", "StatefulPartitionedCall/model/block3c_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block3c_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block3c_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block3c_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block3b_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block3c_add/add", "StatefulPartitionedCall/model/block4a_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block4a_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block4a_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4a_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4a_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block4a_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_dwconv_pad/Pad", "op": "Pad", "input": ["StatefulPartitionedCall/model/block4a_expand_activation/mul_1", "StatefulPartitionedCall/model/block4a_dwconv_pad/Pad/paddings"], "attr": {"Tpaddings": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block4a_dwconv_pad/Pad", "StatefulPartitionedCall/model/block4a_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block4a_dwconv/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "VkFMSUQ="}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4a_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4a_dwconv/depthwise", "StatefulPartitionedCall/model/block4a_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block4a_activation/mul_1", "StatefulPartitionedCall/model/block4a_se_squeeze/Mean/reduction_indices"], "attr": {"T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block4a_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block4a_se_reshape/Shape", "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack_2"], "attr": {"end_mask": {"i": "0"}, "begin_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "Index": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}, "new_axis_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block4a_se_reshape/strided_slice", "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "T": {"type": "DT_INT32"}, "N": {"i": "4"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block4a_se_squeeze/Mean", "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4a_se_reshape/Reshape", "StatefulPartitionedCall/model/block4a_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block4a_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4a_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4a_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block4a_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4a_se_reduce/mul_1", "StatefulPartitionedCall/model/block4a_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block4a_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block4a_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4a_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4a_activation/mul_1", "StatefulPartitionedCall/model/block4a_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4a_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4a_se_excite/mul", "StatefulPartitionedCall/model/block4a_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block4a_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block4b_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4a_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block4b_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block4b_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/block4b_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4b_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4b_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block4b_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block4b_expand_activation/mul_1", "StatefulPartitionedCall/model/block4b_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block4b_dwconv/depthwise_bn_offset"], "attr": {"explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block4b_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4b_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4b_dwconv/depthwise", "StatefulPartitionedCall/model/block4b_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block4b_activation/mul_1", "StatefulPartitionedCall/model/block4b_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block4b_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block4b_se_reshape/Shape", "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack_2"], "attr": {"end_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "begin_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block4b_se_reshape/strided_slice", "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "N": {"i": "4"}, "T": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block4b_se_squeeze/Mean", "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4b_se_reshape/Reshape", "StatefulPartitionedCall/model/block4b_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block4b_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "epsilon": {"f": 0.0}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4b_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4b_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block4b_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4b_se_reduce/mul_1", "StatefulPartitionedCall/model/block4b_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block4b_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}}}, {"name": "StatefulPartitionedCall/model/block4b_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4b_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4b_activation/mul_1", "StatefulPartitionedCall/model/block4b_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4b_se_excite/mul", "StatefulPartitionedCall/model/block4b_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block4b_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4b_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block4b_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block4a_project_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4b_add/add", "StatefulPartitionedCall/model/block4c_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block4c_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block4c_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4c_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4c_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block4c_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block4c_expand_activation/mul_1", "StatefulPartitionedCall/model/block4c_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block4c_dwconv/depthwise_bn_offset"], "attr": {"num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block4c_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4c_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4c_dwconv/depthwise", "StatefulPartitionedCall/model/block4c_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block4c_activation/mul_1", "StatefulPartitionedCall/model/block4c_se_squeeze/Mean/reduction_indices"], "attr": {"Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block4c_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block4c_se_reshape/Shape", "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack_2"], "attr": {"begin_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "new_axis_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}, "end_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block4c_se_reshape/strided_slice", "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/3"], "attr": {"N": {"i": "4"}, "T": {"type": "DT_INT32"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block4c_se_squeeze/Mean", "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4c_se_reshape/Reshape", "StatefulPartitionedCall/model/block4c_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block4c_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4c_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4c_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block4c_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4c_se_reduce/mul_1", "StatefulPartitionedCall/model/block4c_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block4c_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/block4c_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4c_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4c_activation/mul_1", "StatefulPartitionedCall/model/block4c_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4c_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4c_se_excite/mul", "StatefulPartitionedCall/model/block4c_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block4c_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block4c_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block4c_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block4b_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4c_add/add", "StatefulPartitionedCall/model/block4d_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block4d_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block4d_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4d_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4d_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block4d_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block4d_expand_activation/mul_1", "StatefulPartitionedCall/model/block4d_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block4d_dwconv/depthwise_bn_offset"], "attr": {"num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block4d_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4d_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4d_dwconv/depthwise", "StatefulPartitionedCall/model/block4d_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block4d_activation/mul_1", "StatefulPartitionedCall/model/block4d_se_squeeze/Mean/reduction_indices"], "attr": {"Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block4d_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block4d_se_reshape/Shape", "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack_2"], "attr": {"ellipsis_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "end_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "Index": {"type": "DT_INT32"}, "begin_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block4d_se_reshape/strided_slice", "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "T": {"type": "DT_INT32"}, "N": {"i": "4"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block4d_se_squeeze/Mean", "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4d_se_reshape/Reshape", "StatefulPartitionedCall/model/block4d_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block4d_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4d_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4d_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block4d_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4d_se_reduce/mul_1", "StatefulPartitionedCall/model/block4d_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block4d_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block4d_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block4d_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block4d_activation/mul_1", "StatefulPartitionedCall/model/block4d_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block4d_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4d_se_excite/mul", "StatefulPartitionedCall/model/block4d_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block4d_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block4d_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block4d_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block4c_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block4d_add/add", "StatefulPartitionedCall/model/block5a_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block5a_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block5a_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5a_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5a_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block5a_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block5a_expand_activation/mul_1", "StatefulPartitionedCall/model/block5a_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block5a_dwconv/depthwise_bn_offset"], "attr": {"strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block5a_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5a_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5a_dwconv/depthwise", "StatefulPartitionedCall/model/block5a_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block5a_activation/mul_1", "StatefulPartitionedCall/model/block5a_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block5a_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block5a_se_reshape/Shape", "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack_2"], "attr": {"T": {"type": "DT_INT32"}, "begin_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}, "new_axis_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}, "end_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block5a_se_reshape/strided_slice", "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/3"], "attr": {"N": {"i": "4"}, "T": {"type": "DT_INT32"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block5a_se_squeeze/Mean", "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5a_se_reshape/Reshape", "StatefulPartitionedCall/model/block5a_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block5a_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5a_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5a_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block5a_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5a_se_reduce/mul_1", "StatefulPartitionedCall/model/block5a_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block5a_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5a_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5a_activation/mul_1", "StatefulPartitionedCall/model/block5a_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5a_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5a_se_excite/mul", "StatefulPartitionedCall/model/block5a_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block5a_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/block5b_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5a_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block5b_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block5b_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block5b_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5b_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5b_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block5b_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block5b_expand_activation/mul_1", "StatefulPartitionedCall/model/block5b_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block5b_dwconv/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}}}, {"name": "StatefulPartitionedCall/model/block5b_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5b_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5b_dwconv/depthwise", "StatefulPartitionedCall/model/block5b_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block5b_activation/mul_1", "StatefulPartitionedCall/model/block5b_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "T": {"type": "DT_FLOAT"}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block5b_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block5b_se_reshape/Shape", "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack_2"], "attr": {"ellipsis_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "Index": {"type": "DT_INT32"}, "end_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "new_axis_mask": {"i": "0"}, "begin_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block5b_se_reshape/strided_slice", "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/3"], "attr": {"N": {"i": "4"}, "T": {"type": "DT_INT32"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block5b_se_squeeze/Mean", "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5b_se_reshape/Reshape", "StatefulPartitionedCall/model/block5b_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block5b_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5b_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5b_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block5b_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5b_se_reduce/mul_1", "StatefulPartitionedCall/model/block5b_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block5b_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5b_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5b_activation/mul_1", "StatefulPartitionedCall/model/block5b_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5b_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5b_se_excite/mul", "StatefulPartitionedCall/model/block5b_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block5b_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block5b_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block5b_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block5a_project_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5b_add/add", "StatefulPartitionedCall/model/block5c_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block5c_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block5c_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5c_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5c_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block5c_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block5c_expand_activation/mul_1", "StatefulPartitionedCall/model/block5c_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block5c_dwconv/depthwise_bn_offset"], "attr": {"num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block5c_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5c_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5c_dwconv/depthwise", "StatefulPartitionedCall/model/block5c_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block5c_activation/mul_1", "StatefulPartitionedCall/model/block5c_se_squeeze/Mean/reduction_indices"], "attr": {"T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block5c_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block5c_se_reshape/Shape", "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack_2"], "attr": {"T": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}, "begin_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "new_axis_mask": {"i": "0"}, "end_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block5c_se_reshape/strided_slice", "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "T": {"type": "DT_INT32"}, "N": {"i": "4"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block5c_se_squeeze/Mean", "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5c_se_reshape/Reshape", "StatefulPartitionedCall/model/block5c_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block5c_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5c_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5c_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block5c_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5c_se_reduce/mul_1", "StatefulPartitionedCall/model/block5c_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block5c_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block5c_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5c_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5c_activation/mul_1", "StatefulPartitionedCall/model/block5c_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5c_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5c_se_excite/mul", "StatefulPartitionedCall/model/block5c_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block5c_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}, "padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block5c_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block5c_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block5b_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5c_add/add", "StatefulPartitionedCall/model/block5d_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block5d_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block5d_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5d_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5d_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block5d_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block5d_expand_activation/mul_1", "StatefulPartitionedCall/model/block5d_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block5d_dwconv/depthwise_bn_offset"], "attr": {"explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block5d_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5d_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5d_dwconv/depthwise", "StatefulPartitionedCall/model/block5d_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block5d_activation/mul_1", "StatefulPartitionedCall/model/block5d_se_squeeze/Mean/reduction_indices"], "attr": {"Tidx": {"type": "DT_INT32"}, "keep_dims": {"b": false}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block5d_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block5d_se_reshape/Shape", "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack_2"], "attr": {"shrink_axis_mask": {"i": "1"}, "T": {"type": "DT_INT32"}, "end_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}, "begin_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "new_axis_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block5d_se_reshape/strided_slice", "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/3"], "attr": {"T": {"type": "DT_INT32"}, "N": {"i": "4"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block5d_se_squeeze/Mean", "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5d_se_reshape/Reshape", "StatefulPartitionedCall/model/block5d_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block5d_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5d_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5d_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block5d_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5d_se_reduce/mul_1", "StatefulPartitionedCall/model/block5d_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block5d_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block5d_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block5d_activation/mul_1", "StatefulPartitionedCall/model/block5d_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5d_se_excite/mul", "StatefulPartitionedCall/model/block5d_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block5d_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "explicit_paddings": {"list": {}}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block5d_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block5d_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block5c_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block5d_add/add", "StatefulPartitionedCall/model/block6a_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6a_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6a_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6a_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6a_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_dwconv_pad/Pad", "op": "Pad", "input": ["StatefulPartitionedCall/model/block6a_expand_activation/mul_1", "StatefulPartitionedCall/model/block6a_dwconv_pad/Pad/paddings"], "attr": {"Tpaddings": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block6a_dwconv_pad/Pad", "StatefulPartitionedCall/model/block6a_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block6a_dwconv/depthwise_bn_offset"], "attr": {"padding": {"s": "VkFMSUQ="}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block6a_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6a_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6a_dwconv/depthwise", "StatefulPartitionedCall/model/block6a_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block6a_activation/mul_1", "StatefulPartitionedCall/model/block6a_se_squeeze/Mean/reduction_indices"], "attr": {"Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block6a_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block6a_se_reshape/Shape", "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack_2"], "attr": {"new_axis_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "T": {"type": "DT_INT32"}, "Index": {"type": "DT_INT32"}, "begin_mask": {"i": "0"}, "end_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block6a_se_reshape/strided_slice", "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/3"], "attr": {"N": {"i": "4"}, "T": {"type": "DT_INT32"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block6a_se_squeeze/Mean", "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6a_se_reshape/Reshape", "StatefulPartitionedCall/model/block6a_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6a_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6a_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6a_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block6a_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6a_se_reduce/mul_1", "StatefulPartitionedCall/model/block6a_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6a_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6a_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6a_activation/mul_1", "StatefulPartitionedCall/model/block6a_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6a_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6a_se_excite/mul", "StatefulPartitionedCall/model/block6a_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6a_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"use_cudnn_on_gpu": {"b": true}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block6b_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6a_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6b_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6b_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block6b_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6b_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6b_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6b_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block6b_expand_activation/mul_1", "StatefulPartitionedCall/model/block6b_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block6b_dwconv/depthwise_bn_offset"], "attr": {"T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block6b_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6b_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6b_dwconv/depthwise", "StatefulPartitionedCall/model/block6b_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block6b_activation/mul_1", "StatefulPartitionedCall/model/block6b_se_squeeze/Mean/reduction_indices"], "attr": {"Tidx": {"type": "DT_INT32"}, "keep_dims": {"b": false}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block6b_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block6b_se_reshape/Shape", "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack_2"], "attr": {"shrink_axis_mask": {"i": "1"}, "begin_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "ellipsis_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "new_axis_mask": {"i": "0"}, "end_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block6b_se_reshape/strided_slice", "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/3"], "attr": {"N": {"i": "4"}, "T": {"type": "DT_INT32"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block6b_se_squeeze/Mean", "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6b_se_reshape/Reshape", "StatefulPartitionedCall/model/block6b_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6b_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6b_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6b_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block6b_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6b_se_reduce/mul_1", "StatefulPartitionedCall/model/block6b_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6b_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block6b_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6b_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6b_activation/mul_1", "StatefulPartitionedCall/model/block6b_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6b_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6b_se_excite/mul", "StatefulPartitionedCall/model/block6b_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6b_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "use_cudnn_on_gpu": {"b": true}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block6b_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block6b_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6a_project_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6b_add/add", "StatefulPartitionedCall/model/block6c_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6c_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block6c_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6c_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6c_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6c_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block6c_expand_activation/mul_1", "StatefulPartitionedCall/model/block6c_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block6c_dwconv/depthwise_bn_offset"], "attr": {"num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block6c_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6c_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6c_dwconv/depthwise", "StatefulPartitionedCall/model/block6c_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block6c_activation/mul_1", "StatefulPartitionedCall/model/block6c_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "T": {"type": "DT_FLOAT"}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block6c_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block6c_se_reshape/Shape", "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack_2"], "attr": {"Index": {"type": "DT_INT32"}, "end_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "begin_mask": {"i": "0"}, "ellipsis_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "T": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block6c_se_reshape/strided_slice", "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "T": {"type": "DT_INT32"}, "N": {"i": "4"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block6c_se_squeeze/Mean", "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6c_se_reshape/Reshape", "StatefulPartitionedCall/model/block6c_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6c_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6c_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6c_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block6c_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6c_se_reduce/mul_1", "StatefulPartitionedCall/model/block6c_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6c_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block6c_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6c_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6c_activation/mul_1", "StatefulPartitionedCall/model/block6c_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6c_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6c_se_excite/mul", "StatefulPartitionedCall/model/block6c_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6c_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block6c_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block6c_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6b_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6c_add/add", "StatefulPartitionedCall/model/block6d_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6d_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block6d_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6d_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6d_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6d_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block6d_expand_activation/mul_1", "StatefulPartitionedCall/model/block6d_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block6d_dwconv/depthwise_bn_offset"], "attr": {"num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block6d_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6d_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6d_dwconv/depthwise", "StatefulPartitionedCall/model/block6d_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block6d_activation/mul_1", "StatefulPartitionedCall/model/block6d_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block6d_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block6d_se_reshape/Shape", "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack_2"], "attr": {"Index": {"type": "DT_INT32"}, "new_axis_mask": {"i": "0"}, "end_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}, "ellipsis_mask": {"i": "0"}, "begin_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block6d_se_reshape/strided_slice", "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/3"], "attr": {"T": {"type": "DT_INT32"}, "N": {"i": "4"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block6d_se_squeeze/Mean", "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6d_se_reshape/Reshape", "StatefulPartitionedCall/model/block6d_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6d_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6d_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6d_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block6d_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6d_se_reduce/mul_1", "StatefulPartitionedCall/model/block6d_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6d_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}}}, {"name": "StatefulPartitionedCall/model/block6d_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6d_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6d_activation/mul_1", "StatefulPartitionedCall/model/block6d_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6d_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6d_se_excite/mul", "StatefulPartitionedCall/model/block6d_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6d_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/block6d_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block6d_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6c_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6d_add/add", "StatefulPartitionedCall/model/block6e_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6e_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/block6e_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6e_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6e_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6e_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block6e_expand_activation/mul_1", "StatefulPartitionedCall/model/block6e_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block6e_dwconv/depthwise_bn_offset"], "attr": {"explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block6e_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6e_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6e_dwconv/depthwise", "StatefulPartitionedCall/model/block6e_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block6e_activation/mul_1", "StatefulPartitionedCall/model/block6e_se_squeeze/Mean/reduction_indices"], "attr": {"keep_dims": {"b": false}, "T": {"type": "DT_FLOAT"}, "Tidx": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block6e_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block6e_se_reshape/Shape", "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack_2"], "attr": {"end_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}, "ellipsis_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "Index": {"type": "DT_INT32"}, "begin_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block6e_se_reshape/strided_slice", "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/3"], "attr": {"axis": {"i": "0"}, "N": {"i": "4"}, "T": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block6e_se_squeeze/Mean", "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6e_se_reshape/Reshape", "StatefulPartitionedCall/model/block6e_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6e_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6e_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6e_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block6e_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6e_se_reduce/mul_1", "StatefulPartitionedCall/model/block6e_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block6e_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"padding": {"s": "U0FNRQ=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block6e_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block6e_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block6e_activation/mul_1", "StatefulPartitionedCall/model/block6e_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block6e_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6e_se_excite/mul", "StatefulPartitionedCall/model/block6e_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block6e_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block6e_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block6e_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block6d_add/add"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block6e_add/add", "StatefulPartitionedCall/model/block7a_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block7a_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block7a_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block7a_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block7a_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block7a_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block7a_expand_activation/mul_1", "StatefulPartitionedCall/model/block7a_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block7a_dwconv/depthwise_bn_offset"], "attr": {"strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}}}, {"name": "StatefulPartitionedCall/model/block7a_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block7a_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block7a_dwconv/depthwise", "StatefulPartitionedCall/model/block7a_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block7a_activation/mul_1", "StatefulPartitionedCall/model/block7a_se_squeeze/Mean/reduction_indices"], "attr": {"Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block7a_se_squeeze/Mean"], "attr": {"out_type": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block7a_se_reshape/Shape", "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack_2"], "attr": {"Index": {"type": "DT_INT32"}, "end_mask": {"i": "0"}, "begin_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "ellipsis_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "shrink_axis_mask": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block7a_se_reshape/strided_slice", "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/3"], "attr": {"N": {"i": "4"}, "axis": {"i": "0"}, "T": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block7a_se_squeeze/Mean", "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape"], "attr": {"T": {"type": "DT_FLOAT"}, "Tshape": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block7a_se_reshape/Reshape", "StatefulPartitionedCall/model/block7a_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block7a_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "T": {"type": "DT_FLOAT"}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block7a_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block7a_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block7a_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block7a_se_reduce/mul_1", "StatefulPartitionedCall/model/block7a_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block7a_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block7a_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block7a_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block7a_activation/mul_1", "StatefulPartitionedCall/model/block7a_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7a_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block7a_se_excite/mul", "StatefulPartitionedCall/model/block7a_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block7a_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"explicit_paddings": {"list": {}}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "epsilon": {"f": 0.0}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}}}, {"name": "StatefulPartitionedCall/model/block7b_expand_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block7a_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block7b_expand_conv/Conv2D_weights", "StatefulPartitionedCall/model/block7b_expand_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "num_args": {"i": "1"}, "explicit_paddings": {"list": {}}}}, {"name": "StatefulPartitionedCall/model/block7b_expand_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block7b_expand_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_expand_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block7b_expand_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block7b_expand_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_dwconv/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["StatefulPartitionedCall/model/block7b_expand_activation/mul_1", "StatefulPartitionedCall/model/block7b_dwconv/depthwise_weights", "StatefulPartitionedCall/model/block7b_dwconv/depthwise_bn_offset"], "attr": {"num_args": {"i": "1"}, "explicit_paddings": {"list": {}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "padding": {"s": "U0FNRQ=="}, "data_format": {"s": "TkhXQw=="}}}, {"name": "StatefulPartitionedCall/model/block7b_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block7b_dwconv/depthwise"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block7b_dwconv/depthwise", "StatefulPartitionedCall/model/block7b_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_squeeze/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/block7b_activation/mul_1", "StatefulPartitionedCall/model/block7b_se_squeeze/Mean/reduction_indices"], "attr": {"Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Shape", "op": "Shape", "input": ["StatefulPartitionedCall/model/block7b_se_squeeze/Mean"], "attr": {"T": {"type": "DT_FLOAT"}, "out_type": {"type": "DT_INT32"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice", "op": "StridedSlice", "input": ["StatefulPartitionedCall/model/block7b_se_reshape/Shape", "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack", "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack_1", "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack_2"], "attr": {"begin_mask": {"i": "0"}, "new_axis_mask": {"i": "0"}, "T": {"type": "DT_INT32"}, "end_mask": {"i": "0"}, "Index": {"type": "DT_INT32"}, "shrink_axis_mask": {"i": "1"}, "ellipsis_mask": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape", "op": "Pack", "input": ["StatefulPartitionedCall/model/block7b_se_reshape/strided_slice", "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/1", "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/2", "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/3"], "attr": {"T": {"type": "DT_INT32"}, "N": {"i": "4"}, "axis": {"i": "0"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Reshape", "op": "Reshape", "input": ["StatefulPartitionedCall/model/block7b_se_squeeze/Mean", "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape"], "attr": {"Tshape": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reduce/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block7b_se_reshape/Reshape", "StatefulPartitionedCall/model/block7b_se_reduce/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block7b_se_reduce/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "use_cudnn_on_gpu": {"b": true}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "explicit_paddings": {"list": {}}, "num_args": {"i": "1"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reduce/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block7b_se_reduce/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_reduce/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/block7b_se_reduce/BiasAdd", "StatefulPartitionedCall/model/block7b_se_reduce/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_expand/BiasAdd", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block7b_se_reduce/mul_1", "StatefulPartitionedCall/model/block7b_se_expand/Conv2D/ReadVariableOp", "StatefulPartitionedCall/model/block7b_se_expand/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "num_args": {"i": "1"}, "data_format": {"s": "TkhXQw=="}, "explicit_paddings": {"list": {}}, "T": {"type": "DT_FLOAT"}, "use_cudnn_on_gpu": {"b": true}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}}}, {"name": "StatefulPartitionedCall/model/block7b_se_expand/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/block7b_se_expand/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_se_excite/mul", "op": "Mul", "input": ["StatefulPartitionedCall/model/block7b_activation/mul_1", "StatefulPartitionedCall/model/block7b_se_expand/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/block7b_project_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block7b_se_excite/mul", "StatefulPartitionedCall/model/block7b_project_conv/Conv2D_weights", "StatefulPartitionedCall/model/block7b_project_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"data_format": {"s": "TkhXQw=="}, "padding": {"s": "U0FNRQ=="}, "T": {"type": "DT_FLOAT"}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}}}, {"name": "StatefulPartitionedCall/model/block7b_add/add", "op": "AddV2", "input": ["StatefulPartitionedCall/model/block7b_project_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/block7a_project_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/top_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["StatefulPartitionedCall/model/block7b_add/add", "StatefulPartitionedCall/model/top_conv/Conv2D_weights", "StatefulPartitionedCall/model/top_conv/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}, "padding": {"s": "U0FNRQ=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "data_format": {"s": "TkhXQw=="}, "use_cudnn_on_gpu": {"b": true}}}, {"name": "StatefulPartitionedCall/model/top_activation/Sigmoid", "op": "Sigmoid", "input": ["StatefulPartitionedCall/model/top_bn/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/top_activation/mul_1", "op": "Mul", "input": ["StatefulPartitionedCall/model/top_bn/FusedBatchNormV3", "StatefulPartitionedCall/model/top_activation/Sigmoid"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/global_average_pooling2d/Mean", "op": "Mean", "input": ["StatefulPartitionedCall/model/top_activation/mul_1", "StatefulPartitionedCall/model/global_average_pooling2d/Mean/reduction_indices"], "attr": {"Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}, "keep_dims": {"b": false}}}, {"name": "StatefulPartitionedCall/model/dense/Relu", "op": "_FusedMatMul", "input": ["StatefulPartitionedCall/model/global_average_pooling2d/Mean", "StatefulPartitionedCall/model/dense/MatMul/ReadVariableOp", "StatefulPartitionedCall/model/dense/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "transpose_b": {"b": false}, "transpose_a": {"b": false}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdQ=="]}}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/dense_1/BiasAdd", "op": "_FusedMatMul", "input": ["StatefulPartitionedCall/model/dense/Relu", "StatefulPartitionedCall/model/dense_1/MatMul/ReadVariableOp", "StatefulPartitionedCall/model/dense_1/BiasAdd/ReadVariableOp"], "device": "/device:CPU:0", "attr": {"transpose_a": {"b": false}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "num_args": {"i": "1"}, "transpose_b": {"b": false}, "epsilon": {"f": 0.0}, "T": {"type": "DT_FLOAT"}}}, {"name": "StatefulPartitionedCall/model/dense_1/Softmax", "op": "Softmax", "input": ["StatefulPartitionedCall/model/dense_1/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "Identity", "op": "Identity", "input": ["StatefulPartitionedCall/model/dense_1/Softmax"], "attr": {"T": {"type": "DT_FLOAT"}}}], "library": {}, "versions": {"producer": 987}}, "weightsManifest": [{"paths": ["group1-shard1of7.bin", "group1-shard2of7.bin", "group1-shard3of7.bin", "group1-shard4of7.bin", "group1-shard5of7.bin", "group1-shard6of7.bin", "group1-shard7of7.bin"], "weights": [{"name": "StatefulPartitionedCall/model/block7b_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7b_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7b_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 1920, 80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_se_reduce/BiasAdd/ReadVariableOp", "shape": [80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 80, 1920], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_se_expand/BiasAdd/ReadVariableOp", "shape": [1920], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6e_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6e_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 1152, 48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_se_reduce/BiasAdd/ReadVariableOp", "shape": [48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 48, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_se_expand/BiasAdd/ReadVariableOp", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6d_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6d_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 1152, 48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_se_reduce/BiasAdd/ReadVariableOp", "shape": [48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 48, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_se_expand/BiasAdd/ReadVariableOp", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6c_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6c_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 1152, 48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_se_reduce/BiasAdd/ReadVariableOp", "shape": [48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 48, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_se_expand/BiasAdd/ReadVariableOp", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6b_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6b_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 1152, 48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_se_reduce/BiasAdd/ReadVariableOp", "shape": [48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 48, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_se_expand/BiasAdd/ReadVariableOp", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5d_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5d_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 672, 28], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_se_reduce/BiasAdd/ReadVariableOp", "shape": [28], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 28, 672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_se_expand/BiasAdd/ReadVariableOp", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5c_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5c_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 672, 28], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_se_reduce/BiasAdd/ReadVariableOp", "shape": [28], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 28, 672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_se_expand/BiasAdd/ReadVariableOp", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5b_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5b_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 672, 28], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_se_reduce/BiasAdd/ReadVariableOp", "shape": [28], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 28, 672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_se_expand/BiasAdd/ReadVariableOp", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4d_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4d_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 480, 20], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_se_reduce/BiasAdd/ReadVariableOp", "shape": [20], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 20, 480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_se_expand/BiasAdd/ReadVariableOp", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4c_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4c_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 480, 20], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_se_reduce/BiasAdd/ReadVariableOp", "shape": [20], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 20, 480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_se_expand/BiasAdd/ReadVariableOp", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4b_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4b_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 480, 20], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_se_reduce/BiasAdd/ReadVariableOp", "shape": [20], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 20, 480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_se_expand/BiasAdd/ReadVariableOp", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3c_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3c_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 240, 10], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_se_reduce/BiasAdd/ReadVariableOp", "shape": [10], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 10, 240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_se_expand/BiasAdd/ReadVariableOp", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3b_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3b_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 240, 10], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_se_reduce/BiasAdd/ReadVariableOp", "shape": [10], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 10, 240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_se_expand/BiasAdd/ReadVariableOp", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2c_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2c_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 144, 6], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_se_reduce/BiasAdd/ReadVariableOp", "shape": [6], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 6, 144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_se_expand/BiasAdd/ReadVariableOp", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2b_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2b_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 144, 6], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_se_reduce/BiasAdd/ReadVariableOp", "shape": [6], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 6, 144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_se_expand/BiasAdd/ReadVariableOp", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1b_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1b_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1b_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 16, 4], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1b_se_reduce/BiasAdd/ReadVariableOp", "shape": [4], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1b_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 4, 16], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1b_se_expand/BiasAdd/ReadVariableOp", "shape": [16], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/rescaling/Cast/x", "shape": [], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/rescaling/add", "shape": [1, 1, 1, 3], "dtype": "float32"}, {"name": "ConstantFolding/StatefulPartitionedCall/model/normalization/truediv_recip", "shape": [1, 1, 1, 3], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/stem_conv_pad/Pad/paddings", "shape": [4, 2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1a_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1a_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block1a_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 32, 8], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1a_se_reduce/BiasAdd/ReadVariableOp", "shape": [8], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1a_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 8, 32], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1a_se_expand/BiasAdd/ReadVariableOp", "shape": [32], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_dwconv_pad/Pad/paddings", "shape": [4, 2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2a_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2a_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block2a_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 96, 4], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_se_reduce/BiasAdd/ReadVariableOp", "shape": [4], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 4, 96], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_se_expand/BiasAdd/ReadVariableOp", "shape": [96], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_dwconv_pad/Pad/paddings", "shape": [4, 2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3a_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3a_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block3a_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 144, 6], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_se_reduce/BiasAdd/ReadVariableOp", "shape": [6], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 6, 144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_se_expand/BiasAdd/ReadVariableOp", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_dwconv_pad/Pad/paddings", "shape": [4, 2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4a_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4a_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block4a_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 240, 10], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_se_reduce/BiasAdd/ReadVariableOp", "shape": [10], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 10, 240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_se_expand/BiasAdd/ReadVariableOp", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5a_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block5a_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 480, 20], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_se_reduce/BiasAdd/ReadVariableOp", "shape": [20], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 20, 480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_se_expand/BiasAdd/ReadVariableOp", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_dwconv_pad/Pad/paddings", "shape": [4, 2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6a_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6a_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block6a_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 672, 28], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_se_reduce/BiasAdd/ReadVariableOp", "shape": [28], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 28, 672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_se_expand/BiasAdd/ReadVariableOp", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_se_squeeze/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack_1", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/strided_slice/stack_2", "shape": [1], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/1", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/2", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7a_se_reshape/Reshape/shape/3", "shape": [], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/block7a_se_reduce/Conv2D/ReadVariableOp", "shape": [1, 1, 1152, 48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_se_reduce/BiasAdd/ReadVariableOp", "shape": [48], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_se_expand/Conv2D/ReadVariableOp", "shape": [1, 1, 48, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_se_expand/BiasAdd/ReadVariableOp", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/global_average_pooling2d/Mean/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "StatefulPartitionedCall/model/dense/MatMul/ReadVariableOp", "shape": [1280, 512], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/dense/BiasAdd/ReadVariableOp", "shape": [512], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/dense_1/MatMul/ReadVariableOp", "shape": [512, 30], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/dense_1/BiasAdd/ReadVariableOp", "shape": [30], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/stem_conv/Conv2D_weights", "shape": [3, 3, 3, 32], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_dwconv/depthwise_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/stem_conv/Conv2D_bn_offset", "shape": [32], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1a_dwconv/depthwise_weights", "shape": [3, 3, 32, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1a_dwconv/depthwise_bn_offset", "shape": [32], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1a_project_conv/Conv2D_weights", "shape": [1, 1, 32, 16], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1a_project_conv/Conv2D_bn_offset", "shape": [16], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1b_dwconv/depthwise_weights", "shape": [3, 3, 16, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1b_dwconv/depthwise_bn_offset", "shape": [16], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1b_project_conv/Conv2D_weights", "shape": [1, 1, 16, 16], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block1b_project_conv/Conv2D_bn_offset", "shape": [16], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_expand_conv/Conv2D_weights", "shape": [1, 1, 16, 96], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_expand_conv/Conv2D_bn_offset", "shape": [96], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_dwconv/depthwise_weights", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_dwconv/depthwise_bn_offset", "shape": [96], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_project_conv/Conv2D_weights", "shape": [1, 1, 96, 24], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2a_project_conv/Conv2D_bn_offset", "shape": [24], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_expand_conv/Conv2D_weights", "shape": [1, 1, 24, 144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_expand_conv/Conv2D_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_dwconv/depthwise_weights", "shape": [3, 3, 144, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_dwconv/depthwise_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/top_conv/Conv2D_weights", "shape": [1, 1, 320, 1280], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_project_conv/Conv2D_weights", "shape": [1, 1, 144, 24], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2b_project_conv/Conv2D_bn_offset", "shape": [24], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_expand_conv/Conv2D_weights", "shape": [1, 1, 24, 144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_expand_conv/Conv2D_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_dwconv/depthwise_weights", "shape": [3, 3, 144, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_dwconv/depthwise_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_project_conv/Conv2D_weights", "shape": [1, 1, 1152, 192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_project_conv/Conv2D_weights", "shape": [1, 1, 144, 24], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block2c_project_conv/Conv2D_bn_offset", "shape": [24], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_expand_conv/Conv2D_weights", "shape": [1, 1, 24, 144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_project_conv/Conv2D_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_expand_conv/Conv2D_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_dwconv/depthwise_weights", "shape": [5, 5, 144, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_dwconv/depthwise_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_project_conv/Conv2D_weights", "shape": [1, 1, 144, 40], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_expand_conv/Conv2D_weights", "shape": [1, 1, 192, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3a_project_conv/Conv2D_bn_offset", "shape": [40], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_expand_conv/Conv2D_weights", "shape": [1, 1, 40, 240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/top_conv/Conv2D_bn_offset", "shape": [1280], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_expand_conv/Conv2D_bn_offset", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_dwconv/depthwise_weights", "shape": [5, 5, 240, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_dwconv/depthwise_bn_offset", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_expand_conv/Conv2D_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_project_conv/Conv2D_weights", "shape": [1, 1, 240, 40], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3b_project_conv/Conv2D_bn_offset", "shape": [40], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_expand_conv/Conv2D_weights", "shape": [1, 1, 40, 240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_expand_conv/Conv2D_bn_offset", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_dwconv/depthwise_weights", "shape": [5, 5, 240, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_dwconv/depthwise_bn_offset", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_dwconv/depthwise_weights", "shape": [3, 3, 1152, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_project_conv/Conv2D_weights", "shape": [1, 1, 240, 40], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_dwconv/depthwise_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block3c_project_conv/Conv2D_bn_offset", "shape": [40], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_expand_conv/Conv2D_weights", "shape": [1, 1, 40, 240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_expand_conv/Conv2D_bn_offset", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_dwconv/depthwise_weights", "shape": [3, 3, 240, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_dwconv/depthwise_bn_offset", "shape": [240], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_project_conv/Conv2D_weights", "shape": [1, 1, 240, 80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4a_project_conv/Conv2D_bn_offset", "shape": [80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_expand_conv/Conv2D_weights", "shape": [1, 1, 80, 480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_expand_conv/Conv2D_bn_offset", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_dwconv/depthwise_weights", "shape": [3, 3, 480, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_dwconv/depthwise_bn_offset", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_project_conv/Conv2D_weights", "shape": [1, 1, 480, 80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4b_project_conv/Conv2D_bn_offset", "shape": [80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_expand_conv/Conv2D_weights", "shape": [1, 1, 80, 480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_expand_conv/Conv2D_bn_offset", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_dwconv/depthwise_weights", "shape": [3, 3, 480, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_dwconv/depthwise_bn_offset", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_project_conv/Conv2D_weights", "shape": [1, 1, 480, 80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4c_project_conv/Conv2D_bn_offset", "shape": [80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_expand_conv/Conv2D_weights", "shape": [1, 1, 80, 480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_expand_conv/Conv2D_bn_offset", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_dwconv/depthwise_weights", "shape": [3, 3, 480, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_dwconv/depthwise_bn_offset", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_project_conv/Conv2D_weights", "shape": [1, 1, 480, 80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block4d_project_conv/Conv2D_bn_offset", "shape": [80], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_expand_conv/Conv2D_weights", "shape": [1, 1, 80, 480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_project_conv/Conv2D_weights", "shape": [1, 1, 1152, 320], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_expand_conv/Conv2D_bn_offset", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_dwconv/depthwise_weights", "shape": [5, 5, 480, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_dwconv/depthwise_bn_offset", "shape": [480], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7a_project_conv/Conv2D_bn_offset", "shape": [320], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_project_conv/Conv2D_weights", "shape": [1, 1, 480, 112], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5a_project_conv/Conv2D_bn_offset", "shape": [112], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_expand_conv/Conv2D_weights", "shape": [1, 1, 112, 672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_expand_conv/Conv2D_weights", "shape": [1, 1, 320, 1920], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_expand_conv/Conv2D_bn_offset", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_dwconv/depthwise_weights", "shape": [5, 5, 672, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_dwconv/depthwise_bn_offset", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_expand_conv/Conv2D_bn_offset", "shape": [1920], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_project_conv/Conv2D_weights", "shape": [1, 1, 672, 112], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5b_project_conv/Conv2D_bn_offset", "shape": [112], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_expand_conv/Conv2D_weights", "shape": [1, 1, 112, 672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_expand_conv/Conv2D_bn_offset", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_dwconv/depthwise_weights", "shape": [5, 5, 672, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_dwconv/depthwise_bn_offset", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_dwconv/depthwise_weights", "shape": [3, 3, 1920, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_project_conv/Conv2D_weights", "shape": [1, 1, 672, 112], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5c_project_conv/Conv2D_bn_offset", "shape": [112], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_expand_conv/Conv2D_weights", "shape": [1, 1, 112, 672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_dwconv/depthwise_bn_offset", "shape": [1920], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_expand_conv/Conv2D_bn_offset", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_dwconv/depthwise_weights", "shape": [5, 5, 672, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_dwconv/depthwise_bn_offset", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_project_conv/Conv2D_weights", "shape": [1, 1, 672, 112], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block5d_project_conv/Conv2D_bn_offset", "shape": [112], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_expand_conv/Conv2D_weights", "shape": [1, 1, 112, 672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_expand_conv/Conv2D_bn_offset", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_dwconv/depthwise_weights", "shape": [5, 5, 672, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_dwconv/depthwise_bn_offset", "shape": [672], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_project_conv/Conv2D_weights", "shape": [1, 1, 672, 192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6a_project_conv/Conv2D_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_expand_conv/Conv2D_weights", "shape": [1, 1, 192, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_expand_conv/Conv2D_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_dwconv/depthwise_weights", "shape": [5, 5, 1152, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_dwconv/depthwise_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_project_conv/Conv2D_weights", "shape": [1, 1, 1152, 192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6b_project_conv/Conv2D_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_expand_conv/Conv2D_weights", "shape": [1, 1, 192, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_expand_conv/Conv2D_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_dwconv/depthwise_weights", "shape": [5, 5, 1152, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_dwconv/depthwise_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_project_conv/Conv2D_weights", "shape": [1, 1, 1152, 192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6c_project_conv/Conv2D_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_expand_conv/Conv2D_weights", "shape": [1, 1, 192, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_expand_conv/Conv2D_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_dwconv/depthwise_weights", "shape": [5, 5, 1152, 1], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_dwconv/depthwise_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_project_conv/Conv2D_weights", "shape": [1, 1, 1920, 320], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_project_conv/Conv2D_weights", "shape": [1, 1, 1152, 192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block7b_project_conv/Conv2D_bn_offset", "shape": [320], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6d_project_conv/Conv2D_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_expand_conv/Conv2D_weights", "shape": [1, 1, 192, 1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_expand_conv/Conv2D_bn_offset", "shape": [1152], "dtype": "float32"}, {"name": "StatefulPartitionedCall/model/block6e_dwconv/depthwise_weights", "shape": [5, 5, 1152, 1], "dtype": "float32"}]}]} \ No newline at end of file diff --git a/web/apps/photos/public/models/imagescene/sceneMap.json b/web/apps/photos/public/models/imagescene/sceneMap.json new file mode 100644 index 000000000..3b7196b31 --- /dev/null +++ b/web/apps/photos/public/models/imagescene/sceneMap.json @@ -0,0 +1,32 @@ +{ + "0": "waterfall", + "1": "snow", + "2": "landscape", + "3": "underwater", + "4": "architecture", + "5": "sunset / sunrise", + "6": "blue sky", + "7": "cloudy sky", + "8": "greenery", + "9": "autumn leaves", + "10": "portrait", + "11": "flower", + "12": "night shot", + "13": "stage concert", + "14": "fireworks", + "15": "candle light", + "16": "neon lights", + "17": "indoor", + "18": "backlight", + "19": "text documents", + "20": "qr images", + "21": "group portrait", + "22": "computer screens", + "23": "kids", + "24": "dog", + "25": "cat", + "26": "macro", + "27": "food", + "28": "beach", + "29": "mountain" +} diff --git a/web/apps/photos/public/models/mobilefacenet/mobilefacenet.tflite b/web/apps/photos/public/models/mobilefacenet/mobilefacenet.tflite new file mode 100644 index 000000000..057b98506 Binary files /dev/null and b/web/apps/photos/public/models/mobilefacenet/mobilefacenet.tflite differ diff --git a/web/apps/photos/public/models/ssdmobilenet/group1-shard1of7 b/web/apps/photos/public/models/ssdmobilenet/group1-shard1of7 new file mode 100644 index 000000000..9e9bdd300 Binary files /dev/null and b/web/apps/photos/public/models/ssdmobilenet/group1-shard1of7 differ diff --git a/web/apps/photos/public/models/ssdmobilenet/group1-shard2of7 b/web/apps/photos/public/models/ssdmobilenet/group1-shard2of7 new file mode 100644 index 000000000..b3d4934f1 Binary files /dev/null and b/web/apps/photos/public/models/ssdmobilenet/group1-shard2of7 differ diff --git a/web/apps/photos/public/models/ssdmobilenet/group1-shard3of7 b/web/apps/photos/public/models/ssdmobilenet/group1-shard3of7 new file mode 100644 index 000000000..a02379aea Binary files /dev/null and b/web/apps/photos/public/models/ssdmobilenet/group1-shard3of7 differ diff --git a/web/apps/photos/public/models/ssdmobilenet/group1-shard4of7 b/web/apps/photos/public/models/ssdmobilenet/group1-shard4of7 new file mode 100644 index 000000000..12782b218 Binary files /dev/null and b/web/apps/photos/public/models/ssdmobilenet/group1-shard4of7 differ diff --git a/web/apps/photos/public/models/ssdmobilenet/group1-shard5of7 b/web/apps/photos/public/models/ssdmobilenet/group1-shard5of7 new file mode 100644 index 000000000..ee1acfdf4 Binary files /dev/null and b/web/apps/photos/public/models/ssdmobilenet/group1-shard5of7 differ diff --git a/web/apps/photos/public/models/ssdmobilenet/group1-shard6of7 b/web/apps/photos/public/models/ssdmobilenet/group1-shard6of7 new file mode 100644 index 000000000..4c9642203 Binary files /dev/null and b/web/apps/photos/public/models/ssdmobilenet/group1-shard6of7 differ diff --git a/web/apps/photos/public/models/ssdmobilenet/group1-shard7of7 b/web/apps/photos/public/models/ssdmobilenet/group1-shard7of7 new file mode 100644 index 000000000..54ca61b30 Binary files /dev/null and b/web/apps/photos/public/models/ssdmobilenet/group1-shard7of7 differ diff --git a/web/apps/photos/public/models/ssdmobilenet/model.json b/web/apps/photos/public/models/ssdmobilenet/model.json new file mode 100644 index 000000000..6bda49d09 --- /dev/null +++ b/web/apps/photos/public/models/ssdmobilenet/model.json @@ -0,0 +1,14584 @@ +{ + "modelTopology": { + "node": [ + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "ConstantFolding/Postprocessor/Decode/div_recip", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1083" + }, + { + "size": "2" + } + ] + } + } + } + }, + "name": "MultipleGridAnchorGenerator/Reshape", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/div_14", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_15", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 3 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "600" + }, + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_2", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/div_15", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_23", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "150" + }, + { + "size": "2" + } + ] + } + } + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_4", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/div_16", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_31", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "54" + }, + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_6", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/div_17", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_39", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "24" + }, + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_8", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/div_18", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_47", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + }, + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_10", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/div_19", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "6" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_55", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 2 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "strided_slice_6/stack_1", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 3 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "strided_slice_7/stack_1", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_1/shape", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_19/x", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/Reshape_1/shape", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [] + } + } + } + }, + "name": "ConstantFolding/Postprocessor/Decode/div_2_recip", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "12" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "12" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "1024" + }, + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "256" + }, + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_3/BoxEncodingPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "24" + } + ] + } + } + } + }, + "name": "BoxPredictor_3/BoxEncodingPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "256" + }, + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "24" + } + ] + } + } + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "128" + }, + { + "size": "24" + } + ] + } + } + } + }, + "name": "BoxPredictor_5/BoxEncodingPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_5/BoxEncodingPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 1917 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/assert_equal/x", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 4 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "BoxPredictor_0/stack/3", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 2 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/ExpandDims_1/dim", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "273" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/ClassPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "273" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/ClassPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 3 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 1083 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + } + }, + "name": "BoxPredictor_0/stack/1", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "1024" + }, + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/ClassPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "546" + } + ] + } + } + } + }, + "name": "BoxPredictor_1/ClassPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 3 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 600 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + } + }, + "name": "BoxPredictor_1/stack/1", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_2/ClassPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_2/ClassPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 150 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "BoxPredictor_2/stack/1", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "256" + }, + { + "size": "546" + } + ] + } + } + } + }, + "name": "BoxPredictor_3/ClassPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_3/ClassPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 54 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "BoxPredictor_3/stack/1", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "256" + }, + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_4/ClassPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_4/ClassPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 24 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "BoxPredictor_4/stack/1", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "128" + }, + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_5/ClassPredictor/weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_5/ClassPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "Preprocessor/mul/x", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 0 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Concatenate/concat/axis", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/strided_slice", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "32" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "32" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "32" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "32" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "32" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "32" + }, + { + "size": "64" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "64" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "64" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "64" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "64" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "64" + }, + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "128" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "128" + }, + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "128" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "128" + }, + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "256" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "256" + }, + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "256" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "256" + }, + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "512" + }, + { + "size": "1" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "512" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "512" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "512" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "512" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "512" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "512" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "512" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "512" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "1024" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1024" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "1024" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1024" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1024" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "1024" + }, + { + "size": "1024" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1024" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "1024" + }, + { + "size": "256" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "256" + }, + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "512" + }, + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "128" + }, + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "256" + }, + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "128" + }, + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "256" + }, + { + "size": "64" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "64" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "64" + }, + { + "size": "128" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 0 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/strided_slice/stack", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 3 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 1 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "1" + } + ] + } + } + } + }, + "name": "strided_slice_6/stack", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 6 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "BoxPredictor_5/stack/1", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 3 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 91 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + } + }, + "name": "BoxPredictor_0/stack_1/2", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 1 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/concat/axis", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/Slice/begin", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "3" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/Slice/size", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 4 + }, + "shape": { + "shape": { + "dim": [ + { + "size": "-1" + }, + { + "size": "-1" + }, + { + "size": "-1" + }, + { + "size": "3" + } + ] + } + } + }, + "name": "image_tensor", + "op": "Placeholder" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Concatenate/concat/axis" + ], + "attr": { + "parallel_iterations": { + "i": "32" + }, + "frame_name": { + "s": [ + 80, + 114, + 101, + 112, + 114, + 111, + 99, + 101, + 115, + 115, + 111, + 114, + 47, + 109, + 97, + 112, + 47, + 119, + 104, + 105, + 108, + 101, + 47, + 119, + 104, + 105, + 108, + 101, + 95, + 99, + 111, + 110, + 116, + 101, + 120, + 116 + ] + }, + "T": { + "type": 3 + }, + "is_constant": { + "b": false + } + }, + "name": "Preprocessor/map/while/Enter", + "op": "Enter" + }, + { + "input": [ + "image_tensor" + ], + "attr": { + "SrcT": { + "type": 4 + }, + "DstT": { + "type": 1 + } + }, + "name": "ToFloat", + "op": "Cast" + }, + { + "input": [ + "Preprocessor/map/while/Enter", + "Preprocessor/map/while/NextIteration" + ], + "attr": { + "T": { + "type": 3 + }, + "N": { + "i": "2" + } + }, + "name": "Preprocessor/map/while/Merge", + "op": "Merge" + }, + { + "input": [ + "ToFloat" + ], + "attr": { + "out_type": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/TensorArrayUnstack/Shape", + "op": "Shape" + }, + { + "input": [ + "Preprocessor/map/TensorArrayUnstack/Shape", + "Postprocessor/strided_slice/stack", + "strided_slice_6/stack", + "strided_slice_6/stack" + ], + "attr": { + "shrink_axis_mask": { + "i": "1" + }, + "begin_mask": { + "i": "0" + }, + "ellipsis_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + }, + "T": { + "type": 3 + }, + "Index": { + "type": 3 + } + }, + "name": "Preprocessor/map/TensorArrayUnstack/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "Preprocessor/map/TensorArrayUnstack/strided_slice" + ], + "attr": { + "tensor_array_name": { + "s": [] + }, + "dtype": { + "type": 1 + }, + "element_shape": { + "shape": { + "dim": [], + "unknownRank": true + } + }, + "dynamic_size": { + "b": false + }, + "clear_after_read": { + "b": true + }, + "identical_element_shapes": { + "b": true + } + }, + "name": "Preprocessor/map/TensorArray_1", + "op": "TensorArrayV3" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Concatenate/concat/axis", + "Preprocessor/map/TensorArrayUnstack/strided_slice", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "Tidx": { + "type": 3 + } + }, + "name": "Preprocessor/map/TensorArrayUnstack/range", + "op": "Range" + }, + { + "input": [ + "Preprocessor/map/TensorArrayUnstack/strided_slice" + ], + "attr": { + "identical_element_shapes": { + "b": true + }, + "tensor_array_name": { + "s": [] + }, + "dtype": { + "type": 1 + }, + "element_shape": { + "shape": { + "dim": [], + "unknownRank": true + } + }, + "clear_after_read": { + "b": true + }, + "dynamic_size": { + "b": false + } + }, + "name": "Preprocessor/map/TensorArray", + "op": "TensorArrayV3" + }, + { + "input": [ + "Preprocessor/map/TensorArrayUnstack/strided_slice" + ], + "attr": { + "T": { + "type": 3 + }, + "is_constant": { + "b": true + }, + "parallel_iterations": { + "i": "32" + }, + "frame_name": { + "s": [ + 80, + 114, + 101, + 112, + 114, + 111, + 99, + 101, + 115, + 115, + 111, + 114, + 47, + 109, + 97, + 112, + 47, + 119, + 104, + 105, + 108, + 101, + 47, + 119, + 104, + 105, + 108, + 101, + 95, + 99, + 111, + 110, + 116, + 101, + 120, + 116 + ] + } + }, + "name": "Preprocessor/map/while/Less/Enter", + "op": "Enter" + }, + { + "input": [ + "Preprocessor/map/TensorArray_1:1" + ], + "attr": { + "T": { + "type": 1 + }, + "is_constant": { + "b": false + }, + "parallel_iterations": { + "i": "32" + }, + "frame_name": { + "s": [ + 80, + 114, + 101, + 112, + 114, + 111, + 99, + 101, + 115, + 115, + 111, + 114, + 47, + 109, + 97, + 112, + 47, + 119, + 104, + 105, + 108, + 101, + 47, + 119, + 104, + 105, + 108, + 101, + 95, + 99, + 111, + 110, + 116, + 101, + 120, + 116 + ] + } + }, + "name": "Preprocessor/map/while/Enter_1", + "op": "Enter" + }, + { + "input": [ + "Preprocessor/map/TensorArray_1" + ], + "attr": { + "T": { + "type": 20 + }, + "is_constant": { + "b": true + }, + "parallel_iterations": { + "i": "32" + }, + "frame_name": { + "s": [ + 80, + 114, + 101, + 112, + 114, + 111, + 99, + 101, + 115, + 115, + 111, + 114, + 47, + 109, + 97, + 112, + 47, + 119, + 104, + 105, + 108, + 101, + 47, + 119, + 104, + 105, + 108, + 101, + 95, + 99, + 111, + 110, + 116, + 101, + 120, + 116 + ] + } + }, + "name": "Preprocessor/map/while/TensorArrayWrite/TensorArrayWriteV3/Enter", + "op": "Enter" + }, + { + "input": [ + "Preprocessor/map/TensorArray" + ], + "attr": { + "T": { + "type": 20 + }, + "is_constant": { + "b": true + }, + "parallel_iterations": { + "i": "32" + }, + "frame_name": { + "s": [ + 80, + 114, + 101, + 112, + 114, + 111, + 99, + 101, + 115, + 115, + 111, + 114, + 47, + 109, + 97, + 112, + 47, + 119, + 104, + 105, + 108, + 101, + 47, + 119, + 104, + 105, + 108, + 101, + 95, + 99, + 111, + 110, + 116, + 101, + 120, + 116 + ] + } + }, + "name": "Preprocessor/map/while/TensorArrayReadV3/Enter", + "op": "Enter" + }, + { + "input": [ + "Preprocessor/map/TensorArray", + "Preprocessor/map/TensorArrayUnstack/range", + "ToFloat", + "Preprocessor/map/TensorArray:1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3", + "op": "TensorArrayScatterV3" + }, + { + "input": [ + "Preprocessor/map/while/Merge", + "Preprocessor/map/while/Less/Enter" + ], + "attr": { + "T": { + "type": 3 + } + }, + "name": "Preprocessor/map/while/Less", + "op": "Less" + }, + { + "input": [ + "Preprocessor/map/while/Enter_1", + "Preprocessor/map/while/NextIteration_1" + ], + "attr": { + "N": { + "i": "2" + }, + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/Merge_1", + "op": "Merge" + }, + { + "input": [ + "Preprocessor/map/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3" + ], + "attr": { + "T": { + "type": 1 + }, + "is_constant": { + "b": true + }, + "parallel_iterations": { + "i": "32" + }, + "frame_name": { + "s": [ + 80, + 114, + 101, + 112, + 114, + 111, + 99, + 101, + 115, + 115, + 111, + 114, + 47, + 109, + 97, + 112, + 47, + 119, + 104, + 105, + 108, + 101, + 47, + 119, + 104, + 105, + 108, + 101, + 95, + 99, + 111, + 110, + 116, + 101, + 120, + 116 + ] + } + }, + "name": "Preprocessor/map/while/TensorArrayReadV3/Enter_1", + "op": "Enter" + }, + { + "input": [ + "Preprocessor/map/while/Less" + ], + "attr": {}, + "name": "Preprocessor/map/while/LoopCond", + "op": "LoopCond" + }, + { + "input": [ + "Preprocessor/map/while/Merge", + "Preprocessor/map/while/LoopCond" + ], + "attr": { + "T": { + "type": 3 + } + }, + "name": "Preprocessor/map/while/Switch", + "op": "Switch" + }, + { + "input": [ + "Preprocessor/map/while/Merge_1", + "Preprocessor/map/while/LoopCond" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/Switch_1", + "op": "Switch" + }, + { + "input": [ + "Preprocessor/map/while/Switch:1" + ], + "attr": { + "T": { + "type": 3 + } + }, + "name": "Preprocessor/map/while/Identity", + "op": "Identity" + }, + { + "input": [ + "Preprocessor/map/while/Switch_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/Exit_1", + "op": "Exit" + }, + { + "input": [ + "Preprocessor/map/while/TensorArrayReadV3/Enter", + "Preprocessor/map/while/Identity", + "Preprocessor/map/while/TensorArrayReadV3/Enter_1" + ], + "attr": { + "dtype": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/TensorArrayReadV3", + "op": "TensorArrayReadV3" + }, + { + "input": [ + "^Preprocessor/map/while/Identity" + ], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 0 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Preprocessor/map/while/ResizeImage/ExpandDims/dim", + "op": "Const" + }, + { + "input": [ + "^Preprocessor/map/while/Identity" + ], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Preprocessor/map/while/ResizeImage/size", + "op": "Const" + }, + { + "input": [ + "^Preprocessor/map/while/Identity" + ], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 1 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Preprocessor/map/while/add/y", + "op": "Const" + }, + { + "input": [ + "Preprocessor/map/TensorArray_1", + "Preprocessor/map/while/Exit_1" + ], + "attr": {}, + "name": "Preprocessor/map/TensorArrayStack/TensorArraySizeV3", + "op": "TensorArraySizeV3" + }, + { + "input": [ + "Preprocessor/map/while/TensorArrayReadV3", + "Preprocessor/map/while/ResizeImage/ExpandDims/dim" + ], + "attr": { + "Tdim": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/ResizeImage/ExpandDims", + "op": "ExpandDims" + }, + { + "input": [ + "Preprocessor/map/while/Identity", + "Preprocessor/map/while/add/y" + ], + "attr": { + "T": { + "type": 3 + } + }, + "name": "Preprocessor/map/while/add", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Concatenate/concat/axis", + "Preprocessor/map/TensorArrayStack/TensorArraySizeV3", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "Tidx": { + "type": 3 + } + }, + "name": "Preprocessor/map/TensorArrayStack/range", + "op": "Range" + }, + { + "input": [ + "Preprocessor/map/while/ResizeImage/ExpandDims", + "Preprocessor/map/while/ResizeImage/size" + ], + "attr": { + "align_corners": { + "b": false + }, + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/ResizeImage/ResizeBilinear", + "op": "ResizeBilinear" + }, + { + "input": [ + "Preprocessor/map/while/add" + ], + "attr": { + "T": { + "type": 3 + } + }, + "name": "Preprocessor/map/while/NextIteration", + "op": "NextIteration" + }, + { + "input": [ + "Preprocessor/map/TensorArray_1", + "Preprocessor/map/TensorArrayStack/range", + "Preprocessor/map/while/Exit_1" + ], + "attr": { + "dtype": { + "type": 1 + }, + "element_shape": { + "shape": { + "dim": [ + { + "size": "300" + }, + { + "size": "300" + }, + { + "size": "3" + } + ] + } + } + }, + "name": "Preprocessor/map/TensorArrayStack/TensorArrayGatherV3", + "op": "TensorArrayGatherV3" + }, + { + "input": [ + "Preprocessor/map/while/ResizeImage/ResizeBilinear" + ], + "attr": { + "squeeze_dims": { + "list": { + "s": [], + "i": [ + "0" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/ResizeImage/Squeeze", + "op": "Squeeze" + }, + { + "input": [ + "Preprocessor/mul/x", + "Preprocessor/map/TensorArrayStack/TensorArrayGatherV3" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Preprocessor/mul", + "op": "Mul" + }, + { + "input": [ + "Preprocessor/map/while/TensorArrayWrite/TensorArrayWriteV3/Enter", + "Preprocessor/map/while/Identity", + "Preprocessor/map/while/ResizeImage/Squeeze", + "Preprocessor/map/while/Switch_1:1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/TensorArrayWrite/TensorArrayWriteV3", + "op": "TensorArrayWriteV3" + }, + { + "input": [ + "Preprocessor/mul", + "MultipleGridAnchorGenerator/strided_slice" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Preprocessor/sub", + "op": "Sub" + }, + { + "input": [ + "Preprocessor/map/while/TensorArrayWrite/TensorArrayWriteV3" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/NextIteration_1", + "op": "NextIteration" + }, + { + "input": [ + "Preprocessor/sub" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "Shape_6", + "op": "Shape" + }, + { + "input": [ + "Preprocessor/sub", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D/merged_input" + ], + "attr": { + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "Shape_6", + "strided_slice_6/stack", + "strided_slice_6/stack_1", + "strided_slice_6/stack" + ], + "attr": { + "begin_mask": { + "i": "0" + }, + "ellipsis_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + }, + "T": { + "type": 3 + }, + "Index": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + } + }, + "name": "strided_slice_6", + "op": "StridedSlice" + }, + { + "input": [ + "Shape_6", + "strided_slice_6/stack_1", + "strided_slice_7/stack_1", + "strided_slice_6/stack" + ], + "attr": { + "shrink_axis_mask": { + "i": "1" + }, + "begin_mask": { + "i": "0" + }, + "ellipsis_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + }, + "Index": { + "type": 3 + }, + "T": { + "type": 3 + } + }, + "name": "strided_slice_7", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "strided_slice_6" + ], + "attr": { + "DstT": { + "type": 1 + }, + "SrcT": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/ToFloat", + "op": "Cast" + }, + { + "input": [ + "strided_slice_7" + ], + "attr": { + "DstT": { + "type": 1 + }, + "SrcT": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/ToFloat_1", + "op": "Cast" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Relu6", + "op": "Relu6" + }, + { + "input": [ + "MultipleGridAnchorGenerator/ToFloat", + "MultipleGridAnchorGenerator/ToFloat_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Minimum", + "op": "Minimum" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/depthwise_weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Minimum", + "MultipleGridAnchorGenerator/ToFloat" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/div_12", + "op": "RealDiv" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Minimum", + "MultipleGridAnchorGenerator/ToFloat_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/div_13", + "op": "RealDiv" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/div_14", + "MultipleGridAnchorGenerator/div_12" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_14", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/div_15", + "MultipleGridAnchorGenerator/div_12" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_22", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/div_16", + "MultipleGridAnchorGenerator/div_12" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_30", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/div_17", + "MultipleGridAnchorGenerator/div_12" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_38", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/div_18", + "MultipleGridAnchorGenerator/div_12" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_46", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/div_19", + "MultipleGridAnchorGenerator/div_12" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_54", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_15", + "MultipleGridAnchorGenerator/div_13" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_16", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_23", + "MultipleGridAnchorGenerator/div_13" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_24", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_31", + "MultipleGridAnchorGenerator/div_13" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_32", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_39", + "MultipleGridAnchorGenerator/div_13" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_40", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_47", + "MultipleGridAnchorGenerator/div_13" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_48", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_55", + "MultipleGridAnchorGenerator/div_13" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_56", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_14", + "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_2/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_22", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_5/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_30", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "Tshape": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_8/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_38", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_11/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_46", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_14/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_54", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_17/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_16", + "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_1/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_24", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_4/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_32", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_7/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_40", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_10/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_48", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_13/Reshape", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_56", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_16/Reshape", + "op": "Reshape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_2/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat" + ], + "attr": { + "Tmultiples": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_2/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_5/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat" + ], + "attr": { + "Tmultiples": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_5/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_8/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tmultiples": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_8/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_11/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat" + ], + "attr": { + "Tmultiples": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_11/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_14/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat" + ], + "attr": { + "Tmultiples": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_14/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_1/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tmultiples": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_1/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_4/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat" + ], + "attr": { + "Tmultiples": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_4/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_7/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat" + ], + "attr": { + "Tmultiples": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_7/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_10/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat" + ], + "attr": { + "Tmultiples": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_10/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_13/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat" + ], + "attr": { + "T": { + "type": 1 + }, + "Tmultiples": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Meshgrid_13/Tile", + "op": "Tile" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_17/Reshape", + "MultipleGridAnchorGenerator/Meshgrid_16/Reshape" + ], + "attr": { + "T": { + "type": 1 + }, + "axis": { + "i": "3" + }, + "N": { + "i": "2" + } + }, + "name": "MultipleGridAnchorGenerator/stack_11", + "op": "Pack" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D/merged_input" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_2/Tile", + "MultipleGridAnchorGenerator/Meshgrid_1/Tile" + ], + "attr": { + "T": { + "type": 1 + }, + "axis": { + "i": "3" + }, + "N": { + "i": "2" + } + }, + "name": "MultipleGridAnchorGenerator/stack_1", + "op": "Pack" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_5/Tile", + "MultipleGridAnchorGenerator/Meshgrid_4/Tile" + ], + "attr": { + "T": { + "type": 1 + }, + "axis": { + "i": "3" + }, + "N": { + "i": "2" + } + }, + "name": "MultipleGridAnchorGenerator/stack_3", + "op": "Pack" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_8/Tile", + "MultipleGridAnchorGenerator/Meshgrid_7/Tile" + ], + "attr": { + "T": { + "type": 1 + }, + "axis": { + "i": "3" + }, + "N": { + "i": "2" + } + }, + "name": "MultipleGridAnchorGenerator/stack_5", + "op": "Pack" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_11/Tile", + "MultipleGridAnchorGenerator/Meshgrid_10/Tile" + ], + "attr": { + "T": { + "type": 1 + }, + "axis": { + "i": "3" + }, + "N": { + "i": "2" + } + }, + "name": "MultipleGridAnchorGenerator/stack_7", + "op": "Pack" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Meshgrid_14/Tile", + "MultipleGridAnchorGenerator/Meshgrid_13/Tile" + ], + "attr": { + "T": { + "type": 1 + }, + "axis": { + "i": "3" + }, + "N": { + "i": "2" + } + }, + "name": "MultipleGridAnchorGenerator/stack_9", + "op": "Pack" + }, + { + "input": [ + "MultipleGridAnchorGenerator/stack_11", + "MultipleGridAnchorGenerator/Reshape_1/shape" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_11", + "op": "Reshape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/stack_1", + "MultipleGridAnchorGenerator/Reshape_1/shape" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_1", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/stack_3", + "MultipleGridAnchorGenerator/Reshape_1/shape" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_3", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/stack_5", + "MultipleGridAnchorGenerator/Reshape_1/shape" + ], + "attr": { + "Tshape": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_5", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/stack_7", + "MultipleGridAnchorGenerator/Reshape_1/shape" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_7", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/stack_9", + "MultipleGridAnchorGenerator/Reshape_1/shape" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Reshape_9", + "op": "Reshape" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_19/x", + "MultipleGridAnchorGenerator/Reshape_11" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_59", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_19/x", + "MultipleGridAnchorGenerator/Reshape_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_19", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_19/x", + "MultipleGridAnchorGenerator/Reshape_3" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_27", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_19/x", + "MultipleGridAnchorGenerator/Reshape_5" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_35", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_19/x", + "MultipleGridAnchorGenerator/Reshape_7" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_43", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/mul_19/x", + "MultipleGridAnchorGenerator/Reshape_9" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/mul_51", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_10", + "MultipleGridAnchorGenerator/mul_59" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/sub_5", + "op": "Sub" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_10", + "MultipleGridAnchorGenerator/mul_59" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/add_17", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/depthwise_weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape", + "MultipleGridAnchorGenerator/mul_19" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/sub", + "op": "Sub" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape", + "MultipleGridAnchorGenerator/mul_19" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/add_2", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_2", + "MultipleGridAnchorGenerator/mul_27" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/sub_1", + "op": "Sub" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_2", + "MultipleGridAnchorGenerator/mul_27" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/add_5", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_4", + "MultipleGridAnchorGenerator/mul_35" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/sub_2", + "op": "Sub" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_4", + "MultipleGridAnchorGenerator/mul_35" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/add_8", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_6", + "MultipleGridAnchorGenerator/mul_43" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/sub_3", + "op": "Sub" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_6", + "MultipleGridAnchorGenerator/mul_43" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/add_11", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_8", + "MultipleGridAnchorGenerator/mul_51" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/sub_4", + "op": "Sub" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Reshape_8", + "MultipleGridAnchorGenerator/mul_51" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/add_14", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/sub_5", + "MultipleGridAnchorGenerator/add_17", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "N": { + "i": "2" + }, + "Tidx": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/concat_5", + "op": "ConcatV2" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "MultipleGridAnchorGenerator/sub", + "MultipleGridAnchorGenerator/add_2", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "N": { + "i": "2" + }, + "Tidx": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/concat", + "op": "ConcatV2" + }, + { + "input": [ + "MultipleGridAnchorGenerator/sub_1", + "MultipleGridAnchorGenerator/add_5", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "Tidx": { + "type": 3 + }, + "T": { + "type": 1 + }, + "N": { + "i": "2" + } + }, + "name": "MultipleGridAnchorGenerator/concat_1", + "op": "ConcatV2" + }, + { + "input": [ + "MultipleGridAnchorGenerator/sub_2", + "MultipleGridAnchorGenerator/add_8", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "N": { + "i": "2" + }, + "Tidx": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/concat_2", + "op": "ConcatV2" + }, + { + "input": [ + "MultipleGridAnchorGenerator/sub_3", + "MultipleGridAnchorGenerator/add_11", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "N": { + "i": "2" + }, + "Tidx": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "MultipleGridAnchorGenerator/concat_3", + "op": "ConcatV2" + }, + { + "input": [ + "MultipleGridAnchorGenerator/sub_4", + "MultipleGridAnchorGenerator/add_14", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "Tidx": { + "type": 3 + }, + "T": { + "type": 1 + }, + "N": { + "i": "2" + } + }, + "name": "MultipleGridAnchorGenerator/concat_4", + "op": "ConcatV2" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "MultipleGridAnchorGenerator/concat", + "MultipleGridAnchorGenerator/concat_1", + "MultipleGridAnchorGenerator/concat_2", + "MultipleGridAnchorGenerator/concat_3", + "MultipleGridAnchorGenerator/concat_4", + "MultipleGridAnchorGenerator/concat_5", + "MultipleGridAnchorGenerator/Concatenate/concat/axis" + ], + "attr": { + "T": { + "type": 1 + }, + "N": { + "i": "6" + }, + "Tidx": { + "type": 3 + } + }, + "name": "MultipleGridAnchorGenerator/Concatenate/concat", + "op": "ConcatV2" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "MultipleGridAnchorGenerator/Concatenate/concat", + "MultipleGridAnchorGenerator/Concatenate/concat/axis" + ], + "attr": { + "Tdim": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "Postprocessor/ExpandDims", + "op": "ExpandDims" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D/merged_input" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/depthwise_weights" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D/merged_input" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/depthwise_weights" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D/merged_input" + ], + "attr": { + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/depthwise_weights" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D/merged_input" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/depthwise_weights" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D/merged_input" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/depthwise_weights" + ], + "attr": { + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D/merged_input" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/depthwise_weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D/merged_input" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/depthwise_weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D/merged_input" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/depthwise_weights" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D/merged_input" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/depthwise_weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D/merged_input" + ], + "attr": { + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6", + "BoxPredictor_0/BoxEncodingPredictor/weights" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6", + "BoxPredictor_0/ClassPredictor/weights" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "BoxPredictor_0/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_0/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/depthwise_weights" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "BoxPredictor_0/BoxEncodingPredictor/Conv2D", + "BoxPredictor_0/BoxEncodingPredictor/biases" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_0/ClassPredictor/Conv2D", + "BoxPredictor_0/ClassPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_0/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_0/Shape", + "Postprocessor/strided_slice/stack", + "strided_slice_6/stack", + "strided_slice_6/stack" + ], + "attr": { + "shrink_axis_mask": { + "i": "1" + }, + "begin_mask": { + "i": "0" + }, + "ellipsis_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + }, + "T": { + "type": 3 + }, + "Index": { + "type": 3 + } + }, + "name": "BoxPredictor_0/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "BoxPredictor_0/strided_slice", + "BoxPredictor_0/stack/1", + "MultipleGridAnchorGenerator/concat/axis", + "BoxPredictor_0/stack/3" + ], + "attr": { + "N": { + "i": "4" + }, + "T": { + "type": 3 + }, + "axis": { + "i": "0" + } + }, + "name": "BoxPredictor_0/stack", + "op": "Pack" + }, + { + "input": [ + "BoxPredictor_0/strided_slice", + "BoxPredictor_0/stack/1", + "BoxPredictor_0/stack_1/2" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "3" + } + }, + "name": "BoxPredictor_0/stack_1", + "op": "Pack" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_0/BoxEncodingPredictor/BiasAdd", + "BoxPredictor_0/stack" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_0/Reshape", + "op": "Reshape" + }, + { + "input": [ + "BoxPredictor_0/ClassPredictor/BiasAdd", + "BoxPredictor_0/stack_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_0/Reshape_1", + "op": "Reshape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D/merged_input" + ], + "attr": { + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/depthwise_weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/depthwise", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/Relu6", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D/merged_input" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6", + "BoxPredictor_1/BoxEncodingPredictor/weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6", + "BoxPredictor_1/ClassPredictor/weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_1/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6" + ], + "attr": { + "out_type": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_1/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D/merged_input" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_1/BoxEncodingPredictor/Conv2D", + "BoxPredictor_1/BoxEncodingPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_1/ClassPredictor/Conv2D", + "BoxPredictor_1/ClassPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_1/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_1/Shape", + "Postprocessor/strided_slice/stack", + "strided_slice_6/stack", + "strided_slice_6/stack" + ], + "attr": { + "Index": { + "type": 3 + }, + "T": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + }, + "begin_mask": { + "i": "0" + }, + "ellipsis_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + } + }, + "name": "BoxPredictor_1/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_1/strided_slice", + "BoxPredictor_1/stack/1", + "MultipleGridAnchorGenerator/concat/axis", + "BoxPredictor_0/stack/3" + ], + "attr": { + "N": { + "i": "4" + }, + "T": { + "type": 3 + }, + "axis": { + "i": "0" + } + }, + "name": "BoxPredictor_1/stack", + "op": "Pack" + }, + { + "input": [ + "BoxPredictor_1/strided_slice", + "BoxPredictor_1/stack/1", + "BoxPredictor_0/stack_1/2" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "3" + } + }, + "name": "BoxPredictor_1/stack_1", + "op": "Pack" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_1/BoxEncodingPredictor/BiasAdd", + "BoxPredictor_1/stack" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_1/Reshape", + "op": "Reshape" + }, + { + "input": [ + "BoxPredictor_1/ClassPredictor/BiasAdd", + "BoxPredictor_1/stack_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_1/Reshape_1", + "op": "Reshape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D/merged_input" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6", + "BoxPredictor_2/BoxEncodingPredictor/weights" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6", + "BoxPredictor_2/ClassPredictor/weights" + ], + "attr": { + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_2/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_2/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D/merged_input" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_2/BoxEncodingPredictor/Conv2D", + "BoxPredictor_2/BoxEncodingPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_2/ClassPredictor/Conv2D", + "BoxPredictor_2/ClassPredictor/biases" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_2/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_2/Shape", + "Postprocessor/strided_slice/stack", + "strided_slice_6/stack", + "strided_slice_6/stack" + ], + "attr": { + "T": { + "type": 3 + }, + "Index": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + }, + "begin_mask": { + "i": "0" + }, + "ellipsis_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + } + }, + "name": "BoxPredictor_2/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_2/strided_slice", + "BoxPredictor_2/stack/1", + "MultipleGridAnchorGenerator/concat/axis", + "BoxPredictor_0/stack/3" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "4" + } + }, + "name": "BoxPredictor_2/stack", + "op": "Pack" + }, + { + "input": [ + "BoxPredictor_2/strided_slice", + "BoxPredictor_2/stack/1", + "BoxPredictor_0/stack_1/2" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "3" + } + }, + "name": "BoxPredictor_2/stack_1", + "op": "Pack" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_2/BoxEncodingPredictor/BiasAdd", + "BoxPredictor_2/stack" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_2/Reshape", + "op": "Reshape" + }, + { + "input": [ + "BoxPredictor_2/ClassPredictor/BiasAdd", + "BoxPredictor_2/stack_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_2/Reshape_1", + "op": "Reshape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D/merged_input" + ], + "attr": { + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6", + "BoxPredictor_3/BoxEncodingPredictor/weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_3/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6", + "BoxPredictor_3/ClassPredictor/weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_3/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_3/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D/merged_input" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_3/BoxEncodingPredictor/Conv2D", + "BoxPredictor_3/BoxEncodingPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_3/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_3/ClassPredictor/Conv2D", + "BoxPredictor_3/ClassPredictor/biases" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_3/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_3/Shape", + "Postprocessor/strided_slice/stack", + "strided_slice_6/stack", + "strided_slice_6/stack" + ], + "attr": { + "ellipsis_mask": { + "i": "0" + }, + "begin_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + }, + "T": { + "type": 3 + }, + "Index": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + } + }, + "name": "BoxPredictor_3/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_3/strided_slice", + "BoxPredictor_3/stack/1", + "MultipleGridAnchorGenerator/concat/axis", + "BoxPredictor_0/stack/3" + ], + "attr": { + "axis": { + "i": "0" + }, + "N": { + "i": "4" + }, + "T": { + "type": 3 + } + }, + "name": "BoxPredictor_3/stack", + "op": "Pack" + }, + { + "input": [ + "BoxPredictor_3/strided_slice", + "BoxPredictor_3/stack/1", + "BoxPredictor_0/stack_1/2" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "3" + } + }, + "name": "BoxPredictor_3/stack_1", + "op": "Pack" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_3/BoxEncodingPredictor/BiasAdd", + "BoxPredictor_3/stack" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_3/Reshape", + "op": "Reshape" + }, + { + "input": [ + "BoxPredictor_3/ClassPredictor/BiasAdd", + "BoxPredictor_3/stack_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_3/Reshape_1", + "op": "Reshape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D/merged_input" + ], + "attr": { + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6", + "BoxPredictor_4/BoxEncodingPredictor/weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6", + "BoxPredictor_4/ClassPredictor/weights" + ], + "attr": { + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_4/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_4/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D/merged_input" + ], + "attr": { + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_4/BoxEncodingPredictor/Conv2D", + "BoxPredictor_4/BoxEncodingPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_4/ClassPredictor/Conv2D", + "BoxPredictor_4/ClassPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_4/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_4/Shape", + "Postprocessor/strided_slice/stack", + "strided_slice_6/stack", + "strided_slice_6/stack" + ], + "attr": { + "Index": { + "type": 3 + }, + "T": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + }, + "ellipsis_mask": { + "i": "0" + }, + "begin_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + } + }, + "name": "BoxPredictor_4/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_4/strided_slice", + "BoxPredictor_4/stack/1", + "MultipleGridAnchorGenerator/concat/axis", + "BoxPredictor_0/stack/3" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "4" + } + }, + "name": "BoxPredictor_4/stack", + "op": "Pack" + }, + { + "input": [ + "BoxPredictor_4/strided_slice", + "BoxPredictor_4/stack/1", + "BoxPredictor_0/stack_1/2" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "3" + } + }, + "name": "BoxPredictor_4/stack_1", + "op": "Pack" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_4/BoxEncodingPredictor/BiasAdd", + "BoxPredictor_4/stack" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_4/Reshape", + "op": "Reshape" + }, + { + "input": [ + "BoxPredictor_4/ClassPredictor/BiasAdd", + "BoxPredictor_4/stack_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_4/Reshape_1", + "op": "Reshape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Relu6", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D/merged_input" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6", + "BoxPredictor_5/BoxEncodingPredictor/weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_5/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6", + "BoxPredictor_5/ClassPredictor/weights" + ], + "attr": { + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_5/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6" + ], + "attr": { + "out_type": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_5/Shape", + "op": "Shape" + }, + { + "input": [ + "BoxPredictor_5/BoxEncodingPredictor/Conv2D", + "BoxPredictor_5/BoxEncodingPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_5/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_5/ClassPredictor/Conv2D", + "BoxPredictor_5/ClassPredictor/biases" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_5/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_5/Shape", + "Postprocessor/strided_slice/stack", + "strided_slice_6/stack", + "strided_slice_6/stack" + ], + "attr": { + "T": { + "type": 3 + }, + "Index": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + }, + "ellipsis_mask": { + "i": "0" + }, + "begin_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + } + }, + "name": "BoxPredictor_5/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "BoxPredictor_5/strided_slice", + "BoxPredictor_5/stack/1", + "MultipleGridAnchorGenerator/concat/axis", + "BoxPredictor_0/stack/3" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "4" + } + }, + "name": "BoxPredictor_5/stack", + "op": "Pack" + }, + { + "input": [ + "BoxPredictor_5/strided_slice", + "BoxPredictor_5/stack/1", + "BoxPredictor_0/stack_1/2" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "3" + } + }, + "name": "BoxPredictor_5/stack_1", + "op": "Pack" + }, + { + "input": [ + "BoxPredictor_5/BoxEncodingPredictor/BiasAdd", + "BoxPredictor_5/stack" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "BoxPredictor_5/Reshape", + "op": "Reshape" + }, + { + "input": [ + "BoxPredictor_5/ClassPredictor/BiasAdd", + "BoxPredictor_5/stack_1" + ], + "attr": { + "Tshape": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_5/Reshape_1", + "op": "Reshape" + }, + { + "input": [ + "BoxPredictor_0/Reshape", + "BoxPredictor_1/Reshape", + "BoxPredictor_2/Reshape", + "BoxPredictor_3/Reshape", + "BoxPredictor_4/Reshape", + "BoxPredictor_5/Reshape", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "Tidx": { + "type": 3 + }, + "T": { + "type": 1 + }, + "N": { + "i": "6" + } + }, + "name": "concat", + "op": "ConcatV2" + }, + { + "input": [ + "BoxPredictor_0/Reshape_1", + "BoxPredictor_1/Reshape_1", + "BoxPredictor_2/Reshape_1", + "BoxPredictor_3/Reshape_1", + "BoxPredictor_4/Reshape_1", + "BoxPredictor_5/Reshape_1", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "N": { + "i": "6" + }, + "Tidx": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "concat_1", + "op": "ConcatV2" + }, + { + "input": [ + "concat" + ], + "attr": { + "T": { + "type": 1 + }, + "squeeze_dims": { + "list": { + "s": [], + "i": [ + "2" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "Squeeze", + "op": "Squeeze" + }, + { + "input": [ + "concat_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/convert_scores", + "op": "Sigmoid" + }, + { + "input": [ + "Squeeze", + "Postprocessor/Reshape_1/shape" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "Postprocessor/Reshape_1", + "op": "Reshape" + }, + { + "input": [ + "Squeeze" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "Postprocessor/Shape", + "op": "Shape" + }, + { + "input": [ + "Postprocessor/convert_scores", + "Postprocessor/Slice/begin", + "Postprocessor/Slice/size" + ], + "attr": { + "Index": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Slice", + "op": "Slice" + }, + { + "input": [ + "^Postprocessor/Reshape_1" + ], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/Decode/transpose/sub_1", + "op": "Const" + }, + { + "input": [ + "Postprocessor/Shape", + "Postprocessor/strided_slice/stack", + "strided_slice_6/stack", + "strided_slice_6/stack" + ], + "attr": { + "T": { + "type": 3 + }, + "Index": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + }, + "ellipsis_mask": { + "i": "0" + }, + "begin_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + } + }, + "name": "Postprocessor/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "Postprocessor/Reshape_1", + "Postprocessor/Decode/transpose/sub_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tperm": { + "type": 3 + } + }, + "name": "Postprocessor/Decode/transpose", + "op": "Transpose" + }, + { + "input": [ + "Postprocessor/strided_slice", + "MultipleGridAnchorGenerator/concat/axis", + "MultipleGridAnchorGenerator/concat/axis" + ], + "attr": { + "axis": { + "i": "0" + }, + "N": { + "i": "3" + }, + "T": { + "type": 3 + } + }, + "name": "Postprocessor/Tile/multiples", + "op": "Pack" + }, + { + "input": [ + "Postprocessor/strided_slice", + "MultipleGridAnchorGenerator/assert_equal/x", + "BoxPredictor_0/stack/3" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "3" + } + }, + "name": "Postprocessor/stack", + "op": "Pack" + }, + { + "input": [ + "Postprocessor/Decode/transpose" + ], + "attr": { + "T": { + "type": 1 + }, + "num": { + "i": "4" + }, + "axis": { + "i": "0" + } + }, + "name": "Postprocessor/Decode/unstack", + "op": "Unpack" + }, + { + "input": [ + "Postprocessor/ExpandDims", + "Postprocessor/Tile/multiples" + ], + "attr": { + "Tmultiples": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Tile", + "op": "Tile" + }, + { + "input": [ + "Postprocessor/Decode/unstack", + "ConstantFolding/Postprocessor/Decode/div_recip" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/div", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/unstack:2", + "ConstantFolding/Postprocessor/Decode/div_2_recip" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/div_2", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/unstack:1", + "ConstantFolding/Postprocessor/Decode/div_recip" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/div_1", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/unstack:3", + "ConstantFolding/Postprocessor/Decode/div_2_recip" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/div_3", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Tile", + "Postprocessor/Reshape_1/shape" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "Postprocessor/Reshape", + "op": "Reshape" + }, + { + "input": [ + "Postprocessor/Decode/div_2" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/Exp_1", + "op": "Exp" + }, + { + "input": [ + "Postprocessor/Decode/div_3" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/Exp", + "op": "Exp" + }, + { + "input": [ + "^Postprocessor/Reshape" + ], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose/sub_1", + "op": "Const" + }, + { + "input": [ + "Postprocessor/Reshape", + "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose/sub_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tperm": { + "type": 3 + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose", + "op": "Transpose" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose" + ], + "attr": { + "T": { + "type": 1 + }, + "num": { + "i": "4" + }, + "axis": { + "i": "0" + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack", + "op": "Unpack" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack:2", + "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/sub_1", + "op": "Sub" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack:3", + "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack:1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/sub", + "op": "Sub" + }, + { + "input": [ + "Postprocessor/Decode/div", + "Postprocessor/Decode/get_center_coordinates_and_sizes/sub_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/mul_2", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/sub_1", + "MultipleGridAnchorGenerator/mul_19/x" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/div", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/div_1", + "Postprocessor/Decode/get_center_coordinates_and_sizes/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/mul_3", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/sub", + "MultipleGridAnchorGenerator/mul_19/x" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/div_1", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack", + "Postprocessor/Decode/get_center_coordinates_and_sizes/div" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/add", + "op": "Add" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/div", + "Postprocessor/Decode/Exp_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/div_4", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack:1", + "Postprocessor/Decode/get_center_coordinates_and_sizes/div_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/add_1", + "op": "Add" + }, + { + "input": [ + "Postprocessor/Decode/get_center_coordinates_and_sizes/div_1", + "Postprocessor/Decode/Exp" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/div_5", + "op": "Mul" + }, + { + "input": [ + "Postprocessor/Decode/mul_2", + "Postprocessor/Decode/get_center_coordinates_and_sizes/add" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/add", + "op": "Add" + }, + { + "input": [ + "Postprocessor/Decode/mul_3", + "Postprocessor/Decode/get_center_coordinates_and_sizes/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/add_1", + "op": "Add" + }, + { + "input": [ + "Postprocessor/Decode/add", + "Postprocessor/Decode/div_4" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/sub", + "op": "Sub" + }, + { + "input": [ + "Postprocessor/Decode/add", + "Postprocessor/Decode/div_4" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/add_2", + "op": "Add" + }, + { + "input": [ + "Postprocessor/Decode/add_1", + "Postprocessor/Decode/div_5" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/sub_1", + "op": "Sub" + }, + { + "input": [ + "Postprocessor/Decode/add_1", + "Postprocessor/Decode/div_5" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "Postprocessor/Decode/add_3", + "op": "Add" + }, + { + "input": [ + "Postprocessor/Decode/sub", + "Postprocessor/Decode/sub_1", + "Postprocessor/Decode/add_2", + "Postprocessor/Decode/add_3" + ], + "attr": { + "T": { + "type": 1 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "4" + } + }, + "name": "Postprocessor/Decode/stack", + "op": "Pack" + }, + { + "input": [ + "^Postprocessor/Decode/stack" + ], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "2" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/Decode/transpose_1/sub_1", + "op": "Const" + }, + { + "input": [ + "Postprocessor/Decode/stack", + "Postprocessor/Decode/transpose_1/sub_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tperm": { + "type": 3 + } + }, + "name": "Postprocessor/Decode/transpose_1", + "op": "Transpose" + }, + { + "input": [ + "Postprocessor/Decode/transpose_1", + "Postprocessor/stack" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "name": "Postprocessor/Reshape_2", + "op": "Reshape" + }, + { + "input": [ + "Postprocessor/Reshape_2", + "Postprocessor/ExpandDims_1/dim" + ], + "attr": { + "Tdim": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "Postprocessor/ExpandDims_1", + "op": "ExpandDims" + } + ], + "library": { + "function": [], + "gradient": [] + }, + "versions": { + "badConsumers": [] + } + }, + "weightsManifest": [ + { + "paths": [ + "group1-shard1of7", + "group1-shard2of7", + "group1-shard3of7", + "group1-shard4of7", + "group1-shard5of7", + "group1-shard6of7", + "group1-shard7of7" + ], + "weights": [ + { + "shape": [], + "dtype": "float32", + "name": "ConstantFolding/Postprocessor/Decode/div_recip" + }, + { + "shape": [ + 1083, + 2 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/Reshape" + }, + { + "shape": [ + 3 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/div_14" + }, + { + "shape": [ + 3 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/mul_15" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat" + }, + { + "shape": [ + 600, + 2 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/Reshape_2" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/div_15" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/mul_23" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat" + }, + { + "shape": [ + 150, + 2 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/Reshape_4" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/div_16" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/mul_31" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat" + }, + { + "shape": [ + 54, + 2 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/Reshape_6" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/div_17" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/mul_39" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat" + }, + { + "shape": [ + 24, + 2 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/Reshape_8" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/div_18" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/mul_47" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat" + }, + { + "shape": [ + 6, + 2 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/Reshape_10" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/div_19" + }, + { + "shape": [ + 6 + ], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/mul_55" + }, + { + "shape": [ + 1 + ], + "dtype": "int32", + "name": "strided_slice_6/stack_1" + }, + { + "shape": [ + 1 + ], + "dtype": "int32", + "name": "strided_slice_7/stack_1" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat" + }, + { + "shape": [ + 2 + ], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Reshape_1/shape" + }, + { + "shape": [], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/mul_19/x" + }, + { + "shape": [ + 2 + ], + "dtype": "int32", + "name": "Postprocessor/Reshape_1/shape" + }, + { + "shape": [], + "dtype": "float32", + "name": "ConstantFolding/Postprocessor/Decode/div_2_recip" + }, + { + "shape": [ + 1, + 1, + 512, + 12 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 12 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 1, + 1, + 1024, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 1, + 1, + 512, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 1, + 1, + 256, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 1, + 1, + 256, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 1, + 1, + 128, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_5/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_5/BoxEncodingPredictor/biases" + }, + { + "shape": [], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/assert_equal/x" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_0/stack/3" + }, + { + "shape": [], + "dtype": "int32", + "name": "Postprocessor/ExpandDims_1/dim" + }, + { + "shape": [ + 1, + 1, + 512, + 273 + ], + "dtype": "float32", + "name": "BoxPredictor_0/ClassPredictor/weights" + }, + { + "shape": [ + 273 + ], + "dtype": "float32", + "name": "BoxPredictor_0/ClassPredictor/biases" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_0/stack/1" + }, + { + "shape": [ + 1, + 1, + 1024, + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_1/ClassPredictor/weights" + }, + { + "shape": [ + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_1/ClassPredictor/biases" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_1/stack/1" + }, + { + "shape": [ + 1, + 1, + 512, + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_2/ClassPredictor/weights" + }, + { + "shape": [ + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_2/ClassPredictor/biases" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_2/stack/1" + }, + { + "shape": [ + 1, + 1, + 256, + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_3/ClassPredictor/weights" + }, + { + "shape": [ + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_3/ClassPredictor/biases" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_3/stack/1" + }, + { + "shape": [ + 1, + 1, + 256, + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_4/ClassPredictor/weights" + }, + { + "shape": [ + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_4/ClassPredictor/biases" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_4/stack/1" + }, + { + "shape": [ + 1, + 1, + 128, + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor/weights" + }, + { + "shape": [ + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor/biases" + }, + { + "shape": [], + "dtype": "float32", + "name": "Preprocessor/mul/x" + }, + { + "shape": [], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/Concatenate/concat/axis" + }, + { + "shape": [], + "dtype": "float32", + "name": "MultipleGridAnchorGenerator/strided_slice" + }, + { + "shape": [ + 3, + 3, + 3, + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D/merged_input" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 32, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/depthwise_weights" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 32, + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 64, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/depthwise_weights" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 64, + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 128, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/depthwise_weights" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 128, + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 128, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/depthwise_weights" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 128, + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 256, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/depthwise_weights" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 256, + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 256, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/depthwise_weights" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 256, + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 512, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/depthwise_weights" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 512, + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 512, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/depthwise_weights" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 512, + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 512, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/depthwise_weights" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 512, + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 512, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/depthwise_weights" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 512, + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 512, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/depthwise_weights" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 512, + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 512, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/depthwise_weights" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 512, + 1024 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 1024 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 1024, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/depthwise_weights" + }, + { + "shape": [ + 1024 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 1024 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 1024, + 1024 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D/merged_input" + }, + { + "shape": [ + 1024 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 1024, + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D/merged_input" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 256, + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D/merged_input" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 512, + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D/merged_input" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 128, + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D/merged_input" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 256, + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D/merged_input" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 128, + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D/merged_input" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 256, + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D/merged_input" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 64, + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D/merged_input" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1 + ], + "dtype": "int32", + "name": "Postprocessor/strided_slice/stack" + }, + { + "shape": [ + 1 + ], + "dtype": "int32", + "name": "strided_slice_6/stack" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_5/stack/1" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_0/stack_1/2" + }, + { + "shape": [], + "dtype": "int32", + "name": "MultipleGridAnchorGenerator/concat/axis" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "Postprocessor/Slice/begin" + }, + { + "shape": [ + 3 + ], + "dtype": "int32", + "name": "Postprocessor/Slice/size" + }, + { + "shape": [], + "dtype": "int32", + "name": "Preprocessor/map/while/ResizeImage/ExpandDims/dim" + }, + { + "shape": [ + 2 + ], + "dtype": "int32", + "name": "Preprocessor/map/while/ResizeImage/size" + }, + { + "shape": [], + "dtype": "int32", + "name": "Preprocessor/map/while/add/y" + }, + { + "shape": [ + 2 + ], + "dtype": "int32", + "name": "Postprocessor/Decode/transpose/sub_1" + }, + { + "shape": [ + 2 + ], + "dtype": "int32", + "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose/sub_1" + }, + { + "shape": [ + 2 + ], + "dtype": "int32", + "name": "Postprocessor/Decode/transpose_1/sub_1" + } + ] + } + ] +} \ No newline at end of file diff --git a/web/apps/photos/public/models/ssdmobilenet/weights_manifest.json b/web/apps/photos/public/models/ssdmobilenet/weights_manifest.json new file mode 100644 index 000000000..b28dd7eb1 --- /dev/null +++ b/web/apps/photos/public/models/ssdmobilenet/weights_manifest.json @@ -0,0 +1 @@ +[{"paths": ["group1-shard1of7", "group1-shard2of7", "group1-shard3of7", "group1-shard4of7", "group1-shard5of7", "group1-shard6of7", "group1-shard7of7"], "weights": [{"shape": [], "dtype": "float32", "name": "ConstantFolding/Postprocessor/Decode/div_recip"}, {"shape": [1083, 2], "dtype": "float32", "name": "MultipleGridAnchorGenerator/Reshape"}, {"shape": [3], "dtype": "float32", "name": "MultipleGridAnchorGenerator/div_14"}, {"shape": [3], "dtype": "float32", "name": "MultipleGridAnchorGenerator/mul_15"}, {"shape": [3], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat"}, {"shape": [3], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat"}, {"shape": [600, 2], "dtype": "float32", "name": "MultipleGridAnchorGenerator/Reshape_2"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/div_15"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/mul_23"}, {"shape": [3], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat"}, {"shape": [150, 2], "dtype": "float32", "name": "MultipleGridAnchorGenerator/Reshape_4"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/div_16"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/mul_31"}, {"shape": [3], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat"}, {"shape": [54, 2], "dtype": "float32", "name": "MultipleGridAnchorGenerator/Reshape_6"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/div_17"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/mul_39"}, {"shape": [3], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat"}, {"shape": [24, 2], "dtype": "float32", "name": "MultipleGridAnchorGenerator/Reshape_8"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/div_18"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/mul_47"}, {"shape": [3], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat"}, {"shape": [6, 2], "dtype": "float32", "name": "MultipleGridAnchorGenerator/Reshape_10"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/div_19"}, {"shape": [6], "dtype": "float32", "name": "MultipleGridAnchorGenerator/mul_55"}, {"shape": [1], "dtype": "int32", "name": "strided_slice_6/stack_1"}, {"shape": [1], "dtype": "int32", "name": "strided_slice_7/stack_1"}, {"shape": [3], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"}, {"shape": [2], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Reshape_1/shape"}, {"shape": [], "dtype": "float32", "name": "MultipleGridAnchorGenerator/mul_19/x"}, {"shape": [2], "dtype": "int32", "name": "Postprocessor/Reshape_1/shape"}, {"shape": [], "dtype": "float32", "name": "ConstantFolding/Postprocessor/Decode/div_2_recip"}, {"shape": [1, 1, 512, 12], "dtype": "float32", "name": "BoxPredictor_0/BoxEncodingPredictor/weights"}, {"shape": [12], "dtype": "float32", "name": "BoxPredictor_0/BoxEncodingPredictor/biases"}, {"shape": [1, 1, 1024, 24], "dtype": "float32", "name": "BoxPredictor_1/BoxEncodingPredictor/weights"}, {"shape": [24], "dtype": "float32", "name": "BoxPredictor_1/BoxEncodingPredictor/biases"}, {"shape": [1, 1, 512, 24], "dtype": "float32", "name": "BoxPredictor_2/BoxEncodingPredictor/weights"}, {"shape": [24], "dtype": "float32", "name": "BoxPredictor_2/BoxEncodingPredictor/biases"}, {"shape": [1, 1, 256, 24], "dtype": "float32", "name": "BoxPredictor_3/BoxEncodingPredictor/weights"}, {"shape": [24], "dtype": "float32", "name": "BoxPredictor_3/BoxEncodingPredictor/biases"}, {"shape": [1, 1, 256, 24], "dtype": "float32", "name": "BoxPredictor_4/BoxEncodingPredictor/weights"}, {"shape": [24], "dtype": "float32", "name": "BoxPredictor_4/BoxEncodingPredictor/biases"}, {"shape": [1, 1, 128, 24], "dtype": "float32", "name": "BoxPredictor_5/BoxEncodingPredictor/weights"}, {"shape": [24], "dtype": "float32", "name": "BoxPredictor_5/BoxEncodingPredictor/biases"}, {"shape": [], "dtype": "int32", "name": "MultipleGridAnchorGenerator/assert_equal/x"}, {"shape": [], "dtype": "int32", "name": "BoxPredictor_0/stack/3"}, {"shape": [], "dtype": "int32", "name": "Postprocessor/ExpandDims_1/dim"}, {"shape": [1, 1, 512, 273], "dtype": "float32", "name": "BoxPredictor_0/ClassPredictor/weights"}, {"shape": [273], "dtype": "float32", "name": "BoxPredictor_0/ClassPredictor/biases"}, {"shape": [], "dtype": "int32", "name": "BoxPredictor_0/stack/1"}, {"shape": [1, 1, 1024, 546], "dtype": "float32", "name": "BoxPredictor_1/ClassPredictor/weights"}, {"shape": [546], "dtype": "float32", "name": "BoxPredictor_1/ClassPredictor/biases"}, {"shape": [], "dtype": "int32", "name": "BoxPredictor_1/stack/1"}, {"shape": [1, 1, 512, 546], "dtype": "float32", "name": "BoxPredictor_2/ClassPredictor/weights"}, {"shape": [546], "dtype": "float32", "name": "BoxPredictor_2/ClassPredictor/biases"}, {"shape": [], "dtype": "int32", "name": "BoxPredictor_2/stack/1"}, {"shape": [1, 1, 256, 546], "dtype": "float32", "name": "BoxPredictor_3/ClassPredictor/weights"}, {"shape": [546], "dtype": "float32", "name": "BoxPredictor_3/ClassPredictor/biases"}, {"shape": [], "dtype": "int32", "name": "BoxPredictor_3/stack/1"}, {"shape": [1, 1, 256, 546], "dtype": "float32", "name": "BoxPredictor_4/ClassPredictor/weights"}, {"shape": [546], "dtype": "float32", "name": "BoxPredictor_4/ClassPredictor/biases"}, {"shape": [], "dtype": "int32", "name": "BoxPredictor_4/stack/1"}, {"shape": [1, 1, 128, 546], "dtype": "float32", "name": "BoxPredictor_5/ClassPredictor/weights"}, {"shape": [546], "dtype": "float32", "name": "BoxPredictor_5/ClassPredictor/biases"}, {"shape": [], "dtype": "float32", "name": "Preprocessor/mul/x"}, {"shape": [], "dtype": "int32", "name": "MultipleGridAnchorGenerator/Concatenate/concat/axis"}, {"shape": [], "dtype": "float32", "name": "MultipleGridAnchorGenerator/strided_slice"}, {"shape": [3, 3, 3, 32], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D/merged_input"}, {"shape": [32], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 32, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/depthwise_weights"}, {"shape": [32], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [32], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 32, 64], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D/merged_input"}, {"shape": [64], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 64, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/depthwise_weights"}, {"shape": [64], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [64], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 64, 128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D/merged_input"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 128, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/depthwise_weights"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 128, 128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D/merged_input"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 128, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/depthwise_weights"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 128, 256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D/merged_input"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 256, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/depthwise_weights"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 256, 256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D/merged_input"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 256, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/depthwise_weights"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 256, 512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D/merged_input"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 512, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/depthwise_weights"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 512, 512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D/merged_input"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 512, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/depthwise_weights"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 512, 512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D/merged_input"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 512, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/depthwise_weights"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 512, 512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D/merged_input"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 512, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/depthwise_weights"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 512, 512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D/merged_input"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 512, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/depthwise_weights"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 512, 512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D/merged_input"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 512, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/depthwise_weights"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 512, 1024], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D/merged_input"}, {"shape": [1024], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 1024, 1], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/depthwise_weights"}, {"shape": [1024], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul"}, {"shape": [1024], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 1024, 1024], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D/merged_input"}, {"shape": [1024], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 1024, 256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D/merged_input"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 256, 512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D/merged_input"}, {"shape": [512], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 512, 128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D/merged_input"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 128, 256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D/merged_input"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 256, 128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D/merged_input"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 128, 256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D/merged_input"}, {"shape": [256], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub"}, {"shape": [1, 1, 256, 64], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D/merged_input"}, {"shape": [64], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub"}, {"shape": [3, 3, 64, 128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D/merged_input"}, {"shape": [128], "dtype": "float32", "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub"}, {"shape": [1], "dtype": "int32", "name": "Postprocessor/strided_slice/stack"}, {"shape": [1], "dtype": "int32", "name": "strided_slice_6/stack"}, {"shape": [], "dtype": "int32", "name": "BoxPredictor_5/stack/1"}, {"shape": [], "dtype": "int32", "name": "BoxPredictor_0/stack_1/2"}, {"shape": [], "dtype": "int32", "name": "MultipleGridAnchorGenerator/concat/axis"}, {"shape": [3], "dtype": "int32", "name": "Postprocessor/Slice/begin"}, {"shape": [3], "dtype": "int32", "name": "Postprocessor/Slice/size"}, {"shape": [], "dtype": "int32", "name": "Preprocessor/map/while/ResizeImage/ExpandDims/dim"}, {"shape": [2], "dtype": "int32", "name": "Preprocessor/map/while/ResizeImage/size"}, {"shape": [], "dtype": "int32", "name": "Preprocessor/map/while/add/y"}, {"shape": [2], "dtype": "int32", "name": "Postprocessor/Decode/transpose/sub_1"}, {"shape": [2], "dtype": "int32", "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose/sub_1"}, {"shape": [2], "dtype": "int32", "name": "Postprocessor/Decode/transpose_1/sub_1"}]}] \ No newline at end of file diff --git a/web/apps/photos/public/offline.html b/web/apps/photos/public/offline.html new file mode 100644 index 000000000..dc8577af8 --- /dev/null +++ b/web/apps/photos/public/offline.html @@ -0,0 +1,59 @@ + + + + Ente Photos + + + + + +
+

seems like you are offline :(

+ please check your internet connection +
+ + diff --git a/web/apps/photos/public/robots.txt b/web/apps/photos/public/robots.txt new file mode 100644 index 000000000..5e1daca27 --- /dev/null +++ b/web/apps/photos/public/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +Allow: /.well-known/* +Disallow: \ No newline at end of file diff --git a/web/apps/photos/sentry.client.config.ts b/web/apps/photos/sentry.client.config.ts new file mode 100644 index 000000000..c43273663 --- /dev/null +++ b/web/apps/photos/sentry.client.config.ts @@ -0,0 +1,3 @@ +import { initSentry } from "@ente/shared/sentry/config/sentry.config.base"; + +initSentry("https://0f7214c7feb9b1dd2fed5db09b42fa1b@sentry.ente.io/5"); diff --git a/web/apps/photos/sentry.edge.config.ts b/web/apps/photos/sentry.edge.config.ts new file mode 100644 index 000000000..e69de29bb diff --git a/web/apps/photos/sentry.properties b/web/apps/photos/sentry.properties new file mode 100644 index 000000000..27c3a286f --- /dev/null +++ b/web/apps/photos/sentry.properties @@ -0,0 +1,6 @@ +# This file is used by the SentryWebpackPlugin to upload sourcemaps when the +# SENTRY_AUTH_TOKEN environment variable is defined. + +defaults.url = https://sentry.ente.io/ +defaults.org = ente +defaults.project = web-photos diff --git a/web/apps/photos/sentry.server.config.ts b/web/apps/photos/sentry.server.config.ts new file mode 100644 index 000000000..e69de29bb diff --git a/web/apps/photos/src/components/AddToCollectionBtn.tsx b/web/apps/photos/src/components/AddToCollectionBtn.tsx new file mode 100644 index 000000000..19409ce51 --- /dev/null +++ b/web/apps/photos/src/components/AddToCollectionBtn.tsx @@ -0,0 +1,40 @@ +import { styled } from "@mui/material"; + +const Wrapper = styled("button")` + border: none; + background-color: #51cd7c; + position: fixed; + z-index: 1; + bottom: 20px; + right: 100px; + width: 60px; + height: 60px; + border-radius: 50%; + color: #fff; +`; +export default function AddToCollectionBtn(props) { + return ( + + + + + + + ); +} + +AddToCollectionBtn.defaultProps = { + height: 24, + width: 24, + viewBox: "0 0 24 24", +}; diff --git a/web/apps/photos/src/components/AuthenticateUserModal.tsx b/web/apps/photos/src/components/AuthenticateUserModal.tsx new file mode 100644 index 000000000..7459982bc --- /dev/null +++ b/web/apps/photos/src/components/AuthenticateUserModal.tsx @@ -0,0 +1,86 @@ +import { useContext, useEffect, useState } from "react"; + +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import VerifyMasterPasswordForm, { + VerifyMasterPasswordFormProps, +} from "@ente/shared/components/VerifyMasterPasswordForm"; +import { logError } from "@ente/shared/sentry"; +import { getData, LS_KEYS } from "@ente/shared/storage/localStorage"; +import { KeyAttributes, User } from "@ente/shared/user/types"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +interface Iprops { + open: boolean; + onClose: () => void; + onAuthenticate: () => void; +} + +export default function AuthenticateUserModal({ + open, + onClose, + onAuthenticate, +}: Iprops) { + const { setDialogMessage } = useContext(AppContext); + const [user, setUser] = useState(); + const [keyAttributes, setKeyAttributes] = useState(); + + const somethingWentWrong = () => + setDialogMessage({ + title: t("ERROR"), + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + + useEffect(() => { + const main = async () => { + try { + const user = getData(LS_KEYS.USER); + if (!user) { + throw Error("User not found"); + } + setUser(user); + const keyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); + if ( + (!user?.token && !user?.encryptedToken) || + (keyAttributes && !keyAttributes.memLimit) + ) { + throw Error("User not logged in"); + } else if (!keyAttributes) { + throw Error("Key attributes not found"); + } else { + setKeyAttributes(keyAttributes); + } + } catch (e) { + logError(e, "AuthenticateUserModal initialization failed"); + onClose(); + somethingWentWrong(); + } + }; + main(); + }, []); + + const useMasterPassword: VerifyMasterPasswordFormProps["callback"] = + async () => { + onClose(); + onAuthenticate(); + }; + + return ( + + + + ); +} diff --git a/web/apps/photos/src/components/Badge.tsx b/web/apps/photos/src/components/Badge.tsx new file mode 100644 index 000000000..a3aca884a --- /dev/null +++ b/web/apps/photos/src/components/Badge.tsx @@ -0,0 +1,12 @@ +import { Box, styled } from "@mui/material"; +import { CSSProperties } from "@mui/material/styles/createTypography"; + +export const Badge = styled(Box)(({ theme }) => ({ + borderRadius: theme.shape.borderRadius, + padding: "2px 4px", + backgroundColor: theme.colors.black.muted, + backdropFilter: `blur(${theme.colors.blur.muted})`, + color: theme.colors.white.base, + textTransform: "uppercase", + ...(theme.typography.tiny as CSSProperties), +})); diff --git a/web/apps/photos/src/components/CaptionedText.tsx b/web/apps/photos/src/components/CaptionedText.tsx new file mode 100644 index 000000000..64d6c344d --- /dev/null +++ b/web/apps/photos/src/components/CaptionedText.tsx @@ -0,0 +1,44 @@ +import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; +import { ButtonProps, Typography } from "@mui/material"; + +interface Iprops { + mainText: string; + subText?: string; + subIcon?: React.ReactNode; + color?: ButtonProps["color"]; +} + +const getSubTextColor = (color: ButtonProps["color"]) => { + switch (color) { + case "critical": + return "critical.main"; + default: + return "text.faint"; + } +}; + +export const CaptionedText = (props: Iprops) => { + return ( + + {props.mainText} + + {"•"} + + {props.subText ? ( + + {props.subText} + + ) : ( + + {props.subIcon} + + )} + + ); +}; diff --git a/web/apps/photos/src/components/CheckboxInput.tsx b/web/apps/photos/src/components/CheckboxInput.tsx new file mode 100644 index 000000000..7cdc95e3a --- /dev/null +++ b/web/apps/photos/src/components/CheckboxInput.tsx @@ -0,0 +1,43 @@ +import { + Checkbox, + FormControlLabel, + FormGroup, + Typography, + TypographyProps, +} from "@mui/material"; + +interface Iprops { + disabled?: boolean; + checked: boolean; + onChange: (value: boolean) => void; + label: string; + labelProps?: TypographyProps; +} +export function CheckboxInput({ + disabled, + checked, + onChange, + label, + labelProps, +}: Iprops) { + return ( + + onChange(e.target.checked)} + color="accent" + /> + } + label={ + + {label} + + } + /> + + ); +} diff --git a/web/apps/photos/src/components/Chip.tsx b/web/apps/photos/src/components/Chip.tsx new file mode 100644 index 000000000..0336dc9c3 --- /dev/null +++ b/web/apps/photos/src/components/Chip.tsx @@ -0,0 +1,9 @@ +import { Button, ButtonProps, styled } from "@mui/material"; +import { CSSProperties } from "@mui/material/styles/createTypography"; + +export const Chip = styled((props: ButtonProps) => ( + + )} + + + + + + )} + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx new file mode 100644 index 000000000..a032a9069 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageEmailShare.tsx @@ -0,0 +1,225 @@ +import Add from "@mui/icons-material/Add"; +import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; +import ChevronRightIcon from "@mui/icons-material/ChevronRight"; +import ModeEditIcon from "@mui/icons-material/ModeEdit"; +import Photo from "@mui/icons-material/Photo"; +import { DialogProps, Stack } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import MenuSectionTitle from "components/Menu/MenuSectionTitle"; +import Titlebar from "components/Titlebar"; +import Avatar from "components/pages/gallery/Avatar"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { GalleryContext } from "pages/gallery"; +import { useContext, useRef, useState } from "react"; +import { unshareCollection } from "services/collectionService"; +import { COLLECTION_ROLE, Collection, CollectionUser } from "types/collection"; +import AddParticipant from "./AddParticipant"; +import ManageParticipant from "./ManageParticipant"; + +interface Iprops { + collection: Collection; + open: boolean; + onClose: () => void; + onRootClose: () => void; + peopleCount: number; +} + +export default function ManageEmailShare({ + open, + collection, + onClose, + onRootClose, + peopleCount, +}: Iprops) { + const appContext = useContext(AppContext); + const galleryContext = useContext(GalleryContext); + + const [addParticipantView, setAddParticipantView] = useState(false); + const [manageParticipantView, setManageParticipantView] = useState(false); + + const closeAddParticipant = () => setAddParticipantView(false); + const openAddParticipant = () => setAddParticipantView(true); + + const participantType = useRef< + COLLECTION_ROLE.COLLABORATOR | COLLECTION_ROLE.VIEWER + >(); + + const selectedParticipant = useRef(); + + const openAddCollab = () => { + participantType.current = COLLECTION_ROLE.COLLABORATOR; + openAddParticipant(); + }; + + const openAddViewer = () => { + participantType.current = COLLECTION_ROLE.VIEWER; + openAddParticipant(); + }; + + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + onClose(); + } + }; + + const collectionUnshare = async (email: string) => { + try { + appContext.startLoading(); + await unshareCollection(collection, email); + await galleryContext.syncWithRemote(false, true); + } finally { + appContext.finishLoading(); + } + }; + + const ownerEmail = + galleryContext.user.id === collection.owner?.id + ? galleryContext.user.email + : collection.owner?.email; + + const isOwner = galleryContext.user.id === collection.owner?.id; + + const collaborators = collection.sharees + ?.filter((sharee) => sharee.role === COLLECTION_ROLE.COLLABORATOR) + .map((sharee) => sharee.email); + + const viewers = + collection.sharees + ?.filter((sharee) => sharee.role === COLLECTION_ROLE.VIEWER) + .map((sharee) => sharee.email) || []; + + const openManageParticipant = (email) => { + selectedParticipant.current = collection.sharees.find( + (sharee) => sharee.email === email, + ); + setManageParticipantView(true); + }; + const closeManageParticipant = () => { + setManageParticipantView(false); + }; + + return ( + <> + + + + + + } + /> + + {}} + label={isOwner ? t("YOU") : ownerEmail} + startIcon={} + /> + + + + } + /> + + {collaborators.map((item) => ( + <> + + openManageParticipant(item) + } + label={item} + startIcon={} + endIcon={} + /> + + + ))} + + } + onClick={openAddCollab} + label={ + collaborators?.length + ? t("ADD_MORE") + : t("ADD_COLLABORATORS") + } + /> + + + + } + /> + + {viewers.map((item) => ( + <> + + openManageParticipant(item) + } + label={item} + startIcon={} + endIcon={} + /> + + + + ))} + } + fontWeight={"bold"} + onClick={openAddViewer} + label={ + viewers?.length + ? t("ADD_MORE") + : t("ADD_VIEWERS") + } + /> + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx new file mode 100644 index 000000000..e47edd591 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/ManageParticipant.tsx @@ -0,0 +1,212 @@ +import { logError } from "@ente/shared/sentry"; +import BlockIcon from "@mui/icons-material/Block"; +import DoneIcon from "@mui/icons-material/Done"; +import ModeEditIcon from "@mui/icons-material/ModeEdit"; +import PhotoIcon from "@mui/icons-material/Photo"; +import { DialogProps, Stack, Typography } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { GalleryContext } from "pages/gallery"; +import { useContext } from "react"; +import { Trans } from "react-i18next"; +import { shareCollection } from "services/collectionService"; +import { Collection, CollectionUser } from "types/collection"; +import { handleSharingErrors } from "utils/error/ui"; + +interface Iprops { + open: boolean; + collection: Collection; + onClose: () => void; + onRootClose: () => void; + selectedParticipant: CollectionUser; + collectionUnshare: (email: string) => Promise; +} + +export default function ManageParticipant({ + collection, + open, + onClose, + onRootClose, + selectedParticipant, + collectionUnshare, +}: Iprops) { + const galleryContext = useContext(GalleryContext); + const appContext = useContext(AppContext); + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + onRootClose(); + } else { + onClose(); + } + }; + + const handleClick = () => { + collectionUnshare(selectedParticipant.email); + onClose(); + }; + + const handleRoleChange = (role: string) => () => { + if (role !== selectedParticipant.role) { + changeRolePermission(selectedParticipant.email, role); + } + }; + + const updateCollectionRole = async (selectedEmail, newRole) => { + try { + await shareCollection(collection, selectedEmail, newRole); + selectedParticipant.role = newRole; + await galleryContext.syncWithRemote(false, true); + } catch (e) { + const errorMessage = handleSharingErrors(e); + logError(e, errorMessage); + } + }; + + const changeRolePermission = (selectedEmail, newRole) => { + let contentText; + let buttonText; + + if (newRole === "VIEWER") { + contentText = ( + + ); + + buttonText = t("CONVERT_TO_VIEWER"); + } else if (newRole === "COLLABORATOR") { + contentText = t(`CHANGE_PERMISSIONS_TO_COLLABORATOR`, { + selectedEmail: selectedEmail, + }); + buttonText = t("CONVERT_TO_COLLABORATOR"); + } + + appContext.setDialogMessage({ + title: t("CHANGE_PERMISSION"), + content: contentText, + close: { text: t("CANCEL") }, + proceed: { + text: buttonText, + action: () => { + updateCollectionRole(selectedEmail, newRole); + }, + variant: "critical", + }, + }); + }; + + const removeParticipant = () => { + appContext.setDialogMessage({ + title: t("REMOVE_PARTICIPANT"), + content: ( + + ), + close: { text: t("CANCEL") }, + proceed: { + text: t("CONFIRM_REMOVE"), + action: () => { + handleClick(); + }, + variant: "critical", + }, + }); + }; + + if (!selectedParticipant) { + return <>; + } + + return ( + <> + + + + + + + + {t("ADDED_AS")} + + + + } + endIcon={ + selectedParticipant.role === + "COLLABORATOR" && + } + /> + + + } + endIcon={ + selectedParticipant.role === + "VIEWER" && + } + /> + + + + {t("COLLABORATOR_RIGHTS")} + + + + + {t("REMOVE_PARTICIPANT_HEAD")} + + + + } + /> + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx new file mode 100644 index 000000000..203e7c1f3 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/emailShare/index.tsx @@ -0,0 +1,104 @@ +import { useRef, useState } from "react"; +import { COLLECTION_ROLE, Collection } from "types/collection"; + +import AddIcon from "@mui/icons-material/Add"; +import ChevronRight from "@mui/icons-material/ChevronRight"; +import Workspaces from "@mui/icons-material/Workspaces"; +import { Stack } from "@mui/material"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import MenuSectionTitle from "components/Menu/MenuSectionTitle"; +import AvatarGroup from "components/pages/gallery/AvatarGroup"; +import { t } from "i18next"; +import AddParticipant from "./AddParticipant"; +import ManageEmailShare from "./ManageEmailShare"; + +export default function EmailShare({ + collection, + onRootClose, +}: { + collection: Collection; + onRootClose: () => void; +}) { + const [addParticipantView, setAddParticipantView] = useState(false); + const [manageEmailShareView, setManageEmailShareView] = useState(false); + + const closeAddParticipant = () => setAddParticipantView(false); + const openAddParticipant = () => setAddParticipantView(true); + + const closeManageEmailShare = () => setManageEmailShareView(false); + const openManageEmailShare = () => setManageEmailShareView(true); + + const participantType = useRef< + COLLECTION_ROLE.COLLABORATOR | COLLECTION_ROLE.VIEWER + >(); + + const openAddCollab = () => { + participantType.current = COLLECTION_ROLE.COLLABORATOR; + openAddParticipant(); + }; + + const openAddViewer = () => { + participantType.current = COLLECTION_ROLE.VIEWER; + openAddParticipant(); + }; + + return ( + <> + + } + /> + + {collection.sharees.length > 0 ? ( + <> + + } + onClick={openManageEmailShare} + label={ + collection.sharees.length === 1 + ? t(collection.sharees[0]?.email) + : null + } + endIcon={} + /> + + + ) : null} + } + onClick={openAddViewer} + label={t("ADD_VIEWERS")} + /> + + } + onClick={openAddCollab} + label={t("ADD_COLLABORATORS")} + /> + + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/index.tsx new file mode 100644 index 000000000..22de9b55e --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/index.tsx @@ -0,0 +1,82 @@ +import { DialogProps, Stack } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import Titlebar from "components/Titlebar"; +import { CollectionSummaryType } from "constants/collection"; +import { t } from "i18next"; +import { Collection, CollectionSummary } from "types/collection"; +import EmailShare from "./emailShare"; +import PublicShare from "./publicShare"; +import SharingDetails from "./sharingDetails"; + +interface Props { + open: boolean; + onClose: () => void; + collection: Collection; + collectionSummary: CollectionSummary; +} + +function CollectionShare({ collectionSummary, ...props }: Props) { + const handleRootClose = () => { + props.onClose(); + }; + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + props.onClose(); + } + }; + if (!props.collection || !collectionSummary) { + return <>; + } + const { type } = collectionSummary; + + return ( + + + + + {type === CollectionSummaryType.incomingShareCollaborator || + type === CollectionSummaryType.incomingShareViewer ? ( + + ) : ( + <> + + + + )} + + + + ); +} +export default CollectionShare; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx new file mode 100644 index 000000000..5d148769b --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/EnablePublicShareOptions.tsx @@ -0,0 +1,101 @@ +import DownloadSharp from "@mui/icons-material/DownloadSharp"; +import LinkIcon from "@mui/icons-material/Link"; +import PublicIcon from "@mui/icons-material/Public"; +import { Stack, Typography } from "@mui/material"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import MenuSectionTitle from "components/Menu/MenuSectionTitle"; +import { t } from "i18next"; +import { GalleryContext } from "pages/gallery"; +import { useContext, useState } from "react"; +import { + createShareableURL, + updateShareableURL, +} from "services/collectionService"; +import { Collection, PublicURL } from "types/collection"; +import { handleSharingErrors } from "utils/error/ui"; +interface Iprops { + collection: Collection; + setPublicShareProp: (value: PublicURL) => void; + setCopyLinkModalView: (value: boolean) => void; +} + +export default function EnablePublicShareOptions({ + collection, + setPublicShareProp, + setCopyLinkModalView, +}: Iprops) { + const galleryContext = useContext(GalleryContext); + const [sharableLinkError, setSharableLinkError] = useState(null); + + const createSharableURLHelper = async () => { + try { + setSharableLinkError(null); + galleryContext.setBlockingLoad(true); + const publicURL = await createShareableURL(collection); + setPublicShareProp(publicURL); + setCopyLinkModalView(true); + galleryContext.syncWithRemote(false, true); + } catch (e) { + const errorMessage = handleSharingErrors(e); + setSharableLinkError(errorMessage); + } finally { + galleryContext.setBlockingLoad(false); + } + }; + + const createCollectPhotoShareableURLHelper = async () => { + try { + setSharableLinkError(null); + galleryContext.setBlockingLoad(true); + const publicURL = await createShareableURL(collection); + await updateShareableURL({ + collectionID: collection.id, + enableCollect: true, + }); + setPublicShareProp(publicURL); + setCopyLinkModalView(true); + galleryContext.syncWithRemote(false, true); + } catch (e) { + const errorMessage = handleSharingErrors(e); + setSharableLinkError(errorMessage); + } finally { + galleryContext.setBlockingLoad(false); + } + }; + + return ( + + } + /> + + } + onClick={createSharableURLHelper} + /> + + } + onClick={createCollectPhotoShareableURLHelper} + /> + + {sharableLinkError && ( + theme.colors.danger.A700, + mt: 0.5, + }} + > + {sharableLinkError} + + )} + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/copyLinkModal.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/copyLinkModal.tsx new file mode 100644 index 000000000..1a7067cdb --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/copyLinkModal.tsx @@ -0,0 +1,60 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import DialogBoxBase from "@ente/shared/components/DialogBox/base"; +import Check from "@mui/icons-material/Check"; +import { + Box, + Button, + DialogActions, + DialogContent, + Typography, +} from "@mui/material"; +import { t } from "i18next"; +interface Iprops { + open: boolean; + onClose: () => void; + handleCancel: () => void; + copyToClipboardHelper: () => void; +} +export default function CopyLinkModal({ + open, + onClose, + handleCancel, + copyToClipboardHelper, +}: Iprops) { + return ( + + + + + {t("PUBLIC_LINK_CREATED")} + + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/index.tsx new file mode 100644 index 000000000..e71f482cf --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/index.tsx @@ -0,0 +1,71 @@ +import { useEffect, useState } from "react"; +import { Collection, PublicURL } from "types/collection"; +import { appendCollectionKeyToShareURL } from "utils/collection"; +import EnablePublicShareOptions from "./EnablePublicShareOptions"; +import CopyLinkModal from "./copyLinkModal"; +import ManagePublicShare from "./managePublicShare"; + +export default function PublicShare({ + collection, + onRootClose, +}: { + collection: Collection; + onRootClose: () => void; +}) { + const [publicShareUrl, setPublicShareUrl] = useState(null); + const [publicShareProp, setPublicShareProp] = useState(null); + const [copyLinkModalView, setCopyLinkModalView] = useState(false); + + useEffect(() => { + if (collection.publicURLs?.length) { + setPublicShareProp(collection.publicURLs[0]); + } + }, [collection]); + + useEffect(() => { + if (publicShareProp) { + const url = appendCollectionKeyToShareURL( + publicShareProp.url, + collection.key, + ); + setPublicShareUrl(url); + } else { + setPublicShareUrl(null); + } + }, [publicShareProp]); + + const copyToClipboardHelper = () => { + navigator.clipboard.writeText(publicShareUrl); + handleCancel(); + }; + const handleCancel = () => { + setCopyLinkModalView(false); + }; + + return ( + <> + {publicShareProp ? ( + + ) : ( + + )} + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx new file mode 100644 index 000000000..1576a6f3a --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/deviceLimit.tsx @@ -0,0 +1,103 @@ +import ChevronRight from "@mui/icons-material/ChevronRight"; +import { DialogProps, Stack } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { useMemo, useState } from "react"; +import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; +import { getDeviceLimitOptions } from "utils/collection"; + +interface Iprops { + publicShareProp: PublicURL; + collection: Collection; + updatePublicShareURLHelper: (req: UpdatePublicURL) => Promise; + onRootClose: () => void; +} + +export function ManageDeviceLimit({ + collection, + publicShareProp, + updatePublicShareURLHelper, + onRootClose, +}: Iprops) { + const updateDeviceLimit = async (newLimit: number) => { + return updatePublicShareURLHelper({ + collectionID: collection.id, + deviceLimit: newLimit, + }); + }; + const [isChangeDeviceLimitVisible, setIsChangeDeviceLimitVisible] = + useState(false); + const deviceLimitOptions = useMemo(() => getDeviceLimitOptions(), []); + + const closeDeviceLimitChangeModal = () => + setIsChangeDeviceLimitVisible(false); + const openDeviceLimitChangeModalView = () => + setIsChangeDeviceLimitVisible(true); + + const changeDeviceLimitValue = (value: number) => async () => { + await updateDeviceLimit(value); + setIsChangeDeviceLimitVisible(false); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + onRootClose(); + } else { + closeDeviceLimitChangeModal(); + } + }; + + return ( + <> + } + /> + + + + + + + {deviceLimitOptions.map((item, index) => ( + <> + + {index !== + deviceLimitOptions.length - 1 && ( + + )} + + ))} + + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/downloadAccess.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/downloadAccess.tsx new file mode 100644 index 000000000..963687448 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/downloadAccess.tsx @@ -0,0 +1,55 @@ +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import { Trans } from "react-i18next"; +import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; +interface Iprops { + publicShareProp: PublicURL; + collection: Collection; + updatePublicShareURLHelper: (req: UpdatePublicURL) => Promise; +} + +export function ManageDownloadAccess({ + publicShareProp, + updatePublicShareURLHelper, + collection, +}: Iprops) { + const appContext = useContext(AppContext); + + const handleFileDownloadSetting = () => { + if (publicShareProp.enableDownload) { + disableFileDownload(); + } else { + updatePublicShareURLHelper({ + collectionID: collection.id, + enableDownload: true, + }); + } + }; + + const disableFileDownload = () => { + appContext.setDialogMessage({ + title: t("DISABLE_FILE_DOWNLOAD"), + content: , + close: { text: t("CANCEL") }, + proceed: { + text: t("DISABLE"), + action: () => + updatePublicShareURLHelper({ + collectionID: collection.id, + enableDownload: false, + }), + variant: "critical", + }, + }); + }; + return ( + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx new file mode 100644 index 000000000..a4ba9ec91 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/index.tsx @@ -0,0 +1,172 @@ +import ContentCopyIcon from "@mui/icons-material/ContentCopy"; +import RemoveCircleOutline from "@mui/icons-material/RemoveCircleOutline"; +import { DialogProps, Stack, Typography } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { GalleryContext } from "pages/gallery"; +import { useContext, useState } from "react"; +import { + deleteShareableURL, + updateShareableURL, +} from "services/collectionService"; +import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; +import { SetPublicShareProp } from "types/publicCollection"; +import { handleSharingErrors } from "utils/error/ui"; +import { ManageDeviceLimit } from "./deviceLimit"; +import { ManageDownloadAccess } from "./downloadAccess"; +import { ManageLinkExpiry } from "./linkExpiry"; +import { ManageLinkPassword } from "./linkPassword"; +import { ManagePublicCollect } from "./publicCollect"; + +interface Iprops { + publicShareProp: PublicURL; + collection: Collection; + setPublicShareProp: SetPublicShareProp; + open: boolean; + onClose: () => void; + onRootClose: () => void; + publicShareUrl: string; +} + +export default function ManagePublicShareOptions({ + publicShareProp, + collection, + setPublicShareProp, + open, + onClose, + onRootClose, + publicShareUrl, +}: Iprops) { + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + onRootClose(); + } else { + onClose(); + } + }; + const galleryContext = useContext(GalleryContext); + + const [sharableLinkError, setSharableLinkError] = useState(null); + + const updatePublicShareURLHelper = async (req: UpdatePublicURL) => { + try { + galleryContext.setBlockingLoad(true); + const response = await updateShareableURL(req); + setPublicShareProp(response); + galleryContext.syncWithRemote(false, true); + } catch (e) { + const errorMessage = handleSharingErrors(e); + setSharableLinkError(errorMessage); + } finally { + galleryContext.setBlockingLoad(false); + } + }; + const disablePublicSharing = async () => { + try { + galleryContext.setBlockingLoad(true); + await deleteShareableURL(collection); + setPublicShareProp(null); + galleryContext.syncWithRemote(false, true); + onClose(); + } catch (e) { + const errorMessage = handleSharingErrors(e); + setSharableLinkError(errorMessage); + } finally { + galleryContext.setBlockingLoad(false); + } + }; + const copyToClipboardHelper = (text: string) => () => { + navigator.clipboard.writeText(text); + }; + return ( + <> + + + + + + + + + + + + + + + + } + onClick={copyToClipboardHelper( + publicShareUrl, + )} + label={t("COPY_LINK")} + /> + + + } + onClick={disablePublicSharing} + label={t("REMOVE_LINK")} + /> + + + {sharableLinkError && ( + theme.colors.danger.A700, + mt: 0.5, + }} + > + {sharableLinkError} + + )} + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx new file mode 100644 index 000000000..1ea31c851 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkExpiry.tsx @@ -0,0 +1,118 @@ +import { formatDateTime } from "@ente/shared/time/format"; +import ChevronRight from "@mui/icons-material/ChevronRight"; +import { DialogProps, Stack } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { useMemo, useState } from "react"; +import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; +import { shareExpiryOptions } from "utils/collection"; +import { isLinkExpired } from "../managePublicShare"; + +interface Iprops { + publicShareProp: PublicURL; + collection: Collection; + updatePublicShareURLHelper: (req: UpdatePublicURL) => Promise; + onRootClose: () => void; +} + +export function ManageLinkExpiry({ + publicShareProp, + collection, + updatePublicShareURLHelper, + onRootClose, +}: Iprops) { + const updateDeviceExpiry = async (optionFn) => { + return updatePublicShareURLHelper({ + collectionID: collection.id, + validTill: optionFn, + }); + }; + + const [shareExpiryOptionsModalView, setShareExpiryOptionsModalView] = + useState(false); + + const shareExpireOption = useMemo(() => shareExpiryOptions(), []); + + const closeShareExpiryOptionsModalView = () => + setShareExpiryOptionsModalView(false); + + const openShareExpiryOptionsModalView = () => + setShareExpiryOptionsModalView(true); + + const changeShareExpiryValue = (value: number) => async () => { + await updateDeviceExpiry(value); + publicShareProp.validTill = value; + setShareExpiryOptionsModalView(false); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + onRootClose(); + } else { + closeShareExpiryOptionsModalView(); + } + }; + + return ( + <> + + } + variant="captioned" + label={t("LINK_EXPIRY")} + color={ + isLinkExpired(publicShareProp?.validTill) + ? "critical" + : "primary" + } + subText={ + isLinkExpired(publicShareProp?.validTill) + ? t("LINK_EXPIRED") + : publicShareProp?.validTill + ? formatDateTime( + publicShareProp?.validTill / 1000, + ) + : t("NEVER") + } + /> + + + + + + + {shareExpireOption.map((item, index) => ( + <> + + {index !== shareExpireOption.length - 1 && ( + + )} + + ))} + + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkPassword/index.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkPassword/index.tsx new file mode 100644 index 000000000..2ef311c96 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkPassword/index.tsx @@ -0,0 +1,67 @@ +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext, useState } from "react"; +import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; +import { PublicLinkSetPassword } from "./setPassword"; + +interface Iprops { + publicShareProp: PublicURL; + collection: Collection; + updatePublicShareURLHelper: (req: UpdatePublicURL) => Promise; +} + +export function ManageLinkPassword({ + collection, + publicShareProp, + updatePublicShareURLHelper, +}: Iprops) { + const appContext = useContext(AppContext); + const [changePasswordView, setChangePasswordView] = useState(false); + + const closeConfigurePassword = () => setChangePasswordView(false); + + const handlePasswordChangeSetting = async () => { + if (publicShareProp.passwordEnabled) { + await confirmDisablePublicUrlPassword(); + } else { + setChangePasswordView(true); + } + }; + + const confirmDisablePublicUrlPassword = async () => { + appContext.setDialogMessage({ + title: t("DISABLE_PASSWORD"), + content: t("DISABLE_PASSWORD_MESSAGE"), + close: { text: t("CANCEL") }, + proceed: { + text: t("DISABLE"), + action: () => + updatePublicShareURLHelper({ + collectionID: collection.id, + disablePassword: true, + }), + variant: "critical", + }, + }); + }; + + return ( + <> + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkPassword/setPassword.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkPassword/setPassword.tsx new file mode 100644 index 000000000..349e41d7b --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/linkPassword/setPassword.tsx @@ -0,0 +1,66 @@ +import SingleInputForm, { + SingleInputFormProps, +} from "@ente/shared/components/SingleInputForm"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { Dialog, Stack, Typography } from "@mui/material"; +import { t } from "i18next"; + +export function PublicLinkSetPassword({ + open, + onClose, + collection, + publicShareProp, + updatePublicShareURLHelper, + setChangePasswordView, +}) { + const savePassword: SingleInputFormProps["callback"] = async ( + passphrase, + setFieldError, + ) => { + if (passphrase && passphrase.trim().length >= 1) { + await enablePublicUrlPassword(passphrase); + setChangePasswordView(false); + publicShareProp.passwordEnabled = true; + } else { + setFieldError("can not be empty"); + } + }; + + const enablePublicUrlPassword = async (password: string) => { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const kekSalt = await cryptoWorker.generateSaltToDeriveKey(); + const kek = await cryptoWorker.deriveInteractiveKey(password, kekSalt); + + return updatePublicShareURLHelper({ + collectionID: collection.id, + passHash: kek.key, + nonce: kekSalt, + opsLimit: kek.opsLimit, + memLimit: kek.memLimit, + }); + }; + return ( + + + + {t("PASSWORD_LOCK")} + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx new file mode 100644 index 000000000..4216189cb --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/publicCollect.tsx @@ -0,0 +1,39 @@ +import { Stack } from "@mui/material"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import MenuSectionTitle from "components/Menu/MenuSectionTitle"; +import { t } from "i18next"; +import { Collection, PublicURL, UpdatePublicURL } from "types/collection"; + +interface Iprops { + publicShareProp: PublicURL; + collection: Collection; + updatePublicShareURLHelper: (req: UpdatePublicURL) => Promise; +} + +export function ManagePublicCollect({ + publicShareProp, + updatePublicShareURLHelper, + collection, +}: Iprops) { + const handleFileDownloadSetting = () => { + updatePublicShareURLHelper({ + collectionID: collection.id, + enableCollect: !publicShareProp.enableCollect, + }); + }; + + return ( + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/selectComponents/LabelWithDivider.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/selectComponents/LabelWithDivider.tsx new file mode 100644 index 000000000..c76d2ed51 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/selectComponents/LabelWithDivider.tsx @@ -0,0 +1,12 @@ +import { Box, Divider, Typography } from "@mui/material"; + +export function LabelWithDivider({ data }) { + return ( + <> + + {data.label} + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/selectComponents/OptionWithDivider.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/selectComponents/OptionWithDivider.tsx new file mode 100644 index 000000000..cc147cc91 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/manage/selectComponents/OptionWithDivider.tsx @@ -0,0 +1,10 @@ +import { components } from "react-select"; +import { LabelWithDivider } from "./LabelWithDivider"; + +const { Option } = components; + +export const OptionWithDivider = (props) => ( + +); diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx new file mode 100644 index 000000000..df39a5135 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/managePublicShare.tsx @@ -0,0 +1,84 @@ +import ChevronRightIcon from "@mui/icons-material/ChevronRight"; +import ContentCopyIcon from "@mui/icons-material/ContentCopyOutlined"; +import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline"; +import LinkIcon from "@mui/icons-material/Link"; +import PublicIcon from "@mui/icons-material/Public"; +import { Stack, Typography } from "@mui/material"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import { t } from "i18next"; +import { useState } from "react"; +import { Collection, PublicURL } from "types/collection"; +import { SetPublicShareProp } from "types/publicCollection"; +import ManagePublicShareOptions from "./manage"; + +export const isLinkExpired = (validTill: number) => { + return validTill && validTill < Date.now() * 1000; +}; + +interface Iprops { + publicShareProp: PublicURL; + collection: Collection; + setPublicShareProp: SetPublicShareProp; + onRootClose: () => void; + publicShareUrl: string; + copyToClipboardHelper: () => void; +} +export default function ManagePublicShare({ + publicShareProp, + setPublicShareProp, + collection, + onRootClose, + publicShareUrl, + copyToClipboardHelper, +}: Iprops) { + const [manageShareView, setManageShareView] = useState(false); + const closeManageShare = () => setManageShareView(false); + const openManageShare = () => setManageShareView(true); + return ( + <> + + + + {t("PUBLIC_LINK_ENABLED")} + + + {isLinkExpired(publicShareProp.validTill) ? ( + } + color="critical" + onClick={openManageShare} + label={t("LINK_EXPIRED")} + /> + ) : ( + } + onClick={copyToClipboardHelper} + disabled={isLinkExpired(publicShareProp.validTill)} + label={t("COPY_LINK")} + /> + )} + + + } + endIcon={} + onClick={openManageShare} + label={t("MANAGE_LINK")} + /> + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/publicShare/switch.tsx b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/switch.tsx new file mode 100644 index 000000000..bb738a9e9 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/publicShare/switch.tsx @@ -0,0 +1,61 @@ +import { Switch, SwitchProps, styled } from "@mui/material"; +const PublicShareSwitch = styled((props: SwitchProps) => ( + +))(({ theme }) => ({ + width: 40, + height: 24, + padding: 0, + "& .MuiSwitch-switchBase": { + padding: 0, + margin: 2, + transitionDuration: "300ms", + "&.Mui-checked": { + transform: "translateX(16px)", + color: "#fff", + "& + .MuiSwitch-track": { + backgroundColor: + theme.palette.mode === "dark" ? "#2ECA45" : "#65C466", + opacity: 1, + border: 0, + }, + "&.Mui-disabled + .MuiSwitch-track": { + opacity: 0.5, + }, + }, + "&.Mui-focusVisible .MuiSwitch-thumb": { + color: "#33cf4d", + border: "6px solid #fff", + }, + "&.Mui-disabled .MuiSwitch-thumb": { + color: + theme.palette.mode === "light" + ? theme.palette.grey[100] + : theme.palette.grey[600], + }, + "&.Mui-disabled + .MuiSwitch-track": { + opacity: theme.palette.mode === "light" ? 0.7 : 0.3, + }, + }, + "& .MuiSwitch-thumb": { + boxSizing: "border-box", + width: 20, + height: 20, + }, + "& .MuiSwitch-track": { + borderRadius: 22 / 2, + backgroundColor: + theme.palette.mode === "light" + ? "#E9E9EA" + : theme.colors.fill.muted, + opacity: 1, + transition: theme.transitions.create(["background-color"], { + duration: 500, + }), + }, +})); + +export default PublicShareSwitch; diff --git a/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx new file mode 100644 index 000000000..9fcf289b4 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/sharingDetails.tsx @@ -0,0 +1,101 @@ +import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; +import ModeEditIcon from "@mui/icons-material/ModeEdit"; +import Photo from "@mui/icons-material/Photo"; +import { Stack } from "@mui/material"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import MenuItemDivider from "components/Menu/MenuItemDivider"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import MenuSectionTitle from "components/Menu/MenuSectionTitle"; +import Avatar from "components/pages/gallery/Avatar"; +import { CollectionSummaryType } from "constants/collection"; +import { t } from "i18next"; +import { GalleryContext } from "pages/gallery"; +import { useContext } from "react"; +import { COLLECTION_ROLE } from "types/collection"; + +export default function SharingDetails({ collection, type }) { + const galleryContext = useContext(GalleryContext); + + const ownerEmail = + galleryContext.user.id === collection.owner?.id + ? galleryContext.user?.email + : collection.owner?.email; + + const collaborators = collection.sharees + ?.filter((sharee) => sharee.role === COLLECTION_ROLE.COLLABORATOR) + .map((sharee) => sharee.email); + + const viewers = + collection.sharees + ?.filter((sharee) => sharee.role === COLLECTION_ROLE.VIEWER) + .map((sharee) => sharee.email) || []; + + const isOwner = galleryContext.user?.id === collection.owner?.id; + + const isMe = (email: string) => email === galleryContext.user?.email; + + return ( + <> + + } + /> + + {}} + label={isOwner ? t("YOU") : ownerEmail} + startIcon={} + /> + + + {type === CollectionSummaryType.incomingShareCollaborator && + collaborators?.length > 0 && ( + + } + /> + + {collaborators.map((item, index) => ( + <> + {}} + label={isMe(item) ? t("YOU") : item} + startIcon={} + /> + {index !== collaborators.length - 1 && ( + + )} + + ))} + + + )} + {viewers?.length > 0 && ( + + } /> + + {viewers.map((item, index) => ( + <> + {}} + label={isMe(item) ? t("YOU") : item} + startIcon={} + /> + {index !== viewers.length - 1 && ( + + )} + + ))} + + + )} + + ); +} diff --git a/web/apps/photos/src/components/Collections/CollectionShare/styledComponents.tsx b/web/apps/photos/src/components/Collections/CollectionShare/styledComponents.tsx new file mode 100644 index 000000000..344484f25 --- /dev/null +++ b/web/apps/photos/src/components/Collections/CollectionShare/styledComponents.tsx @@ -0,0 +1,13 @@ +import { styled } from "@mui/material"; +export const ManageSectionLabel = styled("summary")( + ({ theme }) => ` + text-align: center; + margin-bottom:${theme.spacing(1)}; +`, +); + +export const ManageSectionOptions = styled("section")( + ({ theme }) => ` + margin-bottom:${theme.spacing(4)}; +`, +); diff --git a/web/apps/photos/src/components/Collections/index.tsx b/web/apps/photos/src/components/Collections/index.tsx new file mode 100644 index 000000000..c16d56ee5 --- /dev/null +++ b/web/apps/photos/src/components/Collections/index.tsx @@ -0,0 +1,186 @@ +import { useLocalState } from "@ente/shared/hooks/useLocalState"; +import { LS_KEYS } from "@ente/shared/storage/localStorage"; +import AllCollections from "components/Collections/AllCollections"; +import CollectionInfoWithOptions from "components/Collections/CollectionInfoWithOptions"; +import CollectionListBar from "components/Collections/CollectionListBar"; +import { SetCollectionNamerAttributes } from "components/Collections/CollectionNamer"; +import CollectionShare from "components/Collections/CollectionShare"; +import { ITEM_TYPE, TimeStampListItem } from "components/PhotoList"; +import { ALL_SECTION, COLLECTION_LIST_SORT_BY } from "constants/collection"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { sortCollectionSummaries } from "services/collectionService"; +import { Collection, CollectionSummaries } from "types/collection"; +import { SetFilesDownloadProgressAttributesCreator } from "types/gallery"; +import { + hasNonSystemCollections, + isSystemCollection, + shouldBeShownOnCollectionBar, +} from "utils/collection"; +import { + FilesDownloadProgressAttributes, + isFilesDownloadCancelled, + isFilesDownloadCompleted, +} from "../FilesDownloadProgress"; +import AlbumCastDialog from "./CollectionOptions/AlbumCastDialog"; + +interface Iprops { + activeCollection: Collection; + activeCollectionID?: number; + setActiveCollectionID: (id?: number) => void; + isInSearchMode: boolean; + isInHiddenSection: boolean; + collectionSummaries: CollectionSummaries; + hiddenCollectionSummaries: CollectionSummaries; + setCollectionNamerAttributes: SetCollectionNamerAttributes; + setPhotoListHeader: (value: TimeStampListItem) => void; + filesDownloadProgressAttributesList: FilesDownloadProgressAttributes[]; + setFilesDownloadProgressAttributesCreator: SetFilesDownloadProgressAttributesCreator; +} + +export default function Collections(props: Iprops) { + const { + activeCollection, + isInSearchMode, + isInHiddenSection, + activeCollectionID, + setActiveCollectionID, + collectionSummaries, + hiddenCollectionSummaries, + setCollectionNamerAttributes, + setPhotoListHeader, + filesDownloadProgressAttributesList, + setFilesDownloadProgressAttributesCreator, + } = props; + + const [allCollectionView, setAllCollectionView] = useState(false); + const [collectionShareModalView, setCollectionShareModalView] = + useState(false); + + const [showAlbumCastDialog, setShowAlbumCastDialog] = useState(false); + + const [collectionListSortBy, setCollectionListSortBy] = + useLocalState( + LS_KEYS.COLLECTION_SORT_BY, + COLLECTION_LIST_SORT_BY.UPDATION_TIME_DESCENDING, + ); + + const toShowCollectionSummaries = useMemo( + () => + isInHiddenSection ? hiddenCollectionSummaries : collectionSummaries, + [isInHiddenSection, hiddenCollectionSummaries, collectionSummaries], + ); + + const shouldBeHidden = useMemo( + () => + isInSearchMode || + (!hasNonSystemCollections(toShowCollectionSummaries) && + activeCollectionID === ALL_SECTION), + [isInSearchMode, toShowCollectionSummaries, activeCollectionID], + ); + + const sortedCollectionSummaries = useMemo( + () => + sortCollectionSummaries( + [...toShowCollectionSummaries.values()], + collectionListSortBy, + ), + [collectionListSortBy, toShowCollectionSummaries], + ); + + const isActiveCollectionDownloadInProgress = useCallback(() => { + const attributes = filesDownloadProgressAttributesList.find( + (attr) => attr.collectionID === activeCollectionID, + ); + return ( + attributes && + !isFilesDownloadCancelled(attributes) && + !isFilesDownloadCompleted(attributes) + ); + }, [activeCollectionID, filesDownloadProgressAttributesList]); + + useEffect(() => { + if (isInSearchMode) { + return; + } + setPhotoListHeader({ + item: ( + + setCollectionShareModalView(true) + } + setFilesDownloadProgressAttributesCreator={ + setFilesDownloadProgressAttributesCreator + } + isActiveCollectionDownloadInProgress={ + isActiveCollectionDownloadInProgress + } + setActiveCollectionID={setActiveCollectionID} + setShowAlbumCastDialog={setShowAlbumCastDialog} + /> + ), + itemType: ITEM_TYPE.HEADER, + height: 68, + }); + }, [ + toShowCollectionSummaries, + activeCollectionID, + isInSearchMode, + isActiveCollectionDownloadInProgress, + ]); + + if (shouldBeHidden) { + return <>; + } + + const closeAllCollections = () => setAllCollectionView(false); + const openAllCollections = () => setAllCollectionView(true); + const closeCollectionShare = () => setCollectionShareModalView(false); + const closeAlbumCastDialog = () => setShowAlbumCastDialog(false); + + return ( + <> + + shouldBeShownOnCollectionBar(x.type), + )} + showAllCollections={openAllCollections} + setCollectionListSortBy={setCollectionListSortBy} + collectionListSortBy={collectionListSortBy} + /> + + !isSystemCollection(x.type), + )} + setActiveCollectionID={setActiveCollectionID} + setCollectionListSortBy={setCollectionListSortBy} + collectionListSortBy={collectionListSortBy} + isInHiddenSection={isInHiddenSection} + /> + + + + + ); +} diff --git a/web/apps/photos/src/components/Collections/styledComponents.ts b/web/apps/photos/src/components/Collections/styledComponents.ts new file mode 100644 index 000000000..2b64e081a --- /dev/null +++ b/web/apps/photos/src/components/Collections/styledComponents.ts @@ -0,0 +1,97 @@ +import { Overlay } from "@ente/shared/components/Container"; +import { Box, styled } from "@mui/material"; +import { IMAGE_CONTAINER_MAX_WIDTH, MIN_COLUMNS } from "constants/gallery"; +export const CollectionListWrapper = styled(Box)` + position: relative; + overflow: hidden; + height: 86px; + width: 100%; +`; + +export const CollectionListBarWrapper = styled(Box)` + padding: 0 24px; + @media (max-width: ${IMAGE_CONTAINER_MAX_WIDTH * MIN_COLUMNS}px) { + padding: 0 4px; + } + margin-bottom: 16px; + border-bottom: 1px solid ${({ theme }) => theme.palette.divider}; +`; + +export const CollectionInfoBarWrapper = styled(Box)` + width: 100%; + margin-bottom: 12px; +`; + +export const ScrollContainer = styled("div")` + width: 100%; + height: 120px; + overflow: auto; + scroll-behavior: smooth; + display: flex; + gap: 4px; +`; + +export const CollectionTile = styled("div")` + display: flex; + position: relative; + border-radius: 4px; + overflow: hidden; + cursor: pointer; + & > img { + object-fit: cover; + width: 100%; + height: 100%; + pointer-events: none; + } + user-select: none; +`; + +export const ActiveIndicator = styled("div")` + height: 3px; + background-color: ${({ theme }) => theme.palette.primary.main}; + margin-top: 18px; + border-radius: 2px; +`; + +export const CollectionBarTile = styled(CollectionTile)` + width: 90px; + height: 64px; +`; + +export const AllCollectionTile = styled(CollectionTile)` + width: 150px; + height: 150px; +`; + +export const ResultPreviewTile = styled(CollectionTile)` + width: 48px; + height: 48px; +`; + +export const CollectionBarTileText = styled(Overlay)` + padding: 4px; + background: linear-gradient( + 0deg, + rgba(0, 0, 0, 0.1) 0%, + rgba(0, 0, 0, 0.5) 86.46% + ); +`; + +export const CollectionBarTileIcon = styled(Overlay)` + padding: 4px; + display: flex; + justify-content: flex-start; + align-items: flex-end; + & > .MuiSvgIcon-root { + font-size: 20px; + } +`; + +export const AllCollectionTileText = styled(Overlay)` + padding: 8px; + background: linear-gradient( + 0deg, + rgba(0, 0, 0, 0.1) 0%, + rgba(0, 0, 0, 0.5) 86.46% + ); +`; diff --git a/web/apps/photos/src/components/DeleteAccountModal.tsx b/web/apps/photos/src/components/DeleteAccountModal.tsx new file mode 100644 index 000000000..87cfe64bd --- /dev/null +++ b/web/apps/photos/src/components/DeleteAccountModal.tsx @@ -0,0 +1,248 @@ +import { logoutUser } from "@ente/accounts/services/user"; +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import EnteButton from "@ente/shared/components/EnteButton"; +import { DELETE_ACCOUNT_EMAIL } from "@ente/shared/constants/urls"; +import { logError } from "@ente/shared/sentry"; +import { Button, Link, Stack } from "@mui/material"; +import { Formik, FormikHelpers } from "formik"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { GalleryContext } from "pages/gallery"; +import { useContext, useEffect, useRef, useState } from "react"; +import { Trans } from "react-i18next"; +import { deleteAccount, getAccountDeleteChallenge } from "services/userService"; +import { initiateEmail, preloadImage } from "utils/common"; +import { decryptDeleteAccountChallenge } from "utils/crypto"; +import * as Yup from "yup"; +import { CheckboxInput } from "./CheckboxInput"; +import DropdownInput, { DropdownOption } from "./DropdownInput"; +import MultilineInput from "./MultilineInput"; + +interface Iprops { + onClose: () => void; + open: boolean; +} + +interface FormValues { + reason: string; + feedback: string; +} + +enum DELETE_REASON { + MISSING_FEATURE = "It's missing a key feature that I need", + BROKEN_BEHAVIOR = "The app or a certain feature does not behave as I think it should", + FOUND_ANOTHER_SERVICE = "I found another service that I like better", + NOT_LISTED = "My reason isn't listed", +} + +const getReasonOptions = (): DropdownOption[] => { + return Object.keys(DELETE_REASON).map((reason) => ({ + label: t(`DELETE_REASON.${reason}`), + value: DELETE_REASON[reason], + })); +}; + +const DeleteAccountModal = ({ open, onClose }: Iprops) => { + const { setDialogBoxAttributesV2, isMobile } = useContext(AppContext); + const { authenticateUser } = useContext(GalleryContext); + const [loading, setLoading] = useState(false); + const deleteAccountChallenge = useRef(); + + const [acceptDataDeletion, setAcceptDataDeletion] = useState(false); + const reasonAndFeedbackRef = useRef<{ reason: string; feedback: string }>(); + + useEffect(() => { + preloadImage("/images/delete-account"); + }, []); + + const somethingWentWrong = () => + setDialogBoxAttributesV2({ + title: t("ERROR"), + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + + const initiateDelete = async ( + { reason, feedback }: FormValues, + { setFieldError }: FormikHelpers, + ) => { + try { + feedback = feedback.trim(); + if (feedback.length === 0) { + switch (reason) { + case DELETE_REASON.FOUND_ANOTHER_SERVICE: + setFieldError( + "feedback", + t("FEEDBACK_REQUIRED_FOUND_ANOTHER_SERVICE"), + ); + break; + default: + setFieldError("feedback", t("FEEDBACK_REQUIRED")); + } + return; + } + setLoading(true); + reasonAndFeedbackRef.current = { reason, feedback }; + const deleteChallengeResponse = await getAccountDeleteChallenge(); + deleteAccountChallenge.current = + deleteChallengeResponse.encryptedChallenge; + if (deleteChallengeResponse.allowDelete) { + authenticateUser(confirmAccountDeletion); + } else { + askToMailForDeletion(); + } + } catch (e) { + logError(e, "Error while initiating account deletion"); + somethingWentWrong(); + } finally { + setLoading(false); + } + }; + + const confirmAccountDeletion = () => { + setDialogBoxAttributesV2({ + title: t("DELETE_ACCOUNT"), + content: , + proceed: { + text: t("DELETE"), + action: solveChallengeAndDeleteAccount, + variant: "critical", + }, + close: { text: t("CANCEL") }, + }); + }; + + const askToMailForDeletion = () => { + setDialogBoxAttributesV2({ + title: t("DELETE_ACCOUNT"), + content: ( + , + }} + values={{ emailID: DELETE_ACCOUNT_EMAIL }} + /> + ), + proceed: { + text: t("DELETE"), + action: () => { + initiateEmail("account-deletion@ente.io"); + }, + variant: "critical", + }, + close: { text: t("CANCEL") }, + }); + }; + + const solveChallengeAndDeleteAccount = async ( + setLoading: (value: boolean) => void, + ) => { + try { + setLoading(true); + const decryptedChallenge = await decryptDeleteAccountChallenge( + deleteAccountChallenge.current, + ); + const { reason, feedback } = reasonAndFeedbackRef.current; + await deleteAccount(decryptedChallenge, reason, feedback); + logoutUser(); + } catch (e) { + logError(e, "solveChallengeAndDeleteAccount failed"); + somethingWentWrong(); + } finally { + setLoading(false); + } + }; + + return ( + <> + + + initialValues={{ + reason: "", + feedback: "", + }} + validationSchema={Yup.object().shape({ + reason: Yup.string().required(t("REQUIRED")), + })} + validateOnChange={false} + validateOnBlur={false} + onSubmit={initiateDelete} + > + {({ + values, + errors, + handleChange, + handleSubmit, + }): JSX.Element => ( +
+ + + + + + + {t("CONFIRM_DELETE_ACCOUNT")} + + + + +
+ )} + +
+ + ); +}; + +export default DeleteAccountModal; diff --git a/web/apps/photos/src/components/Directory/changeOption.tsx b/web/apps/photos/src/components/Directory/changeOption.tsx new file mode 100644 index 000000000..f846e9ba9 --- /dev/null +++ b/web/apps/photos/src/components/Directory/changeOption.tsx @@ -0,0 +1,28 @@ +import OverflowMenu from "@ente/shared/components/OverflowMenu/menu"; +import { OverflowMenuOption } from "@ente/shared/components/OverflowMenu/option"; +import FolderIcon from "@mui/icons-material/Folder"; +import MoreHoriz from "@mui/icons-material/MoreHoriz"; +import { t } from "i18next"; + +export default function ChangeDirectoryOption({ + changeExportDirectory: changeDirectory, +}) { + return ( + } + > + } + > + {t("CHANGE_FOLDER")} + + + ); +} diff --git a/web/apps/photos/src/components/Directory/index.tsx b/web/apps/photos/src/components/Directory/index.tsx new file mode 100644 index 000000000..a87202771 --- /dev/null +++ b/web/apps/photos/src/components/Directory/index.tsx @@ -0,0 +1,34 @@ +import LinkButton from "@ente/shared/components/LinkButton"; +import ElectronAPIs from "@ente/shared/electron"; +import { logError } from "@ente/shared/sentry"; +import { Tooltip } from "@mui/material"; +import { styled } from "@mui/material/styles"; + +const DirectoryPathContainer = styled(LinkButton)( + ({ width }) => ` + width: ${width}px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + /* Beginning of string */ + direction: rtl; + text-align: left; +`, +); + +export const DirectoryPath = ({ width, path }) => { + const handleClick = async () => { + try { + await ElectronAPIs.openDirectory(path); + } catch (e) { + logError(e, "openDirectory failed"); + } + }; + return ( + + + {path} + + + ); +}; diff --git a/web/apps/photos/src/components/DropdownInput.tsx b/web/apps/photos/src/components/DropdownInput.tsx new file mode 100644 index 000000000..76f9e7423 --- /dev/null +++ b/web/apps/photos/src/components/DropdownInput.tsx @@ -0,0 +1,127 @@ +import ExpandMore from "@mui/icons-material/ExpandMore"; +import { + Box, + MenuItem, + Select, + SelectChangeEvent, + Stack, + Typography, + TypographyProps, +} from "@mui/material"; + +export interface DropdownOption { + label: string; + value: T; +} + +interface Iprops { + label: string; + labelProps?: TypographyProps; + options: DropdownOption[]; + message?: string; + messageProps?: TypographyProps; + selected: T; + setSelected: (selectedValue: T) => void; + placeholder?: string; +} + +export default function DropdownInput({ + label, + labelProps, + options, + message, + selected, + placeholder, + setSelected, + messageProps, +}: Iprops) { + return ( + + {label} + + {message && ( + + {message} + + )} + + ); +} diff --git a/web/apps/photos/src/components/EnteDateTimePicker.tsx b/web/apps/photos/src/components/EnteDateTimePicker.tsx new file mode 100644 index 000000000..ee5426ebc --- /dev/null +++ b/web/apps/photos/src/components/EnteDateTimePicker.tsx @@ -0,0 +1,68 @@ +import { useState } from "react"; + +import { + LocalizationProvider, + MobileDateTimePicker, +} from "@mui/x-date-pickers"; +import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; +import { + MAX_EDITED_CREATION_TIME, + MIN_EDITED_CREATION_TIME, +} from "constants/file"; + +interface Props { + initialValue?: Date; + disabled?: boolean; + label?: string; + onSubmit: (date: Date) => void; + onClose?: () => void; +} + +const EnteDateTimePicker = ({ + initialValue, + disabled, + onSubmit, + onClose, +}: Props) => { + const [open, setOpen] = useState(true); + const [value, setValue] = useState(initialValue ?? new Date()); + + const handleClose = () => { + setOpen(false); + onClose?.(); + }; + return ( + + setOpen(true)} + maxDateTime={MAX_EDITED_CREATION_TIME} + minDateTime={MIN_EDITED_CREATION_TIME} + disabled={disabled} + onAccept={onSubmit} + DialogProps={{ + sx: { + zIndex: "1502", + ".MuiPickersToolbar-penIconButton": { + display: "none", + }, + ".MuiDialog-paper": { width: "320px" }, + ".MuiClockPicker-root": { + position: "relative", + minHeight: "292px", + }, + ".PrivatePickersSlideTransition-root": { + minHeight: "200px", + }, + }, + }} + renderInput={() => <>} + /> + + ); +}; + +export default EnteDateTimePicker; diff --git a/web/apps/photos/src/components/EnteDrawer.tsx b/web/apps/photos/src/components/EnteDrawer.tsx new file mode 100644 index 000000000..e6fc35bb1 --- /dev/null +++ b/web/apps/photos/src/components/EnteDrawer.tsx @@ -0,0 +1,10 @@ +import { Drawer, styled } from "@mui/material"; + +export const EnteDrawer = styled(Drawer)(({ theme }) => ({ + "& .MuiPaper-root": { + maxWidth: "375px", + width: "100%", + scrollbarWidth: "thin", + padding: theme.spacing(1), + }, +})); diff --git a/web/apps/photos/src/components/EnteSpinner.tsx b/web/apps/photos/src/components/EnteSpinner.tsx new file mode 100644 index 000000000..8a5d0a289 --- /dev/null +++ b/web/apps/photos/src/components/EnteSpinner.tsx @@ -0,0 +1,7 @@ +import CircularProgress, { + CircularProgressProps, +} from "@mui/material/CircularProgress"; + +export default function EnteSpinner(props: CircularProgressProps) { + return ; +} diff --git a/web/apps/photos/src/components/ExportFinished.tsx b/web/apps/photos/src/components/ExportFinished.tsx new file mode 100644 index 000000000..43ba02757 --- /dev/null +++ b/web/apps/photos/src/components/ExportFinished.tsx @@ -0,0 +1,86 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import { formatDateTime } from "@ente/shared/time/format"; +import { + Button, + DialogActions, + DialogContent, + Stack, + Typography, +} from "@mui/material"; +import { t } from "i18next"; +import { useState } from "react"; +import { EnteFile } from "types/file"; +import { formatNumber } from "utils/number/format"; +import ExportPendingList from "./ExportPendingList"; +import LinkButton from "./pages/gallery/LinkButton"; + +interface Props { + pendingExports: EnteFile[]; + collectionNameMap: Map; + onHide: () => void; + lastExportTime: number; + startExport: () => void; +} + +export default function ExportFinished(props: Props) { + const [pendingFileListView, setPendingFileListView] = + useState(false); + + const openPendingFileList = () => { + setPendingFileListView(true); + }; + + const closePendingFileList = () => { + setPendingFileListView(false); + }; + return ( + <> + + + + + {t("PENDING_ITEMS")} + + {props.pendingExports.length ? ( + + {formatNumber(props.pendingExports.length)} + + ) : ( + + {formatNumber(props.pendingExports.length)} + + )} + + + + {t("LAST_EXPORT_TIME")} + + + {props.lastExportTime + ? formatDateTime(props.lastExportTime) + : t("NEVER")} + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/ExportInProgress.tsx b/web/apps/photos/src/components/ExportInProgress.tsx new file mode 100644 index 000000000..3324be5c4 --- /dev/null +++ b/web/apps/photos/src/components/ExportInProgress.tsx @@ -0,0 +1,108 @@ +import { + FlexWrapper, + VerticallyCentered, +} from "@ente/shared/components/Container"; +import { + Box, + Button, + DialogActions, + DialogContent, + styled, +} from "@mui/material"; +import { ExportStage } from "constants/export"; +import { t } from "i18next"; +import { ProgressBar } from "react-bootstrap"; +import { Trans } from "react-i18next"; +import { ExportProgress } from "types/export"; + +export const ComfySpan = styled("span")` + padding: 0 0.5rem; + word-spacing: 1rem; + color: #ddd; +`; + +interface Props { + exportStage: ExportStage; + exportProgress: ExportProgress; + stopExport: () => void; + closeExportDialog: () => void; +} + +export default function ExportInProgress(props: Props) { + const showIndeterminateProgress = () => { + return ( + props.exportStage === ExportStage.STARTING || + props.exportStage === ExportStage.MIGRATION || + props.exportStage === ExportStage.RENAMING_COLLECTION_FOLDERS || + props.exportStage === ExportStage.TRASHING_DELETED_FILES || + props.exportStage === ExportStage.TRASHING_DELETED_COLLECTIONS + ); + }; + return ( + <> + + + + {props.exportStage === ExportStage.STARTING ? ( + t("EXPORT_STARTING") + ) : props.exportStage === ExportStage.MIGRATION ? ( + t("MIGRATING_EXPORT") + ) : props.exportStage === + ExportStage.RENAMING_COLLECTION_FOLDERS ? ( + t("RENAMING_COLLECTION_FOLDERS") + ) : props.exportStage === + ExportStage.TRASHING_DELETED_FILES ? ( + t("TRASHING_DELETED_FILES") + ) : props.exportStage === + ExportStage.TRASHING_DELETED_COLLECTIONS ? ( + t("TRASHING_DELETED_COLLECTIONS") + ) : ( + , + }} + values={{ + progress: props.exportProgress, + }} + /> + )} + + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/ExportInit.tsx b/web/apps/photos/src/components/ExportInit.tsx new file mode 100644 index 000000000..c2ac42bde --- /dev/null +++ b/web/apps/photos/src/components/ExportInit.tsx @@ -0,0 +1,17 @@ +import { Button, DialogActions, DialogContent } from "@mui/material"; +import { t } from "i18next"; + +interface Props { + startExport: () => void; +} +export default function ExportInit({ startExport }: Props) { + return ( + + + + + + ); +} diff --git a/web/apps/photos/src/components/ExportModal.tsx b/web/apps/photos/src/components/ExportModal.tsx new file mode 100644 index 000000000..142c00743 --- /dev/null +++ b/web/apps/photos/src/components/ExportModal.tsx @@ -0,0 +1,304 @@ +import { + SpaceBetweenFlex, + VerticallyCenteredFlex, +} from "@ente/shared/components/Container"; +import DialogTitleWithCloseButton from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { + Box, + Button, + Dialog, + DialogContent, + Divider, + Switch, + Typography, +} from "@mui/material"; +import { ExportStage } from "constants/export"; +import { t } from "i18next"; +import isElectron from "is-electron"; +import { AppContext } from "pages/_app"; +import { useContext, useEffect, useState } from "react"; +import exportService from "services/export"; +import { ExportProgress, ExportSettings } from "types/export"; +import { EnteFile } from "types/file"; +import { getExportDirectoryDoesNotExistMessage } from "utils/ui"; +import { DirectoryPath } from "./Directory"; +import ChangeDirectoryOption from "./Directory/changeOption"; +import ExportFinished from "./ExportFinished"; +import ExportInProgress from "./ExportInProgress"; +import ExportInit from "./ExportInit"; + +interface Props { + show: boolean; + onHide: () => void; + collectionNameMap: Map; +} +export default function ExportModal(props: Props) { + const appContext = useContext(AppContext); + const [exportStage, setExportStage] = useState(ExportStage.INIT); + const [exportFolder, setExportFolder] = useState(""); + const [continuousExport, setContinuousExport] = useState(false); + const [exportProgress, setExportProgress] = useState({ + success: 0, + failed: 0, + total: 0, + }); + const [pendingExports, setPendingExports] = useState([]); + const [lastExportTime, setLastExportTime] = useState(0); + + // ==================== + // SIDE EFFECTS + // ==================== + useEffect(() => { + if (!isElectron()) { + return; + } + try { + exportService.setUIUpdaters({ + setExportStage, + setExportProgress, + setLastExportTime, + setPendingExports, + }); + const exportSettings: ExportSettings = + exportService.getExportSettings(); + setExportFolder(exportSettings?.folder ?? null); + setContinuousExport(exportSettings?.continuousExport ?? false); + void syncExportRecord(exportSettings?.folder); + } catch (e) { + logError(e, "export on mount useEffect failed"); + } + }, []); + + useEffect(() => { + if (!props.show) { + return; + } + void syncExportRecord(exportFolder); + }, [props.show]); + + // ============= + // STATE UPDATERS + // ============== + const updateExportFolder = (newFolder: string) => { + exportService.updateExportSettings({ folder: newFolder }); + setExportFolder(newFolder); + }; + + const updateContinuousExport = (updatedContinuousExport: boolean) => { + exportService.updateExportSettings({ + continuousExport: updatedContinuousExport, + }); + setContinuousExport(updatedContinuousExport); + }; + + // ====================== + // HELPER FUNCTIONS + // ======================= + + const verifyExportFolderExists = () => { + if (!exportService.exportFolderExists(exportFolder)) { + appContext.setDialogMessage( + getExportDirectoryDoesNotExistMessage(), + ); + throw Error(CustomError.EXPORT_FOLDER_DOES_NOT_EXIST); + } + }; + + const syncExportRecord = async (exportFolder: string): Promise => { + try { + if (!exportService.exportFolderExists(exportFolder)) { + const pendingExports = + await exportService.getPendingExports(null); + setPendingExports(pendingExports); + } + const exportRecord = + await exportService.getExportRecord(exportFolder); + setExportStage(exportRecord.stage); + setLastExportTime(exportRecord.lastAttemptTimestamp); + const pendingExports = + await exportService.getPendingExports(exportRecord); + setPendingExports(pendingExports); + } catch (e) { + if (e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + logError(e, "syncExportRecord failed"); + } + } + }; + + // ============= + // UI functions + // ============= + + const handleChangeExportDirectoryClick = async () => { + try { + const newFolder = await exportService.changeExportDirectory(); + addLogLine(`Export folder changed to ${newFolder}`); + updateExportFolder(newFolder); + void syncExportRecord(newFolder); + } catch (e) { + if (e.message !== CustomError.SELECT_FOLDER_ABORTED) { + logError(e, "handleChangeExportDirectoryClick failed"); + } + } + }; + + const toggleContinuousExport = () => { + try { + verifyExportFolderExists(); + const newContinuousExport = !continuousExport; + if (newContinuousExport) { + exportService.enableContinuousExport(); + } else { + exportService.disableContinuousExport(); + } + updateContinuousExport(newContinuousExport); + } catch (e) { + logError(e, "onContinuousExportChange failed"); + } + }; + + const startExport = async () => { + try { + verifyExportFolderExists(); + await exportService.scheduleExport(); + } catch (e) { + if (e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + logError(e, "scheduleExport failed"); + } + } + }; + + const stopExport = () => { + void exportService.stopRunningExport(); + }; + + return ( + + + {t("EXPORT_DATA")} + + + + + + + + + ); +} + +function ExportDirectory({ exportFolder, changeExportDirectory, exportStage }) { + return ( + + + {t("DESTINATION")} + + <> + {!exportFolder ? ( + + ) : ( + + + {exportStage === ExportStage.FINISHED || + exportStage === ExportStage.INIT ? ( + + ) : ( + + )} + + )} + + + ); +} + +function ContinuousExport({ continuousExport, toggleContinuousExport }) { + return ( + + {t("CONTINUOUS_EXPORT")} + + + + + ); +} + +const ExportDynamicContent = ({ + exportStage, + startExport, + stopExport, + onHide, + lastExportTime, + exportProgress, + pendingExports, + collectionNameMap, +}: { + exportStage: ExportStage; + startExport: () => void; + stopExport: () => void; + onHide: () => void; + lastExportTime: number; + exportProgress: ExportProgress; + pendingExports: EnteFile[]; + collectionNameMap: Map; +}) => { + switch (exportStage) { + case ExportStage.INIT: + return ; + + case ExportStage.MIGRATION: + case ExportStage.STARTING: + case ExportStage.EXPORTING_FILES: + case ExportStage.RENAMING_COLLECTION_FOLDERS: + case ExportStage.TRASHING_DELETED_FILES: + case ExportStage.TRASHING_DELETED_COLLECTIONS: + return ( + + ); + case ExportStage.FINISHED: + return ( + + ); + + default: + return <>; + } +}; diff --git a/web/apps/photos/src/components/ExportPendingList.tsx b/web/apps/photos/src/components/ExportPendingList.tsx new file mode 100644 index 000000000..93aa85078 --- /dev/null +++ b/web/apps/photos/src/components/ExportPendingList.tsx @@ -0,0 +1,85 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import { Box, styled } from "@mui/material"; +import ItemList from "components/ItemList"; +import { t } from "i18next"; +import { EnteFile } from "types/file"; +import CollectionCard from "./Collections/CollectionCard"; +import { ResultPreviewTile } from "./Collections/styledComponents"; + +interface Iprops { + isOpen: boolean; + onClose: () => void; + collectionNameMap: Map; + pendingExports: EnteFile[]; +} + +export const ItemContainer = styled("div")` + position: relative; + top: 5px; + display: inline-block; + max-width: 394px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +`; + +const ExportPendingList = (props: Iprops) => { + const renderListItem = (file: EnteFile) => { + return ( + + + null} + collectionTile={ResultPreviewTile} + /> + + + {`${props.collectionNameMap.get(file.collectionID)} / ${ + file.metadata.title + }`} + + + ); + }; + + const getItemTitle = (file: EnteFile) => { + return `${props.collectionNameMap.get(file.collectionID)} / ${ + file.metadata.title + }`; + }; + + const generateItemKey = (file: EnteFile) => { + return `${file.collectionID}-${file.id}`; + }; + + return ( + + + + ); +}; + +export default ExportPendingList; diff --git a/web/apps/photos/src/components/FilesDownloadProgress.tsx b/web/apps/photos/src/components/FilesDownloadProgress.tsx new file mode 100644 index 000000000..8999de370 --- /dev/null +++ b/web/apps/photos/src/components/FilesDownloadProgress.tsx @@ -0,0 +1,159 @@ +import ElectronAPIs from "@ente/shared/electron"; +import Notification from "components/Notification"; +import { t } from "i18next"; +import isElectron from "is-electron"; +import { AppContext } from "pages/_app"; +import { GalleryContext } from "pages/gallery"; +import { useContext } from "react"; + +export interface FilesDownloadProgressAttributes { + id: number; + success: number; + failed: number; + total: number; + folderName: string; + collectionID: number; + isHidden: boolean; + downloadDirPath: string; + canceller: AbortController; +} + +interface FilesDownloadProgressProps { + attributesList: FilesDownloadProgressAttributes[]; + setAttributesList: (value: FilesDownloadProgressAttributes[]) => void; +} + +export const isFilesDownloadStarted = ( + attributes: FilesDownloadProgressAttributes, +) => { + return attributes && attributes.total > 0; +}; + +export const isFilesDownloadCompleted = ( + attributes: FilesDownloadProgressAttributes, +) => { + return ( + attributes && + attributes.success + attributes.failed === attributes.total + ); +}; + +export const isFilesDownloadCompletedWithErrors = ( + attributes: FilesDownloadProgressAttributes, +) => { + return ( + attributes && + attributes.failed > 0 && + isFilesDownloadCompleted(attributes) + ); +}; + +export const isFilesDownloadCancelled = ( + attributes: FilesDownloadProgressAttributes, +) => { + return attributes && attributes.canceller?.signal?.aborted; +}; + +export const FilesDownloadProgress: React.FC = ({ + attributesList, + setAttributesList, +}) => { + const appContext = useContext(AppContext); + const galleryContext = useContext(GalleryContext); + + if (!attributesList) { + return <>; + } + + const onClose = (id: number) => { + setAttributesList(attributesList.filter((attr) => attr.id !== id)); + }; + + const confirmCancelUpload = ( + attributes: FilesDownloadProgressAttributes, + ) => { + appContext.setDialogMessage({ + title: t("STOP_DOWNLOADS_HEADER"), + content: t("STOP_ALL_DOWNLOADS_MESSAGE"), + proceed: { + text: t("YES_STOP_DOWNLOADS"), + variant: "critical", + action: () => { + attributes?.canceller.abort(); + onClose(attributes.id); + }, + }, + close: { + text: t("NO"), + variant: "secondary", + action: () => {}, + }, + }); + }; + + const handleClose = (attributes: FilesDownloadProgressAttributes) => () => { + if (isFilesDownloadCompleted(attributes)) { + onClose(attributes.id); + } else { + confirmCancelUpload(attributes); + } + }; + + const handleOnClick = (id: number) => () => { + const attributes = attributesList.find((attr) => attr.id === id); + if (isElectron()) { + ElectronAPIs.openDirectory(attributes.downloadDirPath); + } else { + if (attributes.isHidden) { + galleryContext.openHiddenSection(() => { + galleryContext.setActiveCollectionID( + attributes.collectionID, + ); + }); + } else { + galleryContext.setActiveCollectionID(attributes.collectionID); + } + } + }; + + return ( + <> + {attributesList.map((attributes, index) => ( + + ))} + + ); +}; diff --git a/web/apps/photos/src/components/FixCreationTime/footer.tsx b/web/apps/photos/src/components/FixCreationTime/footer.tsx new file mode 100644 index 000000000..61c6f572d --- /dev/null +++ b/web/apps/photos/src/components/FixCreationTime/footer.tsx @@ -0,0 +1,58 @@ +import { t } from "i18next"; +import { Button } from "react-bootstrap"; +import { FIX_STATE } from "."; + +export default function FixCreationTimeFooter({ + fixState, + startFix, + ...props +}) { + return ( + fixState !== FIX_STATE.RUNNING && ( +
+ {(fixState === FIX_STATE.NOT_STARTED || + fixState === FIX_STATE.COMPLETED_WITH_ERRORS) && ( + + )} + {fixState === FIX_STATE.COMPLETED && ( + + )} + {(fixState === FIX_STATE.NOT_STARTED || + fixState === FIX_STATE.COMPLETED_WITH_ERRORS) && ( + <> +
+ + + + )} +
+ ) + ); +} diff --git a/web/apps/photos/src/components/FixCreationTime/index.tsx b/web/apps/photos/src/components/FixCreationTime/index.tsx new file mode 100644 index 000000000..fd4022e19 --- /dev/null +++ b/web/apps/photos/src/components/FixCreationTime/index.tsx @@ -0,0 +1,154 @@ +import DialogBox from "@ente/shared/components/DialogBox/"; +import { Formik } from "formik"; +import { GalleryContext } from "pages/gallery"; +import { useContext, useEffect, useState } from "react"; +import { updateCreationTimeWithExif } from "services/updateCreationTimeWithExif"; +import { EnteFile } from "types/file"; +import FixCreationTimeFooter from "./footer"; +import FixCreationTimeRunning from "./running"; + +import { t } from "i18next"; +import FixCreationTimeOptions from "./options"; +export interface FixCreationTimeAttributes { + files: EnteFile[]; +} + +interface Props { + isOpen: boolean; + show: () => void; + hide: () => void; + attributes: FixCreationTimeAttributes; +} +export enum FIX_STATE { + NOT_STARTED, + RUNNING, + COMPLETED, + COMPLETED_WITH_ERRORS, +} + +export enum FIX_OPTIONS { + DATE_TIME_ORIGINAL, + DATE_TIME_DIGITIZED, + METADATA_DATE, + CUSTOM_TIME, +} + +interface formValues { + option: FIX_OPTIONS; + customTime: Date; +} + +function Message({ fixState }: { fixState: FIX_STATE }) { + let message = null; + switch (fixState) { + case FIX_STATE.NOT_STARTED: + message = t("UPDATE_CREATION_TIME_NOT_STARTED"); + break; + case FIX_STATE.COMPLETED: + message = t("UPDATE_CREATION_TIME_COMPLETED"); + break; + case FIX_STATE.COMPLETED_WITH_ERRORS: + message = t("UPDATE_CREATION_TIME_COMPLETED_WITH_ERROR"); + break; + } + return message ?
{message}
: <>; +} +export default function FixCreationTime(props: Props) { + const [fixState, setFixState] = useState(FIX_STATE.NOT_STARTED); + const [progressTracker, setProgressTracker] = useState({ + current: 0, + total: 0, + }); + const galleryContext = useContext(GalleryContext); + useEffect(() => { + if ( + props.attributes && + props.isOpen && + fixState !== FIX_STATE.RUNNING + ) { + setFixState(FIX_STATE.NOT_STARTED); + } + }, [props.isOpen]); + + const startFix = async (option: FIX_OPTIONS, customTime: Date) => { + setFixState(FIX_STATE.RUNNING); + const completedWithoutError = await updateCreationTimeWithExif( + props.attributes.files, + option, + customTime, + setProgressTracker, + ); + if (!completedWithoutError) { + setFixState(FIX_STATE.COMPLETED); + } else { + setFixState(FIX_STATE.COMPLETED_WITH_ERRORS); + } + await galleryContext.syncWithRemote(); + }; + if (!props.attributes) { + return <>; + } + + const onSubmit = (values: formValues) => { + startFix(Number(values.option), new Date(values.customTime)); + }; + + return ( + +
+ + + {fixState === FIX_STATE.RUNNING && ( + + )} + + initialValues={{ + option: FIX_OPTIONS.DATE_TIME_ORIGINAL, + customTime: new Date(), + }} + validateOnBlur={false} + onSubmit={onSubmit} + > + {({ values, handleChange, handleSubmit }) => ( + <> + {(fixState === FIX_STATE.NOT_STARTED || + fixState === + FIX_STATE.COMPLETED_WITH_ERRORS) && ( +
+ +
+ )} + + + )} + +
+
+ ); +} diff --git a/web/apps/photos/src/components/FixCreationTime/options.tsx b/web/apps/photos/src/components/FixCreationTime/options.tsx new file mode 100644 index 000000000..880ea0539 --- /dev/null +++ b/web/apps/photos/src/components/FixCreationTime/options.tsx @@ -0,0 +1,90 @@ +import { Row, Value } from "@ente/shared/components/Container"; +import EnteDateTimePicker from "components/EnteDateTimePicker"; +import { t } from "i18next"; +import { ChangeEvent } from "react"; +import { Form } from "react-bootstrap"; +import { FIX_OPTIONS } from "."; + +const Option = ({ + value, + selected, + onChange, + label, +}: { + value: FIX_OPTIONS; + selected: FIX_OPTIONS; + onChange: (e: string | ChangeEvent) => void; + label: string; +}) => ( + + + + {label} + + +); + +export default function FixCreationTimeOptions({ handleChange, values }) { + return ( +
+ + + + + + + + + + {Number(values.option) === FIX_OPTIONS.CUSTOM_TIME && ( + + + handleChange("customTime")(x.toUTCString()) + } + /> + + )} + +
+ ); +} diff --git a/web/apps/photos/src/components/FixCreationTime/running.tsx b/web/apps/photos/src/components/FixCreationTime/running.tsx new file mode 100644 index 000000000..dbceb6c12 --- /dev/null +++ b/web/apps/photos/src/components/FixCreationTime/running.tsx @@ -0,0 +1,35 @@ +import { ComfySpan } from "components/ExportInProgress"; +import { t } from "i18next"; +import { ProgressBar } from "react-bootstrap"; + +export default function FixCreationTimeRunning({ progressTracker }) { + return ( + <> +
+ + {" "} + {progressTracker.current} / {progressTracker.total}{" "} + {" "} + + {" "} + {t("CREATION_TIME_UPDATED")} + +
+
+ +
+ + ); +} diff --git a/web/apps/photos/src/components/FixLargeThumbnail.tsx b/web/apps/photos/src/components/FixLargeThumbnail.tsx new file mode 100644 index 000000000..e62fafda3 --- /dev/null +++ b/web/apps/photos/src/components/FixLargeThumbnail.tsx @@ -0,0 +1,235 @@ +import DialogBox from "@ente/shared/components/DialogBox/"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { t } from "i18next"; +import React, { useEffect, useState } from "react"; +import { Button, ProgressBar } from "react-bootstrap"; +import { + getLargeThumbnailFiles, + replaceThumbnail, +} from "services/migrateThumbnailService"; +import { ComfySpan } from "./ExportInProgress"; + +export type SetProgressTracker = React.Dispatch< + React.SetStateAction<{ + current: number; + total: number; + }> +>; +interface Props { + isOpen: boolean; + show: () => void; + hide: () => void; +} +export enum FIX_STATE { + NOT_STARTED, + FIX_LATER, + NOOP, + RUNNING, + COMPLETED, + COMPLETED_WITH_ERRORS, +} +function Message({ fixState }: { fixState: FIX_STATE }) { + let message = null; + switch (fixState) { + case FIX_STATE.NOT_STARTED: + case FIX_STATE.FIX_LATER: + message = t("REPLACE_THUMBNAIL_NOT_STARTED"); + break; + case FIX_STATE.COMPLETED: + message = t("REPLACE_THUMBNAIL_COMPLETED"); + break; + case FIX_STATE.NOOP: + message = t("REPLACE_THUMBNAIL_NOOP"); + break; + case FIX_STATE.COMPLETED_WITH_ERRORS: + message = t("REPLACE_THUMBNAIL_COMPLETED_WITH_ERROR"); + break; + } + return message ? ( +
{message}
+ ) : ( + <> + ); +} +export default function FixLargeThumbnails(props: Props) { + const [fixState, setFixState] = useState(FIX_STATE.NOT_STARTED); + const [progressTracker, setProgressTracker] = useState({ + current: 0, + total: 0, + }); + const [largeThumbnailFiles, setLargeThumbnailFiles] = useState( + [], + ); + + const init = (): FIX_STATE => { + let fixState = getData(LS_KEYS.THUMBNAIL_FIX_STATE)?.state; + if (!fixState || fixState === FIX_STATE.RUNNING) { + fixState = FIX_STATE.NOT_STARTED; + updateFixState(fixState); + } + if (fixState === FIX_STATE.COMPLETED) { + fixState = FIX_STATE.NOOP; + updateFixState(fixState); + } + setFixState(fixState); + return fixState; + }; + + const fetchLargeThumbnail = async () => { + const largeThumbnailFiles = (await getLargeThumbnailFiles()) ?? []; + setLargeThumbnailFiles(largeThumbnailFiles); + return largeThumbnailFiles; + }; + + const main = async () => { + const largeThumbnailFiles = await fetchLargeThumbnail(); + if ( + fixState === FIX_STATE.NOT_STARTED && + largeThumbnailFiles.length > 0 + ) { + props.show(); + } + if ( + (fixState === FIX_STATE.COMPLETED || fixState === FIX_STATE.NOOP) && + largeThumbnailFiles.length > 0 + ) { + updateFixState(FIX_STATE.NOT_STARTED); + logError(Error(), "large thumbnail files left after migration"); + } + if (largeThumbnailFiles.length === 0 && fixState !== FIX_STATE.NOOP) { + updateFixState(FIX_STATE.NOOP); + } + }; + useEffect(() => { + if (props.isOpen && fixState !== FIX_STATE.RUNNING) { + main(); + } + }, [props.isOpen]); + + useEffect(() => { + const fixState = init(); + if (fixState === FIX_STATE.NOT_STARTED) { + main(); + } + }, []); + const startFix = async (newlyFetchedLargeThumbnailFiles?: number[]) => { + updateFixState(FIX_STATE.RUNNING); + const completedWithError = await replaceThumbnail( + setProgressTracker, + new Set( + newlyFetchedLargeThumbnailFiles ?? largeThumbnailFiles ?? [], + ), + ); + if (typeof completedWithError !== "undefined") { + updateFixState( + completedWithError + ? FIX_STATE.COMPLETED_WITH_ERRORS + : FIX_STATE.COMPLETED, + ); + } + await fetchLargeThumbnail(); + }; + + const updateFixState = (fixState: FIX_STATE) => { + setFixState(fixState); + setData(LS_KEYS.THUMBNAIL_FIX_STATE, { state: fixState }); + }; + return ( + +
+ + + {fixState === FIX_STATE.RUNNING && ( + <> +
+ + {" "} + {progressTracker.current} /{" "} + {progressTracker.total}{" "} + {" "} + + {" "} + {t("THUMBNAIL_REPLACED")} + +
+
+ +
+ + )} +
+ {fixState === FIX_STATE.NOT_STARTED || + fixState === FIX_STATE.FIX_LATER ? ( + + ) : ( + + )} + {(fixState === FIX_STATE.NOT_STARTED || + fixState === FIX_STATE.FIX_LATER || + fixState === FIX_STATE.COMPLETED_WITH_ERRORS) && ( + <> +
+ + + + )} +
+
+ + ); +} diff --git a/web/apps/photos/src/components/FullScreenDropZone.tsx b/web/apps/photos/src/components/FullScreenDropZone.tsx new file mode 100644 index 000000000..8e6a564b7 --- /dev/null +++ b/web/apps/photos/src/components/FullScreenDropZone.tsx @@ -0,0 +1,98 @@ +import CloseIcon from "@mui/icons-material/Close"; +import { styled } from "@mui/material"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import React, { useContext, useEffect, useState } from "react"; + +const CloseButtonWrapper = styled("div")` + position: absolute; + top: 10px; + right: 10px; + cursor: pointer; +`; +const DropDiv = styled("div")` + flex: 1; + display: flex; + flex-direction: column; +`; +const Overlay = styled("div")` + border-width: 8px; + left: 0; + top: 0; + outline: none; + transition: border 0.24s ease-in-out; + height: 100%; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + color: #fff; + font-size: 24px; + font-weight: 900; + text-align: center; + position: absolute; + border-color: #51cd7c; + border-style: solid; + background: rgba(0, 0, 0, 0.9); + z-index: 3000; +`; + +type Props = React.PropsWithChildren<{ + getDragAndDropRootProps: any; +}>; + +export default function FullScreenDropZone(props: Props) { + const appContext = useContext(AppContext); + + const [isDragActive, setIsDragActive] = useState(false); + const onDragEnter = () => setIsDragActive(true); + const onDragLeave = () => setIsDragActive(false); + + useEffect(() => { + window.addEventListener("keydown", (event) => { + if (event.code === "Escape") { + onDragLeave(); + } + }); + }, []); + + useEffect(() => { + const handleWatchFolderDrop = (e: DragEvent) => { + if (!appContext.watchFolderView) { + return; + } + + e.preventDefault(); + e.stopPropagation(); + const files = e.dataTransfer.files; + if (files.length > 0) { + appContext.setWatchFolderFiles(files); + } + }; + + addEventListener("drop", handleWatchFolderDrop); + return () => { + removeEventListener("drop", handleWatchFolderDrop); + }; + }, [appContext.watchFolderView]); + + return ( + + {isDragActive && ( + + + + + {appContext.watchFolderView + ? t("WATCH_FOLDER_DROPZONE_MESSAGE") + : t("UPLOAD_DROPZONE_MESSAGE")} + + )} + {props.children} + + ); +} diff --git a/web/apps/photos/src/components/GalleryEmptyState.tsx b/web/apps/photos/src/components/GalleryEmptyState.tsx new file mode 100644 index 000000000..399871782 --- /dev/null +++ b/web/apps/photos/src/components/GalleryEmptyState.tsx @@ -0,0 +1,105 @@ +import { + FlexWrapper, + VerticallyCentered, +} from "@ente/shared/components/Container"; +import { EnteLogo } from "@ente/shared/components/EnteLogo"; +import AddPhotoAlternateIcon from "@mui/icons-material/AddPhotoAlternateOutlined"; +import FolderIcon from "@mui/icons-material/FolderOutlined"; +import { Box, Button, Stack, Typography, styled } from "@mui/material"; +import { t } from "i18next"; +import { Trans } from "react-i18next"; +import uploadManager from "services/upload/uploadManager"; +import { UploadTypeSelectorIntent } from "types/gallery"; + +const Wrapper = styled(Box)` + display: flex; + flex-direction: column; + align-items: center; + text-align: center; +`; +const NonDraggableImage = styled("img")` + pointer-events: none; +`; + +export default function GalleryEmptyState({ openUploader }) { + return ( + + + + + }} + /> + + + {t("WELCOME_TO_ENTE_SUBHEADING")} + + + + {t("WHERE_YOUR_BEST_PHOTOS_LIVE")} + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/ItemList.tsx b/web/apps/photos/src/components/ItemList.tsx new file mode 100644 index 000000000..613bf58c3 --- /dev/null +++ b/web/apps/photos/src/components/ItemList.tsx @@ -0,0 +1,95 @@ +import { Box, Tooltip } from "@mui/material"; +import memoize from "memoize-one"; +import React, { ReactElement } from "react"; +import { + FixedSizeList as List, + ListChildComponentProps, + ListItemKeySelector, + areEqual, +} from "react-window"; + +export interface ItemListProps { + items: T[]; + generateItemKey: (item: T) => string | number; + getItemTitle: (item: T) => string; + renderListItem: (item: T) => JSX.Element; + maxHeight?: number; + itemSize?: number; +} + +interface ItemData { + renderListItem: (item: T) => JSX.Element; + getItemTitle: (item: T) => string; + items: T[]; +} + +const createItemData: ( + renderListItem: (item: T) => JSX.Element, + getItemTitle: (item: T) => string, + items: T[], +) => ItemData = memoize((renderListItem, getItemTitle, items) => ({ + renderListItem, + getItemTitle, + items, +})); + +// @ts-expect-error "TODO(MR): Understand and fix the type error here" +const Row: ({ + index, + style, + data, +}: ListChildComponentProps>) => ReactElement = React.memo( + ({ index, style, data }) => { + const { renderListItem, items, getItemTitle } = data; + return ( + +
{renderListItem(items[index])}
+
+ ); + }, + areEqual, +); + +export default function ItemList(props: ItemListProps) { + const itemData = createItemData( + props.renderListItem, + props.getItemTitle, + props.items, + ); + + const getItemKey: ListItemKeySelector> = (index, data) => { + const { items } = data; + return props.generateItemKey(items[index]); + }; + + return ( + + + {Row} + + + ); +} diff --git a/web/apps/photos/src/components/LoadingOverlay.tsx b/web/apps/photos/src/components/LoadingOverlay.tsx new file mode 100644 index 000000000..90869c91a --- /dev/null +++ b/web/apps/photos/src/components/LoadingOverlay.tsx @@ -0,0 +1,16 @@ +import { styled } from "@mui/material"; +export const LoadingOverlay = styled("div")` + left: 0; + top: 0; + outline: none; + height: 100%; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + color: #fff; + font-weight: 900; + position: absolute; + background: rgba(0, 0, 0, 0.5); + z-index: 9000; +`; diff --git a/web/apps/photos/src/components/MachineLearning/ImageViews.tsx b/web/apps/photos/src/components/MachineLearning/ImageViews.tsx new file mode 100644 index 000000000..34cbbb8d4 --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/ImageViews.tsx @@ -0,0 +1,128 @@ +import { Skeleton, styled } from "@mui/material"; +import { useEffect, useState } from "react"; + +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { cached } from "@ente/shared/storage/cacheStorage/helpers"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { User } from "@ente/shared/user/types"; +import machineLearningService from "services/machineLearning/machineLearningService"; +import { imageBitmapToBlob } from "utils/image"; + +export const FaceCropsRow = styled("div")` + & > img { + width: 256px; + height: 256px; + } +`; + +export const FaceImagesRow = styled("div")` + & > img { + width: 112px; + height: 112px; + } +`; + +export function ImageCacheView(props: { + url: string; + cacheName: string; + faceID: string; +}) { + const [imageBlob, setImageBlob] = useState(); + + useEffect(() => { + let didCancel = false; + async function loadImage() { + try { + const user: User = getData(LS_KEYS.USER); + let blob: Blob; + if (!props.url || !props.cacheName || !user) { + blob = undefined; + } else { + blob = await cached( + props.cacheName, + props.url, + async () => { + try { + addLogLine( + "ImageCacheView: regenerate face crop", + props.faceID, + ); + return machineLearningService.regenerateFaceCrop( + user.token, + user.id, + props.faceID, + ); + } catch (e) { + logError( + e, + "ImageCacheView: regenerate face crop failed", + ); + } + }, + ); + } + + !didCancel && setImageBlob(blob); + } catch (e) { + logError(e, "ImageCacheView useEffect failed"); + } + } + loadImage(); + return () => { + didCancel = true; + }; + }, [props.url, props.cacheName]); + + return ( + <> + + + ); +} + +export function ImageBitmapView(props: { image: ImageBitmap }) { + const [imageBlob, setImageBlob] = useState(); + + useEffect(() => { + let didCancel = false; + + async function loadImage() { + const blob = props.image && (await imageBitmapToBlob(props.image)); + !didCancel && setImageBlob(blob); + } + + loadImage(); + return () => { + didCancel = true; + }; + }, [props.image]); + + return ( + <> + + + ); +} + +export function ImageBlobView(props: { blob: Blob }) { + const [imgUrl, setImgUrl] = useState(); + + useEffect(() => { + try { + setImgUrl(props.blob && URL.createObjectURL(props.blob)); + } catch (e) { + console.error( + "ImageBlobView: can not create object url for blob: ", + props.blob, + e, + ); + } + }, [props.blob]); + + return imgUrl ? ( + + ) : ( + + ); +} diff --git a/web/apps/photos/src/components/MachineLearning/MLFileDebugView.tsx b/web/apps/photos/src/components/MachineLearning/MLFileDebugView.tsx new file mode 100644 index 000000000..a6c96476b --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/MLFileDebugView.tsx @@ -0,0 +1,228 @@ +import { addLogLine } from "@ente/shared/logging"; +import "@tensorflow/tfjs-backend-cpu"; +import "@tensorflow/tfjs-backend-webgl"; +import { DEFAULT_ML_SYNC_CONFIG } from "constants/mlConfig"; +import { useEffect, useRef, useState } from "react"; +import arcfaceAlignmentService from "services/machineLearning/arcfaceAlignmentService"; +import arcfaceCropService from "services/machineLearning/arcfaceCropService"; +import blazeFaceDetectionService from "services/machineLearning/blazeFaceDetectionService"; +import imageSceneService from "services/machineLearning/imageSceneService"; +import ssdMobileNetV2Service from "services/machineLearning/ssdMobileNetV2Service"; +import { AlignedFace, FaceCrop, ObjectDetection } from "types/machineLearning"; +import { getMLSyncConfig } from "utils/machineLearning/config"; +import { + getAlignedFaceBox, + ibExtractFaceImage, + ibExtractFaceImageUsingTransform, +} from "utils/machineLearning/faceAlign"; +import { ibExtractFaceImageFromCrop } from "utils/machineLearning/faceCrop"; +import { FaceCropsRow, FaceImagesRow, ImageBitmapView } from "./ImageViews"; + +interface MLFileDebugViewProps { + file: File; +} + +function drawFaceDetection(face: AlignedFace, ctx: CanvasRenderingContext2D) { + const pointSize = Math.ceil( + Math.max(ctx.canvas.width / 512, face.detection.box.width / 32), + ); + + ctx.save(); + ctx.strokeStyle = "rgba(255, 0, 0, 0.8)"; + ctx.lineWidth = pointSize; + ctx.strokeRect( + face.detection.box.x, + face.detection.box.y, + face.detection.box.width, + face.detection.box.height, + ); + ctx.restore(); + + ctx.save(); + ctx.strokeStyle = "rgba(0, 255, 0, 0.8)"; + ctx.lineWidth = Math.round(pointSize * 1.5); + const alignedBox = getAlignedFaceBox(face.alignment); + ctx.strokeRect( + alignedBox.x, + alignedBox.y, + alignedBox.width, + alignedBox.height, + ); + ctx.restore(); + + ctx.save(); + ctx.fillStyle = "rgba(0, 0, 255, 0.8)"; + face.detection.landmarks.forEach((l) => { + ctx.beginPath(); + ctx.arc(l.x, l.y, pointSize, 0, Math.PI * 2, true); + ctx.fill(); + }); + ctx.restore(); +} + +function drawBbox(object: ObjectDetection, ctx: CanvasRenderingContext2D) { + ctx.font = "100px Arial"; + ctx.save(); + ctx.restore(); + ctx.rect(...object.bbox); + ctx.lineWidth = 10; + ctx.strokeStyle = "green"; + ctx.fillStyle = "green"; + ctx.stroke(); + ctx.fillText( + object.score.toFixed(3) + " " + object.class, + object.bbox[0], + object.bbox[1] > 10 ? object.bbox[1] - 5 : 10, + ); +} + +export default function MLFileDebugView(props: MLFileDebugViewProps) { + // const [imageBitmap, setImageBitmap] = useState(); + const [faceCrops, setFaceCrops] = useState(); + const [facesUsingCrops, setFacesUsingCrops] = useState(); + const [facesUsingImage, setFacesUsingImage] = useState(); + const [facesUsingTransform, setFacesUsingTransform] = + useState(); + + const canvasRef = useRef(null); + + useEffect(() => { + let didCancel = false; + const loadFile = async () => { + // TODO: go through worker for these apis, to not include ml code in main bundle + const imageBitmap = await createImageBitmap(props.file); + const faceDetections = + await blazeFaceDetectionService.detectFaces(imageBitmap); + addLogLine("detectedFaces: ", faceDetections.length); + + const objectDetections = await ssdMobileNetV2Service.detectObjects( + imageBitmap, + DEFAULT_ML_SYNC_CONFIG.objectDetection.maxNumBoxes, + DEFAULT_ML_SYNC_CONFIG.objectDetection.minScore, + ); + addLogLine("detectedObjects: ", JSON.stringify(objectDetections)); + + const sceneDetections = await imageSceneService.detectScenes( + imageBitmap, + DEFAULT_ML_SYNC_CONFIG.sceneDetection.minScore, + ); + addLogLine("detectedScenes: ", JSON.stringify(sceneDetections)); + + const mlSyncConfig = await getMLSyncConfig(); + const faceCropPromises = faceDetections.map(async (faceDetection) => + arcfaceCropService.getFaceCrop( + imageBitmap, + faceDetection, + mlSyncConfig.faceCrop, + ), + ); + + const faceCrops = await Promise.all(faceCropPromises); + if (didCancel) return; + setFaceCrops(faceCrops); + + const faceAlignments = faceDetections.map((detection) => + arcfaceAlignmentService.getFaceAlignment(detection), + ); + addLogLine("alignedFaces: ", JSON.stringify(faceAlignments)); + + const canvas: HTMLCanvasElement = canvasRef.current; + canvas.width = imageBitmap.width; + canvas.height = imageBitmap.height; + const ctx = canvas.getContext("2d"); + if (didCancel) return; + ctx.drawImage(imageBitmap, 0, 0); + const alignedFaces = faceAlignments.map((alignment, i) => { + return { + detection: faceDetections[i], + alignment, + } as AlignedFace; + }); + alignedFaces.forEach((alignedFace) => + drawFaceDetection(alignedFace, ctx), + ); + + objectDetections.forEach((object) => drawBbox(object, ctx)); + + const facesUsingCrops = await Promise.all( + alignedFaces.map((face, i) => { + return ibExtractFaceImageFromCrop( + faceCrops[i], + face.alignment, + 112, + ); + }), + ); + const facesUsingImage = await Promise.all( + alignedFaces.map((face) => { + return ibExtractFaceImage(imageBitmap, face.alignment, 112); + }), + ); + const facesUsingTransform = await Promise.all( + alignedFaces.map((face) => { + return ibExtractFaceImageUsingTransform( + imageBitmap, + face.alignment, + 112, + ); + }), + ); + + if (didCancel) return; + setFacesUsingCrops(facesUsingCrops); + setFacesUsingImage(facesUsingImage); + setFacesUsingTransform(facesUsingTransform); + }; + + props.file && loadFile(); + return () => { + didCancel = true; + }; + }, [props.file]); + + return ( +
+

+ {/* */} + +

+
Face Crops:
+ + {faceCrops?.map((faceCrop, i) => ( + + ))} + + +

+ +
Face Images using face crops:
+ + {facesUsingCrops?.map((image, i) => ( + + ))} + + +
Face Images using original image:
+ + {facesUsingImage?.map((image, i) => ( + + ))} + + +
Face Images using transfrom:
+ + {facesUsingTransform?.map((image, i) => ( + + ))} + +
+ ); +} diff --git a/web/apps/photos/src/components/MachineLearning/MLSearchSettings/enableFaceSearch.tsx b/web/apps/photos/src/components/MachineLearning/MLSearchSettings/enableFaceSearch.tsx new file mode 100644 index 000000000..469144639 --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/MLSearchSettings/enableFaceSearch.tsx @@ -0,0 +1,115 @@ +import { FACE_SEARCH_PRIVACY_POLICY_LINK } from "@ente/shared/constants/urls"; +import { + Button, + Checkbox, + DialogProps, + FormControlLabel, + FormGroup, + Link, + Stack, + Typography, +} from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { useEffect, useState } from "react"; +import { Trans } from "react-i18next"; +export default function EnableFaceSearch({ + open, + onClose, + enableFaceSearch, + onRootClose, +}) { + const [acceptTerms, setAcceptTerms] = useState(false); + + useEffect(() => { + setAcceptTerms(false); + }, [open]); + + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + onClose(); + } + }; + return ( + + + + + + + ), + }} + /> + + + + setAcceptTerms(e.target.checked) + } + /> + } + label={t("FACE_SEARCH_CONFIRMATION")} + /> + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/MachineLearning/MLSearchSettings/enableMLSearch.tsx b/web/apps/photos/src/components/MachineLearning/MLSearchSettings/enableMLSearch.tsx new file mode 100644 index 000000000..9abed5a23 --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/MLSearchSettings/enableMLSearch.tsx @@ -0,0 +1,46 @@ +import { ML_BLOG_LINK } from "@ente/shared/constants/urls"; +import { Box, Button, Stack, Typography } from "@mui/material"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { Trans } from "react-i18next"; +import { openLink } from "utils/common"; + +export default function EnableMLSearch({ + onClose, + enableMlSearch, + onRootClose, +}) { + return ( + + + + + {" "} + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/MachineLearning/MLSearchSettings/index.tsx b/web/apps/photos/src/components/MachineLearning/MLSearchSettings/index.tsx new file mode 100644 index 000000000..b1da26a65 --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/MLSearchSettings/index.tsx @@ -0,0 +1,151 @@ +import { logError } from "@ente/shared/sentry"; +import { Box, DialogProps, Typography } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext, useState } from "react"; +import { Trans } from "react-i18next"; +import { + getFaceSearchEnabledStatus, + updateFaceSearchEnabledStatus, +} from "services/userService"; +import EnableFaceSearch from "./enableFaceSearch"; +import EnableMLSearch from "./enableMLSearch"; +import ManageMLSearch from "./manageMLSearch"; + +const MLSearchSettings = ({ open, onClose, onRootClose }) => { + const { + updateMlSearchEnabled, + mlSearchEnabled, + setDialogMessage, + somethingWentWrong, + startLoading, + finishLoading, + } = useContext(AppContext); + + const [enableFaceSearchView, setEnableFaceSearchView] = useState(false); + + const openEnableFaceSearch = () => { + setEnableFaceSearchView(true); + }; + const closeEnableFaceSearch = () => { + setEnableFaceSearchView(false); + }; + + const enableMlSearch = async () => { + try { + const hasEnabledFaceSearch = await getFaceSearchEnabledStatus(); + if (!hasEnabledFaceSearch) { + openEnableFaceSearch(); + } else { + updateMlSearchEnabled(true); + } + } catch (e) { + logError(e, "Enable ML search failed"); + somethingWentWrong(); + } + }; + + const enableFaceSearch = async () => { + try { + startLoading(); + await updateFaceSearchEnabledStatus(true); + updateMlSearchEnabled(true); + closeEnableFaceSearch(); + finishLoading(); + } catch (e) { + logError(e, "Enable face search failed"); + somethingWentWrong(); + } + }; + + const disableMlSearch = async () => { + try { + await updateMlSearchEnabled(false); + onClose(); + } catch (e) { + logError(e, "Disable ML search failed"); + somethingWentWrong(); + } + }; + + const disableFaceSearch = async () => { + try { + startLoading(); + await updateFaceSearchEnabledStatus(false); + await disableMlSearch(); + finishLoading(); + } catch (e) { + logError(e, "Disable face search failed"); + somethingWentWrong(); + } + }; + + const confirmDisableFaceSearch = () => { + setDialogMessage({ + title: t("DISABLE_FACE_SEARCH_TITLE"), + content: ( + + + + ), + close: { text: t("CANCEL") }, + proceed: { + variant: "primary", + text: t("DISABLE_FACE_SEARCH"), + action: disableFaceSearch, + }, + }); + }; + + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + onClose(); + } + }; + + return ( + + + {mlSearchEnabled ? ( + + ) : ( + + )} + + + + + ); +}; + +export default MLSearchSettings; diff --git a/web/apps/photos/src/components/MachineLearning/MLSearchSettings/manageMLSearch.tsx b/web/apps/photos/src/components/MachineLearning/MLSearchSettings/manageMLSearch.tsx new file mode 100644 index 000000000..15dacd7b2 --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/MLSearchSettings/manageMLSearch.tsx @@ -0,0 +1,38 @@ +import { Box, Stack } from "@mui/material"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; + +export default function ManageMLSearch({ + onClose, + disableMlSearch, + handleDisableFaceSearch, + onRootClose, +}) { + return ( + + + + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/MachineLearning/MLServiceFileInfoButton.tsx b/web/apps/photos/src/components/MachineLearning/MLServiceFileInfoButton.tsx new file mode 100644 index 000000000..8146e239d --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/MLServiceFileInfoButton.tsx @@ -0,0 +1,60 @@ +import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers"; +import { useState } from "react"; +import { Button, Spinner } from "react-bootstrap"; +import { EnteFile } from "types/file"; +import mlService from "../../services/machineLearning/machineLearningService"; + +function MLServiceFileInfoButton({ + file, + updateMLDataIndex, + setUpdateMLDataIndex, +}: { + file: EnteFile; + updateMLDataIndex: number; + setUpdateMLDataIndex: (num: number) => void; +}) { + const [mlServiceRunning, setMlServiceRunning] = useState(false); + + const runMLService = async () => { + setMlServiceRunning(true); + const token = getToken(); + const userID = getUserID(); + + // index 4 is for timeout of 240 seconds + await mlService.syncLocalFile(token, userID, file as EnteFile, null, 4); + + setUpdateMLDataIndex(updateMLDataIndex + 1); + setMlServiceRunning(false); + }; + + return ( +
+ +
+ ); +} + +export default MLServiceFileInfoButton; diff --git a/web/apps/photos/src/components/MachineLearning/ObjectList.tsx b/web/apps/photos/src/components/MachineLearning/ObjectList.tsx new file mode 100644 index 000000000..f22ccc06f --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/ObjectList.tsx @@ -0,0 +1,51 @@ +import Box from "@mui/material/Box"; +import { Chip } from "components/Chip"; +import { Legend } from "components/PhotoViewer/styledComponents/Legend"; +import { t } from "i18next"; +import { useEffect, useState } from "react"; +import { EnteFile } from "types/file"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; + +export function ObjectLabelList(props: { + file: EnteFile; + updateMLDataIndex: number; +}) { + const [objects, setObjects] = useState>([]); + useEffect(() => { + let didCancel = false; + const main = async () => { + const objects = await mlIDbStorage.getAllObjectsMap(); + const uniqueObjectNames = [ + ...new Set( + (objects.get(props.file.id) ?? []).map( + (object) => object.detection.class, + ), + ), + ]; + !didCancel && setObjects(uniqueObjectNames); + }; + main(); + return () => { + didCancel = true; + }; + }, [props.file, props.updateMLDataIndex]); + + if (objects.length === 0) return <>; + + return ( +
+ {t("OBJECTS")} + + {objects.map((object) => ( + {object} + ))} + +
+ ); +} diff --git a/web/apps/photos/src/components/MachineLearning/PeopleList.tsx b/web/apps/photos/src/components/MachineLearning/PeopleList.tsx new file mode 100644 index 000000000..fe7d323bb --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/PeopleList.tsx @@ -0,0 +1,187 @@ +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { CACHES } from "@ente/shared/storage/cacheStorage/constants"; +import { styled } from "@mui/material"; +import { Legend } from "components/PhotoViewer/styledComponents/Legend"; +import { t } from "i18next"; +import React, { useEffect, useState } from "react"; +import { EnteFile } from "types/file"; +import { Face, Person } from "types/machineLearning"; +import { + getAllPeople, + getPeopleList, + getUnidentifiedFaces, +} from "utils/machineLearning"; +import { ImageCacheView } from "./ImageViews"; + +const FaceChipContainer = styled("div")` + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + margin-top: 5px; + margin-bottom: 5px; + overflow: auto; +`; + +const FaceChip = styled("div")<{ clickable?: boolean }>` + width: 112px; + height: 112px; + margin: 5px; + border-radius: 50%; + overflow: hidden; + position: relative; + cursor: ${({ clickable }) => (clickable ? "pointer" : "normal")}; + & > img { + width: 100%; + height: 100%; + } +`; + +interface PeopleListPropsBase { + onSelect?: (person: Person, index: number) => void; +} + +export interface PeopleListProps extends PeopleListPropsBase { + people: Array; + maxRows?: number; +} + +export const PeopleList = React.memo((props: PeopleListProps) => { + return ( + + {props.people.map((person, index) => ( + + props.onSelect && props.onSelect(person, index) + } + > + + + ))} + + ); +}); + +export interface PhotoPeopleListProps extends PeopleListPropsBase { + file: EnteFile; + updateMLDataIndex: number; +} + +export function PhotoPeopleList(props: PhotoPeopleListProps) { + const [people, setPeople] = useState>([]); + + useEffect(() => { + let didCancel = false; + + async function updateFaceImages() { + addLogLine("calling getPeopleList"); + const startTime = Date.now(); + const people = await getPeopleList(props.file); + addLogLine("getPeopleList", Date.now() - startTime, "ms"); + addLogLine("getPeopleList done, didCancel: ", didCancel); + !didCancel && setPeople(people); + } + + updateFaceImages(); + + return () => { + didCancel = true; + }; + }, [props.file, props.updateMLDataIndex]); + + if (people.length === 0) return <>; + + return ( +
+ {t("PEOPLE")} + +
+ ); +} + +export interface AllPeopleListProps extends PeopleListPropsBase { + limit?: number; +} + +export function AllPeopleList(props: AllPeopleListProps) { + const [people, setPeople] = useState>([]); + + useEffect(() => { + let didCancel = false; + + async function updateFaceImages() { + try { + let people = await getAllPeople(); + if (props.limit) { + people = people.slice(0, props.limit); + } + !didCancel && setPeople(people); + } catch (e) { + logError(e, "updateFaceImages failed"); + } + } + updateFaceImages(); + return () => { + didCancel = true; + }; + }, [props.limit]); + + return ; +} + +export function UnidentifiedFaces(props: { + file: EnteFile; + updateMLDataIndex: number; +}) { + const [faces, setFaces] = useState>([]); + + useEffect(() => { + let didCancel = false; + + async function updateFaceImages() { + const faces = await getUnidentifiedFaces(props.file); + !didCancel && setFaces(faces); + } + + updateFaceImages(); + + return () => { + didCancel = true; + }; + }, [props.file, props.updateMLDataIndex]); + + if (!faces || faces.length === 0) return <>; + + return ( + <> +
+ {t("UNIDENTIFIED_FACES")} +
+ + {faces && + faces.map((face, index) => ( + + + + ))} + + + ); +} diff --git a/web/apps/photos/src/components/MachineLearning/TFJSImage.tsx b/web/apps/photos/src/components/MachineLearning/TFJSImage.tsx new file mode 100644 index 000000000..84e261813 --- /dev/null +++ b/web/apps/photos/src/components/MachineLearning/TFJSImage.tsx @@ -0,0 +1,39 @@ +import * as tf from "@tensorflow/tfjs-core"; +import { useEffect, useRef } from "react"; +import { FaceImage } from "types/machineLearning"; + +interface FaceImageProps { + faceImage: FaceImage; + width?: number; + height?: number; +} + +export default function TFJSImage(props: FaceImageProps) { + const canvasRef = useRef(null); + + useEffect(() => { + if (!props || !props.faceImage) { + return; + } + const canvas = canvasRef.current; + const faceTensor = tf.tensor3d(props.faceImage); + const resized = + props.width && props.height + ? tf.image.resizeBilinear(faceTensor, [ + props.width, + props.height, + ]) + : faceTensor; + const normFaceImage = tf.div(tf.add(resized, 1.0), 2); + tf.browser.toPixels(normFaceImage as tf.Tensor3D, canvas); + }, [props]); + + return ( + + ); +} diff --git a/web/apps/photos/src/components/MemberSubscriptionManage.tsx b/web/apps/photos/src/components/MemberSubscriptionManage.tsx new file mode 100644 index 000000000..b9da0e6a0 --- /dev/null +++ b/web/apps/photos/src/components/MemberSubscriptionManage.tsx @@ -0,0 +1,95 @@ +import { + FlexWrapper, + VerticallyCentered, +} from "@ente/shared/components/Container"; +import DialogTitleWithCloseButton from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import { Box, Button, Dialog, DialogContent, Typography } from "@mui/material"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext, useEffect } from "react"; +import billingService from "services/billingService"; +import { preloadImage } from "utils/common"; +import { getFamilyPlanAdmin } from "utils/user/family"; + +export function MemberSubscriptionManage({ open, userDetails, onClose }) { + const { setDialogMessage, isMobile } = useContext(AppContext); + + useEffect(() => { + preloadImage("/images/family-plan"); + }, []); + + async function onLeaveFamilyClick() { + try { + await billingService.leaveFamily(); + } catch (e) { + setDialogMessage({ + title: t("ERROR"), + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + } + } + const confirmLeaveFamily = () => + setDialogMessage({ + title: t("LEAVE_FAMILY_PLAN}"), + content: t("LEAVE_FAMILY_CONFIRM"), + proceed: { + text: t("LEAVE"), + action: onLeaveFamilyClick, + variant: "critical", + }, + close: { + text: t("CANCEL"), + }, + }); + + if (!userDetails) { + return <>; + } + + return ( + + + + {t("SUBSCRIPTION")} + + {t("FAMILY_PLAN")} + + + + + + {t("FAMILY_SUBSCRIPTION_INFO")} + + + {getFamilyPlanAdmin(userDetails.familyData)?.email} + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Menu/EnteMenuItem.tsx b/web/apps/photos/src/components/Menu/EnteMenuItem.tsx new file mode 100644 index 000000000..21a9889af --- /dev/null +++ b/web/apps/photos/src/components/Menu/EnteMenuItem.tsx @@ -0,0 +1,128 @@ +import { + SpaceBetweenFlex, + VerticallyCenteredFlex, +} from "@ente/shared/components/Container"; +import { + Box, + ButtonProps, + MenuItem, + Typography, + TypographyProps, +} from "@mui/material"; +import { CaptionedText } from "components/CaptionedText"; +import PublicShareSwitch from "components/Collections/CollectionShare/publicShare/switch"; +import ChangeDirectoryOption from "components/Directory/changeOption"; +import React from "react"; + +interface Iprops { + onClick: () => void; + color?: ButtonProps["color"]; + variant?: + | "primary" + | "captioned" + | "toggle" + | "secondary" + | "mini" + | "path"; + fontWeight?: TypographyProps["fontWeight"]; + startIcon?: React.ReactNode; + endIcon?: React.ReactNode; + label?: string; + subText?: string; + subIcon?: React.ReactNode; + checked?: boolean; + labelComponent?: React.ReactNode; + disabled?: boolean; +} +export function EnteMenuItem({ + onClick, + color = "primary", + startIcon, + endIcon, + label, + subText, + subIcon, + checked, + variant = "primary", + fontWeight = "bold", + labelComponent, + disabled = false, +}: Iprops) { + const handleButtonClick = () => { + if (variant === "path" || variant === "toggle") { + return; + } + onClick(); + }; + + const handleIconClick = () => { + if (variant !== "path" && variant !== "toggle") { + return; + } + onClick(); + }; + + return ( + + variant !== "captioned" && theme.palette[color].main, + ...(variant !== "secondary" && + variant !== "mini" && { + backgroundColor: (theme) => theme.colors.fill.faint, + }), + "&:hover": { + backgroundColor: (theme) => theme.colors.fill.faintPressed, + }, + "& .MuiSvgIcon-root": { + fontSize: "20px", + }, + p: 0, + borderRadius: "4px", + }} + > + + + {startIcon && startIcon} + + {labelComponent ? ( + labelComponent + ) : variant === "captioned" ? ( + + ) : variant === "mini" ? ( + + {label} + + ) : ( + + {label} + + )} + + + + {endIcon && endIcon} + {variant === "toggle" && ( + + )} + {variant === "path" && ( + + )} + + + + ); +} diff --git a/web/apps/photos/src/components/Menu/MenuItemDivider.tsx b/web/apps/photos/src/components/Menu/MenuItemDivider.tsx new file mode 100644 index 000000000..da3b309a2 --- /dev/null +++ b/web/apps/photos/src/components/Menu/MenuItemDivider.tsx @@ -0,0 +1,16 @@ +import { Divider } from "@mui/material"; +interface Iprops { + hasIcon?: boolean; +} +export default function MenuItemDivider({ hasIcon = false }: Iprops) { + return ( + + ); +} diff --git a/web/apps/photos/src/components/Menu/MenuItemGroup.tsx b/web/apps/photos/src/components/Menu/MenuItemGroup.tsx new file mode 100644 index 000000000..0b80262b5 --- /dev/null +++ b/web/apps/photos/src/components/Menu/MenuItemGroup.tsx @@ -0,0 +1,20 @@ +import { styled } from "@mui/material"; + +export const MenuItemGroup = styled("div")( + ({ theme }) => ` + & > .MuiMenuItem-root{ + border-radius: 8px; + background-color: transparent; + } + & > .MuiMenuItem-root:not(:last-of-type) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + & > .MuiMenuItem-root:not(:first-of-type) { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + background-color: ${theme.colors.fill.faint}; + border-radius: 8px; +`, +); diff --git a/web/apps/photos/src/components/Menu/MenuSectionTitle.tsx b/web/apps/photos/src/components/Menu/MenuSectionTitle.tsx new file mode 100644 index 000000000..5c07b8d92 --- /dev/null +++ b/web/apps/photos/src/components/Menu/MenuSectionTitle.tsx @@ -0,0 +1,28 @@ +import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; +import { Typography } from "@mui/material"; + +interface Iprops { + title: string; + icon?: JSX.Element; +} + +export default function MenuSectionTitle({ title, icon }: Iprops) { + return ( + svg": { + fontSize: "17px", + color: (theme) => theme.colors.stroke.muted, + }, + }} + > + {icon && icon} + + {title} + + + ); +} diff --git a/web/apps/photos/src/components/MultilineInput.tsx b/web/apps/photos/src/components/MultilineInput.tsx new file mode 100644 index 000000000..acf657e37 --- /dev/null +++ b/web/apps/photos/src/components/MultilineInput.tsx @@ -0,0 +1,56 @@ +import { Stack, TextField, Typography, TypographyProps } from "@mui/material"; + +interface Iprops { + label: string; + labelProps?: TypographyProps; + message?: string; + messageProps?: TypographyProps; + placeholder?: string; + value: string; + rowCount: number; + onChange: (value: string) => void; +} + +export default function MultilineInput({ + label, + labelProps, + message, + messageProps, + placeholder, + value, + rowCount, + onChange, +}: Iprops) { + return ( + + {label} + onChange(e.target.value)} + placeholder={placeholder} + sx={(theme) => ({ + border: "1px solid", + borderColor: theme.colors.stroke.faint, + borderRadius: "8px", + padding: "12px", + ".MuiInputBase-formControl": { + "::before, ::after": { + borderBottom: "none !important", + }, + }, + })} + /> + + {message} + + + ); +} diff --git a/web/apps/photos/src/components/Notification.tsx b/web/apps/photos/src/components/Notification.tsx new file mode 100644 index 000000000..f000d229e --- /dev/null +++ b/web/apps/photos/src/components/Notification.tsx @@ -0,0 +1,124 @@ +import CloseIcon from "@mui/icons-material/Close"; +import { + Box, + Button, + ButtonProps, + Snackbar, + Stack, + SxProps, + Theme, + Typography, +} from "@mui/material"; +import { NotificationAttributes } from "types/Notification"; + +import { IconButtonWithBG } from "@ente/shared/components/Container"; +import InfoIcon from "@mui/icons-material/InfoOutlined"; + +interface Iprops { + open: boolean; + onClose: () => void; + keepOpenOnClick?: boolean; + attributes: NotificationAttributes; + horizontal?: "left" | "right"; + vertical?: "top" | "bottom"; + sx?: SxProps; +} + +export default function Notification({ + open, + onClose, + horizontal, + vertical, + sx, + attributes, + keepOpenOnClick, +}: Iprops) { + if (!attributes) { + return <>; + } + + const handleClose: ButtonProps["onClick"] = (event) => { + onClose(); + event.stopPropagation(); + }; + + const handleClick = () => { + attributes.onClick(); + if (!keepOpenOnClick) { + onClose(); + } + }; + return ( + + + + ); +} diff --git a/web/apps/photos/src/components/PhotoFrame.tsx b/web/apps/photos/src/components/PhotoFrame.tsx new file mode 100644 index 000000000..835bdeb3a --- /dev/null +++ b/web/apps/photos/src/components/PhotoFrame.tsx @@ -0,0 +1,617 @@ +import { PHOTOS_PAGES } from "@ente/shared/constants/pages"; +import { CustomError } from "@ente/shared/error"; +import useMemoSingleThreaded from "@ente/shared/hooks/useMemoSingleThreaded"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { styled } from "@mui/material"; +import PhotoViewer from "components/PhotoViewer"; +import { TRASH_SECTION } from "constants/collection"; +import { FILE_TYPE } from "constants/file"; +import { useRouter } from "next/router"; +import { GalleryContext } from "pages/gallery"; +import PhotoSwipe from "photoswipe"; +import { useContext, useEffect, useState } from "react"; +import AutoSizer from "react-virtualized-auto-sizer"; +import { Duplicate } from "services/deduplicationService"; +import DownloadManager, { + LivePhotoSourceURL, + SourceURLs, +} from "services/download"; +import { EnteFile } from "types/file"; +import { + SelectedState, + SetFilesDownloadProgressAttributesCreator, +} from "types/gallery"; +import { updateFileMsrcProps, updateFileSrcProps } from "utils/photoFrame"; +import { PhotoList } from "./PhotoList"; +import { DedupePhotoList } from "./PhotoList/dedupe"; +import PreviewCard from "./pages/gallery/PreviewCard"; + +const Container = styled("div")` + display: block; + flex: 1; + width: 100%; + flex-wrap: wrap; + margin: 0 auto; + overflow: hidden; + .pswp-thumbnail { + display: inline-block; + cursor: pointer; + } +`; + +const PHOTOSWIPE_HASH_SUFFIX = "&opened"; + +interface Props { + page: + | PHOTOS_PAGES.GALLERY + | PHOTOS_PAGES.DEDUPLICATE + | PHOTOS_PAGES.SHARED_ALBUMS; + files: EnteFile[]; + duplicates?: Duplicate[]; + syncWithRemote: () => Promise; + favItemIds?: Set; + setSelected: ( + selected: SelectedState | ((selected: SelectedState) => SelectedState), + ) => void; + selected: SelectedState; + tempDeletedFileIds?: Set; + setTempDeletedFileIds?: (value: Set) => void; + activeCollectionID: number; + enableDownload?: boolean; + fileToCollectionsMap: Map; + collectionNameMap: Map; + showAppDownloadBanner?: boolean; + setIsPhotoSwipeOpen?: (value: boolean) => void; + isInHiddenSection?: boolean; + setFilesDownloadProgressAttributesCreator?: SetFilesDownloadProgressAttributesCreator; +} + +const PhotoFrame = ({ + page, + duplicates, + files, + syncWithRemote, + favItemIds, + setSelected, + selected, + tempDeletedFileIds, + setTempDeletedFileIds, + activeCollectionID, + enableDownload, + fileToCollectionsMap, + collectionNameMap, + showAppDownloadBanner, + setIsPhotoSwipeOpen, + isInHiddenSection, + setFilesDownloadProgressAttributesCreator, +}: Props) => { + const [open, setOpen] = useState(false); + const [currentIndex, setCurrentIndex] = useState(0); + const [fetching, setFetching] = useState<{ [k: number]: boolean }>({}); + const [thumbFetching, setThumbFetching] = useState<{ + [k: number]: boolean; + }>({}); + const galleryContext = useContext(GalleryContext); + const [rangeStart, setRangeStart] = useState(null); + const [currentHover, setCurrentHover] = useState(null); + const [isShiftKeyPressed, setIsShiftKeyPressed] = useState(false); + const router = useRouter(); + + const displayFiles = useMemoSingleThreaded(() => { + return files.map((item) => { + const filteredItem = { + ...item, + w: window.innerWidth, + h: window.innerHeight, + title: item.pubMagicMetadata?.data.caption, + }; + return filteredItem; + }); + }, [files]); + + useEffect(() => { + setFetching({}); + setThumbFetching({}); + }, [displayFiles]); + + useEffect(() => { + const currentURL = new URL(window.location.href); + const end = currentURL.hash.lastIndexOf("&"); + const hash = currentURL.hash.slice(1, end !== -1 ? end : undefined); + if (open) { + router.push({ + hash: hash + PHOTOSWIPE_HASH_SUFFIX, + }); + } else { + router.push({ + hash: hash, + }); + } + }, [open]); + + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === "Shift") { + setIsShiftKeyPressed(true); + } + }; + const handleKeyUp = (e: KeyboardEvent) => { + if (e.key === "Shift") { + setIsShiftKeyPressed(false); + } + }; + document.addEventListener("keydown", handleKeyDown, false); + document.addEventListener("keyup", handleKeyUp, false); + + router.events.on("hashChangeComplete", (url: string) => { + const start = url.indexOf("#"); + const hash = url.slice(start !== -1 ? start : url.length); + const shouldPhotoSwipeBeOpened = hash.endsWith( + PHOTOSWIPE_HASH_SUFFIX, + ); + if (shouldPhotoSwipeBeOpened) { + setIsPhotoSwipeOpen?.(true); + setOpen(true); + } else { + setIsPhotoSwipeOpen?.(false); + setOpen(false); + } + }); + + return () => { + document.removeEventListener("keydown", handleKeyDown, false); + document.removeEventListener("keyup", handleKeyUp, false); + }; + }, []); + + useEffect(() => { + if (selected.count === 0) { + setRangeStart(null); + } + }, [selected]); + + if (!displayFiles) { + return
; + } + + const updateURL = + (index: number) => (id: number, url: string, forceUpdate?: boolean) => { + const file = displayFiles[index]; + // this is to prevent outdated updateURL call from updating the wrong file + if (file.id !== id) { + addLogLine( + `[${id}]PhotoSwipe: updateURL: file id mismatch: ${file.id} !== ${id}`, + ); + throw Error(CustomError.UPDATE_URL_FILE_ID_MISMATCH); + } + if (file.msrc && !forceUpdate) { + throw Error(CustomError.URL_ALREADY_SET); + } + updateFileMsrcProps(file, url); + }; + + const updateSrcURL = async ( + index: number, + id: number, + srcURLs: SourceURLs, + forceUpdate?: boolean, + ) => { + const file = displayFiles[index]; + // this is to prevent outdate updateSrcURL call from updating the wrong file + if (file.id !== id) { + addLogLine( + `[${id}]PhotoSwipe: updateSrcURL: file id mismatch: ${file.id}`, + ); + throw Error(CustomError.UPDATE_URL_FILE_ID_MISMATCH); + } + if (file.isSourceLoaded && !forceUpdate) { + throw Error(CustomError.URL_ALREADY_SET); + } else if (file.conversionFailed) { + addLogLine(`[${id}]PhotoSwipe: updateSrcURL: conversion failed`); + throw Error(CustomError.FILE_CONVERSION_FAILED); + } + + await updateFileSrcProps(file, srcURLs, enableDownload); + }; + + const handleClose = (needUpdate) => { + setOpen(false); + needUpdate && syncWithRemote(); + setIsPhotoSwipeOpen?.(false); + }; + + const onThumbnailClick = (index: number) => () => { + setCurrentIndex(index); + setOpen(true); + setIsPhotoSwipeOpen?.(true); + }; + + const handleSelect = + (id: number, isOwnFile: boolean, index?: number) => + (checked: boolean) => { + if (typeof index !== "undefined") { + if (checked) { + setRangeStart(index); + } else { + setRangeStart(undefined); + } + } + setSelected((selected) => { + if (selected.collectionID !== activeCollectionID) { + selected = { ownCount: 0, count: 0, collectionID: 0 }; + } + + const handleCounterChange = (count: number) => { + if (selected[id] === checked) { + return count; + } + if (checked) { + return count + 1; + } else { + return count - 1; + } + }; + + const handleAllCounterChange = () => { + if (isOwnFile) { + return { + ownCount: handleCounterChange(selected.ownCount), + count: handleCounterChange(selected.count), + }; + } else { + return { + count: handleCounterChange(selected.count), + }; + } + }; + return { + ...selected, + [id]: checked, + collectionID: activeCollectionID, + ...handleAllCounterChange(), + }; + }); + }; + const onHoverOver = (index: number) => () => { + setCurrentHover(index); + }; + + const handleRangeSelect = (index: number) => () => { + if (typeof rangeStart !== "undefined" && rangeStart !== index) { + const direction = + (index - rangeStart) / Math.abs(index - rangeStart); + let checked = true; + for ( + let i = rangeStart; + (index - i) * direction >= 0; + i += direction + ) { + checked = checked && !!selected[displayFiles[i].id]; + } + for ( + let i = rangeStart; + (index - i) * direction > 0; + i += direction + ) { + handleSelect( + displayFiles[i].id, + displayFiles[i].ownerID === galleryContext.user?.id, + )(!checked); + } + handleSelect( + displayFiles[index].id, + displayFiles[index].ownerID === galleryContext.user?.id, + index, + )(!checked); + } + }; + const getThumbnail = ( + item: EnteFile, + index: number, + isScrolling: boolean, + ) => ( + 0} + onHover={onHoverOver(index)} + onRangeSelect={handleRangeSelect(index)} + isRangeSelectActive={isShiftKeyPressed && selected.count > 0} + isInsSelectRange={ + (index >= rangeStart && index <= currentHover) || + (index >= currentHover && index <= rangeStart) + } + activeCollectionID={activeCollectionID} + showPlaceholder={isScrolling} + /> + ); + + const getSlideData = async ( + instance: PhotoSwipe, + index: number, + item: EnteFile, + ) => { + addLogLine( + `[${ + item.id + }] getSlideData called for thumbnail:${!!item.msrc} sourceLoaded:${ + item.isSourceLoaded + } fetching:${fetching[item.id]}`, + ); + + if (!item.msrc) { + try { + if (thumbFetching[item.id]) { + addLogLine( + `[${item.id}] thumb download already in progress`, + ); + return; + } + addLogLine(`[${item.id}] doesn't have thumbnail`); + thumbFetching[item.id] = true; + const url = await DownloadManager.getThumbnailForPreview(item); + try { + updateURL(index)(item.id, url); + addLogLine( + `[${ + item.id + }] calling invalidateCurrItems for thumbnail msrc :${!!item.msrc}`, + ); + instance.invalidateCurrItems(); + if ((instance as any).isOpen()) { + instance.updateSize(true); + } + } catch (e) { + if (e.message !== CustomError.URL_ALREADY_SET) { + logError( + e, + "updating photoswipe after msrc url update failed", + ); + } + // ignore + } + } catch (e) { + logError(e, "getSlideData failed get msrc url failed"); + thumbFetching[item.id] = false; + } + } + + if (item.isSourceLoaded || item.conversionFailed) { + if (item.isSourceLoaded) { + addLogLine(`[${item.id}] source already loaded`); + } + if (item.conversionFailed) { + addLogLine(`[${item.id}] conversion failed`); + } + return; + } + if (fetching[item.id]) { + addLogLine(`[${item.id}] file download already in progress`); + return; + } + + try { + addLogLine(`[${item.id}] new file src request`); + fetching[item.id] = true; + const srcURLs = await DownloadManager.getFileForPreview(item); + if (item.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + const srcImgURL = srcURLs.url as LivePhotoSourceURL; + const imageURL = await srcImgURL.image(); + + const dummyImgSrcUrl: SourceURLs = { + url: imageURL, + isOriginal: false, + isRenderable: !!imageURL, + type: "normal", + }; + try { + await updateSrcURL(index, item.id, dummyImgSrcUrl); + addLogLine( + `[${item.id}] calling invalidateCurrItems for live photo imgSrc, source loaded :${item.isSourceLoaded}`, + ); + instance.invalidateCurrItems(); + if ((instance as any).isOpen()) { + instance.updateSize(true); + } + } catch (e) { + if (e.message !== CustomError.URL_ALREADY_SET) { + logError( + e, + "updating photoswipe after for live photo imgSrc update failed", + ); + } + } + if (!imageURL) { + // no image url, no need to load video + return; + } + + const videoURL = await srcImgURL.video(); + const loadedLivePhotoSrcURL: SourceURLs = { + url: { video: videoURL, image: imageURL }, + isOriginal: false, + isRenderable: !!videoURL, + type: "livePhoto", + }; + try { + await updateSrcURL( + index, + item.id, + loadedLivePhotoSrcURL, + true, + ); + addLogLine( + `[${item.id}] calling invalidateCurrItems for live photo complete, source loaded :${item.isSourceLoaded}`, + ); + instance.invalidateCurrItems(); + if ((instance as any).isOpen()) { + instance.updateSize(true); + } + } catch (e) { + if (e.message !== CustomError.URL_ALREADY_SET) { + logError( + e, + "updating photoswipe for live photo complete update failed", + ); + } + } + } else { + try { + await updateSrcURL(index, item.id, srcURLs); + addLogLine( + `[${item.id}] calling invalidateCurrItems for src, source loaded :${item.isSourceLoaded}`, + ); + instance.invalidateCurrItems(); + if ((instance as any).isOpen()) { + instance.updateSize(true); + } + } catch (e) { + if (e.message !== CustomError.URL_ALREADY_SET) { + logError( + e, + "updating photoswipe after src url update failed", + ); + } + } + } + } catch (e) { + logError(e, "getSlideData failed get src url failed"); + fetching[item.id] = false; + // no-op + } + }; + + const getConvertedItem = async ( + instance: PhotoSwipe, + index: number, + item: EnteFile, + ) => { + if ( + item.metadata.fileType !== FILE_TYPE.VIDEO && + item.metadata.fileType !== FILE_TYPE.LIVE_PHOTO + ) { + logError( + new Error(), + "getConvertedVideo called for non video file", + ); + return; + } + if (item.conversionFailed) { + logError( + new Error(), + "getConvertedVideo called for file that conversion failed", + ); + return; + } + try { + updateURL(index)(item.id, item.msrc, true); + addLogLine( + `[${ + item.id + }] calling invalidateCurrItems for thumbnail msrc :${!!item.msrc}`, + ); + instance.invalidateCurrItems(); + if ((instance as any).isOpen()) { + instance.updateSize(true); + } + } catch (e) { + if (e.message !== CustomError.URL_ALREADY_SET) { + logError(e, "updating photoswipe after msrc url update failed"); + } + // ignore + } + try { + addLogLine( + `[${item.id}] new file getConvertedVideo request- ${item.metadata.title}}`, + ); + fetching[item.id] = true; + + const srcURL = await DownloadManager.getFileForPreview(item, true); + + try { + await updateSrcURL(index, item.id, srcURL, true); + addLogLine( + `[${item.id}] calling invalidateCurrItems for src, source loaded :${item.isSourceLoaded}`, + ); + instance.invalidateCurrItems(); + if ((instance as any).isOpen()) { + instance.updateSize(true); + } + } catch (e) { + if (e.message !== CustomError.URL_ALREADY_SET) { + logError( + e, + "updating photoswipe after src url update failed", + ); + } + throw e; + } + } catch (e) { + logError(e, "getConvertedVideo failed get src url failed"); + fetching[item.id] = false; + // no-op + } + }; + + return ( + + + {({ height, width }) => + page === PHOTOS_PAGES.DEDUPLICATE ? ( + + ) : ( + + ) + } + + + + ); +}; + +export default PhotoFrame; diff --git a/web/apps/photos/src/components/PhotoList/dedupe.tsx b/web/apps/photos/src/components/PhotoList/dedupe.tsx new file mode 100644 index 000000000..8562b1ffb --- /dev/null +++ b/web/apps/photos/src/components/PhotoList/dedupe.tsx @@ -0,0 +1,367 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { Box, styled } from "@mui/material"; +import { + DATE_CONTAINER_HEIGHT, + GAP_BTW_TILES, + IMAGE_CONTAINER_MAX_HEIGHT, + IMAGE_CONTAINER_MAX_WIDTH, + MIN_COLUMNS, + SIZE_AND_COUNT_CONTAINER_HEIGHT, + SPACE_BTW_DATES, +} from "constants/gallery"; +import { t } from "i18next"; +import memoize from "memoize-one"; +import React, { useEffect, useMemo, useRef, useState } from "react"; +import { + VariableSizeList as List, + ListChildComponentProps, + areEqual, +} from "react-window"; +import { Duplicate } from "services/deduplicationService"; +import { EnteFile } from "types/file"; + +export enum ITEM_TYPE { + TIME = "TIME", + FILE = "FILE", + SIZE_AND_COUNT = "SIZE_AND_COUNT", + HEADER = "HEADER", + FOOTER = "FOOTER", + MARKETING_FOOTER = "MARKETING_FOOTER", + OTHER = "OTHER", +} + +export interface TimeStampListItem { + itemType: ITEM_TYPE; + items?: EnteFile[]; + itemStartIndex?: number; + date?: string; + dates?: { + date: string; + span: number; + }[]; + groups?: number[]; + item?: any; + id?: string; + height?: number; + fileSize?: number; + fileCount?: number; +} + +const ListItem = styled("div")` + display: flex; + justify-content: center; +`; + +const getTemplateColumns = ( + columns: number, + shrinkRatio: number, + groups?: number[], +): string => { + if (groups) { + // need to confirm why this was there + // const sum = groups.reduce((acc, item) => acc + item, 0); + // if (sum < columns) { + // groups[groups.length - 1] += columns - sum; + // } + return groups + .map( + (x) => + `repeat(${x}, ${IMAGE_CONTAINER_MAX_WIDTH * shrinkRatio}px)`, + ) + .join(` ${SPACE_BTW_DATES}px `); + } else { + return `repeat(${columns},${ + IMAGE_CONTAINER_MAX_WIDTH * shrinkRatio + }px)`; + } +}; + +function getFractionFittableColumns(width: number): number { + return ( + (width - 2 * getGapFromScreenEdge(width) + GAP_BTW_TILES) / + (IMAGE_CONTAINER_MAX_WIDTH + GAP_BTW_TILES) + ); +} + +function getGapFromScreenEdge(width: number) { + if (width > MIN_COLUMNS * IMAGE_CONTAINER_MAX_WIDTH) { + return 24; + } else { + return 4; + } +} + +function getShrinkRatio(width: number, columns: number) { + return ( + (width - + 2 * getGapFromScreenEdge(width) - + (columns - 1) * GAP_BTW_TILES) / + (columns * IMAGE_CONTAINER_MAX_WIDTH) + ); +} + +const ListContainer = styled(Box)<{ + columns: number; + shrinkRatio: number; + groups?: number[]; +}>` + display: grid; + grid-template-columns: ${({ columns, shrinkRatio, groups }) => + getTemplateColumns(columns, shrinkRatio, groups)}; + grid-column-gap: ${GAP_BTW_TILES}px; + width: 100%; + color: #fff; + padding: 0 24px; + @media (max-width: ${IMAGE_CONTAINER_MAX_WIDTH * MIN_COLUMNS}px) { + padding: 0 4px; + } +`; + +const ListItemContainer = styled(FlexWrapper)<{ span: number }>` + grid-column: span ${(props) => props.span}; +`; + +const DateContainer = styled(ListItemContainer)` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: ${DATE_CONTAINER_HEIGHT}px; + color: ${({ theme }) => theme.colors.text.muted}; +`; + +const SizeAndCountContainer = styled(DateContainer)` + margin-top: 1rem; + height: ${SIZE_AND_COUNT_CONTAINER_HEIGHT}px; +`; + +interface Props { + height: number; + width: number; + duplicates: Duplicate[]; + showAppDownloadBanner: boolean; + getThumbnail: ( + file: EnteFile, + index: number, + isScrolling?: boolean, + ) => JSX.Element; + activeCollectionID: number; +} + +interface ItemData { + timeStampList: TimeStampListItem[]; + columns: number; + shrinkRatio: number; + renderListItem: ( + timeStampListItem: TimeStampListItem, + isScrolling?: boolean, + ) => JSX.Element; +} + +const createItemData = memoize( + ( + timeStampList: TimeStampListItem[], + columns: number, + shrinkRatio: number, + renderListItem: ( + timeStampListItem: TimeStampListItem, + isScrolling?: boolean, + ) => JSX.Element, + ): ItemData => ({ + timeStampList, + columns, + shrinkRatio, + renderListItem, + }), +); +const PhotoListRow = React.memo( + ({ + index, + style, + isScrolling, + data, + }: ListChildComponentProps) => { + const { timeStampList, columns, shrinkRatio, renderListItem } = data; + return ( + + + {renderListItem(timeStampList[index], isScrolling)} + + + ); + }, + areEqual, +); + +const getTimeStampListFromDuplicates = (duplicates: Duplicate[], columns) => { + const timeStampList: TimeStampListItem[] = []; + for (let index = 0; index < duplicates.length; index++) { + const dupes = duplicates[index]; + timeStampList.push({ + itemType: ITEM_TYPE.SIZE_AND_COUNT, + fileSize: dupes.size, + fileCount: dupes.files.length, + }); + let lastIndex = 0; + while (lastIndex < dupes.files.length) { + timeStampList.push({ + itemType: ITEM_TYPE.FILE, + items: dupes.files.slice(lastIndex, lastIndex + columns), + itemStartIndex: index, + }); + lastIndex += columns; + } + } + return timeStampList; +}; + +export function DedupePhotoList({ + height, + width, + duplicates, + getThumbnail, + activeCollectionID, +}: Props) { + const [timeStampList, setTimeStampList] = useState([]); + const refreshInProgress = useRef(false); + const shouldRefresh = useRef(false); + const listRef = useRef(null); + + const columns = useMemo(() => { + const fittableColumns = getFractionFittableColumns(width); + let columns = Math.floor(fittableColumns); + if (columns < MIN_COLUMNS) { + columns = MIN_COLUMNS; + } + return columns; + }, [width]); + + const shrinkRatio = getShrinkRatio(width, columns); + const listItemHeight = + IMAGE_CONTAINER_MAX_HEIGHT * shrinkRatio + GAP_BTW_TILES; + + const refreshList = () => { + listRef.current?.resetAfterIndex(0); + }; + + useEffect(() => { + const main = () => { + if (refreshInProgress.current) { + shouldRefresh.current = true; + return; + } + refreshInProgress.current = true; + const timeStampList = getTimeStampListFromDuplicates( + duplicates, + columns, + ); + setTimeStampList(timeStampList); + refreshInProgress.current = false; + if (shouldRefresh.current) { + shouldRefresh.current = false; + setTimeout(main, 0); + } + }; + main(); + }, [columns, duplicates]); + + useEffect(() => { + refreshList(); + }, [timeStampList]); + + const getItemSize = (timeStampList) => (index) => { + switch (timeStampList[index].itemType) { + case ITEM_TYPE.TIME: + return DATE_CONTAINER_HEIGHT; + case ITEM_TYPE.SIZE_AND_COUNT: + return SIZE_AND_COUNT_CONTAINER_HEIGHT; + case ITEM_TYPE.FILE: + return listItemHeight; + default: + return timeStampList[index].height; + } + }; + + const generateKey = (index) => { + switch (timeStampList[index].itemType) { + case ITEM_TYPE.FILE: + return `${timeStampList[index].items[0].id}-${ + timeStampList[index].items.slice(-1)[0].id + }`; + default: + return `${timeStampList[index].id}-${index}`; + } + }; + + const renderListItem = ( + listItem: TimeStampListItem, + isScrolling: boolean, + ) => { + switch (listItem.itemType) { + case ITEM_TYPE.SIZE_AND_COUNT: + return ( + + {listItem.fileCount} {t("FILES")},{" "} + {convertBytesToHumanReadable(listItem.fileSize || 0)}{" "} + {t("EACH")} + + ); + case ITEM_TYPE.FILE: { + const ret = listItem.items.map((item, idx) => + getThumbnail( + item, + listItem.itemStartIndex + idx, + isScrolling, + ), + ); + if (listItem.groups) { + let sum = 0; + for (let i = 0; i < listItem.groups.length - 1; i++) { + sum = sum + listItem.groups[i]; + ret.splice( + sum, + 0, +
, + ); + sum += 1; + } + } + return ret; + } + default: + return listItem.item; + } + }; + + if (!timeStampList?.length) { + return <>; + } + + const itemData = createItemData( + timeStampList, + columns, + shrinkRatio, + renderListItem, + ); + + return ( + + {PhotoListRow} + + ); +} diff --git a/web/apps/photos/src/components/PhotoList/index.tsx b/web/apps/photos/src/components/PhotoList/index.tsx new file mode 100644 index 000000000..4d0624215 --- /dev/null +++ b/web/apps/photos/src/components/PhotoList/index.tsx @@ -0,0 +1,807 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import { ENTE_WEBSITE_LINK } from "@ente/shared/constants/urls"; +import { formatDate } from "@ente/shared/time/format"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { Box, Link, Typography, styled } from "@mui/material"; +import { + DATE_CONTAINER_HEIGHT, + GAP_BTW_TILES, + IMAGE_CONTAINER_MAX_HEIGHT, + IMAGE_CONTAINER_MAX_WIDTH, + MIN_COLUMNS, + SIZE_AND_COUNT_CONTAINER_HEIGHT, + SPACE_BTW_DATES, + SPACE_BTW_DATES_TO_IMAGE_CONTAINER_WIDTH_RATIO, +} from "constants/gallery"; +import { t } from "i18next"; +import memoize from "memoize-one"; +import { GalleryContext } from "pages/gallery"; +import React, { useContext, useEffect, useRef, useState } from "react"; +import { Trans } from "react-i18next"; +import { + VariableSizeList as List, + ListChildComponentProps, + areEqual, +} from "react-window"; +import { EnteFile } from "types/file"; +import { PublicCollectionGalleryContext } from "utils/publicCollectionGallery"; + +const A_DAY = 24 * 60 * 60 * 1000; +const FOOTER_HEIGHT = 90; +const ALBUM_FOOTER_HEIGHT = 75; +const ALBUM_FOOTER_HEIGHT_WITH_REFERRAL = 113; + +export enum ITEM_TYPE { + TIME = "TIME", + FILE = "FILE", + SIZE_AND_COUNT = "SIZE_AND_COUNT", + HEADER = "HEADER", + FOOTER = "FOOTER", + MARKETING_FOOTER = "MARKETING_FOOTER", + OTHER = "OTHER", +} + +export interface TimeStampListItem { + itemType: ITEM_TYPE; + items?: EnteFile[]; + itemStartIndex?: number; + date?: string; + dates?: { + date: string; + span: number; + }[]; + groups?: number[]; + item?: any; + id?: string; + height?: number; + fileSize?: number; + fileCount?: number; +} + +const ListItem = styled("div")` + display: flex; + justify-content: center; +`; + +const getTemplateColumns = ( + columns: number, + shrinkRatio: number, + groups?: number[], +): string => { + if (groups) { + // need to confirm why this was there + // const sum = groups.reduce((acc, item) => acc + item, 0); + // if (sum < columns) { + // groups[groups.length - 1] += columns - sum; + // } + return groups + .map( + (x) => + `repeat(${x}, ${IMAGE_CONTAINER_MAX_WIDTH * shrinkRatio}px)`, + ) + .join(` ${SPACE_BTW_DATES}px `); + } else { + return `repeat(${columns},${ + IMAGE_CONTAINER_MAX_WIDTH * shrinkRatio + }px)`; + } +}; + +function getFractionFittableColumns(width: number): number { + return ( + (width - 2 * getGapFromScreenEdge(width) + GAP_BTW_TILES) / + (IMAGE_CONTAINER_MAX_WIDTH + GAP_BTW_TILES) + ); +} + +function getGapFromScreenEdge(width: number) { + if (width > MIN_COLUMNS * IMAGE_CONTAINER_MAX_WIDTH) { + return 24; + } else { + return 4; + } +} + +function getShrinkRatio(width: number, columns: number) { + return ( + (width - + 2 * getGapFromScreenEdge(width) - + (columns - 1) * GAP_BTW_TILES) / + (columns * IMAGE_CONTAINER_MAX_WIDTH) + ); +} + +const ListContainer = styled(Box)<{ + columns: number; + shrinkRatio: number; + groups?: number[]; +}>` + display: grid; + grid-template-columns: ${({ columns, shrinkRatio, groups }) => + getTemplateColumns(columns, shrinkRatio, groups)}; + grid-column-gap: ${GAP_BTW_TILES}px; + width: 100%; + color: #fff; + padding: 0 24px; + @media (max-width: ${IMAGE_CONTAINER_MAX_WIDTH * MIN_COLUMNS}px) { + padding: 0 4px; + } +`; + +const ListItemContainer = styled(FlexWrapper)<{ span: number }>` + grid-column: span ${(props) => props.span}; +`; + +const DateContainer = styled(ListItemContainer)` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: ${DATE_CONTAINER_HEIGHT}px; + color: ${({ theme }) => theme.colors.text.muted}; +`; + +const SizeAndCountContainer = styled(DateContainer)` + margin-top: 1rem; + height: ${SIZE_AND_COUNT_CONTAINER_HEIGHT}px; +`; + +const FooterContainer = styled(ListItemContainer)` + margin-bottom: 0.75rem; + @media (max-width: 540px) { + font-size: 12px; + margin-bottom: 0.5rem; + } + color: #979797; + text-align: center; + justify-content: center; + align-items: flex-end; + margin-top: calc(2rem + 20px); +`; + +const AlbumFooterContainer = styled(ListItemContainer)<{ + hasReferral: boolean; +}>` + margin-top: 48px; + margin-bottom: ${({ hasReferral }) => (!hasReferral ? `10px` : "0px")}; + text-align: center; + justify-content: center; +`; + +const FullStretchContainer = styled(Box)` + margin: 0 -24px; + width: calc(100% + 46px); + left: -24px; + @media (max-width: ${IMAGE_CONTAINER_MAX_WIDTH * MIN_COLUMNS}px) { + margin: 0 -4px; + width: calc(100% + 6px); + left: -4px; + } + background-color: ${({ theme }) => theme.colors.accent.A500}; +`; + +const NothingContainer = styled(ListItemContainer)` + color: #979797; + text-align: center; + justify-content: center; +`; + +interface Props { + height: number; + width: number; + displayFiles: EnteFile[]; + showAppDownloadBanner: boolean; + getThumbnail: ( + file: EnteFile, + index: number, + isScrolling?: boolean, + ) => JSX.Element; + activeCollectionID: number; +} + +interface ItemData { + timeStampList: TimeStampListItem[]; + columns: number; + shrinkRatio: number; + renderListItem: ( + timeStampListItem: TimeStampListItem, + isScrolling?: boolean, + ) => JSX.Element; +} + +const createItemData = memoize( + ( + timeStampList: TimeStampListItem[], + columns: number, + shrinkRatio: number, + renderListItem: ( + timeStampListItem: TimeStampListItem, + isScrolling?: boolean, + ) => JSX.Element, + ): ItemData => ({ + timeStampList, + columns, + shrinkRatio, + renderListItem, + }), +); +const PhotoListRow = React.memo( + ({ + index, + style, + isScrolling, + data, + }: ListChildComponentProps) => { + const { timeStampList, columns, shrinkRatio, renderListItem } = data; + return ( + + + {renderListItem(timeStampList[index], isScrolling)} + + + ); + }, + areEqual, +); + +export function PhotoList({ + height, + width, + displayFiles, + showAppDownloadBanner, + getThumbnail, + activeCollectionID, +}: Props) { + const galleryContext = useContext(GalleryContext); + const publicCollectionGalleryContext = useContext( + PublicCollectionGalleryContext, + ); + + const [timeStampList, setTimeStampList] = useState([]); + const refreshInProgress = useRef(false); + const shouldRefresh = useRef(false); + const listRef = useRef(null); + + const fittableColumns = getFractionFittableColumns(width); + let columns = Math.floor(fittableColumns); + + let skipMerge = false; + if (columns < MIN_COLUMNS) { + columns = MIN_COLUMNS; + skipMerge = true; + } + const shrinkRatio = getShrinkRatio(width, columns); + const listItemHeight = + IMAGE_CONTAINER_MAX_HEIGHT * shrinkRatio + GAP_BTW_TILES; + + const refreshList = () => { + listRef.current?.resetAfterIndex(0); + }; + + useEffect(() => { + const main = () => { + if (refreshInProgress.current) { + shouldRefresh.current = true; + return; + } + refreshInProgress.current = true; + let timeStampList: TimeStampListItem[] = []; + + if (galleryContext.photoListHeader) { + timeStampList.push( + getPhotoListHeader(galleryContext.photoListHeader), + ); + } else if (publicCollectionGalleryContext.photoListHeader) { + timeStampList.push( + getPhotoListHeader( + publicCollectionGalleryContext.photoListHeader, + ), + ); + } + if (galleryContext.isClipSearchResult) { + noGrouping(timeStampList); + } else { + groupByTime(timeStampList); + } + + if (!skipMerge) { + timeStampList = mergeTimeStampList(timeStampList, columns); + } + if (timeStampList.length === 1) { + timeStampList.push(getEmptyListItem()); + } + timeStampList.push(getVacuumItem(timeStampList)); + if (publicCollectionGalleryContext.accessedThroughSharedURL) { + if (publicCollectionGalleryContext.photoListFooter) { + timeStampList.push( + getPhotoListFooter( + publicCollectionGalleryContext.photoListFooter, + ), + ); + } + timeStampList.push(getAlbumsFooter()); + } else if (showAppDownloadBanner) { + timeStampList.push(getAppDownloadFooter()); + } + + setTimeStampList(timeStampList); + refreshInProgress.current = false; + if (shouldRefresh.current) { + shouldRefresh.current = false; + setTimeout(main, 0); + } + }; + main(); + }, [ + width, + height, + displayFiles, + galleryContext.photoListHeader, + publicCollectionGalleryContext.photoListHeader, + galleryContext.isClipSearchResult, + ]); + + useEffect(() => { + setTimeStampList((timeStampList) => { + timeStampList = timeStampList ?? []; + const hasHeader = + timeStampList.length > 0 && + timeStampList[0].itemType === ITEM_TYPE.HEADER; + + if (hasHeader) { + return timeStampList; + } + if (galleryContext.photoListHeader) { + return [ + getPhotoListHeader(galleryContext.photoListHeader), + ...timeStampList, + ]; + } else if (publicCollectionGalleryContext.photoListHeader) { + return [ + getPhotoListHeader( + publicCollectionGalleryContext.photoListHeader, + ), + ...timeStampList, + ]; + } else { + return timeStampList; + } + }); + }, [ + galleryContext.photoListHeader, + publicCollectionGalleryContext.photoListHeader, + ]); + + useEffect(() => { + setTimeStampList((timeStampList) => { + timeStampList = timeStampList ?? []; + const hasFooter = + timeStampList.length > 0 && + timeStampList[timeStampList.length - 1].itemType === + ITEM_TYPE.MARKETING_FOOTER; + if (hasFooter) { + return timeStampList; + } + if (publicCollectionGalleryContext.accessedThroughSharedURL) { + if (publicCollectionGalleryContext.photoListFooter) { + return [ + ...timeStampList, + getPhotoListFooter( + publicCollectionGalleryContext.photoListFooter, + ), + getAlbumsFooter(), + ]; + } + } else if (showAppDownloadBanner) { + return [...timeStampList, getAppDownloadFooter()]; + } else { + return timeStampList; + } + }); + }, [ + publicCollectionGalleryContext.accessedThroughSharedURL, + showAppDownloadBanner, + publicCollectionGalleryContext.photoListFooter, + ]); + + useEffect(() => { + refreshList(); + }, [timeStampList]); + + const groupByTime = (timeStampList: TimeStampListItem[]) => { + let listItemIndex = 0; + let currentDate; + displayFiles.forEach((item, index) => { + if ( + !currentDate || + !isSameDay( + new Date(item.metadata.creationTime / 1000), + new Date(currentDate), + ) + ) { + currentDate = item.metadata.creationTime / 1000; + + timeStampList.push({ + itemType: ITEM_TYPE.TIME, + date: isSameDay(new Date(currentDate), new Date()) + ? t("TODAY") + : isSameDay( + new Date(currentDate), + new Date(Date.now() - A_DAY), + ) + ? t("YESTERDAY") + : formatDate(currentDate), + id: currentDate.toString(), + }); + timeStampList.push({ + itemType: ITEM_TYPE.FILE, + items: [item], + itemStartIndex: index, + }); + listItemIndex = 1; + } else if (listItemIndex < columns) { + timeStampList[timeStampList.length - 1].items.push(item); + listItemIndex++; + } else { + listItemIndex = 1; + timeStampList.push({ + itemType: ITEM_TYPE.FILE, + items: [item], + itemStartIndex: index, + }); + } + }); + }; + + const noGrouping = (timeStampList: TimeStampListItem[]) => { + let listItemIndex = columns; + displayFiles.forEach((item, index) => { + if (listItemIndex < columns) { + timeStampList[timeStampList.length - 1].items.push(item); + listItemIndex++; + } else { + listItemIndex = 1; + timeStampList.push({ + itemType: ITEM_TYPE.FILE, + items: [item], + itemStartIndex: index, + }); + } + }); + }; + + const isSameDay = (first, second) => { + return ( + first.getFullYear() === second.getFullYear() && + first.getMonth() === second.getMonth() && + first.getDate() === second.getDate() + ); + }; + + const getPhotoListHeader = (photoListHeader) => { + return { + ...photoListHeader, + item: ( + + {photoListHeader.item} + + ), + }; + }; + + const getPhotoListFooter = (photoListFooter) => { + return { + ...photoListFooter, + item: ( + + {photoListFooter.item} + + ), + }; + }; + + const getEmptyListItem = () => { + return { + itemType: ITEM_TYPE.OTHER, + item: ( + +
{t("NOTHING_HERE")}
+
+ ), + id: "empty-list-banner", + height: height - 48, + }; + }; + const getVacuumItem = (timeStampList) => { + let footerHeight; + if (publicCollectionGalleryContext.accessedThroughSharedURL) { + footerHeight = publicCollectionGalleryContext.referralCode + ? ALBUM_FOOTER_HEIGHT_WITH_REFERRAL + : ALBUM_FOOTER_HEIGHT; + } else { + footerHeight = FOOTER_HEIGHT; + } + const photoFrameHeight = (() => { + let sum = 0; + const getCurrentItemSize = getItemSize(timeStampList); + for (let i = 0; i < timeStampList.length; i++) { + sum += getCurrentItemSize(i); + if (height - sum <= footerHeight) { + break; + } + } + return sum; + })(); + return { + itemType: ITEM_TYPE.OTHER, + item: <>, + height: Math.max(height - photoFrameHeight - footerHeight, 0), + }; + }; + + const getAppDownloadFooter = () => { + return { + itemType: ITEM_TYPE.MARKETING_FOOTER, + height: FOOTER_HEIGHT, + item: ( + + + + ), + b: ( + + ), + }} + /> + + + ), + }; + }; + + const getAlbumsFooter = () => { + return { + itemType: ITEM_TYPE.MARKETING_FOOTER, + height: publicCollectionGalleryContext.referralCode + ? ALBUM_FOOTER_HEIGHT_WITH_REFERRAL + : ALBUM_FOOTER_HEIGHT, + item: ( + + + + {t("SHARED_USING")}{" "} + + {t("ENTE_IO")} + + + {publicCollectionGalleryContext.referralCode ? ( + + + + + + ) : null} + + + ), + }; + }; + /** + * Checks and merge multiple dates into a single row. + * + * @param items + * @param columns + * @returns + */ + const mergeTimeStampList = ( + items: TimeStampListItem[], + columns: number, + ): TimeStampListItem[] => { + const newList: TimeStampListItem[] = []; + let index = 0; + let newIndex = 0; + while (index < items.length) { + const currItem = items[index]; + // If the current item is of type time, then it is not part of an ongoing date. + // So, there is a possibility of merge. + if (currItem.itemType === ITEM_TYPE.TIME) { + // If new list pointer is not at the end of list then + // we can add more items to the same list. + if (newList[newIndex]) { + // Check if items can be added to same list + if ( + newList[newIndex + 1].items.length + + items[index + 1].items.length + + Math.ceil( + newList[newIndex].dates.length * + SPACE_BTW_DATES_TO_IMAGE_CONTAINER_WIDTH_RATIO, + ) <= + columns + ) { + newList[newIndex].dates.push({ + date: currItem.date, + span: items[index + 1].items.length, + }); + newList[newIndex + 1].items = [ + ...newList[newIndex + 1].items, + ...items[index + 1].items, + ]; + index += 2; + } else { + // Adding items would exceed the number of columns. + // So, move new list pointer to the end. Hence, in next iteration, + // items will be added to a new list. + newIndex += 2; + } + } else { + // New list pointer was at the end of list so simply add new items to the list. + newList.push({ + ...currItem, + date: null, + dates: [ + { + date: currItem.date, + span: items[index + 1].items.length, + }, + ], + }); + newList.push(items[index + 1]); + index += 2; + } + } else { + // Merge cannot happen. Simply add all items to new list + // and set new list point to the end of list. + newList.push(currItem); + index++; + newIndex = newList.length; + } + } + for (let i = 0; i < newList.length; i++) { + const currItem = newList[i]; + const nextItem = newList[i + 1]; + if (currItem.itemType === ITEM_TYPE.TIME) { + if (currItem.dates.length > 1) { + currItem.groups = currItem.dates.map((item) => item.span); + nextItem.groups = currItem.groups; + } + } + } + return newList; + }; + + const getItemSize = (timeStampList) => (index) => { + switch (timeStampList[index].itemType) { + case ITEM_TYPE.TIME: + return DATE_CONTAINER_HEIGHT; + case ITEM_TYPE.SIZE_AND_COUNT: + return SIZE_AND_COUNT_CONTAINER_HEIGHT; + case ITEM_TYPE.FILE: + return listItemHeight; + default: + return timeStampList[index].height; + } + }; + + const generateKey = (index) => { + switch (timeStampList[index].itemType) { + case ITEM_TYPE.FILE: + return `${timeStampList[index].items[0].id}-${ + timeStampList[index].items.slice(-1)[0].id + }`; + default: + return `${timeStampList[index].id}-${index}`; + } + }; + + const renderListItem = ( + listItem: TimeStampListItem, + isScrolling: boolean, + ) => { + switch (listItem.itemType) { + case ITEM_TYPE.TIME: + return listItem.dates ? ( + listItem.dates + .map((item) => [ + + {item.date} + , +
, + ]) + .flat() + ) : ( + + {listItem.date} + + ); + case ITEM_TYPE.SIZE_AND_COUNT: + return ( + + {listItem.fileCount} {t("FILES")},{" "} + {convertBytesToHumanReadable(listItem.fileSize || 0)}{" "} + {t("EACH")} + + ); + case ITEM_TYPE.FILE: { + const ret = listItem.items.map((item, idx) => + getThumbnail( + item, + listItem.itemStartIndex + idx, + isScrolling, + ), + ); + if (listItem.groups) { + let sum = 0; + for (let i = 0; i < listItem.groups.length - 1; i++) { + sum = sum + listItem.groups[i]; + ret.splice( + sum, + 0, +
, + ); + sum += 1; + } + } + return ret; + } + default: + return listItem.item; + } + }; + + if (!timeStampList?.length) { + return <>; + } + + const itemData = createItemData( + timeStampList, + columns, + shrinkRatio, + renderListItem, + ); + + return ( + + {PhotoListRow} + + ); +} diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx new file mode 100644 index 000000000..ee45df5d0 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/ExifData.tsx @@ -0,0 +1,94 @@ +import CopyButton from "@ente/shared/components/CodeBlock/CopyButton"; +import { formatDateTimeFull } from "@ente/shared/time/format"; +import { Stack, styled, Typography } from "@mui/material"; +import { Box } from "@mui/system"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { FileInfoSidebar } from "."; + +const ExifItem = styled(Box)` + padding-left: 8px; + padding-right: 8px; + display: flex; + flex-direction: column; + gap: 4px; +`; + +function parseExifValue(value: any) { + switch (typeof value) { + case "string": + case "number": + return value; + default: + if (value instanceof Date) { + return formatDateTimeFull(value); + } + try { + return JSON.stringify(Array.from(value)); + } catch (e) { + return null; + } + } +} +export function ExifData(props: { + exif: any; + open: boolean; + onClose: () => void; + filename: string; + onInfoClose: () => void; +}) { + const { exif, open, onClose, filename, onInfoClose } = props; + + if (!exif) { + return <>; + } + const handleRootClose = () => { + onClose(); + onInfoClose(); + }; + + return ( + + + } + /> + + {[...Object.entries(exif)] + .sort((a, b) => a[0].localeCompare(b[0])) + .map(([key, value]) => + value ? ( + + + {key} + + + {parseExifValue(value)} + + + ) : ( + <> + ), + )} + + + ); +} diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/FileNameEditDialog.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/FileNameEditDialog.tsx new file mode 100644 index 000000000..214b120f1 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/FileNameEditDialog.tsx @@ -0,0 +1,46 @@ +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import SingleInputForm, { + SingleInputFormProps, +} from "@ente/shared/components/SingleInputForm"; +import { t } from "i18next"; + +export const FileNameEditDialog = ({ + isInEditMode, + closeEditMode, + filename, + extension, + saveEdits, +}) => { + const onSubmit: SingleInputFormProps["callback"] = async ( + filename, + setFieldError, + ) => { + try { + await saveEdits(filename); + closeEditMode(); + } catch (e) { + setFieldError(t("UNKNOWN_ERROR")); + } + }; + return ( + + + + ); +}; diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/InfoItem.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/InfoItem.tsx new file mode 100644 index 000000000..3cc9f5d35 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/InfoItem.tsx @@ -0,0 +1,61 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import Edit from "@mui/icons-material/Edit"; +import { Box, IconButton, Typography } from "@mui/material"; +import { SmallLoadingSpinner } from "../styledComponents/SmallLoadingSpinner"; + +interface Iprops { + icon: JSX.Element; + title?: string; + caption?: string | JSX.Element; + openEditor?: any; + loading?: boolean; + hideEditOption?: any; + customEndButton?: any; + children?: any; +} + +export default function InfoItem({ + icon, + title, + caption, + openEditor, + loading, + hideEditOption, + customEndButton, + children, +}: Iprops): JSX.Element { + return ( + + + + {icon} + + + {children ? ( + children + ) : ( + <> + + {title} + + + {caption} + + + )} + + + {customEndButton + ? customEndButton + : !hideEditOption && ( + + {!loading ? : } + + )} + + ); +} diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/MapBox.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/MapBox.tsx new file mode 100644 index 000000000..ab732d8b4 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/MapBox.tsx @@ -0,0 +1,79 @@ +import { styled } from "@mui/material"; +import { useEffect, useRef } from "react"; +import { runningInBrowser } from "utils/common"; +import { MapButton } from "./MapButton"; + +import { t } from "i18next"; +import "leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.webpack.css"; // Re-uses images from ~leaflet package +import "leaflet/dist/leaflet.css"; +runningInBrowser() && require("leaflet-defaulticon-compatibility"); +const L = runningInBrowser() + ? (require("leaflet") as typeof import("leaflet")) + : null; + +const LAYER_TILE_URL = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"; +const LAYER_TILE_ATTRIBUTION = + '© OpenStreetMap contributors'; +const ZOOM_LEVEL = 16; + +const MapBoxContainer = styled("div")` + height: 200px; + width: 100%; +`; +const MapBoxEnableContainer = styled(MapBoxContainer)` + position: relative; + display: flex; + justify-content: center; + align-items: center; + background-color: rgba(255, 255, 255, 0.09); +`; + +interface MapBoxProps { + location: { latitude: number; longitude: number }; + mapEnabled: boolean; + openUpdateMapConfirmationDialog: () => void; +} + +const MapBox: React.FC = ({ + location, + mapEnabled, + openUpdateMapConfirmationDialog, +}) => { + const mapBoxContainerRef = useRef(null); + + useEffect(() => { + const mapContainer = mapBoxContainerRef.current; + if (mapEnabled) { + const position: L.LatLngTuple = [ + location.latitude, + location.longitude, + ]; + if (mapContainer && !mapContainer.hasChildNodes()) { + const map = L.map(mapContainer).setView(position, ZOOM_LEVEL); + L.tileLayer(LAYER_TILE_URL, { + attribution: LAYER_TILE_ATTRIBUTION, + }).addTo(map); + L.marker(position).addTo(map).openPopup(); + } + } else { + if (mapContainer && mapContainer.hasChildNodes()) { + if (mapContainer.firstChild) { + mapContainer.removeChild(mapContainer.firstChild); + } + } + } + }, [mapEnabled]); + + return mapEnabled ? ( + + ) : ( + + + {" "} + {t("ENABLE_MAP")} + + + ); +}; + +export default MapBox; diff --git a/web/apps/photos/src/components/PhotoViewer/FileInfo/MapButton.tsx b/web/apps/photos/src/components/PhotoViewer/FileInfo/MapButton.tsx new file mode 100644 index 000000000..12b665199 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/FileInfo/MapButton.tsx @@ -0,0 +1,9 @@ +import { Button, ButtonProps, styled } from "@mui/material"; +import { CSSProperties } from "@mui/material/styles/createTypography"; + +export const MapButton = styled((props: ButtonProps) => ( + + + )} + + setConversionFailedNotificationOpen(false) + } + onClick={() => + downloadFileHelper(photoSwipe.currItem as EnteFile) + } + /> + + + {fileDownloadProgress.has( + (photoSwipe?.currItem as EnteFile)?.id, + ) ? ( + + ) : ( + !isSourceLoaded && + )} + + +
+
+
+
+
+
+
+
+ + + + {props.enableDownload && ( + + )} + {props.enableDownload && shouldShowCopyOption && ( + + )} + {isOwnFile && !props.isTrashCollection && ( + + )} + {showZoomButton && ( + + )} + + + + {isOwnFile && + !props.isTrashCollection && + !props.isInHiddenSection && ( + <> + {showEditButton && ( + + )} + + + )} + {showConvertBtn && ( + + )} +
+
+ + +
+ +
+
+
+
+ + + + ); +} + +export default PhotoViewer; diff --git a/web/apps/photos/src/components/PhotoViewer/styledComponents/CircularProgressWithLabel.tsx b/web/apps/photos/src/components/PhotoViewer/styledComponents/CircularProgressWithLabel.tsx new file mode 100644 index 000000000..ba43ba95d --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/styledComponents/CircularProgressWithLabel.tsx @@ -0,0 +1,32 @@ +import { Overlay } from "@ente/shared/components/Container"; +import { + CircularProgress, + CircularProgressProps, + Typography, +} from "@mui/material"; + +function CircularProgressWithLabel( + props: CircularProgressProps & { value: number }, +) { + return ( + <> + + + {`${Math.round(props.value)}%`} + + + ); +} + +export default CircularProgressWithLabel; diff --git a/web/apps/photos/src/components/PhotoViewer/styledComponents/ConversionFailedNotification.tsx b/web/apps/photos/src/components/PhotoViewer/styledComponents/ConversionFailedNotification.tsx new file mode 100644 index 000000000..fe504d180 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/styledComponents/ConversionFailedNotification.tsx @@ -0,0 +1,29 @@ +import Notification from "components/Notification"; +import { t } from "i18next"; + +interface Iprops { + open: boolean; + onClose: () => void; + onClick: () => void; +} + +export const ConversionFailedNotification = ({ + open, + onClose, + onClick, +}: Iprops) => { + return ( + + ); +}; diff --git a/web/apps/photos/src/components/PhotoViewer/styledComponents/Legend.tsx b/web/apps/photos/src/components/PhotoViewer/styledComponents/Legend.tsx new file mode 100644 index 000000000..bb00f56d9 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/styledComponents/Legend.tsx @@ -0,0 +1,6 @@ +import { styled } from "@mui/material"; +export const Legend = styled("span")` + font-size: 20px; + color: #ddd; + display: inline; +`; diff --git a/web/apps/photos/src/components/PhotoViewer/styledComponents/LegendContainer.tsx b/web/apps/photos/src/components/PhotoViewer/styledComponents/LegendContainer.tsx new file mode 100644 index 000000000..d0610ed74 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/styledComponents/LegendContainer.tsx @@ -0,0 +1,5 @@ +import { styled } from "@mui/material"; +export const LegendContainer = styled("div")` + display: flex; + justify-content: space-between; +`; diff --git a/web/apps/photos/src/components/PhotoViewer/styledComponents/LivePhotoBtn.tsx b/web/apps/photos/src/components/PhotoViewer/styledComponents/LivePhotoBtn.tsx new file mode 100644 index 000000000..40de098f5 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/styledComponents/LivePhotoBtn.tsx @@ -0,0 +1,10 @@ +import { Paper } from "@mui/material"; +import { styled } from "@mui/material/styles"; + +export const LivePhotoBtnContainer = styled(Paper)` + border-radius: 4px; + position: absolute; + bottom: 10vh; + right: 6vh; + z-index: 10; +`; diff --git a/web/apps/photos/src/components/PhotoViewer/styledComponents/Pre.tsx b/web/apps/photos/src/components/PhotoViewer/styledComponents/Pre.tsx new file mode 100644 index 000000000..b088ec9f8 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/styledComponents/Pre.tsx @@ -0,0 +1,5 @@ +import { styled } from "@mui/material"; +export const Pre = styled("pre")` + color: #aaa; + padding: 7px 15px; +`; diff --git a/web/apps/photos/src/components/PhotoViewer/styledComponents/SmallLoadingSpinner.tsx b/web/apps/photos/src/components/PhotoViewer/styledComponents/SmallLoadingSpinner.tsx new file mode 100644 index 000000000..2314d3974 --- /dev/null +++ b/web/apps/photos/src/components/PhotoViewer/styledComponents/SmallLoadingSpinner.tsx @@ -0,0 +1,10 @@ +import EnteSpinner from "@ente/shared/components/EnteSpinner"; + +export const SmallLoadingSpinner = () => ( + +); diff --git a/web/apps/photos/src/components/PlaceholderThumbnails.tsx b/web/apps/photos/src/components/PlaceholderThumbnails.tsx new file mode 100644 index 000000000..caafbdce6 --- /dev/null +++ b/web/apps/photos/src/components/PlaceholderThumbnails.tsx @@ -0,0 +1,50 @@ +import { Overlay } from "@ente/shared/components/Container"; +import PhotoOutlined from "@mui/icons-material/PhotoOutlined"; +import PlayCircleOutlineOutlined from "@mui/icons-material/PlayCircleOutlineOutlined"; +import { styled } from "@mui/material"; +import { FILE_TYPE } from "constants/file"; + +interface Iprops { + fileType: FILE_TYPE; +} + +const CenteredOverlay = styled(Overlay)` + display: flex; + justify-content: center; + align-items: center; +`; + +export const StaticThumbnail = (props: Iprops) => { + return ( + ({ + backgroundColor: theme.colors.fill.faint, + borderWidth: "1px", + borderStyle: "solid", + borderColor: theme.colors.stroke.faint, + borderRadius: "4px", + "& > svg": { + color: theme.colors.stroke.muted, + fontSize: "50px", + }, + })} + > + {props.fileType !== FILE_TYPE.VIDEO ? ( + + ) : ( + + )} + + ); +}; + +export const LoadingThumbnail = () => { + return ( + ({ + backgroundColor: theme.colors.fill.faint, + borderRadius: "4px", + })} + /> + ); +}; diff --git a/web/apps/photos/src/components/Search/SearchBar/index.tsx b/web/apps/photos/src/components/Search/SearchBar/index.tsx new file mode 100644 index 000000000..5ba046210 --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchBar/index.tsx @@ -0,0 +1,37 @@ +import { Collection } from "types/collection"; +import { SearchBarMobile } from "./searchBarMobile"; + +import { EnteFile } from "types/file"; +import { UpdateSearch } from "types/search"; +import SearchInput from "./searchInput"; +import { SearchBarWrapper } from "./styledComponents"; + +interface Props { + updateSearch: UpdateSearch; + collections: Collection[]; + files: EnteFile[]; + isInSearchMode: boolean; + setIsInSearchMode: (v: boolean) => void; +} + +export default function SearchBar({ + setIsInSearchMode, + isInSearchMode, + ...props +}: Props) { + const showSearchInput = () => setIsInSearchMode(true); + + return ( + + + + + ); +} diff --git a/web/apps/photos/src/components/Search/SearchBar/searchBarMobile.tsx b/web/apps/photos/src/components/Search/SearchBar/searchBarMobile.tsx new file mode 100644 index 000000000..466a5ef79 --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchBar/searchBarMobile.tsx @@ -0,0 +1,19 @@ +import { FluidContainer } from "@ente/shared/components/Container"; +import SearchIcon from "@mui/icons-material/Search"; +import { IconButton } from "@mui/material"; +import { SearchMobileBox } from "./styledComponents"; + +export function SearchBarMobile({ show, showSearchInput }) { + if (!show) { + return <>; + } + return ( + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx new file mode 100644 index 000000000..1151e202f --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/MenuWithPeople.tsx @@ -0,0 +1,72 @@ +import { Row } from "@ente/shared/components/Container"; +import { Box } from "@mui/material"; +import styled from "@mui/styled-engine"; +import { PeopleList } from "components/MachineLearning/PeopleList"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import { components } from "react-select"; +import { IndexStatus } from "types/machineLearning/ui"; +import { Suggestion, SuggestionType } from "types/search"; + +const { Menu } = components; + +const Legend = styled("span")` + font-size: 20px; + color: #ddd; + display: inline; + padding: 0px 12px; +`; + +const Caption = styled("span")` + font-size: 12px; + display: inline; + padding: 0px 12px; +`; + +const MenuWithPeople = (props) => { + const appContext = useContext(AppContext); + // addLogLine("props.selectProps.options: ", selectRef); + const peopleSuggestions = props.selectProps.options.filter( + (o) => o.type === SuggestionType.PERSON, + ); + const people = peopleSuggestions.map((o) => o.value); + + const indexStatusSuggestion = props.selectProps.options.filter( + (o) => o.type === SuggestionType.INDEX_STATUS, + )[0] as Suggestion; + + const indexStatus = indexStatusSuggestion?.value as IndexStatus; + return ( + + + {((appContext.mlSearchEnabled && indexStatus) || + (people && people.length > 0)) && ( + + {t("PEOPLE")} + + )} + {appContext.mlSearchEnabled && indexStatus && ( + + {indexStatusSuggestion.label} + + )} + {people && people.length > 0 && ( + + { + props.selectRef.current.blur(); + props.setValue(peopleSuggestions[index]); + }} + /> + + )} + + {props.children} + + ); +}; + +export default MenuWithPeople; diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx new file mode 100644 index 000000000..90239ea28 --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx @@ -0,0 +1,221 @@ +import CloseIcon from "@mui/icons-material/Close"; +import { IconButton } from "@mui/material"; +import { FILE_TYPE } from "constants/file"; +import { t } from "i18next"; +import memoize from "memoize-one"; +import pDebounce from "p-debounce"; +import { AppContext } from "pages/_app"; +import { useCallback, useContext, useEffect, useRef, useState } from "react"; +import { components } from "react-select"; +import AsyncSelect from "react-select/async"; +import { InputActionMeta } from "react-select/src/types"; +import { City } from "services/locationSearchService"; +import { + getAutoCompleteSuggestions, + getDefaultOptions, +} from "services/searchService"; +import { Collection } from "types/collection"; +import { LocationTagData } from "types/entity"; +import { EnteFile } from "types/file"; +import { Person, Thing, WordGroup } from "types/machineLearning"; +import { + ClipSearchScores, + DateValue, + Search, + SearchOption, + SuggestionType, + UpdateSearch, +} from "types/search"; +import { SelectStyles } from "../../../../styles/search"; +import { SearchInputWrapper } from "../styledComponents"; +import MenuWithPeople from "./MenuWithPeople"; +import { OptionWithInfo } from "./optionWithInfo"; +import { ValueContainerWithIcon } from "./valueContainerWithIcon"; + +interface Iprops { + isOpen: boolean; + updateSearch: UpdateSearch; + setIsOpen: (value: boolean) => void; + files: EnteFile[]; + collections: Collection[]; +} + +const createComponents = memoize((Option, ValueContainer, Menu, Input) => ({ + Option, + ValueContainer, + Menu, + Input, +})); + +const VisibleInput = (props) => ( + +); + +export default function SearchInput(props: Iprops) { + const selectRef = useRef(null); + const [value, setValue] = useState(null); + const appContext = useContext(AppContext); + const handleChange = (value: SearchOption) => { + setValue(value); + setQuery(value.label); + blur(); + }; + const handleInputChange = (value: string, actionMeta: InputActionMeta) => { + if (actionMeta.action === "input-change") { + setQuery(value); + } + }; + const [defaultOptions, setDefaultOptions] = useState([]); + const [query, setQuery] = useState(""); + + useEffect(() => { + search(value); + }, [value]); + + useEffect(() => { + refreshDefaultOptions(); + const t = setInterval(() => refreshDefaultOptions(), 2000); + return () => clearInterval(t); + }, []); + + async function refreshDefaultOptions() { + const defaultOptions = await getDefaultOptions(); + setDefaultOptions(defaultOptions); + } + + const resetSearch = () => { + if (props.isOpen) { + appContext.startLoading(); + props.updateSearch(null, null); + setTimeout(() => { + appContext.finishLoading(); + }, 10); + props.setIsOpen(false); + setValue(null); + setQuery(""); + } + }; + + const getOptions = useCallback( + pDebounce( + getAutoCompleteSuggestions(props.files, props.collections), + 250, + ), + [props.files, props.collections], + ); + + const blur = () => { + selectRef.current?.blur(); + }; + + const search = (selectedOption: SearchOption) => { + if (!selectedOption) { + return; + } + let search: Search; + switch (selectedOption.type) { + case SuggestionType.DATE: + search = { + date: selectedOption.value as DateValue, + }; + props.setIsOpen(true); + break; + case SuggestionType.LOCATION: + search = { + location: selectedOption.value as LocationTagData, + }; + props.setIsOpen(true); + break; + case SuggestionType.CITY: + search = { + city: selectedOption.value as City, + }; + props.setIsOpen(true); + break; + case SuggestionType.COLLECTION: + search = { collection: selectedOption.value as number }; + setValue(null); + setQuery(""); + break; + case SuggestionType.FILE_NAME: + search = { files: selectedOption.value as number[] }; + break; + case SuggestionType.FILE_CAPTION: + search = { files: selectedOption.value as number[] }; + break; + case SuggestionType.PERSON: + search = { person: selectedOption.value as Person }; + break; + case SuggestionType.THING: + search = { thing: selectedOption.value as Thing }; + break; + case SuggestionType.TEXT: + search = { text: selectedOption.value as WordGroup }; + break; + case SuggestionType.FILE_TYPE: + search = { fileType: selectedOption.value as FILE_TYPE }; + break; + case SuggestionType.CLIP: + search = { clip: selectedOption.value as ClipSearchScores }; + } + props.updateSearch(search, { + optionName: selectedOption.label, + fileCount: selectedOption.fileCount, + }); + }; + + // TODO: HACK as AsyncSelect does not support default options reloading on focus/click + // unwanted side effect: placeholder is not shown on focus/click + // https://github.com/JedWatson/react-select/issues/1879 + // for correct fix AsyncSelect can be extended to support default options reloading on focus/click + const handleOnFocus = () => { + refreshDefaultOptions(); + }; + + const MemoizedMenuWithPeople = useCallback( + (props) => ( + + ), + [setValue, selectRef], + ); + + const components = createComponents( + OptionWithInfo, + ValueContainerWithIcon, + MemoizedMenuWithPeople, + VisibleInput, + ); + + return ( + + {t("SEARCH_HINT")}} + loadOptions={getOptions} + onChange={handleChange} + onFocus={handleOnFocus} + isClearable + inputValue={query} + onInputChange={handleInputChange} + escapeClearsValue + styles={SelectStyles} + defaultOptions={ + appContext.mlSearchEnabled ? defaultOptions : null + } + noOptionsMessage={() => null} + /> + + {props.isOpen && ( + resetSearch()} sx={{ ml: 1 }}> + + + )} + + ); +} diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/optionWithInfo.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/optionWithInfo.tsx new file mode 100644 index 000000000..8e3fd7d84 --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/optionWithInfo.tsx @@ -0,0 +1,57 @@ +import { + FreeFlowText, + SpaceBetweenFlex, +} from "@ente/shared/components/Container"; +import { Box, Divider, Stack, Typography } from "@mui/material"; +import CollectionCard from "components/Collections/CollectionCard"; +import { ResultPreviewTile } from "components/Collections/styledComponents"; +import { t } from "i18next"; +import { SearchOption } from "types/search"; + +import { components } from "react-select"; + +const { Option } = components; + +export const OptionWithInfo = (props) => ( + +); + +const LabelWithInfo = ({ data }: { data: SearchOption }) => { + return ( + !data.hide && ( + <> + + + {t(`SEARCH_TYPE.${data.type}`)} + + + + + + {data.label} + + + + {t("photos_count", { count: data.fileCount })} + + + + + {data.previewFiles.map((file) => ( + null} + collectionTile={ResultPreviewTile} + /> + ))} + + + + + + ) + ); +}; diff --git a/web/apps/photos/src/components/Search/SearchBar/searchInput/valueContainerWithIcon.tsx b/web/apps/photos/src/components/Search/SearchBar/searchInput/valueContainerWithIcon.tsx new file mode 100644 index 000000000..359885c45 --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchBar/searchInput/valueContainerWithIcon.tsx @@ -0,0 +1,42 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import CalendarIcon from "@mui/icons-material/CalendarMonth"; +import FolderIcon from "@mui/icons-material/Folder"; +import ImageIcon from "@mui/icons-material/Image"; +import LocationIcon from "@mui/icons-material/LocationOn"; +import SearchIcon from "@mui/icons-material/SearchOutlined"; +import { Box } from "@mui/material"; +import { components } from "react-select"; +import { SelectComponents } from "react-select/src/components"; +import { SearchOption, SuggestionType } from "types/search"; + +const { ValueContainer } = components; + +const getIconByType = (type: SuggestionType) => { + switch (type) { + case SuggestionType.DATE: + return ; + case SuggestionType.LOCATION: + case SuggestionType.CITY: + return ; + case SuggestionType.COLLECTION: + return ; + case SuggestionType.FILE_NAME: + return ; + default: + return ; + } +}; + +export const ValueContainerWithIcon: SelectComponents< + SearchOption, + false +>["ValueContainer"] = (props) => ( + + + + {getIconByType(props.getValue()[0]?.type)} + + {props.children} + + +); diff --git a/web/apps/photos/src/components/Search/SearchBar/styledComponents.tsx b/web/apps/photos/src/components/Search/SearchBar/styledComponents.tsx new file mode 100644 index 000000000..41d4a0971 --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchBar/styledComponents.tsx @@ -0,0 +1,37 @@ +import { + CenteredFlex, + FlexWrapper, + FluidContainer, +} from "@ente/shared/components/Container"; +import { css, styled } from "@mui/material"; +import { IMAGE_CONTAINER_MAX_WIDTH, MIN_COLUMNS } from "constants/gallery"; + +export const SearchBarWrapper = styled(FlexWrapper)` + padding: 0 24px; + @media (max-width: ${IMAGE_CONTAINER_MAX_WIDTH * MIN_COLUMNS}px) { + padding: 0 4px; + } +`; + +export const SearchMobileBox = styled(FluidContainer)` + display: flex; + cursor: pointer; + align-items: center; + justify-content: flex-end; + @media (min-width: 625px) { + display: none; + } +`; + +export const SearchInputWrapper = styled(CenteredFlex)<{ isOpen: boolean }>` + background: ${({ theme }) => theme.colors.background.base}; + max-width: 484px; + margin: auto; + ${(props) => + !props.isOpen && + css` + @media (max-width: 624px) { + display: none; + } + `} +`; diff --git a/web/apps/photos/src/components/Search/SearchResultInfo.tsx b/web/apps/photos/src/components/Search/SearchResultInfo.tsx new file mode 100644 index 000000000..7d99697bf --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchResultInfo.tsx @@ -0,0 +1,25 @@ +import { Typography } from "@mui/material"; +import { CollectionInfo } from "components/Collections/CollectionInfo"; +import { CollectionInfoBarWrapper } from "components/Collections/styledComponents"; +import { t } from "i18next"; +import { SearchResultSummary } from "types/search"; + +interface Iprops { + searchResultSummary: SearchResultSummary; +} +export default function SearchResultInfo({ searchResultSummary }: Iprops) { + if (!searchResultSummary) { + return <>; + } + + const { optionName, fileCount } = searchResultSummary; + + return ( + + + {t("SEARCH_RESULTS")} + + + + ); +} diff --git a/web/apps/photos/src/components/Search/SearchStatsContainer.tsx b/web/apps/photos/src/components/Search/SearchStatsContainer.tsx new file mode 100644 index 000000000..1e088b58f --- /dev/null +++ b/web/apps/photos/src/components/Search/SearchStatsContainer.tsx @@ -0,0 +1,12 @@ +import { styled } from "@mui/material"; +const SearchStatsContainer = styled("div")( + ({ theme }) => ` + display: flex; + justify-content: center; + align-items: center; + color: #979797; + margin: ${theme.spacing(1, 0)}; +`, +); + +export default SearchStatsContainer; diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx new file mode 100644 index 000000000..5adc0361d --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -0,0 +1,156 @@ +import ChevronRight from "@mui/icons-material/ChevronRight"; +import ScienceIcon from "@mui/icons-material/Science"; +import { Box, DialogProps, Stack, Typography } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import MLSearchSettings from "components/MachineLearning/MLSearchSettings"; +import MenuSectionTitle from "components/Menu/MenuSectionTitle"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { useContext, useEffect, useState } from "react"; + +import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; +import { logError } from "@ente/shared/sentry"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import isElectron from "is-electron"; +import { AppContext } from "pages/_app"; +import { ClipExtractionStatus, ClipService } from "services/clipService"; +import { formatNumber } from "utils/number/format"; +import CacheDirectory from "./Preferences/CacheDirectory"; + +export default function AdvancedSettings({ open, onClose, onRootClose }) { + const appContext = useContext(AppContext); + const [mlSearchSettingsView, setMlSearchSettingsView] = useState(false); + + const openMlSearchSettings = () => setMlSearchSettingsView(true); + const closeMlSearchSettings = () => setMlSearchSettingsView(false); + + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + onClose(); + } + }; + + const toggleCFProxy = async () => { + try { + appContext.setIsCFProxyDisabled(!appContext.isCFProxyDisabled); + } catch (e) { + logError(e, "toggleFasterUpload failed"); + } + }; + const [indexingStatus, setIndexingStatus] = useState({ + indexed: 0, + pending: 0, + }); + + useEffect(() => { + const main = async () => { + setIndexingStatus(await ClipService.getIndexingStatus()); + ClipService.setOnUpdateHandler(setIndexingStatus); + }; + main(); + }, []); + + return ( + + + + + + + {isElectron() && ( + <> + + + } + /> + + } + onClick={openMlSearchSettings} + label={t("ML_SEARCH")} + /> + + + + )} + + + + + + + + {isElectron() && ( + + + + + + {t("INDEXED_ITEMS")} + + + {formatNumber( + indexingStatus.indexed, + )} + + + + + {t("PENDING_ITEMS")} + + + {formatNumber( + indexingStatus.pending, + )} + + + + + )} + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/DebugSection.tsx b/web/apps/photos/src/components/Sidebar/DebugSection.tsx new file mode 100644 index 000000000..62c038eac --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/DebugSection.tsx @@ -0,0 +1,99 @@ +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext, useEffect, useState } from "react"; +import { Trans } from "react-i18next"; + +import ElectronAPIs from "@ente/shared/electron"; +import { addLogLine } from "@ente/shared/logging"; +import { getDebugLogs } from "@ente/shared/logging/web"; +import { downloadAsFile } from "@ente/shared/utils"; +import Typography from "@mui/material/Typography"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import isElectron from "is-electron"; +import { isInternalUser } from "utils/user"; +import { testUpload } from "../../../tests/upload.test"; +import { + testZipFileReading, + testZipWithRootFileReadingTest, +} from "../../../tests/zip-file-reading.test"; + +export default function DebugSection() { + const appContext = useContext(AppContext); + const [appVersion, setAppVersion] = useState(null); + + useEffect(() => { + const main = async () => { + if (isElectron()) { + const appVersion = await ElectronAPIs.getAppVersion(); + setAppVersion(appVersion); + } + }; + main(); + }); + + const confirmLogDownload = () => + appContext.setDialogMessage({ + title: t("DOWNLOAD_LOGS"), + content: , + proceed: { + text: t("DOWNLOAD"), + variant: "accent", + action: downloadDebugLogs, + }, + close: { + text: t("CANCEL"), + }, + }); + + const downloadDebugLogs = () => { + addLogLine("exporting logs"); + if (isElectron()) { + ElectronAPIs.openLogDirectory(); + } else { + const logs = getDebugLogs(); + + downloadAsFile(`debug_logs_${Date.now()}.txt`, logs); + } + }; + + return ( + <> + + {appVersion && ( + + {appVersion} + + )} + {isInternalUser() && ( + <> + + + + + + + )} + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/DisableMap.tsx b/web/apps/photos/src/components/Sidebar/DisableMap.tsx new file mode 100644 index 000000000..ef793166e --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/DisableMap.tsx @@ -0,0 +1,35 @@ +import { Box, Button, Stack, Typography } from "@mui/material"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { Trans } from "react-i18next"; + +export default function EnableMap({ onClose, disableMap, onRootClose }) { + return ( + + + + + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/EnableMap.tsx b/web/apps/photos/src/components/Sidebar/EnableMap.tsx new file mode 100644 index 000000000..868485af0 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/EnableMap.tsx @@ -0,0 +1,43 @@ +import { Box, Button, Link, Stack, Typography } from "@mui/material"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { Trans } from "react-i18next"; + +export const OPEN_STREET_MAP_LINK = "https://www.openstreetmap.org/"; +export default function EnableMap({ onClose, enableMap, onRootClose }) { + return ( + + + + + {" "} + + + ), + }} + /> + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/ExitSection.tsx b/web/apps/photos/src/components/Sidebar/ExitSection.tsx new file mode 100644 index 000000000..6f9492b77 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/ExitSection.tsx @@ -0,0 +1,49 @@ +import { t } from "i18next"; +import { useContext, useState } from "react"; + +import { logoutUser } from "@ente/accounts/services/user"; +import DeleteAccountModal from "components/DeleteAccountModal"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { AppContext } from "pages/_app"; + +export default function ExitSection() { + const { setDialogMessage } = useContext(AppContext); + + const [deleteAccountModalView, setDeleteAccountModalView] = useState(false); + + const closeDeleteAccountModal = () => setDeleteAccountModalView(false); + const openDeleteAccountModal = () => setDeleteAccountModalView(true); + + const confirmLogout = () => { + setDialogMessage({ + title: t("LOGOUT_MESSAGE"), + proceed: { + text: t("LOGOUT"), + action: logoutUser, + variant: "critical", + }, + close: { text: t("CANCEL") }, + }); + }; + + return ( + <> + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/Header.tsx b/web/apps/photos/src/components/Sidebar/Header.tsx new file mode 100644 index 000000000..4adb12fe7 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/Header.tsx @@ -0,0 +1,23 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import { EnteLogo } from "@ente/shared/components/EnteLogo"; +import CloseIcon from "@mui/icons-material/Close"; +import { IconButton } from "@mui/material"; + +interface IProps { + closeSidebar: () => void; +} + +export default function HeaderSection({ closeSidebar }: IProps) { + return ( + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/HelpSection.tsx b/web/apps/photos/src/components/Sidebar/HelpSection.tsx new file mode 100644 index 000000000..5424ea565 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/HelpSection.tsx @@ -0,0 +1,71 @@ +import { t } from "i18next"; +import { useContext } from "react"; + +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { + DESKTOP_ROADMAP_URL, + WEB_ROADMAP_URL, +} from "@ente/shared/constants/urls"; +import { Typography } from "@mui/material"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { NoStyleAnchor } from "components/pages/sharedAlbum/GoToEnte"; +import isElectron from "is-electron"; +import { AppContext } from "pages/_app"; +import { GalleryContext } from "pages/gallery"; +import exportService from "services/export"; +import { openLink } from "utils/common"; +import { getDownloadAppMessage } from "utils/ui"; + +export default function HelpSection() { + const { setDialogMessage } = useContext(AppContext); + const { openExportModal } = useContext(GalleryContext); + + async function openRoadmap() { + let roadmapURL: string; + if (isElectron()) { + roadmapURL = DESKTOP_ROADMAP_URL; + } else { + roadmapURL = WEB_ROADMAP_URL; + } + openLink(roadmapURL, true); + } + + function handleExportOpen() { + if (isElectron()) { + openExportModal(); + } else { + setDialogMessage(getDownloadAppMessage()); + } + } + + return ( + <> + + openLink("mailto:contact@ente.io", true)} + labelComponent={ + + + {t("SUPPORT")} + + + } + variant="secondary" + /> + + ) + } + variant="secondary" + /> + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/MapSetting/ModifyMapEnabled.tsx b/web/apps/photos/src/components/Sidebar/MapSetting/ModifyMapEnabled.tsx new file mode 100644 index 000000000..22aa8bbbb --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/MapSetting/ModifyMapEnabled.tsx @@ -0,0 +1,76 @@ +import { logError } from "@ente/shared/sentry"; +import { Box, DialogProps } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import DisableMap from "../DisableMap"; +import EnableMap from "../EnableMap"; + +const ModifyMapEnabled = ({ open, onClose, onRootClose, mapEnabled }) => { + const { somethingWentWrong, updateMapEnabled } = useContext(AppContext); + + const disableMap = async () => { + try { + await updateMapEnabled(false); + onClose(); + } catch (e) { + logError(e, "Disable Map failed"); + somethingWentWrong(); + } + }; + + const enableMap = async () => { + try { + await updateMapEnabled(true); + onClose(); + } catch (e) { + logError(e, "Enable Map failed"); + somethingWentWrong(); + } + }; + + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + onClose(); + } + }; + + return ( + + + {mapEnabled ? ( + + ) : ( + + )} + + + ); +}; + +export default ModifyMapEnabled; diff --git a/web/apps/photos/src/components/Sidebar/MapSetting/index.tsx b/web/apps/photos/src/components/Sidebar/MapSetting/index.tsx new file mode 100644 index 000000000..5832baca5 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/MapSetting/index.tsx @@ -0,0 +1,82 @@ +import { Box, DialogProps, Stack } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext, useEffect, useState } from "react"; +import { getMapEnabledStatus } from "services/userService"; +import ModifyMapEnabled from "./ModifyMapEnabled"; + +export default function MapSettings({ open, onClose, onRootClose }) { + const { mapEnabled, updateMapEnabled } = useContext(AppContext); + const [modifyMapEnabledView, setModifyMapEnabledView] = useState(false); + + const openModifyMapEnabled = () => setModifyMapEnabledView(true); + const closeModifyMapEnabled = () => setModifyMapEnabledView(false); + + useEffect(() => { + if (!open) { + return; + } + const main = async () => { + const remoteMapValue = await getMapEnabledStatus(); + updateMapEnabled(remoteMapValue); + }; + main(); + }, [open]); + + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + onClose(); + } + }; + + return ( + + + + + + + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/Preferences/CacheDirectory.tsx b/web/apps/photos/src/components/Sidebar/Preferences/CacheDirectory.tsx new file mode 100644 index 000000000..be23d9cbb --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/Preferences/CacheDirectory.tsx @@ -0,0 +1,60 @@ +import ElectronAPIs from "@ente/shared/electron"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import Box from "@mui/material/Box"; +import { DirectoryPath } from "components/Directory"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { MenuItemGroup } from "components/Menu/MenuItemGroup"; +import MenuSectionTitle from "components/Menu/MenuSectionTitle"; +import { t } from "i18next"; +import isElectron from "is-electron"; +import { useEffect, useState } from "react"; +import DownloadManager from "services/download"; + +export default function CacheDirectory() { + const [cacheDirectory, setCacheDirectory] = useState(undefined); + + useEffect(() => { + const main = async () => { + if (isElectron()) { + const customCacheDirectory = + await ElectronAPIs.getCacheDirectory(); + setCacheDirectory(customCacheDirectory); + } + }; + main(); + }, []); + + const handleCacheDirectoryChange = async () => { + try { + if (!isElectron()) { + return; + } + const newFolder = await ElectronAPIs.selectDirectory(); + if (!newFolder) { + return; + } + addLogLine(`Export folder changed to ${newFolder}`); + await ElectronAPIs.setCustomCacheDirectory(newFolder); + setCacheDirectory(newFolder); + await DownloadManager.reloadCaches(); + } catch (e) { + logError(e, "handleCacheDirectoryChange failed"); + } + }; + + return ( + + + + + } + /> + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/Preferences/LanguageSelector.tsx b/web/apps/photos/src/components/Sidebar/Preferences/LanguageSelector.tsx new file mode 100644 index 000000000..efcc03a2d --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/Preferences/LanguageSelector.tsx @@ -0,0 +1,59 @@ +import { + getLocaleInUse, + setLocaleInUse, + supportedLocales, + type SupportedLocale, +} from "@/ui/i18n"; +import DropdownInput, { DropdownOption } from "components/DropdownInput"; +import { t } from "i18next"; +import { useRouter } from "next/router"; + +/** + * Human readable name for each supported locale + * + * TODO (MR): This names themselves should be localized. + */ +export const localeName = (locale: SupportedLocale) => { + switch (locale) { + case "en-US": + return "English"; + case "fr-FR": + return "Français"; + case "zh-CN": + return "中文"; + case "nl-NL": + return "Nederlands"; + case "es-ES": + return "Español"; + case "pt-BR": + return "Brazilian Portuguese"; + } +}; + +const getLanguageOptions = (): DropdownOption[] => { + return supportedLocales.map((locale) => ({ + label: localeName(locale), + value: locale, + })); +}; + +export const LanguageSelector = () => { + const locale = getLocaleInUse(); + // Enhancement: Is this full reload needed? + const router = useRouter(); + + const updateCurrentLocale = (newLocale: SupportedLocale) => { + setLocaleInUse(newLocale); + router.reload(); + }; + + return ( + + ); +}; diff --git a/web/apps/photos/src/components/Sidebar/Preferences/index.tsx b/web/apps/photos/src/components/Sidebar/Preferences/index.tsx new file mode 100644 index 000000000..ec9d61a47 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/Preferences/index.tsx @@ -0,0 +1,113 @@ +import ChevronRight from "@mui/icons-material/ChevronRight"; +import { Box, DialogProps, Stack } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; +import Titlebar from "components/Titlebar"; +import { t } from "i18next"; +import isElectron from "is-electron"; +import { useState } from "react"; + +import ElectronAPIs from "@ente/shared/electron"; +import { useLocalState } from "@ente/shared/hooks/useLocalState"; +import { logError } from "@ente/shared/sentry"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { LS_KEYS } from "@ente/shared/storage/localStorage"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import AdvancedSettings from "../AdvancedSettings"; +import MapSettings from "../MapSetting"; +import { LanguageSelector } from "./LanguageSelector"; + +export default function Preferences({ open, onClose, onRootClose }) { + const [advancedSettingsView, setAdvancedSettingsView] = useState(false); + const [mapSettingsView, setMapSettingsView] = useState(false); + const [optOutOfCrashReports, setOptOutOfCrashReports] = useLocalState( + LS_KEYS.OPT_OUT_OF_CRASH_REPORTS, + false, + ); + + const openAdvancedSettings = () => setAdvancedSettingsView(true); + const closeAdvancedSettings = () => setAdvancedSettingsView(false); + + const openMapSettings = () => setMapSettingsView(true); + const closeMapSettings = () => setMapSettingsView(false); + + const handleRootClose = () => { + onClose(); + onRootClose(); + }; + + const handleDrawerClose: DialogProps["onClose"] = (_, reason) => { + if (reason === "backdropClick") { + handleRootClose(); + } else { + onClose(); + } + }; + + const toggleOptOutOfCrashReports = async () => { + try { + if (isElectron()) { + await ElectronAPIs.updateOptOutOfCrashReports( + !optOutOfCrashReports, + ); + } + setOptOutOfCrashReports(!optOutOfCrashReports); + InMemoryStore.set( + MS_KEYS.OPT_OUT_OF_CRASH_REPORTS, + !optOutOfCrashReports, + ); + } catch (e) { + logError(e, "toggleOptOutOfCrashReports failed"); + } + }; + + return ( + + + + + + + + + } + label={t("MAP")} + /> + } + label={t("ADVANCED")} + /> + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/ShortcutSection.tsx b/web/apps/photos/src/components/Sidebar/ShortcutSection.tsx new file mode 100644 index 000000000..dce298844 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/ShortcutSection.tsx @@ -0,0 +1,102 @@ +import { t } from "i18next"; +import { useContext, useEffect, useState } from "react"; + +import ArchiveOutlined from "@mui/icons-material/ArchiveOutlined"; +import CategoryIcon from "@mui/icons-material/Category"; +import DeleteOutline from "@mui/icons-material/DeleteOutline"; +import LockOutlined from "@mui/icons-material/LockOutlined"; +import VisibilityOff from "@mui/icons-material/VisibilityOff"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { + ARCHIVE_SECTION, + DUMMY_UNCATEGORIZED_COLLECTION, + TRASH_SECTION, +} from "constants/collection"; +import { GalleryContext } from "pages/gallery"; +import { getUncategorizedCollection } from "services/collectionService"; +import { CollectionSummaries } from "types/collection"; +interface Iprops { + closeSidebar: () => void; + collectionSummaries: CollectionSummaries; +} + +export default function ShortcutSection({ + closeSidebar, + collectionSummaries, +}: Iprops) { + const galleryContext = useContext(GalleryContext); + const [uncategorizedCollectionId, setUncategorizedCollectionID] = + useState(); + + useEffect(() => { + const main = async () => { + const unCategorizedCollection = await getUncategorizedCollection(); + if (unCategorizedCollection) { + setUncategorizedCollectionID(unCategorizedCollection.id); + } else { + setUncategorizedCollectionID(DUMMY_UNCATEGORIZED_COLLECTION); + } + }; + main(); + }, []); + + const openUncategorizedSection = () => { + galleryContext.setActiveCollectionID(uncategorizedCollectionId); + closeSidebar(); + }; + + const openTrashSection = () => { + galleryContext.setActiveCollectionID(TRASH_SECTION); + closeSidebar(); + }; + + const openArchiveSection = () => { + galleryContext.setActiveCollectionID(ARCHIVE_SECTION); + closeSidebar(); + }; + + const openHiddenSection = () => { + galleryContext.openHiddenSection(() => { + closeSidebar(); + }); + }; + + return ( + <> + } + onClick={openUncategorizedSection} + variant="captioned" + label={t("UNCATEGORIZED")} + subText={collectionSummaries + .get(uncategorizedCollectionId) + ?.fileCount.toString()} + /> + } + onClick={openArchiveSection} + variant="captioned" + label={t("ARCHIVE_SECTION_NAME")} + subText={collectionSummaries + .get(ARCHIVE_SECTION) + ?.fileCount.toString()} + /> + } + onClick={openHiddenSection} + variant="captioned" + label={t("HIDDEN")} + subIcon={} + /> + } + onClick={openTrashSection} + variant="captioned" + label={t("TRASH")} + subText={collectionSummaries + .get(TRASH_SECTION) + ?.fileCount.toString()} + /> + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/backgroundOverlay.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/backgroundOverlay.tsx new file mode 100644 index 000000000..eb9c85f51 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/backgroundOverlay.tsx @@ -0,0 +1,11 @@ +export function BackgroundOverlay() { + return ( + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/clickOverlay.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/clickOverlay.tsx new file mode 100644 index 000000000..789055808 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/clickOverlay.tsx @@ -0,0 +1,15 @@ +import { FlexWrapper, Overlay } from "@ente/shared/components/Container"; +import ChevronRightIcon from "@mui/icons-material/ChevronRight"; +export function ClickOverlay({ onClick }) { + return ( + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/index.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/index.tsx new file mode 100644 index 000000000..77776745d --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/index.tsx @@ -0,0 +1,35 @@ +import { useMemo } from "react"; +import { UserDetails } from "types/user"; +import { isPartOfFamily } from "utils/user/family"; +import StorageSection from "../storageSection"; +import { FamilyUsageSection } from "./usageSection"; + +interface Iprops { + userDetails: UserDetails; +} +export function FamilySubscriptionCardContent({ userDetails }: Iprops) { + const totalUsage = useMemo(() => { + if (isPartOfFamily(userDetails.familyData)) { + return userDetails.familyData.members.reduce( + (sum, currentMember) => sum + currentMember.usage, + 0, + ); + } else { + return userDetails.usage; + } + }, [userDetails]); + const totalStorage = + userDetails.familyData.storage + (userDetails.storageBonus ?? 0); + + return ( + <> + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/index.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/index.tsx new file mode 100644 index 000000000..4c0b1904f --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/index.tsx @@ -0,0 +1,42 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import { Box, Stack, Typography } from "@mui/material"; +import { t } from "i18next"; +import { Legend } from "./legend"; +import { FamilyUsageProgressBar } from "./progressBar"; + +interface Iprops { + userUsage: number; + totalUsage: number; + fileCount: number; + totalStorage: number; +} + +export function FamilyUsageSection({ + userUsage, + totalUsage, + fileCount, + totalStorage, +}: Iprops) { + return ( + + + + + + + + + {t("photos_count", { count: fileCount ?? 0 })} + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/legend.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/legend.tsx new file mode 100644 index 000000000..6caaa2374 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/legend.tsx @@ -0,0 +1,18 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import { Typography } from "@mui/material"; +import { LegendIndicator } from "../../../styledComponents"; + +interface Iprops { + label: string; + color: string; +} +export function Legend({ label, color }: Iprops) { + return ( + + + + {label} + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/progressBar.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/progressBar.tsx new file mode 100644 index 000000000..ab28b5b8f --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/family/usageSection/progressBar.tsx @@ -0,0 +1,34 @@ +import { Box } from "@mui/material"; +import { Progressbar } from "../../../styledComponents"; +interface Iprops { + userUsage: number; + totalUsage: number; + totalStorage: number; +} + +export function FamilyUsageProgressBar({ + userUsage, + totalUsage, + totalStorage, +}: Iprops) { + return ( + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/index.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/index.tsx new file mode 100644 index 000000000..238058534 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/index.tsx @@ -0,0 +1,29 @@ +import { Overlay, SpaceBetweenFlex } from "@ente/shared/components/Container"; +import { UserDetails } from "types/user"; +import { hasNonAdminFamilyMembers } from "utils/user/family"; +import { FamilySubscriptionCardContent } from "./family"; +import { IndividualSubscriptionCardContent } from "./individual"; + +interface Iprops { + userDetails: UserDetails; +} + +export function SubscriptionCardContentOverlay({ userDetails }: Iprops) { + return ( + + + {hasNonAdminFamilyMembers(userDetails.familyData) ? ( + + ) : ( + + )} + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/index.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/index.tsx new file mode 100644 index 000000000..9bdc3292c --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/index.tsx @@ -0,0 +1,22 @@ +import { UserDetails } from "types/user"; +import StorageSection from "../storageSection"; +import { IndividualUsageSection } from "./usageSection"; + +interface Iprops { + userDetails: UserDetails; +} + +export function IndividualSubscriptionCardContent({ userDetails }: Iprops) { + const totalStorage = + userDetails.subscription.storage + (userDetails.storageBonus ?? 0); + return ( + <> + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/usageSection.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/usageSection.tsx new file mode 100644 index 000000000..4b0ce31b0 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/individual/usageSection.tsx @@ -0,0 +1,31 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import { Box, Typography } from "@mui/material"; +import { t } from "i18next"; +import { makeHumanReadableStorage } from "utils/billing"; + +import { Progressbar } from "../../styledComponents"; + +interface Iprops { + usage: number; + fileCount: number; + storage: number; +} +export function IndividualUsageSection({ usage, storage, fileCount }: Iprops) { + return ( + + + + {`${makeHumanReadableStorage( + storage - usage, + )} ${t("FREE")}`} + + {t("photos_count", { count: fileCount ?? 0 })} + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/storageSection.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/storageSection.tsx new file mode 100644 index 000000000..6143044f0 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/contentOverlay/storageSection.tsx @@ -0,0 +1,50 @@ +import { Box, styled, Typography } from "@mui/material"; +import { t } from "i18next"; +import { convertBytesToGBs, makeHumanReadableStorage } from "utils/billing"; + +const MobileSmallBox = styled(Box)` + display: none; + @media (max-width: 359px) { + display: block; + } +`; + +const DefaultBox = styled(Box)` + display: none; + @media (min-width: 360px) { + display: block; + } +`; +interface Iprops { + usage: number; + storage: number; +} +export default function StorageSection({ usage, storage }: Iprops) { + return ( + + + {t("STORAGE")} + + + + {`${makeHumanReadableStorage(usage, { roundUp: true })} ${t( + "OF", + )} ${makeHumanReadableStorage(storage)} ${t("USED")}`} + + + + + {`${convertBytesToGBs(usage)} / ${convertBytesToGBs( + storage, + )} ${t("GB")} ${t("USED")}`} + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/index.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/index.tsx new file mode 100644 index 000000000..848792817 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/index.tsx @@ -0,0 +1,34 @@ +import { Box, Skeleton } from "@mui/material"; +import { UserDetails } from "types/user"; +import { BackgroundOverlay } from "./backgroundOverlay"; +import { ClickOverlay } from "./clickOverlay"; + +import { SubscriptionCardContentOverlay } from "./contentOverlay"; + +const SUBSCRIPTION_CARD_SIZE = 152; + +interface Iprops { + userDetails: UserDetails; + onClick: () => void; +} + +export default function SubscriptionCard({ userDetails, onClick }: Iprops) { + if (!userDetails) { + return ( + + ); + } + + return ( + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionCard/styledComponents.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionCard/styledComponents.tsx new file mode 100644 index 000000000..4d0a15e9d --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionCard/styledComponents.tsx @@ -0,0 +1,21 @@ +import { LinearProgress, styled } from "@mui/material"; +import { DotSeparator } from "../styledComponents"; + +export const Progressbar = styled(LinearProgress)(() => ({ + ".MuiLinearProgress-bar": { + borderRadius: "2px", + }, + borderRadius: "2px", + backgroundColor: "rgba(255, 255, 255, 0.2)", +})); + +Progressbar.defaultProps = { + variant: "determinate", +}; + +export const LegendIndicator = styled(DotSeparator)` + font-size: 8.71px; + margin: 0; + margin-right: 4px; + color: inherit; +`; diff --git a/web/apps/photos/src/components/Sidebar/SubscriptionStatus/index.tsx b/web/apps/photos/src/components/Sidebar/SubscriptionStatus/index.tsx new file mode 100644 index 000000000..b127c1597 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/SubscriptionStatus/index.tsx @@ -0,0 +1,126 @@ +import Box from "@mui/material/Box"; +import { t } from "i18next"; +import { GalleryContext } from "pages/gallery"; +import { MouseEventHandler, useContext, useMemo } from "react"; +import { Trans } from "react-i18next"; +import { UserDetails } from "types/user"; +import { + hasAddOnBonus, + hasExceededStorageQuota, + hasPaidSubscription, + hasStripeSubscription, + isOnFreePlan, + isSubscriptionActive, + isSubscriptionCancelled, +} from "utils/billing"; + +import { Typography } from "@mui/material"; +import LinkButton from "components/pages/gallery/LinkButton"; +import billingService from "services/billingService"; +import { isFamilyAdmin, isPartOfFamily } from "utils/user/family"; + +export default function SubscriptionStatus({ + userDetails, +}: { + userDetails: UserDetails; +}) { + const { showPlanSelectorModal } = useContext(GalleryContext); + + const hasAMessage = useMemo(() => { + if (!userDetails) { + return false; + } + if ( + isPartOfFamily(userDetails.familyData) && + !isFamilyAdmin(userDetails.familyData) + ) { + return false; + } + if ( + hasPaidSubscription(userDetails.subscription) && + !isSubscriptionCancelled(userDetails.subscription) + ) { + return false; + } + return true; + }, [userDetails]); + + const handleClick = useMemo(() => { + const eventHandler: MouseEventHandler = (e) => { + e.stopPropagation(); + if (userDetails) { + if (isSubscriptionActive(userDetails.subscription)) { + if (hasExceededStorageQuota(userDetails)) { + showPlanSelectorModal(); + } + } else { + if (hasStripeSubscription(userDetails.subscription)) { + billingService.redirectToCustomerPortal(); + } else { + showPlanSelectorModal(); + } + } + } + }; + return eventHandler; + }, [userDetails]); + + if (!hasAMessage) { + return <>; + } + + const messages = []; + if (!hasAddOnBonus(userDetails.bonusData)) { + if (isSubscriptionActive(userDetails.subscription)) { + if (isOnFreePlan(userDetails.subscription)) { + messages.push( + , + ); + } else if (isSubscriptionCancelled(userDetails.subscription)) { + messages.push( + t("RENEWAL_CANCELLED_SUBSCRIPTION_INFO", { + date: userDetails.subscription?.expiryTime, + }), + ); + } + } else { + messages.push( + , + }} + />, + ); + } + } + + if (hasExceededStorageQuota(userDetails) && messages.length === 0) { + messages.push( + , + }} + />, + ); + } + + return ( + + + {messages} + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/UtilitySection.tsx b/web/apps/photos/src/components/Sidebar/UtilitySection.tsx new file mode 100644 index 000000000..3acd0326a --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/UtilitySection.tsx @@ -0,0 +1,186 @@ +import { t } from "i18next"; +import { useContext, useState } from "react"; + +// import FixLargeThumbnails from 'components/FixLargeThumbnail'; +import RecoveryKey from "@ente/shared/components/RecoveryKey"; +import { + ACCOUNTS_PAGES, + PHOTOS_PAGES as PAGES, +} from "@ente/shared/constants/pages"; +import TwoFactorModal from "components/TwoFactor/Modal"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +// import mlIDbStorage from 'utils/storage/mlIDbStorage'; +import { APPS, CLIENT_PACKAGE_NAMES } from "@ente/shared/apps/constants"; +import ThemeSwitcher from "@ente/shared/components/ThemeSwitcher"; +import { getAccountsURL } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { THEME_COLOR } from "@ente/shared/themes/constants"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import WatchFolder from "components/WatchFolder"; +import isElectron from "is-electron"; +import { getAccountsToken } from "services/userService"; +import { getDownloadAppMessage } from "utils/ui"; +import { isInternalUser } from "utils/user"; +import Preferences from "./Preferences"; + +export default function UtilitySection({ closeSidebar }) { + const router = useRouter(); + const appContext = useContext(AppContext); + const { + setDialogMessage, + startLoading, + watchFolderView, + setWatchFolderView, + themeColor, + setThemeColor, + } = appContext; + + const [recoverModalView, setRecoveryModalView] = useState(false); + const [twoFactorModalView, setTwoFactorModalView] = useState(false); + const [preferencesView, setPreferencesView] = useState(false); + + const openPreferencesOptions = () => setPreferencesView(true); + const closePreferencesOptions = () => setPreferencesView(false); + + const openRecoveryKeyModal = () => setRecoveryModalView(true); + const closeRecoveryKeyModal = () => setRecoveryModalView(false); + + const openTwoFactorModal = () => setTwoFactorModalView(true); + const closeTwoFactorModal = () => setTwoFactorModalView(false); + + const openWatchFolder = () => { + if (isElectron()) { + setWatchFolderView(true); + } else { + setDialogMessage(getDownloadAppMessage()); + } + }; + const closeWatchFolder = () => setWatchFolderView(false); + + const redirectToChangePasswordPage = () => { + closeSidebar(); + router.push(PAGES.CHANGE_PASSWORD); + }; + + const redirectToChangeEmailPage = () => { + closeSidebar(); + router.push(PAGES.CHANGE_EMAIL); + }; + + const redirectToAccountsPage = async () => { + closeSidebar(); + + try { + const accountsToken = await getAccountsToken(); + + window.location.href = `${getAccountsURL()}${ + ACCOUNTS_PAGES.ACCOUNT_HANDOFF + }?package=${CLIENT_PACKAGE_NAMES.get( + APPS.PHOTOS, + )}&token=${accountsToken}`; + } catch (e) { + logError(e, "failed to redirect to accounts page"); + } + }; + + const redirectToDeduplicatePage = () => router.push(PAGES.DEDUPLICATE); + + const somethingWentWrong = () => + setDialogMessage({ + title: t("ERROR"), + content: t("RECOVER_KEY_GENERATION_FAILED"), + close: { variant: "critical" }, + }); + + const toggleTheme = () => { + setThemeColor((themeColor) => + themeColor === THEME_COLOR.DARK + ? THEME_COLOR.LIGHT + : THEME_COLOR.DARK, + ); + }; + + return ( + <> + {isElectron() && ( + + )} + + {isInternalUser() && ( + + } + /> + )} + + + + + + + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/index.tsx b/web/apps/photos/src/components/Sidebar/index.tsx new file mode 100644 index 000000000..a93eb2387 --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/index.tsx @@ -0,0 +1,42 @@ +import { Divider, Stack } from "@mui/material"; +import { CollectionSummaries } from "types/collection"; +import DebugSection from "./DebugSection"; +import ExitSection from "./ExitSection"; +import HeaderSection from "./Header"; +import HelpSection from "./HelpSection"; +import ShortcutSection from "./ShortcutSection"; +import UtilitySection from "./UtilitySection"; +import { DrawerSidebar } from "./styledComponents"; +import UserDetailsSection from "./userDetailsSection"; + +interface Iprops { + collectionSummaries: CollectionSummaries; + sidebarView: boolean; + closeSidebar: () => void; +} +export default function Sidebar({ + collectionSummaries, + sidebarView, + closeSidebar, +}: Iprops) { + return ( + + + + + + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Sidebar/styledComponents.tsx b/web/apps/photos/src/components/Sidebar/styledComponents.tsx new file mode 100644 index 000000000..d2b2f6b2b --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/styledComponents.tsx @@ -0,0 +1,17 @@ +import CircleIcon from "@mui/icons-material/Circle"; +import { styled } from "@mui/material"; +import { EnteDrawer } from "components/EnteDrawer"; + +export const DrawerSidebar = styled(EnteDrawer)(({ theme }) => ({ + "& .MuiPaper-root": { + padding: theme.spacing(1.5), + }, +})); + +DrawerSidebar.defaultProps = { anchor: "left" }; + +export const DotSeparator = styled(CircleIcon)` + font-size: 4px; + margin: 0 ${({ theme }) => theme.spacing(1)}; + color: inherit; +`; diff --git a/web/apps/photos/src/components/Sidebar/userDetailsSection.tsx b/web/apps/photos/src/components/Sidebar/userDetailsSection.tsx new file mode 100644 index 000000000..d2cf556fa --- /dev/null +++ b/web/apps/photos/src/components/Sidebar/userDetailsSection.tsx @@ -0,0 +1,83 @@ +import { useLocalState } from "@ente/shared/hooks/useLocalState"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { Box, Skeleton } from "@mui/material"; +import Typography from "@mui/material/Typography"; +import { GalleryContext } from "pages/gallery"; +import { useContext, useEffect, useMemo, useState } from "react"; +import { getUserDetailsV2 } from "services/userService"; +import { UserDetails } from "types/user"; +import { isFamilyAdmin, isPartOfFamily } from "utils/user/family"; +import { MemberSubscriptionManage } from "../MemberSubscriptionManage"; +import SubscriptionCard from "./SubscriptionCard"; +import SubscriptionStatus from "./SubscriptionStatus"; + +export default function UserDetailsSection({ sidebarView }) { + const galleryContext = useContext(GalleryContext); + + const [userDetails, setUserDetails] = useLocalState( + LS_KEYS.USER_DETAILS, + ); + const [memberSubscriptionManageView, setMemberSubscriptionManageView] = + useState(false); + + const openMemberSubscriptionManage = () => + setMemberSubscriptionManageView(true); + const closeMemberSubscriptionManage = () => + setMemberSubscriptionManageView(false); + + useEffect(() => { + if (!sidebarView) { + return; + } + const main = async () => { + const userDetails = await getUserDetailsV2(); + setUserDetails(userDetails); + setData(LS_KEYS.SUBSCRIPTION, userDetails.subscription); + setData(LS_KEYS.FAMILY_DATA, userDetails.familyData); + setData(LS_KEYS.USER, { + ...getData(LS_KEYS.USER), + email: userDetails.email, + }); + }; + main(); + }, [sidebarView]); + + const isMemberSubscription = useMemo( + () => + userDetails && + isPartOfFamily(userDetails.familyData) && + !isFamilyAdmin(userDetails.familyData), + [userDetails], + ); + + const handleSubscriptionCardClick = isMemberSubscription + ? openMemberSubscriptionManage + : galleryContext.showPlanSelectorModal; + + return ( + <> + + + {userDetails ? ( + userDetails.email + ) : ( + + )} + + + + + + {isMemberSubscription && ( + + )} + + ); +} diff --git a/web/apps/photos/src/components/Titlebar.tsx b/web/apps/photos/src/components/Titlebar.tsx new file mode 100644 index 000000000..ed9089f4c --- /dev/null +++ b/web/apps/photos/src/components/Titlebar.tsx @@ -0,0 +1,59 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import ArrowBack from "@mui/icons-material/ArrowBack"; +import Close from "@mui/icons-material/Close"; +import { Box, IconButton, Typography } from "@mui/material"; + +interface Iprops { + title: string; + caption?: string; + onClose: () => void; + backIsClose?: boolean; + onRootClose?: () => void; + actionButton?: JSX.Element; +} + +export default function Titlebar({ + title, + caption, + onClose, + backIsClose, + actionButton, + onRootClose, +}: Iprops): JSX.Element { + return ( + <> + + + {backIsClose ? : } + + + {actionButton && actionButton} + {!backIsClose && ( + + + + )} + + + + + {title} + + + {caption} + + + + ); +} diff --git a/web/apps/photos/src/components/TruncateText.tsx b/web/apps/photos/src/components/TruncateText.tsx new file mode 100644 index 000000000..3d3497215 --- /dev/null +++ b/web/apps/photos/src/components/TruncateText.tsx @@ -0,0 +1,23 @@ +import { Box, styled, Typography } from "@mui/material"; +import Tooltip from "@mui/material/Tooltip"; + +const Ellipse = styled(Typography)` + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; //number of lines to show + line-clamp: 2; + -webkit-box-orient: vertical; +`; + +export default function TruncateText({ text }) { + return ( + + + + {text} + + + + ); +} diff --git a/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx b/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx new file mode 100644 index 000000000..f9d9a23c9 --- /dev/null +++ b/web/apps/photos/src/components/TwoFactor/Modal/Manage.tsx @@ -0,0 +1,112 @@ +import { t } from "i18next"; +import { useContext } from "react"; + +import { disableTwoFactor } from "@ente/accounts/api/user"; +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { Button, Grid } from "@mui/material"; +import router from "next/router"; +import { AppContext } from "pages/_app"; + +interface Iprops { + closeDialog: () => void; +} + +export default function TwoFactorModalManageSection(props: Iprops) { + const { closeDialog } = props; + const { setDialogMessage } = useContext(AppContext); + + const warnTwoFactorDisable = async () => { + setDialogMessage({ + title: t("DISABLE_TWO_FACTOR"), + + content: t("DISABLE_TWO_FACTOR_MESSAGE"), + close: { text: t("CANCEL") }, + proceed: { + variant: "critical", + text: t("DISABLE"), + action: twoFactorDisable, + }, + }); + }; + + const twoFactorDisable = async () => { + try { + await disableTwoFactor(); + setData(LS_KEYS.USER, { + ...getData(LS_KEYS.USER), + isTwoFactorEnabled: false, + }); + closeDialog(); + } catch (e) { + setDialogMessage({ + title: t("TWO_FACTOR_DISABLE_FAILED"), + close: {}, + }); + } + }; + + const warnTwoFactorReconfigure = async () => { + setDialogMessage({ + title: t("UPDATE_TWO_FACTOR"), + + content: t("UPDATE_TWO_FACTOR_MESSAGE"), + close: { text: t("CANCEL") }, + proceed: { + variant: "accent", + text: t("UPDATE"), + action: reconfigureTwoFactor, + }, + }); + }; + + const reconfigureTwoFactor = async () => { + closeDialog(); + router.push(PAGES.TWO_FACTOR_SETUP); + }; + + return ( + <> + + + {t("UPDATE_TWO_FACTOR_LABEL")} + + + + + + + + {t("DISABLE_TWO_FACTOR_LABEL")}{" "} + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/TwoFactor/Modal/Setup.tsx b/web/apps/photos/src/components/TwoFactor/Modal/Setup.tsx new file mode 100644 index 000000000..dbe724b46 --- /dev/null +++ b/web/apps/photos/src/components/TwoFactor/Modal/Setup.tsx @@ -0,0 +1,34 @@ +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import LockIcon from "@mui/icons-material/Lock"; +import { t } from "i18next"; +import { useRouter } from "next/router"; + +import { VerticallyCentered } from "@ente/shared/components/Container"; +import { Button, Typography } from "@mui/material"; + +interface Iprops { + closeDialog: () => void; +} + +export default function TwoFactorModalSetupSection({ closeDialog }: Iprops) { + const router = useRouter(); + const redirectToTwoFactorSetup = () => { + closeDialog(); + router.push(PAGES.TWO_FACTOR_SETUP); + }; + + return ( + + theme.spacing(5), mb: 2 }} /> + {t("TWO_FACTOR_INFO")} + + + ); +} diff --git a/web/apps/photos/src/components/TwoFactor/Modal/index.tsx b/web/apps/photos/src/components/TwoFactor/Modal/index.tsx new file mode 100644 index 000000000..d4c5ebc3c --- /dev/null +++ b/web/apps/photos/src/components/TwoFactor/Modal/index.tsx @@ -0,0 +1,68 @@ +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { t } from "i18next"; +import { useEffect, useState } from "react"; +import { getTwoFactorStatus } from "services/userService"; +import { SetLoading } from "types/gallery"; + +import DialogTitleWithCloseButton from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import { Dialog, DialogContent, styled } from "@mui/material"; +import TwoFactorModalManageSection from "./Manage"; +import TwoFactorModalSetupSection from "./Setup"; + +const TwoFactorDialog = styled(Dialog)(({ theme }) => ({ + "& .MuiDialogContent-root": { + padding: theme.spacing(2, 4), + }, +})); +interface Props { + show: boolean; + onHide: () => void; + setLoading: SetLoading; + closeSidebar: () => void; +} + +function TwoFactorModal(props: Props) { + const [isTwoFactorEnabled, setTwoFactorStatus] = useState(false); + + useEffect(() => { + const isTwoFactorEnabled = + getData(LS_KEYS.USER).isTwoFactorEnabled ?? false; + setTwoFactorStatus(isTwoFactorEnabled); + }, []); + + useEffect(() => { + if (!props.show) { + return; + } + const main = async () => { + const isTwoFactorEnabled = await getTwoFactorStatus(); + setTwoFactorStatus(isTwoFactorEnabled); + setData(LS_KEYS.USER, { + ...getData(LS_KEYS.USER), + isTwoFactorEnabled, + }); + }; + main(); + }, [props.show]); + + const closeDialog = () => { + props.onHide(); + props.closeSidebar(); + }; + + return ( + + + {t("TWO_FACTOR_AUTHENTICATION")} + + + {isTwoFactorEnabled ? ( + + ) : ( + + )} + + + ); +} +export default TwoFactorModal; diff --git a/web/apps/photos/src/components/Upload/UploadButton.tsx b/web/apps/photos/src/components/Upload/UploadButton.tsx new file mode 100644 index 000000000..1b6842f02 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadButton.tsx @@ -0,0 +1,74 @@ +import FileUploadOutlinedIcon from "@mui/icons-material/FileUploadOutlined"; +import { Button, ButtonProps, IconButton, styled } from "@mui/material"; +import { t } from "i18next"; + +import uploadManager from "services/upload/uploadManager"; +import { UploadTypeSelectorIntent } from "types/gallery"; + +const Wrapper = styled("div")<{ $disableShrink: boolean }>` + display: flex; + align-items: center; + justify-content: center; + transition: opacity 1s ease; + cursor: pointer; + & .mobile-button { + display: none; + } + ${({ $disableShrink }) => + !$disableShrink && + `@media (max-width: 624px) { + & .mobile-button { + display: block; + } + & .desktop-button { + display: none; + } + }`} +`; + +interface Iprops { + openUploader: (intent?: UploadTypeSelectorIntent) => void; + text?: string; + color?: ButtonProps["color"]; + disableShrink?: boolean; + icon?: JSX.Element; +} +function UploadButton({ + openUploader, + text, + color, + disableShrink, + icon, +}: Iprops) { + const onClickHandler = () => openUploader(); + + return ( + + + + + {icon ?? } + + + ); +} + +export default UploadButton; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx b/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx new file mode 100644 index 000000000..aa0147775 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/dialog.tsx @@ -0,0 +1,132 @@ +import { Dialog, DialogContent, Link } from "@mui/material"; +import { t } from "i18next"; + +import { dialogCloseHandler } from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import { APP_DOWNLOAD_URL } from "@ente/shared/constants/urls"; +import { UPLOAD_RESULT, UPLOAD_STAGES } from "constants/upload"; +import UploadProgressContext from "contexts/uploadProgress"; +import { useContext, useEffect, useState } from "react"; +import { Trans } from "react-i18next"; +import { UploadProgressFooter } from "./footer"; +import { UploadProgressHeader } from "./header"; +import { InProgressSection } from "./inProgressSection"; +import { ResultSection } from "./resultSection"; +import { NotUploadSectionHeader } from "./styledComponents"; + +export function UploadProgressDialog() { + const { open, onClose, uploadStage, finishedUploads } = useContext( + UploadProgressContext, + ); + + const [hasUnUploadedFiles, setHasUnUploadedFiles] = useState(false); + + useEffect(() => { + if ( + finishedUploads.get(UPLOAD_RESULT.ALREADY_UPLOADED)?.length > 0 || + finishedUploads.get(UPLOAD_RESULT.BLOCKED)?.length > 0 || + finishedUploads.get(UPLOAD_RESULT.FAILED)?.length > 0 || + finishedUploads.get(UPLOAD_RESULT.LARGER_THAN_AVAILABLE_STORAGE) + ?.length > 0 || + finishedUploads.get(UPLOAD_RESULT.TOO_LARGE)?.length > 0 || + finishedUploads.get(UPLOAD_RESULT.UNSUPPORTED)?.length > 0 + ) { + setHasUnUploadedFiles(true); + } else { + setHasUnUploadedFiles(false); + } + }, [finishedUploads]); + + const handleClose = dialogCloseHandler({ staticBackdrop: true, onClose }); + + return ( + + + {(uploadStage === UPLOAD_STAGES.UPLOADING || + uploadStage === UPLOAD_STAGES.FINISH || + uploadStage === UPLOAD_STAGES.EXTRACTING_METADATA) && ( + + {(uploadStage === UPLOAD_STAGES.UPLOADING || + uploadStage === UPLOAD_STAGES.EXTRACTING_METADATA) && ( + + )} + {(uploadStage === UPLOAD_STAGES.UPLOADING || + uploadStage === UPLOAD_STAGES.FINISH) && ( + <> + + + + {uploadStage === UPLOAD_STAGES.FINISH && + hasUnUploadedFiles && ( + + {t("FILE_NOT_UPLOADED_LIST")} + + )} + + + ), + }} + /> + } + /> + + + + + + + )} + + )} + {uploadStage === UPLOAD_STAGES.FINISH && } + + ); +} diff --git a/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx b/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx new file mode 100644 index 000000000..5a5bebd20 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/footer.tsx @@ -0,0 +1,28 @@ +import { Button, DialogActions } from "@mui/material"; +import { UPLOAD_RESULT, UPLOAD_STAGES } from "constants/upload"; +import { t } from "i18next"; +import { useContext } from "react"; + +import UploadProgressContext from "contexts/uploadProgress"; + +export function UploadProgressFooter() { + const { uploadStage, finishedUploads, retryFailed, onClose } = useContext( + UploadProgressContext, + ); + + return ( + + {uploadStage === UPLOAD_STAGES.FINISH && + (finishedUploads?.get(UPLOAD_RESULT.FAILED)?.length > 0 || + finishedUploads?.get(UPLOAD_RESULT.BLOCKED)?.length > 0 ? ( + + ) : ( + + ))} + + ); +} diff --git a/web/apps/photos/src/components/Upload/UploadProgress/header.tsx b/web/apps/photos/src/components/Upload/UploadProgress/header.tsx new file mode 100644 index 000000000..709c776a1 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/header.tsx @@ -0,0 +1,11 @@ +import { UploadProgressBar } from "./progressBar"; +import { UploadProgressTitle } from "./title"; + +export function UploadProgressHeader() { + return ( + <> + + + + ); +} diff --git a/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx b/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx new file mode 100644 index 000000000..128e280ab --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/inProgressSection.tsx @@ -0,0 +1,72 @@ +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import ItemList from "components/ItemList"; +import UploadProgressContext from "contexts/uploadProgress"; +import { t } from "i18next"; +import { useContext } from "react"; +import { + SectionInfo, + UploadProgressSection, + UploadProgressSectionContent, + UploadProgressSectionTitle, +} from "./section"; +import { InProgressItemContainer } from "./styledComponents"; + +import { CaptionedText } from "components/CaptionedText"; +import { UPLOAD_STAGES } from "constants/upload"; + +export const InProgressSection = () => { + const { inProgressUploads, hasLivePhotos, uploadFileNames, uploadStage } = + useContext(UploadProgressContext); + const fileList = inProgressUploads ?? []; + + const renderListItem = ({ localFileID, progress }) => { + return ( + + {uploadFileNames.get(localFileID)} + {uploadStage === UPLOAD_STAGES.UPLOADING && ( + <> + {" "} + {`-`} + {`${progress}%`} + + )} + + ); + }; + + const getItemTitle = ({ localFileID, progress }) => { + return `${uploadFileNames.get(localFileID)} - ${progress}%`; + }; + + const generateItemKey = ({ localFileID, progress }) => { + return `${localFileID}-${progress}`; + }; + + return ( + + }> + + + + {hasLivePhotos && ( + {t("LIVE_PHOTOS_DETECTED")} + )} + + + + ); +}; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/index.tsx b/web/apps/photos/src/components/Upload/UploadProgress/index.tsx new file mode 100644 index 000000000..8f16ef2d9 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/index.tsx @@ -0,0 +1,101 @@ +import { useContext, useEffect, useState } from "react"; +import { UploadProgressDialog } from "./dialog"; +import { MinimizedUploadProgress } from "./minimized"; + +import { t } from "i18next"; + +import { UPLOAD_STAGES } from "constants/upload"; +import UploadProgressContext from "contexts/uploadProgress"; +import { AppContext } from "pages/_app"; +import { + InProgressUpload, + SegregatedFinishedUploads, + UploadCounter, + UploadFileNames, +} from "types/upload/ui"; + +interface Props { + open: boolean; + onClose: () => void; + uploadCounter: UploadCounter; + uploadStage: UPLOAD_STAGES; + percentComplete: number; + retryFailed: () => void; + inProgressUploads: InProgressUpload[]; + uploadFileNames: UploadFileNames; + finishedUploads: SegregatedFinishedUploads; + hasLivePhotos: boolean; + cancelUploads: () => void; +} + +export default function UploadProgress({ + open, + uploadCounter, + uploadStage, + percentComplete, + retryFailed, + uploadFileNames, + hasLivePhotos, + inProgressUploads, + finishedUploads, + ...props +}: Props) { + const appContext = useContext(AppContext); + const [expanded, setExpanded] = useState(false); + + useEffect(() => { + if (open) { + setExpanded(false); + } + }, [open]); + + function confirmCancelUpload() { + appContext.setDialogMessage({ + title: t("STOP_UPLOADS_HEADER"), + content: t("STOP_ALL_UPLOADS_MESSAGE"), + proceed: { + text: t("YES_STOP_UPLOADS"), + variant: "critical", + action: props.cancelUploads, + }, + close: { + text: t("NO"), + variant: "secondary", + action: () => {}, + }, + }); + } + + function onClose() { + if (uploadStage !== UPLOAD_STAGES.FINISH) { + confirmCancelUpload(); + } else { + props.onClose(); + } + } + + if (!open) { + return <>; + } + + return ( + + {expanded ? : } + + ); +} diff --git a/web/apps/photos/src/components/Upload/UploadProgress/minimized.tsx b/web/apps/photos/src/components/Upload/UploadProgress/minimized.tsx new file mode 100644 index 000000000..659a58bcd --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/minimized.tsx @@ -0,0 +1,21 @@ +import { Paper, Snackbar } from "@mui/material"; +import { UploadProgressHeader } from "./header"; +export function MinimizedUploadProgress() { + return ( + + + + + + ); +} diff --git a/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx b/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx new file mode 100644 index 000000000..6173829d7 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/progressBar.tsx @@ -0,0 +1,27 @@ +import { Box, Divider, LinearProgress } from "@mui/material"; +import { UPLOAD_STAGES } from "constants/upload"; +import UploadProgressContext from "contexts/uploadProgress"; +import { useContext } from "react"; + +export function UploadProgressBar() { + const { uploadStage, percentComplete } = useContext(UploadProgressContext); + return ( + + {(uploadStage === UPLOAD_STAGES.READING_GOOGLE_METADATA_FILES || + uploadStage === UPLOAD_STAGES.EXTRACTING_METADATA || + uploadStage === UPLOAD_STAGES.UPLOADING) && ( + <> + + + + )} + + ); +} diff --git a/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx b/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx new file mode 100644 index 000000000..1be6ca831 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/resultSection.tsx @@ -0,0 +1,69 @@ +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import { CaptionedText } from "components/CaptionedText"; +import ItemList from "components/ItemList"; +import { UPLOAD_RESULT } from "constants/upload"; +import UploadProgressContext from "contexts/uploadProgress"; +import { useContext } from "react"; +import { + SectionInfo, + UploadProgressSection, + UploadProgressSectionContent, + UploadProgressSectionTitle, +} from "./section"; +import { ResultItemContainer } from "./styledComponents"; + +export interface ResultSectionProps { + uploadResult: UPLOAD_RESULT; + sectionTitle: any; + sectionInfo?: any; +} +export const ResultSection = (props: ResultSectionProps) => { + const { finishedUploads, uploadFileNames } = useContext( + UploadProgressContext, + ); + const fileList = finishedUploads.get(props.uploadResult); + + if (!fileList?.length) { + return <>; + } + + const renderListItem = (fileID) => { + return ( + + {uploadFileNames.get(fileID)} + + ); + }; + + const getItemTitle = (fileID) => { + return uploadFileNames.get(fileID); + }; + + const generateItemKey = (fileID) => { + return fileID; + }; + + return ( + + }> + + + + {props.sectionInfo && ( + {props.sectionInfo} + )} + + + + ); +}; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/section.tsx b/web/apps/photos/src/components/Upload/UploadProgress/section.tsx new file mode 100644 index 000000000..ebb412082 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/section.tsx @@ -0,0 +1,35 @@ +import { Typography, TypographyProps, styled } from "@mui/material"; +import MuiAccordion, { AccordionProps } from "@mui/material/Accordion"; +import MuiAccordionDetails from "@mui/material/AccordionDetails"; +import MuiAccordionSummary from "@mui/material/AccordionSummary"; + +export const UploadProgressSection = styled((props: AccordionProps) => ( + +))(({ theme }) => ({ + borderTop: `1px solid ${theme.palette.divider}`, + "&:last-child": { + borderBottom: `1px solid ${theme.palette.divider}`, + }, + "&:before": { + display: "none", + }, +})); + +export const UploadProgressSectionTitle = styled(MuiAccordionSummary)(() => ({ + backgroundColor: "rgba(255, 255, 255, .05)", +})); + +export const UploadProgressSectionContent = styled(MuiAccordionDetails)( + ({ theme }) => ({ + padding: theme.spacing(2), + }), +); + +export const SectionInfo = (props: TypographyProps) => ( + +); diff --git a/web/apps/photos/src/components/Upload/UploadProgress/styledComponents.tsx b/web/apps/photos/src/components/Upload/UploadProgress/styledComponents.tsx new file mode 100644 index 000000000..0eb28e144 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/styledComponents.tsx @@ -0,0 +1,37 @@ +import { styled } from "@mui/material"; +export const NotUploadSectionHeader = styled("div")( + ({ theme }) => ` + text-align: center; + color: ${theme.colors.danger.A700}; + border-bottom: 1px solid ${theme.colors.danger.A700}; + margin:${theme.spacing(3, 2, 1)} +`, +); + +export const InProgressItemContainer = styled("div")` + display: inline-block; + & > span { + display: inline-block; + } + & > span:first-of-type { + position: relative; + top: 5px; + max-width: 340px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + & > .separator { + margin: 0 5px; + } +`; + +export const ResultItemContainer = styled("div")` + position: relative; + top: 5px; + display: inline-block; + max-width: 394px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +`; diff --git a/web/apps/photos/src/components/Upload/UploadProgress/title.tsx b/web/apps/photos/src/components/Upload/UploadProgress/title.tsx new file mode 100644 index 000000000..1b97b9b43 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadProgress/title.tsx @@ -0,0 +1,63 @@ +import { + IconButtonWithBG, + SpaceBetweenFlex, +} from "@ente/shared/components/Container"; +import Close from "@mui/icons-material/Close"; +import { Box, DialogTitle, Stack, Typography } from "@mui/material"; +import { UPLOAD_STAGES } from "constants/upload"; +import { t } from "i18next"; +import { useContext } from "react"; + +import UnfoldLessIcon from "@mui/icons-material/UnfoldLess"; +import UnfoldMoreIcon from "@mui/icons-material/UnfoldMore"; +import UploadProgressContext from "contexts/uploadProgress"; + +const UploadProgressTitleText = ({ expanded }) => { + return ( + + {t("FILE_UPLOAD")} + + ); +}; + +function UploadProgressSubtitleText() { + const { uploadStage, uploadCounter } = useContext(UploadProgressContext); + + return ( + + {uploadStage === UPLOAD_STAGES.UPLOADING + ? t(`UPLOAD_STAGE_MESSAGE.${uploadStage}`, { uploadCounter }) + : uploadStage === UPLOAD_STAGES.EXTRACTING_METADATA + ? t(`UPLOAD_STAGE_MESSAGE.${uploadStage}`, { uploadCounter }) + : t(`UPLOAD_STAGE_MESSAGE.${uploadStage}`)} + + ); +} + +export function UploadProgressTitle() { + const { setExpanded, onClose, expanded } = useContext( + UploadProgressContext, + ); + const toggleExpanded = () => setExpanded((expanded) => !expanded); + + return ( + + + + + + + + + + {expanded ? : } + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/Upload/UploadStrategyChoiceModal.tsx b/web/apps/photos/src/components/Upload/UploadStrategyChoiceModal.tsx new file mode 100644 index 000000000..4e773a3a8 --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadStrategyChoiceModal.tsx @@ -0,0 +1,66 @@ +import { + CenteredFlex, + SpaceBetweenFlex, +} from "@ente/shared/components/Container"; +import DialogTitleWithCloseButton, { + dialogCloseHandler, +} from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import { Button, Dialog, DialogContent, Typography } from "@mui/material"; +import { t } from "i18next"; + +interface Props { + uploadToMultipleCollection: () => void; + open: boolean; + onClose: () => void; + uploadToSingleCollection: () => void; +} +function UploadStrategyChoiceModal({ + uploadToMultipleCollection, + uploadToSingleCollection, + ...props +}: Props) { + const handleClose = dialogCloseHandler({ + onClose: props.onClose, + }); + + return ( + + + {t("MULTI_FOLDER_UPLOAD")} + + + + + {t("UPLOAD_STRATEGY_CHOICE")} + + + + + + {t("OR")} + + + + + + ); +} +export default UploadStrategyChoiceModal; diff --git a/web/apps/photos/src/components/Upload/UploadTypeSelector/index.tsx b/web/apps/photos/src/components/Upload/UploadTypeSelector/index.tsx new file mode 100644 index 000000000..c1e8fdfdf --- /dev/null +++ b/web/apps/photos/src/components/Upload/UploadTypeSelector/index.tsx @@ -0,0 +1,103 @@ +import { t } from "i18next"; +import { useContext, useEffect, useRef } from "react"; + +import DialogTitleWithCloseButton, { + dialogCloseHandler, +} from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import ChevronRight from "@mui/icons-material/ChevronRight"; +import GoogleIcon from "@mui/icons-material/Google"; +import { default as FileUploadIcon } from "@mui/icons-material/ImageOutlined"; +import { default as FolderUploadIcon } from "@mui/icons-material/PermMediaOutlined"; +import { Box, Dialog, Stack, Typography } from "@mui/material"; +import { EnteMenuItem } from "components/Menu/EnteMenuItem"; +import { UploadTypeSelectorIntent } from "types/gallery"; +import { isMobileOrTable } from "utils/common/deviceDetection"; +import { PublicCollectionGalleryContext } from "utils/publicCollectionGallery"; +interface Iprops { + onClose: () => void; + show: boolean; + uploadFiles: () => void; + uploadFolders: () => void; + uploadGoogleTakeoutZips: () => void; + uploadTypeSelectorIntent: UploadTypeSelectorIntent; +} +export default function UploadTypeSelector({ + onClose, + show, + uploadFiles, + uploadFolders, + uploadGoogleTakeoutZips, + uploadTypeSelectorIntent, +}: Iprops) { + const publicCollectionGalleryContext = useContext( + PublicCollectionGalleryContext, + ); + const directlyShowUploadFiles = useRef(isMobileOrTable()); + + useEffect(() => { + if ( + show && + directlyShowUploadFiles.current && + publicCollectionGalleryContext.accessedThroughSharedURL + ) { + uploadFiles(); + onClose(); + } + }, [show]); + + return ( + ({ + maxWidth: "375px", + p: 1, + [theme.breakpoints.down(360)]: { p: 0 }, + }), + }} + onClose={dialogCloseHandler({ onClose })} + > + + {uploadTypeSelectorIntent === + UploadTypeSelectorIntent.collectPhotos + ? t("SELECT_PHOTOS") + : uploadTypeSelectorIntent === + UploadTypeSelectorIntent.import + ? t("IMPORT") + : t("UPLOAD")} + + + + {uploadTypeSelectorIntent !== + UploadTypeSelectorIntent.import && ( + } + endIcon={} + label={t("UPLOAD_FILES")} + /> + )} + } + endIcon={} + label={t("UPLOAD_DIRS")} + /> + + {uploadTypeSelectorIntent !== + UploadTypeSelectorIntent.collectPhotos && ( + } + endIcon={} + label={t("UPLOAD_GOOGLE_TAKEOUT")} + /> + )} + + + {t("DRAG_AND_DROP_HINT")} + + + + ); +} diff --git a/web/apps/photos/src/components/Upload/Uploader.tsx b/web/apps/photos/src/components/Upload/Uploader.tsx new file mode 100644 index 000000000..8daeda505 --- /dev/null +++ b/web/apps/photos/src/components/Upload/Uploader.tsx @@ -0,0 +1,846 @@ +import { useContext, useEffect, useRef, useState } from "react"; + +import { t } from "i18next"; +import { Trans } from "react-i18next"; +import { getLatestCollections } from "services/collectionService"; + +import UploadProgress from "./UploadProgress"; + +import ElectronAPIs from "@ente/shared/electron"; +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import DiscFullIcon from "@mui/icons-material/DiscFull"; +import UserNameInputDialog from "components/UserNameInputDialog"; +import { + DEFAULT_IMPORT_SUGGESTION, + PICKED_UPLOAD_TYPE, + UPLOAD_STAGES, + UPLOAD_STRATEGY, +} from "constants/upload"; +import isElectron from "is-electron"; +import { AppContext } from "pages/_app"; +import { GalleryContext } from "pages/gallery"; +import billingService from "services/billingService"; +import ImportService from "services/importService"; +import { + getPublicCollectionUID, + getPublicCollectionUploaderName, + savePublicCollectionUploaderName, +} from "services/publicCollectionService"; +import uploadManager from "services/upload/uploadManager"; +import watchFolderService from "services/watchFolder/watchFolderService"; +import { NotificationAttributes } from "types/Notification"; +import { Collection } from "types/collection"; +import { + CollectionSelectorIntent, + SetCollectionSelectorAttributes, + SetCollections, + SetFiles, + SetLoading, + UploadTypeSelectorIntent, +} from "types/gallery"; +import { + ElectronFile, + FileWithCollection, + ImportSuggestion, +} from "types/upload"; +import { + InProgressUpload, + SegregatedFinishedUploads, + UploadCounter, + UploadFileNames, +} from "types/upload/ui"; +import { getOrCreateAlbum } from "utils/collection"; +import { downloadApp, waitAndRun } from "utils/common"; +import { PublicCollectionGalleryContext } from "utils/publicCollectionGallery"; +import { + getDownloadAppMessage, + getRootLevelFileWithFolderNotAllowMessage, +} from "utils/ui"; +import { + filterOutSystemFiles, + getImportSuggestion, + groupFilesBasedOnParentFolder, +} from "utils/upload"; +import { isCanvasBlocked } from "utils/upload/isCanvasBlocked"; +import { SetCollectionNamerAttributes } from "../Collections/CollectionNamer"; +import UploadStrategyChoiceModal from "./UploadStrategyChoiceModal"; +import UploadTypeSelector from "./UploadTypeSelector"; + +const FIRST_ALBUM_NAME = "My First Album"; + +interface Props { + syncWithRemote: (force?: boolean, silent?: boolean) => Promise; + closeCollectionSelector?: () => void; + closeUploadTypeSelector: () => void; + setCollectionSelectorAttributes?: SetCollectionSelectorAttributes; + setCollectionNamerAttributes?: SetCollectionNamerAttributes; + setLoading: SetLoading; + setShouldDisableDropzone: (value: boolean) => void; + showCollectionSelector?: () => void; + setFiles: SetFiles; + setCollections?: SetCollections; + isFirstUpload?: boolean; + uploadTypeSelectorView: boolean; + showSessionExpiredMessage: () => void; + showUploadFilesDialog: () => void; + showUploadDirsDialog: () => void; + webFolderSelectorFiles: File[]; + webFileSelectorFiles: File[]; + dragAndDropFiles: File[]; + uploadCollection?: Collection; + uploadTypeSelectorIntent: UploadTypeSelectorIntent; + activeCollection?: Collection; +} + +export default function Uploader(props: Props) { + const appContext = useContext(AppContext); + const galleryContext = useContext(GalleryContext); + const publicCollectionGalleryContext = useContext( + PublicCollectionGalleryContext, + ); + + const [uploadProgressView, setUploadProgressView] = useState(false); + const [uploadStage, setUploadStage] = useState( + UPLOAD_STAGES.START, + ); + const [uploadFileNames, setUploadFileNames] = useState(); + const [uploadCounter, setUploadCounter] = useState({ + finished: 0, + total: 0, + }); + const [inProgressUploads, setInProgressUploads] = useState< + InProgressUpload[] + >([]); + const [finishedUploads, setFinishedUploads] = + useState(new Map()); + const [percentComplete, setPercentComplete] = useState(0); + const [hasLivePhotos, setHasLivePhotos] = useState(false); + + const [choiceModalView, setChoiceModalView] = useState(false); + const [userNameInputDialogView, setUserNameInputDialogView] = + useState(false); + const [importSuggestion, setImportSuggestion] = useState( + DEFAULT_IMPORT_SUGGESTION, + ); + const [electronFiles, setElectronFiles] = useState(null); + const [webFiles, setWebFiles] = useState([]); + + const toUploadFiles = useRef(null); + const isPendingDesktopUpload = useRef(false); + const pendingDesktopUploadCollectionName = useRef(""); + // This is set when the user choses a type to upload from the upload type selector dialog + const pickedUploadType = useRef(null); + const zipPaths = useRef(null); + const currentUploadPromise = useRef>(null); + const uploadRunning = useRef(false); + const uploaderNameRef = useRef(null); + const isDragAndDrop = useRef(false); + + const closeUploadProgress = () => setUploadProgressView(false); + const showUserNameInputDialog = () => setUserNameInputDialogView(true); + + const setCollectionName = (collectionName: string) => { + isPendingDesktopUpload.current = true; + pendingDesktopUploadCollectionName.current = collectionName; + }; + + const handleChoiceModalClose = () => { + setChoiceModalView(false); + uploadRunning.current = false; + }; + const handleCollectionSelectorCancel = () => { + uploadRunning.current = false; + appContext.resetSharedFiles(); + }; + + const handleUserNameInputDialogClose = () => { + setUserNameInputDialogView(false); + uploadRunning.current = false; + }; + + useEffect(() => { + uploadManager.init( + { + setPercentComplete, + setUploadCounter, + setInProgressUploads, + setFinishedUploads, + setUploadStage, + setUploadFilenames: setUploadFileNames, + setHasLivePhotos, + setUploadProgressView, + }, + props.setFiles, + publicCollectionGalleryContext, + appContext.isCFProxyDisabled, + ); + if (uploadManager.isUploadRunning()) { + setUploadProgressView(true); + } + + if (isElectron()) { + ImportService.getPendingUploads().then( + ({ files: electronFiles, collectionName, type }) => { + addLogLine( + `found pending desktop upload, resuming uploads`, + ); + resumeDesktopUpload(type, electronFiles, collectionName); + }, + ); + watchFolderService.init( + setElectronFiles, + setCollectionName, + props.syncWithRemote, + appContext.setIsFolderSyncRunning, + ); + } + }, [ + publicCollectionGalleryContext.accessedThroughSharedURL, + publicCollectionGalleryContext.token, + publicCollectionGalleryContext.passwordToken, + appContext.isCFProxyDisabled, + ]); + + // this handles the change of selectorFiles changes on web when user selects + // files for upload through the opened file/folder selector or dragAndDrop them + // the webFiles state is update which triggers the upload of those files + useEffect(() => { + if (appContext.watchFolderView) { + // if watch folder dialog is open don't catch the dropped file + // as they are folder being dropped for watching + return; + } + if ( + pickedUploadType.current === PICKED_UPLOAD_TYPE.FOLDERS && + props.webFolderSelectorFiles?.length > 0 + ) { + addLogLine(`received folder upload request`); + setWebFiles(props.webFolderSelectorFiles); + } else if ( + pickedUploadType.current === PICKED_UPLOAD_TYPE.FILES && + props.webFileSelectorFiles?.length > 0 + ) { + addLogLine(`received file upload request`); + setWebFiles(props.webFileSelectorFiles); + } else if (props.dragAndDropFiles?.length > 0) { + isDragAndDrop.current = true; + if (isElectron()) { + const main = async () => { + try { + addLogLine(`uploading dropped files from desktop app`); + // check and parse dropped files which are zip files + let electronFiles = [] as ElectronFile[]; + for (const file of props.dragAndDropFiles) { + if (file.name.endsWith(".zip")) { + const zipFiles = + await ElectronAPIs.getElectronFilesFromGoogleZip( + (file as any).path, + ); + addLogLine( + `zip file - ${file.name} contains ${zipFiles.length} files`, + ); + electronFiles = [...electronFiles, ...zipFiles]; + } else { + // type cast to ElectronFile as the file is dropped from desktop app + // type file and ElectronFile should be interchangeable, but currently they have some differences. + // Typescript is giving error + // Conversion of type 'File' to type 'ElectronFile' may be a mistake because neither type sufficiently + // overlaps with the other. If this was intentional, convert the expression to 'unknown' first. + // Type 'File' is missing the following properties from type 'ElectronFile': path, blob + // for now patching by type casting first to unknown and then to ElectronFile + // TODO: fix types and remove type cast + electronFiles.push( + file as unknown as ElectronFile, + ); + } + } + addLogLine( + `uploading dropped files from desktop app - ${electronFiles.length} files found`, + ); + setElectronFiles(electronFiles); + } catch (e) { + logError(e, "failed to upload desktop dropped files"); + setWebFiles(props.dragAndDropFiles); + } + }; + main(); + } else { + addLogLine(`uploading dropped files from web app`); + setWebFiles(props.dragAndDropFiles); + } + } + }, [ + props.dragAndDropFiles, + props.webFileSelectorFiles, + props.webFolderSelectorFiles, + ]); + + useEffect(() => { + if ( + electronFiles?.length > 0 || + webFiles?.length > 0 || + appContext.sharedFiles?.length > 0 + ) { + addLogLine( + `upload request type:${ + electronFiles?.length > 0 + ? "electronFiles" + : webFiles?.length > 0 + ? "webFiles" + : "sharedFiles" + } count ${ + electronFiles?.length ?? + webFiles?.length ?? + appContext?.sharedFiles.length + }`, + ); + if (uploadManager.isUploadRunning()) { + if (watchFolderService.isUploadRunning()) { + addLogLine( + "watchFolder upload was running, pausing it to run user upload", + ); + // pause watch folder service on user upload + watchFolderService.pauseRunningSync(); + } else { + addLogLine( + "an upload is already running, rejecting new upload request", + ); + // no-op + // a user upload is already in progress + return; + } + } + if (isCanvasBlocked()) { + addLogLine("canvas blocked, blocking upload"); + appContext.setDialogMessage({ + title: t("CANVAS_BLOCKED_TITLE"), + + content: , + close: { text: t("CLOSE") }, + proceed: { + text: t("DOWNLOAD"), + action: downloadApp, + variant: "accent", + }, + }); + return; + } + uploadRunning.current = true; + props.closeUploadTypeSelector(); + props.setLoading(true); + if (webFiles?.length > 0) { + // File selection by drag and drop or selection of file. + toUploadFiles.current = webFiles; + setWebFiles([]); + } else if (appContext.sharedFiles?.length > 0) { + toUploadFiles.current = appContext.sharedFiles; + appContext.resetSharedFiles(); + } else if (electronFiles?.length > 0) { + // File selection from desktop app + toUploadFiles.current = electronFiles; + setElectronFiles([]); + } + + toUploadFiles.current = filterOutSystemFiles(toUploadFiles.current); + if (toUploadFiles.current.length === 0) { + props.setLoading(false); + return; + } + + const importSuggestion = getImportSuggestion( + pickedUploadType.current, + toUploadFiles.current, + ); + setImportSuggestion(importSuggestion); + + handleCollectionCreationAndUpload( + importSuggestion, + props.isFirstUpload, + pickedUploadType.current, + publicCollectionGalleryContext.accessedThroughSharedURL, + ); + pickedUploadType.current = null; + props.setLoading(false); + } + }, [webFiles, appContext.sharedFiles, electronFiles]); + + const resumeDesktopUpload = async ( + type: PICKED_UPLOAD_TYPE, + electronFiles: ElectronFile[], + collectionName: string, + ) => { + if (electronFiles && electronFiles?.length > 0) { + isPendingDesktopUpload.current = true; + pendingDesktopUploadCollectionName.current = collectionName; + pickedUploadType.current = type; + setElectronFiles(electronFiles); + } + }; + + const preCollectionCreationAction = async () => { + props.closeCollectionSelector?.(); + props.setShouldDisableDropzone(!uploadManager.shouldAllowNewUpload()); + setUploadStage(UPLOAD_STAGES.START); + setUploadProgressView(true); + }; + + const uploadFilesToExistingCollection = async ( + collection: Collection, + uploaderName?: string, + ) => { + try { + addLogLine( + `upload file to an existing collection name:${collection.name}, collectionID:${collection.id}`, + ); + await preCollectionCreationAction(); + const filesWithCollectionToUpload: FileWithCollection[] = + toUploadFiles.current.map((file, index) => ({ + file, + localID: index, + collectionID: collection.id, + })); + await waitInQueueAndUploadFiles( + filesWithCollectionToUpload, + [collection], + uploaderName, + ); + } catch (e) { + logError(e, "Failed to upload files to existing collections"); + } + }; + + const uploadFilesToNewCollections = async ( + strategy: UPLOAD_STRATEGY, + collectionName?: string, + ) => { + try { + addLogLine( + `upload file to an new collections strategy:${strategy} ,collectionName:${collectionName}`, + ); + await preCollectionCreationAction(); + let filesWithCollectionToUpload: FileWithCollection[] = []; + const collections: Collection[] = []; + let collectionNameToFilesMap = new Map< + string, + (File | ElectronFile)[] + >(); + if (strategy === UPLOAD_STRATEGY.SINGLE_COLLECTION) { + collectionNameToFilesMap.set( + collectionName, + toUploadFiles.current, + ); + } else { + collectionNameToFilesMap = groupFilesBasedOnParentFolder( + toUploadFiles.current, + ); + } + addLogLine( + `upload collections - [${[...collectionNameToFilesMap.keys()]}]`, + ); + try { + const existingCollection = await getLatestCollections(); + let index = 0; + for (const [ + collectionName, + files, + ] of collectionNameToFilesMap) { + const collection = await getOrCreateAlbum( + collectionName, + existingCollection, + ); + collections.push(collection); + props.setCollections([ + ...existingCollection, + ...collections, + ]); + filesWithCollectionToUpload = [ + ...filesWithCollectionToUpload, + ...files.map((file) => ({ + localID: index++, + collectionID: collection.id, + file, + })), + ]; + } + } catch (e) { + closeUploadProgress(); + logError(e, "Failed to create album"); + appContext.setDialogMessage({ + title: t("ERROR"), + + close: { variant: "critical" }, + content: t("CREATE_ALBUM_FAILED"), + }); + throw e; + } + await waitInQueueAndUploadFiles( + filesWithCollectionToUpload, + collections, + ); + toUploadFiles.current = null; + } catch (e) { + logError(e, "Failed to upload files to new collections"); + } + }; + + const waitInQueueAndUploadFiles = async ( + filesWithCollectionToUploadIn: FileWithCollection[], + collections: Collection[], + uploaderName?: string, + ) => { + const currentPromise = currentUploadPromise.current; + currentUploadPromise.current = waitAndRun( + currentPromise, + async () => + await uploadFiles( + filesWithCollectionToUploadIn, + collections, + uploaderName, + ), + ); + await currentUploadPromise.current; + }; + + const preUploadAction = async () => { + uploadManager.prepareForNewUpload(); + setUploadProgressView(true); + await props.syncWithRemote(true, true); + }; + + function postUploadAction() { + props.setShouldDisableDropzone(false); + uploadRunning.current = false; + props.syncWithRemote(); + } + + const uploadFiles = async ( + filesWithCollectionToUploadIn: FileWithCollection[], + collections: Collection[], + uploaderName?: string, + ) => { + try { + addLogLine("uploadFiles called"); + preUploadAction(); + if ( + isElectron() && + !isPendingDesktopUpload.current && + !watchFolderService.isUploadRunning() + ) { + await ImportService.setToUploadCollection(collections); + if (zipPaths.current) { + ElectronAPIs.setToUploadFiles( + PICKED_UPLOAD_TYPE.ZIPS, + zipPaths.current, + ); + zipPaths.current = null; + } + ElectronAPIs.setToUploadFiles( + PICKED_UPLOAD_TYPE.FILES, + filesWithCollectionToUploadIn.map( + ({ file }) => (file as ElectronFile).path, + ), + ); + } + const shouldCloseUploadProgress = + await uploadManager.queueFilesForUpload( + filesWithCollectionToUploadIn, + collections, + uploaderName, + ); + if (shouldCloseUploadProgress) { + closeUploadProgress(); + } + if (isElectron()) { + if (watchFolderService.isUploadRunning()) { + await watchFolderService.allFileUploadsDone( + filesWithCollectionToUploadIn, + collections, + ); + } else if (watchFolderService.isSyncPaused()) { + // resume the service after user upload is done + watchFolderService.resumePausedSync(); + } + } + } catch (err) { + logError(err, "failed to upload files"); + showUserFacingError(err.message); + closeUploadProgress(); + } finally { + postUploadAction(); + } + }; + + const retryFailed = async () => { + try { + addLogLine("user retrying failed upload"); + const filesWithCollections = + uploadManager.getFailedFilesWithCollections(); + const uploaderName = uploadManager.getUploaderName(); + await preUploadAction(); + await uploadManager.queueFilesForUpload( + filesWithCollections.files, + filesWithCollections.collections, + uploaderName, + ); + } catch (err) { + logError(err, "retry failed files failed"); + showUserFacingError(err.message); + closeUploadProgress(); + } finally { + postUploadAction(); + } + }; + + function showUserFacingError(err: string) { + let notification: NotificationAttributes; + switch (err) { + case CustomError.SESSION_EXPIRED: + return props.showSessionExpiredMessage(); + case CustomError.SUBSCRIPTION_EXPIRED: + notification = { + variant: "critical", + subtext: t("SUBSCRIPTION_EXPIRED"), + message: t("RENEW_NOW"), + onClick: () => billingService.redirectToCustomerPortal(), + }; + break; + case CustomError.STORAGE_QUOTA_EXCEEDED: + notification = { + variant: "critical", + subtext: t("STORAGE_QUOTA_EXCEEDED"), + message: t("UPGRADE_NOW"), + onClick: () => galleryContext.showPlanSelectorModal(), + startIcon: , + }; + break; + default: + notification = { + variant: "critical", + message: t("UNKNOWN_ERROR"), + onClick: () => null, + }; + } + appContext.setNotificationAttributes(notification); + } + + const uploadToSingleNewCollection = (collectionName: string) => { + uploadFilesToNewCollections( + UPLOAD_STRATEGY.SINGLE_COLLECTION, + collectionName, + ); + }; + + const showCollectionCreateModal = (suggestedName: string) => { + props.setCollectionNamerAttributes({ + title: t("CREATE_COLLECTION"), + buttonText: t("CREATE"), + autoFilledName: suggestedName, + callback: uploadToSingleNewCollection, + }); + }; + + const handleCollectionCreationAndUpload = async ( + importSuggestion: ImportSuggestion, + isFirstUpload: boolean, + pickedUploadType: PICKED_UPLOAD_TYPE, + accessedThroughSharedURL?: boolean, + ) => { + try { + if (accessedThroughSharedURL) { + addLogLine( + `uploading files to pulbic collection - ${props.uploadCollection.name} - ${props.uploadCollection.id}`, + ); + const uploaderName = await getPublicCollectionUploaderName( + getPublicCollectionUID( + publicCollectionGalleryContext.token, + ), + ); + uploaderNameRef.current = uploaderName; + showUserNameInputDialog(); + return; + } + if (isPendingDesktopUpload.current) { + isPendingDesktopUpload.current = false; + if (pendingDesktopUploadCollectionName.current) { + addLogLine( + `upload pending files to collection - ${pendingDesktopUploadCollectionName.current}`, + ); + uploadFilesToNewCollections( + UPLOAD_STRATEGY.SINGLE_COLLECTION, + pendingDesktopUploadCollectionName.current, + ); + pendingDesktopUploadCollectionName.current = null; + } else { + addLogLine( + `pending upload - strategy - "multiple collections" `, + ); + uploadFilesToNewCollections( + UPLOAD_STRATEGY.COLLECTION_PER_FOLDER, + ); + } + return; + } + if (isElectron() && pickedUploadType === PICKED_UPLOAD_TYPE.ZIPS) { + addLogLine("uploading zip files"); + uploadFilesToNewCollections( + UPLOAD_STRATEGY.COLLECTION_PER_FOLDER, + ); + return; + } + if (isFirstUpload && !importSuggestion.rootFolderName) { + importSuggestion.rootFolderName = FIRST_ALBUM_NAME; + } + if (isDragAndDrop.current) { + isDragAndDrop.current = false; + if ( + props.activeCollection && + props.activeCollection.owner.id === galleryContext.user?.id + ) { + uploadFilesToExistingCollection(props.activeCollection); + return; + } + } + let showNextModal = () => {}; + if (importSuggestion.hasNestedFolders) { + addLogLine(`nested folders detected`); + showNextModal = () => setChoiceModalView(true); + } else { + showNextModal = () => + showCollectionCreateModal(importSuggestion.rootFolderName); + } + props.setCollectionSelectorAttributes({ + callback: uploadFilesToExistingCollection, + onCancel: handleCollectionSelectorCancel, + showNextModal, + intent: CollectionSelectorIntent.upload, + }); + } catch (e) { + logError(e, "handleCollectionCreationAndUpload failed"); + } + }; + + const handleDesktopUpload = async (type: PICKED_UPLOAD_TYPE) => { + let files: ElectronFile[]; + pickedUploadType.current = type; + if (type === PICKED_UPLOAD_TYPE.FILES) { + files = await ElectronAPIs.showUploadFilesDialog(); + } else if (type === PICKED_UPLOAD_TYPE.FOLDERS) { + files = await ElectronAPIs.showUploadDirsDialog(); + } else { + const response = await ElectronAPIs.showUploadZipDialog(); + files = response.files; + zipPaths.current = response.zipPaths; + } + if (files?.length > 0) { + addLogLine( + ` desktop upload for type:${type} and fileCount: ${files?.length} requested`, + ); + setElectronFiles(files); + props.closeUploadTypeSelector(); + } + }; + + const handleWebUpload = async (type: PICKED_UPLOAD_TYPE) => { + pickedUploadType.current = type; + if (type === PICKED_UPLOAD_TYPE.FILES) { + props.showUploadFilesDialog(); + } else if (type === PICKED_UPLOAD_TYPE.FOLDERS) { + props.showUploadDirsDialog(); + } else { + appContext.setDialogMessage(getDownloadAppMessage()); + } + }; + + const cancelUploads = () => { + uploadManager.cancelRunningUpload(); + }; + + const handleUpload = (type) => () => { + if (isElectron()) { + handleDesktopUpload(type); + } else { + handleWebUpload(type); + } + }; + + const handleFileUpload = handleUpload(PICKED_UPLOAD_TYPE.FILES); + const handleFolderUpload = handleUpload(PICKED_UPLOAD_TYPE.FOLDERS); + const handleZipUpload = handleUpload(PICKED_UPLOAD_TYPE.ZIPS); + + const handlePublicUpload = async ( + uploaderName: string, + skipSave?: boolean, + ) => { + try { + if (!skipSave) { + savePublicCollectionUploaderName( + getPublicCollectionUID( + publicCollectionGalleryContext.token, + ), + uploaderName, + ); + } + await uploadFilesToExistingCollection( + props.uploadCollection, + uploaderName, + ); + } catch (e) { + logError(e, "public upload failed "); + } + }; + + const handleUploadToSingleCollection = () => { + uploadToSingleNewCollection(importSuggestion.rootFolderName); + }; + + const handleUploadToMultipleCollections = () => { + if (importSuggestion.hasRootLevelFileWithFolder) { + appContext.setDialogMessage( + getRootLevelFileWithFolderNotAllowMessage(), + ); + return; + } + uploadFilesToNewCollections(UPLOAD_STRATEGY.COLLECTION_PER_FOLDER); + }; + + return ( + <> + + + + + + ); +} diff --git a/web/apps/photos/src/components/UploadSelectorInputs.tsx b/web/apps/photos/src/components/UploadSelectorInputs.tsx new file mode 100644 index 000000000..1b110d532 --- /dev/null +++ b/web/apps/photos/src/components/UploadSelectorInputs.tsx @@ -0,0 +1,13 @@ +export default function UploadSelectorInputs({ + getDragAndDropInputProps, + getFileSelectorInputProps, + getFolderSelectorInputProps, +}) { + return ( + <> + + + + + ); +} diff --git a/web/apps/photos/src/components/UserNameInputDialog.tsx b/web/apps/photos/src/components/UserNameInputDialog.tsx new file mode 100644 index 000000000..b089cb35d --- /dev/null +++ b/web/apps/photos/src/components/UserNameInputDialog.tsx @@ -0,0 +1,43 @@ +import DialogBox from "@ente/shared/components/DialogBox/"; +import SingleInputForm from "@ente/shared/components/SingleInputForm"; +import AutoAwesomeOutlinedIcon from "@mui/icons-material/AutoAwesomeOutlined"; +import { Typography } from "@mui/material"; +import { t } from "i18next"; + +export default function UserNameInputDialog({ + open, + onClose, + onNameSubmit, + toUploadFilesCount, + uploaderName, +}) { + const handleSubmit = async (inputValue: string) => { + onClose(); + await onNameSubmit(inputValue); + }; + return ( + , + }} + > + + {t("PUBLIC_UPLOADER_NAME_MESSAGE")} + + + + ); +} diff --git a/web/apps/photos/src/components/WatchFolder/index.tsx b/web/apps/photos/src/components/WatchFolder/index.tsx new file mode 100644 index 000000000..71c8b30ff --- /dev/null +++ b/web/apps/photos/src/components/WatchFolder/index.tsx @@ -0,0 +1,153 @@ +import { Button, Dialog, DialogContent, Stack } from "@mui/material"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext, useEffect, useState } from "react"; +import watchFolderService from "services/watchFolder/watchFolderService"; +import { WatchMapping } from "types/watchFolder"; +import { MappingList } from "./mappingList"; + +import DialogTitleWithCloseButton from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import ElectronAPIs from "@ente/shared/electron"; +import UploadStrategyChoiceModal from "components/Upload/UploadStrategyChoiceModal"; +import { PICKED_UPLOAD_TYPE, UPLOAD_STRATEGY } from "constants/upload"; +import isElectron from "is-electron"; +import { getImportSuggestion } from "utils/upload"; + +interface Iprops { + open: boolean; + onClose: () => void; +} + +export default function WatchFolder({ open, onClose }: Iprops) { + const [mappings, setMappings] = useState([]); + const [inputFolderPath, setInputFolderPath] = useState(""); + const [choiceModalOpen, setChoiceModalOpen] = useState(false); + const appContext = useContext(AppContext); + + useEffect(() => { + if (!isElectron()) { + return; + } + setMappings(watchFolderService.getWatchMappings()); + }, []); + + useEffect(() => { + if ( + appContext.watchFolderFiles && + appContext.watchFolderFiles.length > 0 + ) { + handleFolderDrop(appContext.watchFolderFiles); + appContext.setWatchFolderFiles(null); + } + }, [appContext.watchFolderFiles]); + + const handleFolderDrop = async (folders: FileList) => { + for (let i = 0; i < folders.length; i++) { + const folder: any = folders[i]; + const path = (folder.path as string).replace(/\\/g, "/"); + if (await watchFolderService.isFolder(path)) { + await addFolderForWatching(path); + } + } + }; + + const addFolderForWatching = async (path: string) => { + setInputFolderPath(path); + const files = await ElectronAPIs.getDirFiles(path); + const analysisResult = getImportSuggestion( + PICKED_UPLOAD_TYPE.FOLDERS, + files, + ); + if (analysisResult.hasNestedFolders) { + setChoiceModalOpen(true); + } else { + handleAddWatchMapping(UPLOAD_STRATEGY.SINGLE_COLLECTION, path); + } + }; + + const handleAddFolderClick = async () => { + await handleFolderSelection(); + }; + + const handleFolderSelection = async () => { + const folderPath = await watchFolderService.selectFolder(); + if (folderPath) { + await addFolderForWatching(folderPath); + } + }; + + const handleAddWatchMapping = async ( + uploadStrategy: UPLOAD_STRATEGY, + folderPath?: string, + ) => { + folderPath = folderPath || inputFolderPath; + await watchFolderService.addWatchMapping( + folderPath.substring(folderPath.lastIndexOf("/") + 1), + folderPath, + uploadStrategy, + ); + setInputFolderPath(""); + setMappings(watchFolderService.getWatchMappings()); + }; + + const handleRemoveWatchMapping = async (mapping: WatchMapping) => { + await watchFolderService.removeWatchMapping(mapping.folderPath); + setMappings(watchFolderService.getWatchMappings()); + }; + + const closeChoiceModal = () => setChoiceModalOpen(false); + + const uploadToSingleCollection = () => { + closeChoiceModal(); + handleAddWatchMapping(UPLOAD_STRATEGY.SINGLE_COLLECTION); + }; + + const uploadToMultipleCollection = () => { + closeChoiceModal(); + handleAddWatchMapping(UPLOAD_STRATEGY.COLLECTION_PER_FOLDER); + }; + + return ( + <> + + + {t("WATCHED_FOLDERS")} + + + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/WatchFolder/mappingEntry/entryHeading.tsx b/web/apps/photos/src/components/WatchFolder/mappingEntry/entryHeading.tsx new file mode 100644 index 000000000..b34e4277f --- /dev/null +++ b/web/apps/photos/src/components/WatchFolder/mappingEntry/entryHeading.tsx @@ -0,0 +1,23 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import { CircularProgress, Typography } from "@mui/material"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import watchFolderService from "services/watchFolder/watchFolderService"; +import { WatchMapping } from "types/watchFolder"; + +interface Iprops { + mapping: WatchMapping; +} + +export function EntryHeading({ mapping }: Iprops) { + const appContext = useContext(AppContext); + return ( + + {mapping.rootFolderName} + {appContext.isFolderSyncRunning && + watchFolderService.isMappingSyncInProgress(mapping) && ( + + )} + + ); +} diff --git a/web/apps/photos/src/components/WatchFolder/mappingEntry/index.tsx b/web/apps/photos/src/components/WatchFolder/mappingEntry/index.tsx new file mode 100644 index 000000000..819394699 --- /dev/null +++ b/web/apps/photos/src/components/WatchFolder/mappingEntry/index.tsx @@ -0,0 +1,69 @@ +import { + HorizontalFlex, + SpaceBetweenFlex, +} from "@ente/shared/components/Container"; +import FolderCopyOutlinedIcon from "@mui/icons-material/FolderCopyOutlined"; +import FolderOpenIcon from "@mui/icons-material/FolderOpen"; +import { Tooltip, Typography } from "@mui/material"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import React from "react"; +import { WatchMapping } from "types/watchFolder"; +import { EntryContainer } from "../styledComponents"; + +import { UPLOAD_STRATEGY } from "constants/upload"; +import { EntryHeading } from "./entryHeading"; +import MappingEntryOptions from "./mappingEntryOptions"; + +interface Iprops { + mapping: WatchMapping; + handleRemoveMapping: (mapping: WatchMapping) => void; +} + +export function MappingEntry({ mapping, handleRemoveMapping }: Iprops) { + const appContext = React.useContext(AppContext); + + const stopWatching = () => { + handleRemoveMapping(mapping); + }; + + const confirmStopWatching = () => { + appContext.setDialogMessage({ + title: t("STOP_WATCHING_FOLDER"), + content: t("STOP_WATCHING_DIALOG_MESSAGE"), + close: { + text: t("CANCEL"), + variant: "secondary", + }, + proceed: { + action: stopWatching, + text: t("YES_STOP"), + variant: "critical", + }, + }); + }; + + return ( + + + {mapping && + mapping.uploadStrategy === UPLOAD_STRATEGY.SINGLE_COLLECTION ? ( + + + + ) : ( + + + + )} + + + + {mapping.folderPath} + + + + + + ); +} diff --git a/web/apps/photos/src/components/WatchFolder/mappingEntry/mappingEntryOptions.tsx b/web/apps/photos/src/components/WatchFolder/mappingEntry/mappingEntryOptions.tsx new file mode 100644 index 000000000..4f3cdc56d --- /dev/null +++ b/web/apps/photos/src/components/WatchFolder/mappingEntry/mappingEntryOptions.tsx @@ -0,0 +1,33 @@ +import { t } from "i18next"; + +import OverflowMenu from "@ente/shared/components/OverflowMenu/menu"; +import { OverflowMenuOption } from "@ente/shared/components/OverflowMenu/option"; +import DoNotDisturbOutlinedIcon from "@mui/icons-material/DoNotDisturbOutlined"; +import MoreHorizIcon from "@mui/icons-material/MoreHoriz"; + +interface Iprops { + confirmStopWatching: () => void; +} + +export default function MappingEntryOptions({ confirmStopWatching }: Iprops) { + return ( + + theme.colors.background.elevated2, + }, + }} + ariaControls={"watch-mapping-option"} + triggerButtonIcon={} + > + } + > + {t("STOP_WATCHING")} + + + ); +} diff --git a/web/apps/photos/src/components/WatchFolder/mappingList/index.tsx b/web/apps/photos/src/components/WatchFolder/mappingList/index.tsx new file mode 100644 index 000000000..f2c7b781c --- /dev/null +++ b/web/apps/photos/src/components/WatchFolder/mappingList/index.tsx @@ -0,0 +1,26 @@ +import { WatchMapping } from "types/watchFolder"; +import { MappingEntry } from "../mappingEntry"; +import { MappingsContainer } from "../styledComponents"; +import { NoMappingsContent } from "./noMappingsContent/noMappingsContent"; +interface Iprops { + mappings: WatchMapping[]; + handleRemoveWatchMapping: (value: WatchMapping) => void; +} + +export function MappingList({ mappings, handleRemoveWatchMapping }: Iprops) { + return mappings.length === 0 ? ( + + ) : ( + + {mappings.map((mapping) => { + return ( + + ); + })} + + ); +} diff --git a/web/apps/photos/src/components/WatchFolder/mappingList/noMappingsContent/checkmarkIcon.tsx b/web/apps/photos/src/components/WatchFolder/mappingList/noMappingsContent/checkmarkIcon.tsx new file mode 100644 index 000000000..aedd79404 --- /dev/null +++ b/web/apps/photos/src/components/WatchFolder/mappingList/noMappingsContent/checkmarkIcon.tsx @@ -0,0 +1,15 @@ +import CheckIcon from "@mui/icons-material/Check"; + +export function CheckmarkIcon() { + return ( + theme.palette.secondary.main, + }} + /> + ); +} diff --git a/web/apps/photos/src/components/WatchFolder/mappingList/noMappingsContent/noMappingsContent.tsx b/web/apps/photos/src/components/WatchFolder/mappingList/noMappingsContent/noMappingsContent.tsx new file mode 100644 index 000000000..a5af6aff9 --- /dev/null +++ b/web/apps/photos/src/components/WatchFolder/mappingList/noMappingsContent/noMappingsContent.tsx @@ -0,0 +1,33 @@ +import { Stack, Typography } from "@mui/material"; +import { t } from "i18next"; + +import { FlexWrapper } from "@ente/shared/components/Container"; +import { NoMappingsContainer } from "../../styledComponents"; +import { CheckmarkIcon } from "./checkmarkIcon"; + +export function NoMappingsContent() { + return ( + + + + {t("NO_FOLDERS_ADDED")} + + + {t("FOLDERS_AUTOMATICALLY_MONITORED")} + + + + + {t("UPLOAD_NEW_FILES_TO_ENTE")} + + + + + + {t("REMOVE_DELETED_FILES_FROM_ENTE")} + + + + + ); +} diff --git a/web/apps/photos/src/components/WatchFolder/styledComponents.tsx b/web/apps/photos/src/components/WatchFolder/styledComponents.tsx new file mode 100644 index 000000000..d507bbaa8 --- /dev/null +++ b/web/apps/photos/src/components/WatchFolder/styledComponents.tsx @@ -0,0 +1,23 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import { Box } from "@mui/material"; +import { styled } from "@mui/material/styles"; + +export const MappingsContainer = styled(Box)(() => ({ + height: "278px", + overflow: "auto", + "&::-webkit-scrollbar": { + width: "4px", + }, +})); + +export const NoMappingsContainer = styled(VerticallyCentered)({ + textAlign: "left", + alignItems: "flex-start", + marginBottom: "32px", +}); + +export const EntryContainer = styled(Box)({ + marginLeft: "12px", + marginRight: "6px", + marginBottom: "12px", +}); diff --git a/web/apps/photos/src/components/icons/ObjectIcon.tsx b/web/apps/photos/src/components/icons/ObjectIcon.tsx new file mode 100644 index 000000000..9971cd395 --- /dev/null +++ b/web/apps/photos/src/components/icons/ObjectIcon.tsx @@ -0,0 +1,18 @@ +export default function ObjectIcon(props) { + return ( + + + + ); +} + +ObjectIcon.defaultProps = { + height: 20, + width: 20, + viewBox: "0 0 24 24", +}; diff --git a/web/apps/photos/src/components/icons/TextIcon.tsx b/web/apps/photos/src/components/icons/TextIcon.tsx new file mode 100644 index 000000000..62d37fbe2 --- /dev/null +++ b/web/apps/photos/src/components/icons/TextIcon.tsx @@ -0,0 +1,18 @@ +export default function TextIcon(props) { + return ( + + + + ); +} + +TextIcon.defaultProps = { + height: 16, + width: 16, + viewBox: "0 0 28 28", +}; diff --git a/web/apps/photos/src/components/icons/UnPinIcon.tsx b/web/apps/photos/src/components/icons/UnPinIcon.tsx new file mode 100644 index 000000000..da50e0a1a --- /dev/null +++ b/web/apps/photos/src/components/icons/UnPinIcon.tsx @@ -0,0 +1,80 @@ +import SvgIcon from "@mui/material/SvgIcon"; + +export const UnPinIcon = (props) => { + return ( + + + + + + + + + + + + + + ); +}; + +UnPinIcon.defaultProps = { + height: 20, + width: 20, +}; diff --git a/web/apps/photos/src/components/ml-debug/index.tsx b/web/apps/photos/src/components/ml-debug/index.tsx new file mode 100644 index 000000000..a5b53a684 --- /dev/null +++ b/web/apps/photos/src/components/ml-debug/index.tsx @@ -0,0 +1,12 @@ +// import dynamic from 'next/dynamic'; + +// const MLDebugWithNoSSR = dynamic( +// () => import('components/MachineLearning/MlDebug-disabled'), +// { +// ssr: false, +// } +// ); + +export default function MLDebug() { + return
{/* */}
; +} diff --git a/web/apps/photos/src/components/pages/dedupe/SelectedFileOptions.tsx b/web/apps/photos/src/components/pages/dedupe/SelectedFileOptions.tsx new file mode 100644 index 000000000..fad14f164 --- /dev/null +++ b/web/apps/photos/src/components/pages/dedupe/SelectedFileOptions.tsx @@ -0,0 +1,54 @@ +import { FluidContainer } from "@ente/shared/components/Container"; +import { SelectionBar } from "@ente/shared/components/Navbar/SelectionBar"; +import BackButton from "@mui/icons-material/ArrowBackOutlined"; +import CloseIcon from "@mui/icons-material/Close"; +import DeleteIcon from "@mui/icons-material/Delete"; +import { Box, IconButton, Tooltip } from "@mui/material"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import { formatNumber } from "utils/number/format"; +import { getTrashFilesMessage } from "utils/ui"; + +interface IProps { + deleteFileHelper: () => void; + close: () => void; + count: number; + clearSelection: () => void; +} + +export default function DeduplicateOptions({ + deleteFileHelper, + close, + count, + clearSelection, +}: IProps) { + const { setDialogMessage, isMobile } = useContext(AppContext); + + const trashHandler = () => + setDialogMessage(getTrashFilesMessage(deleteFileHelper)); + + return ( + + + {count ? ( + + + + ) : ( + + + + )} + + {formatNumber(count)} {t("SELECTED")} + + + + + + + + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/Avatar.tsx b/web/apps/photos/src/components/pages/gallery/Avatar.tsx new file mode 100644 index 000000000..d3bbcb6df --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/Avatar.tsx @@ -0,0 +1,113 @@ +import { logError } from "@ente/shared/sentry"; +import { styled } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; +import { GalleryContext } from "pages/gallery"; +import React, { useContext, useLayoutEffect, useState } from "react"; +import { EnteFile } from "types/file"; + +interface AvatarProps { + file?: EnteFile; + email?: string; + opacity?: number; +} + +const PUBLIC_COLLECTED_FILES_AVATAR_COLOR_CODE = "#000000"; + +const AvatarBase = styled("div")<{ + colorCode: string; + size: number; + opacity: number; +}>` + width: ${({ size }) => `${size}px`}; + height: ${({ size }) => `${size}px`}; + background-color: ${({ colorCode, opacity }) => + `${colorCode}${opacity === 100 ? "" : opacity ?? 95}`}; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + color: #fff; + font-weight: bold; + font-size: ${({ size }) => `${Math.floor(size / 2)}px`}; +`; + +const Avatar: React.FC = ({ file, email, opacity }) => { + const { userIDToEmailMap, user } = useContext(GalleryContext); + const theme = useTheme(); + + const [colorCode, setColorCode] = useState(""); + const [userLetter, setUserLetter] = useState(""); + + useLayoutEffect(() => { + try { + if (!file) { + return; + } + if (file.ownerID !== user.id) { + // getting email from in-memory id-email map + const email = userIDToEmailMap.get(file.ownerID); + if (!email) { + logError(Error(), "email not found in userIDToEmailMap"); + return; + } + const colorIndex = + file.ownerID % theme.colors.avatarColors.length; + const colorCode = theme.colors.avatarColors[colorIndex]; + setUserLetter(email[0].toUpperCase()); + setColorCode(colorCode); + } else if (file.ownerID === user.id) { + const uploaderName = file.pubMagicMetadata.data.uploaderName; + if (!uploaderName) { + logError( + Error(), + "uploaderName not found in file.pubMagicMetadata.data", + ); + return; + } + setUserLetter(uploaderName[0].toUpperCase()); + setColorCode(PUBLIC_COLLECTED_FILES_AVATAR_COLOR_CODE); + } + } catch (err) { + logError(err, "AvatarIcon.tsx - useLayoutEffect file failed"); + } + }, [file]); + + useLayoutEffect(() => { + try { + if (!email) { + return; + } + if (user.email === email) { + setUserLetter(email[0].toUpperCase()); + setColorCode(PUBLIC_COLLECTED_FILES_AVATAR_COLOR_CODE); + return; + } + + const id = Array.from(userIDToEmailMap.keys()).find( + (key) => userIDToEmailMap.get(key) === email, + ); + if (!id) { + logError(Error(), `ID not found for email: ${email}`); + return; + } + const colorIndex = id % theme.colors.avatarColors.length; + const colorCode = theme.colors.avatarColors[colorIndex]; + setUserLetter(email[0].toUpperCase()); + setColorCode(colorCode); + } catch (err) { + logError(err, "AvatarIcon.tsx - useLayoutEffect email failed"); + } + }, [email]); + + if (!colorCode || !userLetter) { + return <>; + } + + return ( + + {userLetter} + + ); +}; + +export default Avatar; diff --git a/web/apps/photos/src/components/pages/gallery/AvatarGroup.tsx b/web/apps/photos/src/components/pages/gallery/AvatarGroup.tsx new file mode 100644 index 000000000..df733fdde --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/AvatarGroup.tsx @@ -0,0 +1,52 @@ +import { styled } from "@mui/material"; +import NumberAvatar from "@mui/material/Avatar"; +import { Collection } from "types/collection"; +import Avatar from "./Avatar"; + +const AvatarContainer = styled("div")({ + position: "relative", + display: "flex", + alignItems: "center", + marginLeft: -5, +}); + +const AvatarContainerOuter = styled("div")({ + position: "relative", + display: "flex", + alignItems: "center", + marginLeft: 8, +}); +const AvatarCounter = styled(NumberAvatar)({ + height: 20, + width: 20, + fontSize: 10, + color: "#fff", +}); + +const SHAREE_AVATAR_LIMIT = 6; + +const AvatarGroup = ({ sharees }: { sharees: Collection["sharees"] }) => { + const hasShareesOverLimit = sharees?.length > SHAREE_AVATAR_LIMIT; + const countOfShareesOverLimit = sharees?.length - SHAREE_AVATAR_LIMIT; + + return ( + + {sharees?.slice(0, 6).map((sharee) => ( + + + + ))} + {hasShareesOverLimit && ( + + +{countOfShareesOverLimit} + + )} + + ); +}; + +export default AvatarGroup; diff --git a/web/apps/photos/src/components/pages/gallery/LinkButton.tsx b/web/apps/photos/src/components/pages/gallery/LinkButton.tsx new file mode 100644 index 000000000..79578ddb7 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/LinkButton.tsx @@ -0,0 +1,37 @@ +import { ButtonProps, Link, LinkProps } from "@mui/material"; +import React, { FC } from "react"; + +export type LinkButtonProps = React.PropsWithChildren<{ + onClick: () => void; + variant?: string; + style?: React.CSSProperties; +}>; + +const LinkButton: FC> = ({ + children, + sx, + color, + ...props +}) => { + return ( + + {children} + + ); +}; + +export default LinkButton; diff --git a/web/apps/photos/src/components/pages/gallery/Navbar.tsx b/web/apps/photos/src/components/pages/gallery/Navbar.tsx new file mode 100644 index 000000000..4a710faa8 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/Navbar.tsx @@ -0,0 +1,78 @@ +import { FlexWrapper, HorizontalFlex } from "@ente/shared/components/Container"; +import SidebarToggler from "@ente/shared/components/Navbar/SidebarToggler"; +import NavbarBase from "@ente/shared/components/Navbar/base"; +import ArrowBack from "@mui/icons-material/ArrowBack"; +import { IconButton, Typography } from "@mui/material"; +import SearchBar from "components/Search/SearchBar"; +import UploadButton from "components/Upload/UploadButton"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import React from "react"; +import { Collection } from "types/collection"; +import { EnteFile } from "types/file"; +import { UpdateSearch } from "types/search"; + +interface Iprops { + openSidebar: () => void; + isFirstFetch: boolean; + openUploader: () => void; + isInSearchMode: boolean; + isInHiddenSection: boolean; + setIsInSearchMode: (v: boolean) => void; + collections: Collection[]; + files: EnteFile[]; + updateSearch: UpdateSearch; + exitHiddenSection: () => void; +} +export function GalleryNavbar({ + openSidebar, + openUploader, + isInSearchMode, + isInHiddenSection, + collections, + files, + updateSearch, + setIsInSearchMode, + exitHiddenSection, +}: Iprops) { + const appContext = React.useContext(AppContext); + return ( + + {isInHiddenSection ? ( + theme.palette.background.default, + }} + > + + + + + {t("HIDDEN")} + + + ) : ( + <> + {!isInSearchMode && ( + + )} + + {!isInSearchMode && ( + + )} + + )} + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/OptionIcon.tsx b/web/apps/photos/src/components/pages/gallery/OptionIcon.tsx new file mode 100644 index 000000000..0d7d3e812 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/OptionIcon.tsx @@ -0,0 +1,34 @@ +import { styled } from "@mui/material"; +export const OptionIconWrapper = styled("div")` + display: inline-block; + opacity: 0; + font-weight: bold; + width: 24px; +`; +interface Props { + onClick: () => void; +} +const OptionIcon = ({ onClick }: Props) => ( + { + onClick(); + e.stopPropagation(); + }} + style={{ marginBottom: "2px" }} + > + + + + + +); +export default OptionIcon; diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/card/free.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/card/free.tsx new file mode 100644 index 000000000..a2ac1090b --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/card/free.tsx @@ -0,0 +1,64 @@ +import { Stack } from "@mui/material"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; +import { t } from "i18next"; +import { hasAddOnBonus } from "utils/billing"; +import { ManageSubscription } from "../manageSubscription"; +import { PeriodToggler } from "../periodToggler"; +import Plans from "../plans"; +import { BFAddOnRow } from "../plans/BfAddOnRow"; + +export default function FreeSubscriptionPlanSelectorCard({ + plans, + subscription, + bonusData, + closeModal, + setLoading, + planPeriod, + togglePeriod, + onPlanSelect, +}) { + return ( + <> + + {t("CHOOSE_PLAN")} + + + + + + + + {t("TWO_MONTHS_FREE")} + + + + {hasAddOnBonus(bonusData) && ( + + )} + {hasAddOnBonus(bonusData) && ( + + )} + + + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/card/index.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/card/index.tsx new file mode 100644 index 000000000..7bafa0403 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/card/index.tsx @@ -0,0 +1,205 @@ +import { SUPPORT_EMAIL } from "@ente/shared/constants/urls"; +import { useLocalState } from "@ente/shared/hooks/useLocalState"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS } from "@ente/shared/storage/localStorage"; +import { Link, Stack } from "@mui/material"; +import { PLAN_PERIOD } from "constants/gallery"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { GalleryContext } from "pages/gallery"; +import { useContext, useEffect, useMemo, useState } from "react"; +import { Trans } from "react-i18next"; +import billingService from "services/billingService"; +import { Plan } from "types/billing"; +import { SetLoading } from "types/gallery"; +import { + getLocalUserSubscription, + hasMobileSubscription, + hasPaidSubscription, + hasStripeSubscription, + isOnFreePlan, + isSubscriptionActive, + isSubscriptionCancelled, + isUserSubscribedPlan, + planForSubscription, + updateSubscription, +} from "utils/billing"; +import { reverseString } from "utils/common"; +import { getLocalUserDetails } from "utils/user"; +import { getTotalFamilyUsage, isPartOfFamily } from "utils/user/family"; +import FreeSubscriptionPlanSelectorCard from "./free"; +import PaidSubscriptionPlanSelectorCard from "./paid"; + +interface Props { + closeModal: any; + setLoading: SetLoading; +} + +function PlanSelectorCard(props: Props) { + const subscription = useMemo(() => getLocalUserSubscription(), []); + const [plans, setPlans] = useLocalState(LS_KEYS.PLANS); + + const [planPeriod, setPlanPeriod] = useState( + subscription?.period || PLAN_PERIOD.MONTH, + ); + const galleryContext = useContext(GalleryContext); + const appContext = useContext(AppContext); + const bonusData = useMemo(() => { + const userDetails = getLocalUserDetails(); + if (!userDetails) { + return null; + } + return userDetails.bonusData; + }, []); + + const usage = useMemo(() => { + const userDetails = getLocalUserDetails(); + if (!userDetails) { + return 0; + } + return isPartOfFamily(userDetails.familyData) + ? getTotalFamilyUsage(userDetails.familyData) + : userDetails.usage; + }, []); + + const togglePeriod = () => { + setPlanPeriod((prevPeriod) => + prevPeriod === PLAN_PERIOD.MONTH + ? PLAN_PERIOD.YEAR + : PLAN_PERIOD.MONTH, + ); + }; + function onReopenClick() { + appContext.closeMessageDialog(); + galleryContext.showPlanSelectorModal(); + } + useEffect(() => { + const main = async () => { + try { + props.setLoading(true); + const plans = await billingService.getPlans(); + if (isSubscriptionActive(subscription)) { + const planNotListed = + plans.filter((plan) => + isUserSubscribedPlan(plan, subscription), + ).length === 0; + if ( + subscription && + !isOnFreePlan(subscription) && + planNotListed + ) { + plans.push(planForSubscription(subscription)); + } + } + setPlans(plans); + } catch (e) { + logError(e, "plan selector modal open failed"); + props.closeModal(); + appContext.setDialogMessage({ + title: t("OPEN_PLAN_SELECTOR_MODAL_FAILED"), + content: t("UNKNOWN_ERROR"), + close: { text: t("CLOSE"), variant: "secondary" }, + proceed: { + text: t("REOPEN_PLAN_SELECTOR_MODAL"), + variant: "accent", + action: onReopenClick, + }, + }); + } finally { + props.setLoading(false); + } + }; + main(); + }, []); + + async function onPlanSelect(plan: Plan) { + if ( + !hasPaidSubscription(subscription) || + isSubscriptionCancelled(subscription) + ) { + try { + props.setLoading(true); + await billingService.buySubscription(plan.stripeID); + } catch (e) { + props.setLoading(false); + appContext.setDialogMessage({ + title: t("ERROR"), + content: t("SUBSCRIPTION_PURCHASE_FAILED"), + close: { variant: "critical" }, + }); + } + } else if (hasStripeSubscription(subscription)) { + appContext.setDialogMessage({ + title: `${t("CONFIRM")} ${reverseString( + t("UPDATE_SUBSCRIPTION"), + )}`, + content: t("UPDATE_SUBSCRIPTION_MESSAGE"), + proceed: { + text: t("UPDATE_SUBSCRIPTION"), + action: updateSubscription.bind( + null, + plan, + appContext.setDialogMessage, + props.setLoading, + props.closeModal, + ), + variant: "accent", + }, + close: { text: t("CANCEL") }, + }); + } else if (hasMobileSubscription(subscription)) { + appContext.setDialogMessage({ + title: t("CANCEL_SUBSCRIPTION_ON_MOBILE"), + content: t("CANCEL_SUBSCRIPTION_ON_MOBILE_MESSAGE"), + close: { variant: "secondary" }, + }); + } else { + appContext.setDialogMessage({ + title: t("MANAGE_PLAN"), + content: ( + , + }} + values={{ emailID: SUPPORT_EMAIL }} + /> + ), + close: { variant: "secondary" }, + }); + } + } + + return ( + <> + + {hasPaidSubscription(subscription) ? ( + + ) : ( + + )} + + + ); +} + +export default PlanSelectorCard; diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/card/paid.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/card/paid.tsx new file mode 100644 index 000000000..4ef76a491 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/card/paid.tsx @@ -0,0 +1,112 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import Close from "@mui/icons-material/Close"; +import { IconButton, Stack } from "@mui/material"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; +import { t } from "i18next"; +import { Trans } from "react-i18next"; +import { + convertBytesToGBs, + hasAddOnBonus, + isSubscriptionCancelled, +} from "utils/billing"; +import { ManageSubscription } from "../manageSubscription"; +import { PeriodToggler } from "../periodToggler"; +import Plans from "../plans"; +import { BFAddOnRow } from "../plans/BfAddOnRow"; + +export default function PaidSubscriptionPlanSelectorCard({ + plans, + subscription, + bonusData, + closeModal, + usage, + planPeriod, + togglePeriod, + onPlanSelect, + setLoading, +}) { + return ( + <> + + + + + {t("SUBSCRIPTION")} + + + {convertBytesToGBs(subscription.storage, 2)}{" "} + {t("GB")} + + + + + + + + + + + + + + + + `1px solid ${theme.palette.divider}`} + p={1.5} + borderRadius={(theme) => `${theme.shape.borderRadius}px`} + > + + + + {t("TWO_MONTHS_FREE")} + + + + + + + + {!isSubscriptionCancelled(subscription) + ? t("RENEWAL_ACTIVE_SUBSCRIPTION_STATUS", { + date: subscription.expiryTime, + }) + : t("RENEWAL_CANCELLED_SUBSCRIPTION_STATUS", { + date: subscription.expiryTime, + })} + + {hasAddOnBonus(bonusData) && ( + + )} + + + + + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/index.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/index.tsx new file mode 100644 index 000000000..20ad04d01 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/index.tsx @@ -0,0 +1,40 @@ +import { Dialog } from "@mui/material"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import { SetLoading } from "types/gallery"; +import PlanSelectorCard from "./card"; + +interface Props { + modalView: boolean; + closeModal: any; + setLoading: SetLoading; +} + +function PlanSelector(props: Props) { + const appContext = useContext(AppContext); + if (!props.modalView) { + return <>; + } + + return ( + ({ + width: "391px", + p: 1, + [theme.breakpoints.down(360)]: { p: 0 }, + }), + }} + > + + + ); +} + +export default PlanSelector; diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/manageSubscription/button.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/manageSubscription/button.tsx new file mode 100644 index 000000000..f1aca561f --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/manageSubscription/button.tsx @@ -0,0 +1,11 @@ +import { FluidContainer } from "@ente/shared/components/Container"; +import ChevronRight from "@mui/icons-material/ChevronRight"; +import { Button, ButtonProps } from "@mui/material"; + +const ManageSubscriptionButton = ({ children, ...props }: ButtonProps) => ( + +); + +export default ManageSubscriptionButton; diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/manageSubscription/index.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/manageSubscription/index.tsx new file mode 100644 index 000000000..f05d1540b --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/manageSubscription/index.tsx @@ -0,0 +1,137 @@ +import { Stack } from "@mui/material"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import { Trans } from "react-i18next"; +import { Subscription } from "types/billing"; +import { SetLoading } from "types/gallery"; +import { BonusData } from "types/user"; +import { + activateSubscription, + cancelSubscription, + hasAddOnBonus, + hasStripeSubscription, + isSubscriptionCancelled, + manageFamilyMethod, + updatePaymentMethod, +} from "utils/billing"; +import ManageSubscriptionButton from "./button"; + +interface Iprops { + subscription: Subscription; + bonusData?: BonusData; + closeModal: () => void; + setLoading: SetLoading; +} + +export function ManageSubscription({ + subscription, + bonusData, + closeModal, + setLoading, +}: Iprops) { + const appContext = useContext(AppContext); + const openFamilyPortal = () => + manageFamilyMethod(appContext.setDialogMessage, setLoading); + + return ( + + {hasStripeSubscription(subscription) && ( + + )} + + {t("MANAGE_FAMILY_PORTAL")} + + + ); +} + +function StripeSubscriptionOptions({ + subscription, + bonusData, + setLoading, + closeModal, +}: Iprops) { + const appContext = useContext(AppContext); + + const confirmReactivation = () => + appContext.setDialogMessage({ + title: t("REACTIVATE_SUBSCRIPTION"), + content: t("REACTIVATE_SUBSCRIPTION_MESSAGE", { + date: subscription.expiryTime, + }), + proceed: { + text: t("REACTIVATE_SUBSCRIPTION"), + action: activateSubscription.bind( + null, + appContext.setDialogMessage, + closeModal, + setLoading, + ), + variant: "accent", + }, + close: { + text: t("CANCEL"), + }, + }); + const confirmCancel = () => + appContext.setDialogMessage({ + title: t("CANCEL_SUBSCRIPTION"), + content: hasAddOnBonus(bonusData) ? ( + + ) : ( + + ), + proceed: { + text: t("CANCEL_SUBSCRIPTION"), + action: cancelSubscription.bind( + null, + appContext.setDialogMessage, + closeModal, + setLoading, + ), + variant: "critical", + }, + close: { + text: t("NEVERMIND"), + }, + }); + const openManagementPortal = updatePaymentMethod.bind( + null, + appContext.setDialogMessage, + setLoading, + ); + return ( + <> + {isSubscriptionCancelled(subscription) ? ( + + {t("REACTIVATE_SUBSCRIPTION")} + + ) : ( + + {t("CANCEL_SUBSCRIPTION")} + + )} + + {t("MANAGEMENT_PORTAL")} + + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/periodToggler.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/periodToggler.tsx new file mode 100644 index 000000000..1faf74b34 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/periodToggler.tsx @@ -0,0 +1,45 @@ +import { styled, ToggleButton, ToggleButtonGroup } from "@mui/material"; +import { PLAN_PERIOD } from "constants/gallery"; +import { t } from "i18next"; + +const CustomToggleButton = styled(ToggleButton)(({ theme }) => ({ + textTransform: "none", + padding: "12px 16px", + borderRadius: "4px", + backgroundColor: theme.colors.fill.faint, + border: `1px solid transparent`, + color: theme.colors.text.faint, + "&.Mui-selected": { + backgroundColor: theme.colors.accent.A500, + color: theme.colors.text.base, + }, + "&.Mui-selected:hover": { + backgroundColor: theme.colors.accent.A500, + color: theme.colors.text.base, + }, + width: "97.433px", +})); + +export function PeriodToggler({ planPeriod, togglePeriod }) { + const handleChange = (_, newPlanPeriod: PLAN_PERIOD) => { + if (newPlanPeriod !== null && newPlanPeriod !== planPeriod) { + togglePeriod(); + } + }; + + return ( + + + {t("MONTHLY")} + + + {t("YEARLY")} + + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/BfAddOnRow.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/BfAddOnRow.tsx new file mode 100644 index 000000000..8b0ce7bd5 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/BfAddOnRow.tsx @@ -0,0 +1,42 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import { Box, styled, Typography } from "@mui/material"; + +import { Trans } from "react-i18next"; +import { makeHumanReadableStorage } from "utils/billing"; + +const RowContainer = styled(SpaceBetweenFlex)(({ theme }) => ({ + // gap: theme.spacing(1.5), + padding: theme.spacing(1, 0), + cursor: "pointer", + "&:hover .endIcon": { + backgroundColor: "rgba(255,255,255,0.08)", + }, +})); +export function BFAddOnRow({ bonusData, closeModal }) { + return ( + <> + {bonusData.storageBonuses.map((bonus) => { + if (bonus.type.startsWith("ADD_ON")) { + return ( + + + + + + + + ); + } + return null; + })} + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/FreePlanRow.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/FreePlanRow.tsx new file mode 100644 index 000000000..f3651e12d --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/FreePlanRow.tsx @@ -0,0 +1,28 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import ArrowForward from "@mui/icons-material/ArrowForward"; +import { Box, IconButton, styled, Typography } from "@mui/material"; +import { t } from "i18next"; + +const RowContainer = styled(SpaceBetweenFlex)(({ theme }) => ({ + gap: theme.spacing(1.5), + padding: theme.spacing(1.5, 1), + cursor: "pointer", + "&:hover .endIcon": { + backgroundColor: "rgba(255,255,255,0.08)", + }, +})); +export function FreePlanRow({ closeModal }) { + return ( + + + {t("FREE_PLAN_OPTION_LABEL")} + + {t("FREE_PLAN_DESCRIPTION")} + + + + + + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/button.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/button.tsx new file mode 100644 index 000000000..d599c486b --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/button.tsx @@ -0,0 +1,64 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import ChevronRight from "@mui/icons-material/ChevronRight"; +import Done from "@mui/icons-material/Done"; +import { Box, Button } from "@mui/material"; +import { t } from "i18next"; +export function PlanIconButton({ + current, + onClick, +}: { + current: boolean; + onClick: () => void; +}) { + return ( + + {current ? ( + + ) : ( + + )} + + ); +} + +function CurrentPlanTileButton() { + return ( + + ); +} + +function NormalPlanTileButton({ onClick }) { + return ( + + ); +} diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/index.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/index.tsx new file mode 100644 index 000000000..ed1a666ed --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/index.tsx @@ -0,0 +1,50 @@ +import { Stack } from "@mui/material"; +import { PLAN_PERIOD } from "constants/gallery"; +import { Plan, Subscription } from "types/billing"; +import { BonusData } from "types/user"; +import { + hasAddOnBonus, + hasPaidSubscription, + isPopularPlan, + isUserSubscribedPlan, +} from "utils/billing"; +import { FreePlanRow } from "./FreePlanRow"; +import { PlanRow } from "./planRow"; + +interface Iprops { + plans: Plan[]; + planPeriod: PLAN_PERIOD; + subscription: Subscription; + bonusData?: BonusData; + onPlanSelect: (plan: Plan) => void; + closeModal: () => void; +} + +const Plans = ({ + plans, + planPeriod, + subscription, + bonusData, + onPlanSelect, + closeModal, +}: Iprops) => ( + + {plans + ?.filter((plan) => plan.period === planPeriod) + ?.map((plan) => ( + + ))} + {!hasPaidSubscription(subscription) && !hasAddOnBonus(bonusData) && ( + + )} + +); + +export default Plans; diff --git a/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/planRow.tsx b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/planRow.tsx new file mode 100644 index 000000000..6363caee4 --- /dev/null +++ b/web/apps/photos/src/components/pages/gallery/PlanSelector/plans/planRow.tsx @@ -0,0 +1,106 @@ +import { FlexWrapper, FluidContainer } from "@ente/shared/components/Container"; +import ArrowForward from "@mui/icons-material/ArrowForward"; +import Done from "@mui/icons-material/Done"; +import { Box, Button, ButtonProps, Typography, styled } from "@mui/material"; +import { Badge } from "components/Badge"; +import { PLAN_PERIOD } from "constants/gallery"; +import { t } from "i18next"; +import { Plan, Subscription } from "types/billing"; +import { + convertBytesToGBs, + hasPaidSubscription, + isUserSubscribedPlan, +} from "utils/billing"; + +interface Iprops { + plan: Plan; + subscription: Subscription; + onPlanSelect: (plan: Plan) => void; + disabled: boolean; + popular: boolean; +} + +const PlanRowContainer = styled(FlexWrapper)(() => ({ + background: + "linear-gradient(268.22deg, rgba(256, 256, 256, 0.08) -3.72%, rgba(256, 256, 256, 0) 85.73%)", +})); + +const TopAlignedFluidContainer = styled(FluidContainer)` + align-items: flex-start; +`; + +const DisabledPlanButton = styled((props: ButtonProps) => ( + + ); +} + +export default GoToEnte; diff --git a/web/apps/photos/src/components/pages/sharedAlbum/Navbar.tsx b/web/apps/photos/src/components/pages/sharedAlbum/Navbar.tsx new file mode 100644 index 000000000..9bda2093d --- /dev/null +++ b/web/apps/photos/src/components/pages/sharedAlbum/Navbar.tsx @@ -0,0 +1,29 @@ +import { FluidContainer } from "@ente/shared/components/Container"; +import { EnteLinkLogo } from "@ente/shared/components/Navbar/EnteLinkLogo"; +import NavbarBase from "@ente/shared/components/Navbar/base"; +import AddPhotoAlternateOutlined from "@mui/icons-material/AddPhotoAlternateOutlined"; +import UploadButton from "components/Upload/UploadButton"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import GoToEnte from "./GoToEnte"; + +export default function SharedAlbumNavbar({ showUploadButton, openUploader }) { + const { isMobile } = useContext(AppContext); + return ( + + + + + {showUploadButton ? ( + } + text={t("ADD_PHOTOS")} + /> + ) : ( + + )} + + ); +} diff --git a/web/apps/photos/src/components/pages/sharedAlbum/ReportAbuse.tsx b/web/apps/photos/src/components/pages/sharedAlbum/ReportAbuse.tsx new file mode 100644 index 000000000..ba6b0418f --- /dev/null +++ b/web/apps/photos/src/components/pages/sharedAlbum/ReportAbuse.tsx @@ -0,0 +1,20 @@ +import { styled } from "@mui/material"; +import { Button } from "react-bootstrap"; +const Container = styled("div")` + position: fixed; + bottom: 7%; + right: 2%; + align-self: flex-end; +`; + +interface Iprops { + onClick: () => void; +} + +export default function ReportAbuse(props: Iprops) { + return ( + + + + ); +} diff --git a/web/apps/photos/src/components/pages/sharedAlbum/SelectedFileOptions.tsx b/web/apps/photos/src/components/pages/sharedAlbum/SelectedFileOptions.tsx new file mode 100644 index 000000000..35967ec13 --- /dev/null +++ b/web/apps/photos/src/components/pages/sharedAlbum/SelectedFileOptions.tsx @@ -0,0 +1,45 @@ +import { FluidContainer } from "@ente/shared/components/Container"; +import { SelectionBar } from "@ente/shared/components/Navbar/SelectionBar"; +import CloseIcon from "@mui/icons-material/Close"; +import DownloadIcon from "@mui/icons-material/Download"; +import { Box, IconButton, Stack, Tooltip } from "@mui/material"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; +import { formatNumber } from "utils/number/format"; + +interface Props { + count: number; + clearSelection: () => void; + downloadFilesHelper: () => void; +} + +const SelectedFileOptions = ({ + downloadFilesHelper, + count, + clearSelection, +}: Props) => { + const { isMobile } = useContext(AppContext); + + return ( + + + + + + + {formatNumber(count)} {t("SELECTED")}{" "} + + + + + + + + + + + ); +}; + +export default SelectedFileOptions; diff --git a/web/apps/photos/src/constants/api.ts b/web/apps/photos/src/constants/api.ts new file mode 100644 index 000000000..17571f7f3 --- /dev/null +++ b/web/apps/photos/src/constants/api.ts @@ -0,0 +1 @@ +export const REQUEST_BATCH_SIZE = 1000; diff --git a/web/apps/photos/src/constants/billing.ts b/web/apps/photos/src/constants/billing.ts new file mode 100644 index 000000000..f66263eda --- /dev/null +++ b/web/apps/photos/src/constants/billing.ts @@ -0,0 +1,4 @@ +import { getPaymentsURL } from "@ente/shared/network/api"; + +export const getDesktopRedirectURL = () => + `${getPaymentsURL()}/desktop-redirect`; diff --git a/web/apps/photos/src/constants/collection.ts b/web/apps/photos/src/constants/collection.ts new file mode 100644 index 000000000..cc2c00052 --- /dev/null +++ b/web/apps/photos/src/constants/collection.ts @@ -0,0 +1,100 @@ +export const ARCHIVE_SECTION = -1; +export const TRASH_SECTION = -2; +export const DUMMY_UNCATEGORIZED_COLLECTION = -3; +export const HIDDEN_ITEMS_SECTION = -4; +export const ALL_SECTION = 0; +export const DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME = "Hidden"; + +export enum CollectionType { + folder = "folder", + favorites = "favorites", + album = "album", + uncategorized = "uncategorized", +} + +export enum CollectionSummaryType { + folder = "folder", + favorites = "favorites", + album = "album", + archive = "archive", + trash = "trash", + uncategorized = "uncategorized", + all = "all", + outgoingShare = "outgoingShare", + incomingShareViewer = "incomingShareViewer", + incomingShareCollaborator = "incomingShareCollaborator", + sharedOnlyViaLink = "sharedOnlyViaLink", + archived = "archived", + defaultHidden = "defaultHidden", + hiddenItems = "hiddenItems", + pinned = "pinned", +} +export enum COLLECTION_LIST_SORT_BY { + NAME, + CREATION_TIME_ASCENDING, + UPDATION_TIME_DESCENDING, +} + +export const COLLECTION_SHARE_DEFAULT_VALID_DURATION = + 10 * 24 * 60 * 60 * 1000 * 1000; +export const COLLECTION_SHARE_DEFAULT_DEVICE_LIMIT = 4; + +export const COLLECTION_SORT_ORDER = new Map([ + [CollectionSummaryType.all, 0], + [CollectionSummaryType.hiddenItems, 0], + [CollectionSummaryType.uncategorized, 1], + [CollectionSummaryType.favorites, 2], + [CollectionSummaryType.pinned, 3], + [CollectionSummaryType.album, 4], + [CollectionSummaryType.folder, 4], + [CollectionSummaryType.incomingShareViewer, 4], + [CollectionSummaryType.incomingShareCollaborator, 4], + [CollectionSummaryType.outgoingShare, 4], + [CollectionSummaryType.sharedOnlyViaLink, 4], + [CollectionSummaryType.archived, 4], + [CollectionSummaryType.archive, 5], + [CollectionSummaryType.trash, 6], + [CollectionSummaryType.defaultHidden, 7], +]); + +export const SYSTEM_COLLECTION_TYPES = new Set([ + CollectionSummaryType.all, + CollectionSummaryType.archive, + CollectionSummaryType.trash, + CollectionSummaryType.uncategorized, + CollectionSummaryType.hiddenItems, + CollectionSummaryType.defaultHidden, +]); + +export const ADD_TO_NOT_ALLOWED_COLLECTION = new Set([ + CollectionSummaryType.all, + CollectionSummaryType.archive, + CollectionSummaryType.incomingShareViewer, + CollectionSummaryType.trash, + CollectionSummaryType.uncategorized, + CollectionSummaryType.defaultHidden, + CollectionSummaryType.hiddenItems, +]); + +export const MOVE_TO_NOT_ALLOWED_COLLECTION = new Set([ + CollectionSummaryType.all, + CollectionSummaryType.archive, + CollectionSummaryType.incomingShareViewer, + CollectionSummaryType.incomingShareCollaborator, + CollectionSummaryType.trash, + CollectionSummaryType.uncategorized, + CollectionSummaryType.defaultHidden, + CollectionSummaryType.hiddenItems, +]); + +export const OPTIONS_NOT_HAVING_COLLECTION_TYPES = new Set([ + CollectionSummaryType.all, + CollectionSummaryType.archive, +]); + +export const HIDE_FROM_COLLECTION_BAR_TYPES = new Set([ + CollectionSummaryType.trash, + CollectionSummaryType.archive, + CollectionSummaryType.uncategorized, + CollectionSummaryType.defaultHidden, +]); diff --git a/web/apps/photos/src/constants/export.ts b/web/apps/photos/src/constants/export.ts new file mode 100644 index 000000000..cd6c0c0ee --- /dev/null +++ b/web/apps/photos/src/constants/export.ts @@ -0,0 +1,14 @@ +export const ENTE_METADATA_FOLDER = "metadata"; + +export const ENTE_TRASH_FOLDER = "Trash"; + +export enum ExportStage { + INIT = 0, + MIGRATION = 1, + STARTING = 2, + EXPORTING_FILES = 3, + TRASHING_DELETED_FILES = 4, + RENAMING_COLLECTION_FOLDERS = 5, + TRASHING_DELETED_COLLECTIONS = 6, + FINISHED = 7, +} diff --git a/web/apps/photos/src/constants/ffmpeg.ts b/web/apps/photos/src/constants/ffmpeg.ts new file mode 100644 index 000000000..9ecc41eb5 --- /dev/null +++ b/web/apps/photos/src/constants/ffmpeg.ts @@ -0,0 +1,3 @@ +export const INPUT_PATH_PLACEHOLDER = "INPUT"; +export const FFMPEG_PLACEHOLDER = "FFMPEG"; +export const OUTPUT_PATH_PLACEHOLDER = "OUTPUT"; diff --git a/web/apps/photos/src/constants/file.ts b/web/apps/photos/src/constants/file.ts new file mode 100644 index 000000000..46065136c --- /dev/null +++ b/web/apps/photos/src/constants/file.ts @@ -0,0 +1,43 @@ +export const MIN_EDITED_CREATION_TIME = new Date(1800, 0, 1); +export const MAX_EDITED_CREATION_TIME = new Date(); + +export const MAX_EDITED_FILE_NAME_LENGTH = 100; +export const MAX_CAPTION_SIZE = 5000; + +export const TYPE_HEIC = "heic"; +export const TYPE_HEIF = "heif"; +export const TYPE_JPEG = "jpeg"; +export const TYPE_JPG = "jpg"; + +export enum FILE_TYPE { + IMAGE, + VIDEO, + LIVE_PHOTO, + OTHERS, +} + +export const RAW_FORMATS = [ + "heic", + "rw2", + "tiff", + "arw", + "cr3", + "cr2", + "raf", + "nef", + "psd", + "dng", + "tif", +]; +export const SUPPORTED_RAW_FORMATS = [ + "heic", + "rw2", + "tiff", + "arw", + "cr3", + "cr2", + "nef", + "psd", + "dng", + "tif", +]; diff --git a/web/apps/photos/src/constants/gallery.ts b/web/apps/photos/src/constants/gallery.ts new file mode 100644 index 000000000..9865d2e80 --- /dev/null +++ b/web/apps/photos/src/constants/gallery.ts @@ -0,0 +1,15 @@ +export const GAP_BTW_TILES = 4; +export const DATE_CONTAINER_HEIGHT = 48; +export const SIZE_AND_COUNT_CONTAINER_HEIGHT = 72; +export const IMAGE_CONTAINER_MAX_HEIGHT = 180; +export const IMAGE_CONTAINER_MAX_WIDTH = 180; +export const MIN_COLUMNS = 4; +export const SPACE_BTW_DATES = 44; +export const SPACE_BTW_DATES_TO_IMAGE_CONTAINER_WIDTH_RATIO = 0.244; + +export enum PLAN_PERIOD { + MONTH = "month", + YEAR = "year", +} + +export const SYNC_INTERVAL_IN_MICROSECONDS = 1000 * 60 * 5; // 5 minutes diff --git a/web/apps/photos/src/constants/mlConfig.ts b/web/apps/photos/src/constants/mlConfig.ts new file mode 100644 index 000000000..a1e8d3910 --- /dev/null +++ b/web/apps/photos/src/constants/mlConfig.ts @@ -0,0 +1,93 @@ +import { JobConfig } from "types/common/job"; +import { MLSearchConfig, MLSyncConfig } from "types/machineLearning"; + +export const DEFAULT_ML_SYNC_JOB_CONFIG: JobConfig = { + intervalSec: 5, + // TODO: finalize this after seeing effects on and from machine sleep + maxItervalSec: 960, + backoffMultiplier: 2, +}; + +export const DEFAULT_ML_SYNC_CONFIG: MLSyncConfig = { + batchSize: 200, + imageSource: "Original", + faceDetection: { + method: "BlazeFace", + minFaceSize: 32, + }, + faceCrop: { + enabled: true, + method: "ArcFace", + padding: 0.25, + maxSize: 256, + blobOptions: { + type: "image/jpeg", + quality: 0.8, + }, + }, + faceAlignment: { + method: "ArcFace", + }, + faceEmbedding: { + method: "MobileFaceNet", + faceSize: 112, + generateTsne: true, + }, + faceClustering: { + method: "Hdbscan", + minClusterSize: 3, + minSamples: 5, + clusterSelectionEpsilon: 0.6, + clusterSelectionMethod: "leaf", + minInputSize: 50, + // maxDistanceInsideCluster: 0.4, + generateDebugInfo: true, + }, + objectDetection: { + method: "SSDMobileNetV2", + maxNumBoxes: 20, + minScore: 0.2, + }, + sceneDetection: { + method: "ImageScene", + minScore: 0.1, + }, + // tsne: { + // samples: 200, + // dim: 2, + // perplexity: 10.0, + // learningRate: 10.0, + // metric: 'euclidean', + // }, + mlVersion: 3, +}; + +export const DEFAULT_ML_SEARCH_CONFIG: MLSearchConfig = { + enabled: false, +}; + +export const ML_SYNC_DOWNLOAD_TIMEOUT_MS = 300000; + +export const MAX_FACE_DISTANCE_PERCENT = Math.sqrt(2) / 100; + +export const MAX_ML_SYNC_ERROR_COUNT = 4; + +export const TEXT_DETECTION_TIMEOUT_MS = [10000, 30000, 60000, 120000, 240000]; + +export const BLAZEFACE_MAX_FACES = 50; +export const BLAZEFACE_INPUT_SIZE = 256; +export const BLAZEFACE_IOU_THRESHOLD = 0.3; +export const BLAZEFACE_SCORE_THRESHOLD = 0.75; +export const BLAZEFACE_PASS1_SCORE_THRESHOLD = 0.4; +export const BLAZEFACE_FACE_SIZE = 112; +export const MOBILEFACENET_FACE_SIZE = 112; + +// scene detection model takes fixed-shaped (224x224) inputs +// https://tfhub.dev/sayannath/lite-model/image-scene/1 +export const SCENE_DETECTION_IMAGE_SIZE = 224; + +// SSD with Mobilenet v2 initialized from Imagenet classification checkpoint. Trained on COCO 2017 dataset (images scaled to 320x320 resolution). +// https://tfhub.dev/tensorflow/ssd_mobilenet_v2/2 +export const OBJECT_DETECTION_IMAGE_SIZE = 320; + +export const BATCHES_BEFORE_SYNCING_INDEX = 5; diff --git a/web/apps/photos/src/constants/photoEditor.ts b/web/apps/photos/src/constants/photoEditor.ts new file mode 100644 index 000000000..63d4b4f38 --- /dev/null +++ b/web/apps/photos/src/constants/photoEditor.ts @@ -0,0 +1,10 @@ +export const FILTER_DEFAULT_VALUES = { + brightness: 100, + contrast: 100, + blur: 0, + saturation: 100, + invert: false, +}; + +// CORNER_THRESHOLD defines the threshold near the corners of the crop box in which dragging is assumed as not the intention +export const CORNER_THRESHOLD = 20; diff --git a/web/apps/photos/src/constants/photoViewer.ts b/web/apps/photos/src/constants/photoViewer.ts new file mode 100644 index 000000000..b5f3d35d8 --- /dev/null +++ b/web/apps/photos/src/constants/photoViewer.ts @@ -0,0 +1,27 @@ +export const defaultLivePhotoDefaultOptions = { + click: () => {}, + hide: () => {}, + show: () => {}, + loading: false, + visible: false, +}; + +export const photoSwipeV4Events = [ + "beforeChange", + "afterChange", + "imageLoadComplete", + "resize", + "gettingData", + "mouseUsed", + "initialZoomIn", + "initialZoomInEnd", + "initialZoomOut", + "initialZoomOutEnd", + "parseVerticalMargin", + "close", + "unbindEvents", + "destroy", + "updateScrollOffset", + "preventDragEvent", + "shareLinkClick", +]; diff --git a/web/apps/photos/src/constants/publicCollection.ts b/web/apps/photos/src/constants/publicCollection.ts new file mode 100644 index 000000000..5a1faad75 --- /dev/null +++ b/web/apps/photos/src/constants/publicCollection.ts @@ -0,0 +1,4 @@ +export enum REPORT_REASON { + COPYRIGHT = "COPYRIGHT", + MALICIOUS_CONTENT = "MALICIOUS_CONTENT", +} diff --git a/web/apps/photos/src/constants/redirects.ts b/web/apps/photos/src/constants/redirects.ts new file mode 100644 index 000000000..443a07afc --- /dev/null +++ b/web/apps/photos/src/constants/redirects.ts @@ -0,0 +1,10 @@ +export enum REDIRECTS { + ROADMAP = "roadmap", + FAMILIES = "families", +} + +export const getRedirectURL = (redirect: REDIRECTS) => { + const url = new URL("https://web.ente.io"); + url.searchParams.set("redirect", redirect); + return url.href; +}; diff --git a/web/apps/photos/src/constants/upload.ts b/web/apps/photos/src/constants/upload.ts new file mode 100644 index 000000000..6d9f63d78 --- /dev/null +++ b/web/apps/photos/src/constants/upload.ts @@ -0,0 +1,147 @@ +import { ENCRYPTION_CHUNK_SIZE } from "@ente/shared/crypto/constants"; +import { FILE_TYPE } from "constants/file"; +import { + FileTypeInfo, + ImportSuggestion, + Location, + ParsedExtractedMetadata, +} from "types/upload"; + +// list of format that were missed by type-detection for some files. +export const WHITELISTED_FILE_FORMATS: FileTypeInfo[] = [ + { fileType: FILE_TYPE.IMAGE, exactType: "jpeg", mimeType: "image/jpeg" }, + { fileType: FILE_TYPE.IMAGE, exactType: "jpg", mimeType: "image/jpeg" }, + { fileType: FILE_TYPE.VIDEO, exactType: "webm", mimeType: "video/webm" }, + { fileType: FILE_TYPE.VIDEO, exactType: "mod", mimeType: "video/mpeg" }, + { fileType: FILE_TYPE.VIDEO, exactType: "mp4", mimeType: "video/mp4" }, + { fileType: FILE_TYPE.IMAGE, exactType: "gif", mimeType: "image/gif" }, + { fileType: FILE_TYPE.VIDEO, exactType: "dv", mimeType: "video/x-dv" }, + { + fileType: FILE_TYPE.VIDEO, + exactType: "wmv", + mimeType: "video/x-ms-asf", + }, + { + fileType: FILE_TYPE.VIDEO, + exactType: "hevc", + mimeType: "video/hevc", + }, + { + fileType: FILE_TYPE.IMAGE, + exactType: "raf", + mimeType: "image/x-fuji-raf", + }, + { + fileType: FILE_TYPE.IMAGE, + exactType: "orf", + mimeType: "image/x-olympus-orf", + }, + + { + fileType: FILE_TYPE.IMAGE, + exactType: "crw", + mimeType: "image/x-canon-crw", + }, + { + fileType: FILE_TYPE.VIDEO, + exactType: "mov", + mimeType: "video/quicktime", + }, +]; + +export const KNOWN_NON_MEDIA_FORMATS = ["xmp", "html", "txt"]; + +export const EXIFLESS_FORMATS = ["gif", "bmp"]; + +// this is the chunk size of the un-encrypted file which is read and encrypted before uploading it as a single part. +export const MULTIPART_PART_SIZE = 20 * 1024 * 1024; + +export const FILE_READER_CHUNK_SIZE = ENCRYPTION_CHUNK_SIZE; + +export const FILE_CHUNKS_COMBINED_FOR_A_UPLOAD_PART = Math.floor( + MULTIPART_PART_SIZE / FILE_READER_CHUNK_SIZE, +); + +export const RANDOM_PERCENTAGE_PROGRESS_FOR_PUT = () => 90 + 10 * Math.random(); + +export const NULL_LOCATION: Location = { latitude: null, longitude: null }; + +export enum UPLOAD_STAGES { + START, + READING_GOOGLE_METADATA_FILES, + EXTRACTING_METADATA, + UPLOADING, + CANCELLING, + FINISH, +} + +export enum UPLOAD_STRATEGY { + SINGLE_COLLECTION, + COLLECTION_PER_FOLDER, +} + +export enum UPLOAD_RESULT { + FAILED, + ALREADY_UPLOADED, + UNSUPPORTED, + BLOCKED, + TOO_LARGE, + LARGER_THAN_AVAILABLE_STORAGE, + UPLOADED, + UPLOADED_WITH_STATIC_THUMBNAIL, + ADDED_SYMLINK, +} + +export enum PICKED_UPLOAD_TYPE { + FILES = "files", + FOLDERS = "folders", + ZIPS = "zips", +} + +export const MAX_FILE_SIZE_SUPPORTED = 4 * 1024 * 1024 * 1024; // 4 GB + +export const LIVE_PHOTO_ASSET_SIZE_LIMIT = 20 * 1024 * 1024; // 20MB + +export const NULL_EXTRACTED_METADATA: ParsedExtractedMetadata = { + location: NULL_LOCATION, + creationTime: null, + width: null, + height: null, +}; + +export const A_SEC_IN_MICROSECONDS = 1e6; + +export const DEFAULT_IMPORT_SUGGESTION: ImportSuggestion = { + rootFolderName: "", + hasNestedFolders: false, + hasRootLevelFileWithFolder: false, +}; + +export const BLACK_THUMBNAIL_BASE64 = + "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEB" + + "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQ" + + "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARC" + + "ACWASwDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUF" + + "BAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk" + + "6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztL" + + "W2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAA" + + "AAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVY" + + "nLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImK" + + "kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oAD" + + "AMBAAIRAxEAPwD/AD/6ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA" + + "CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg" + + "AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAC" + + "gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo" + + "AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg" + + "AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg" + + "AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA" + + "CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA" + + "CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA" + + "KACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg" + + "AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo" + + "AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA" + + "CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAK" + + "ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA" + + "KACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo" + + "AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo" + + "AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD/9k="; diff --git a/web/apps/photos/src/contexts/uploadProgress.tsx b/web/apps/photos/src/contexts/uploadProgress.tsx new file mode 100644 index 000000000..fe5f733b8 --- /dev/null +++ b/web/apps/photos/src/contexts/uploadProgress.tsx @@ -0,0 +1,42 @@ +import { UPLOAD_STAGES } from "constants/upload"; +import { createContext } from "react"; +import { + InProgressUpload, + SegregatedFinishedUploads, + UploadCounter, + UploadFileNames, +} from "types/upload/ui"; + +interface UploadProgressContextType { + open: boolean; + onClose: () => void; + uploadCounter: UploadCounter; + uploadStage: UPLOAD_STAGES; + percentComplete: number; + retryFailed: () => void; + inProgressUploads: InProgressUpload[]; + uploadFileNames: UploadFileNames; + finishedUploads: SegregatedFinishedUploads; + hasLivePhotos: boolean; + expanded: boolean; + setExpanded: React.Dispatch>; +} +const defaultUploadProgressContext: UploadProgressContextType = { + open: null, + onClose: () => null, + uploadCounter: null, + uploadStage: null, + percentComplete: null, + retryFailed: () => null, + inProgressUploads: null, + uploadFileNames: null, + finishedUploads: null, + hasLivePhotos: null, + expanded: null, + setExpanded: () => null, +}; +const UploadProgressContext = createContext( + defaultUploadProgressContext, +); + +export default UploadProgressContext; diff --git a/web/apps/photos/src/pages/404.tsx b/web/apps/photos/src/pages/404.tsx new file mode 100644 index 000000000..edb4ae7f7 --- /dev/null +++ b/web/apps/photos/src/pages/404.tsx @@ -0,0 +1,17 @@ +import { APPS } from "@ente/shared/apps/constants"; +import NotFoundPage from "@ente/shared/next/pages/404"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function NotFound() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/_app.tsx b/web/apps/photos/src/pages/_app.tsx new file mode 100644 index 000000000..5d246c055 --- /dev/null +++ b/web/apps/photos/src/pages/_app.tsx @@ -0,0 +1,500 @@ +import AppNavbar from "@ente/shared/components/Navbar/app"; +import { t } from "i18next"; +import { createContext, useEffect, useRef, useState } from "react"; + +import { setupI18n } from "@/ui/i18n"; +import { CacheProvider } from "@emotion/react"; +import { + APP_TITLES, + APPS, + CLIENT_PACKAGE_NAMES, +} from "@ente/shared/apps/constants"; +import { EnteAppProps } from "@ente/shared/apps/types"; +import { Overlay } from "@ente/shared/components/Container"; +import DialogBox from "@ente/shared/components/DialogBox"; +import { + DialogBoxAttributes, + SetDialogBoxAttributes, +} from "@ente/shared/components/DialogBox/types"; +import DialogBoxV2 from "@ente/shared/components/DialogBoxV2"; +import { + DialogBoxAttributesV2, + SetDialogBoxAttributesV2, +} from "@ente/shared/components/DialogBoxV2/types"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { MessageContainer } from "@ente/shared/components/MessageContainer"; +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import ElectronAPIs from "@ente/shared/electron"; +import { AppUpdateInfo } from "@ente/shared/electron/types"; +import { CustomError } from "@ente/shared/error"; +import { eventBus, Events } from "@ente/shared/events"; +import { useLocalState } from "@ente/shared/hooks/useLocalState"; +import { addLogLine } from "@ente/shared/logging"; +import { + clearLogsIfLocalStorageLimitExceeded, + logStartupMessage, +} from "@ente/shared/logging/web"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { logError } from "@ente/shared/sentry"; +import { getData, LS_KEYS } from "@ente/shared/storage/localStorage"; +import { + getLocalMapEnabled, + getToken, + setLocalMapEnabled, +} from "@ente/shared/storage/localStorage/helpers"; +import { getTheme } from "@ente/shared/themes"; +import { THEME_COLOR } from "@ente/shared/themes/constants"; +import createEmotionCache from "@ente/shared/themes/createEmotionCache"; +import { SetTheme } from "@ente/shared/themes/types"; +import ArrowForward from "@mui/icons-material/ArrowForward"; +import { CssBaseline, useMediaQuery } from "@mui/material"; +import { ThemeProvider } from "@mui/material/styles"; +import "bootstrap/dist/css/bootstrap.min.css"; +import Notification from "components/Notification"; +import { REDIRECTS } from "constants/redirects"; +import isElectron from "is-electron"; +import Head from "next/head"; +import { useRouter } from "next/router"; +import "photoswipe/dist/photoswipe.css"; +import LoadingBar from "react-top-loading-bar"; +import DownloadManager from "services/download"; +import exportService from "services/export"; +import mlWorkManager from "services/machineLearning/mlWorkManager"; +import { + getFamilyPortalRedirectURL, + getRoadmapRedirectURL, + updateMapEnabledStatus, +} from "services/userService"; +import "styles/global.css"; +import { + NotificationAttributes, + SetNotificationAttributes, +} from "types/Notification"; +import { isExportInProgress } from "utils/export"; +import { + getMLSearchConfig, + updateMLSearchConfig, +} from "utils/machineLearning/config"; +import { + getUpdateAvailableForDownloadMessage, + getUpdateReadyToInstallMessage, +} from "utils/ui"; + +const redirectMap = new Map([ + [REDIRECTS.ROADMAP, getRoadmapRedirectURL], + [REDIRECTS.FAMILIES, getFamilyPortalRedirectURL], +]); + +type AppContextType = { + showNavBar: (show: boolean) => void; + sharedFiles: File[]; + resetSharedFiles: () => void; + mlSearchEnabled: boolean; + mapEnabled: boolean; + updateMlSearchEnabled: (enabled: boolean) => Promise; + updateMapEnabled: (enabled: boolean) => Promise; + startLoading: () => void; + finishLoading: () => void; + closeMessageDialog: () => void; + setDialogMessage: SetDialogBoxAttributes; + setNotificationAttributes: SetNotificationAttributes; + isFolderSyncRunning: boolean; + setIsFolderSyncRunning: (isRunning: boolean) => void; + watchFolderView: boolean; + setWatchFolderView: (isOpen: boolean) => void; + watchFolderFiles: FileList; + setWatchFolderFiles: (files: FileList) => void; + isMobile: boolean; + themeColor: THEME_COLOR; + setThemeColor: SetTheme; + somethingWentWrong: () => void; + setDialogBoxAttributesV2: SetDialogBoxAttributesV2; + isCFProxyDisabled: boolean; + setIsCFProxyDisabled: (disabled: boolean) => void; +}; + +export const AppContext = createContext(null); + +// Client-side cache, shared for the whole session of the user in the browser. +const clientSideEmotionCache = createEmotionCache(); + +export default function App(props: EnteAppProps) { + const { + Component, + emotionCache = clientSideEmotionCache, + pageProps, + } = props; + const router = useRouter(); + const [isI18nReady, setIsI18nReady] = useState(false); + const [loading, setLoading] = useState(false); + const [offline, setOffline] = useState( + typeof window !== "undefined" && !window.navigator.onLine, + ); + const [showNavbar, setShowNavBar] = useState(false); + const [sharedFiles, setSharedFiles] = useState(null); + const [redirectName, setRedirectName] = useState(null); + const [mlSearchEnabled, setMlSearchEnabled] = useState(false); + const [mapEnabled, setMapEnabled] = useState(false); + const isLoadingBarRunning = useRef(false); + const loadingBar = useRef(null); + const [dialogMessage, setDialogMessage] = useState(); + const [dialogBoxAttributeV2, setDialogBoxAttributesV2] = + useState(); + useState(null); + const [messageDialogView, setMessageDialogView] = useState(false); + const [dialogBoxV2View, setDialogBoxV2View] = useState(false); + const [isFolderSyncRunning, setIsFolderSyncRunning] = useState(false); + const [watchFolderView, setWatchFolderView] = useState(false); + const [watchFolderFiles, setWatchFolderFiles] = useState(null); + const isMobile = useMediaQuery("(max-width:428px)"); + const [notificationView, setNotificationView] = useState(false); + const closeNotification = () => setNotificationView(false); + const [notificationAttributes, setNotificationAttributes] = + useState(null); + const [themeColor, setThemeColor] = useLocalState( + LS_KEYS.THEME, + THEME_COLOR.DARK, + ); + const [isCFProxyDisabled, setIsCFProxyDisabled] = useLocalState( + LS_KEYS.CF_PROXY_DISABLED, + false, + ); + + useEffect(() => { + //setup i18n + setupI18n().finally(() => setIsI18nReady(true)); + // set client package name in headers + HTTPService.setHeaders({ + "X-Client-Package": CLIENT_PACKAGE_NAMES.get(APPS.PHOTOS), + }); + // setup logging + clearLogsIfLocalStorageLimitExceeded(); + logStartupMessage(APPS.PHOTOS); + }, []); + + useEffect(() => { + if (isElectron()) { + const showUpdateDialog = (updateInfo: AppUpdateInfo) => { + if (updateInfo.autoUpdatable) { + setDialogMessage( + getUpdateReadyToInstallMessage(updateInfo), + ); + } else { + setNotificationAttributes({ + endIcon: , + variant: "secondary", + message: t("UPDATE_AVAILABLE"), + onClick: () => + setDialogMessage( + getUpdateAvailableForDownloadMessage( + updateInfo, + ), + ), + }); + } + }; + ElectronAPIs.registerUpdateEventListener(showUpdateDialog); + } + }, []); + + useEffect(() => { + if (!isElectron()) { + return; + } + const loadMlSearchState = async () => { + try { + const mlSearchConfig = await getMLSearchConfig(); + setMlSearchEnabled(mlSearchConfig.enabled); + mlWorkManager.setMlSearchEnabled(mlSearchConfig.enabled); + } catch (e) { + logError(e, "Error while loading mlSearchEnabled"); + } + }; + loadMlSearchState(); + try { + eventBus.on(Events.LOGOUT, () => { + setMlSearchEnabled(false); + mlWorkManager.setMlSearchEnabled(false); + }); + } catch (e) { + logError(e, "Error while subscribing to logout event"); + } + }, []); + + useEffect(() => { + setMapEnabled(getLocalMapEnabled()); + }, []); + + useEffect(() => { + if (!isElectron()) { + return; + } + const initExport = async () => { + try { + addLogLine("init export"); + const token = getToken(); + if (!token) { + addLogLine( + "User not logged in, not starting export continuous sync job", + ); + return; + } + await DownloadManager.init(APPS.PHOTOS, { token }); + const exportSettings = exportService.getExportSettings(); + if (!exportService.exportFolderExists(exportSettings?.folder)) { + return; + } + const exportRecord = await exportService.getExportRecord( + exportSettings.folder, + ); + if (exportSettings.continuousExport) { + exportService.enableContinuousExport(); + } + if (isExportInProgress(exportRecord.stage)) { + addLogLine("export was in progress, resuming"); + exportService.scheduleExport(); + } + } catch (e) { + logError(e, "init export failed"); + } + }; + initExport(); + try { + eventBus.on(Events.LOGOUT, () => { + exportService.disableContinuousExport(); + }); + } catch (e) { + logError(e, "Error while subscribing to logout event"); + } + }, []); + + const setUserOnline = () => setOffline(false); + const setUserOffline = () => setOffline(true); + const resetSharedFiles = () => setSharedFiles(null); + + useEffect(() => { + if (isI18nReady) { + console.log( + `%c${t("CONSOLE_WARNING_STOP")}`, + "color: red; font-size: 52px;", + ); + console.log(`%c${t("CONSOLE_WARNING_DESC")}`, "font-size: 20px;"); + } + }, [isI18nReady]); + + useEffect(() => { + const redirectTo = async (redirect) => { + if ( + redirectMap.has(redirect) && + typeof redirectMap.get(redirect) === "function" + ) { + const redirectAction = redirectMap.get(redirect); + window.location.href = await redirectAction(); + } else { + logError(CustomError.BAD_REQUEST, "invalid redirection", { + redirect, + }); + } + }; + + const query = new URLSearchParams(window.location.search); + const redirectName = query.get("redirect"); + if (redirectName) { + const user = getData(LS_KEYS.USER); + if (user?.token) { + redirectTo(redirectName); + } else { + setRedirectName(redirectName); + } + } + + router.events.on("routeChangeStart", (url: string) => { + const newPathname = url.split("?")[0] as PAGES; + if (window.location.pathname !== newPathname) { + setLoading(true); + } + + if (redirectName) { + const user = getData(LS_KEYS.USER); + if (user?.token) { + redirectTo(redirectName); + + // https://github.com/vercel/next.js/issues/2476#issuecomment-573460710 + // eslint-disable-next-line no-throw-literal + throw "Aborting route change, redirection in process...."; + } + } + }); + + router.events.on("routeChangeComplete", () => { + setLoading(false); + }); + + window.addEventListener("online", setUserOnline); + window.addEventListener("offline", setUserOffline); + + return () => { + window.removeEventListener("online", setUserOnline); + window.removeEventListener("offline", setUserOffline); + }; + }, [redirectName]); + + useEffect(() => { + setMessageDialogView(true); + }, [dialogMessage]); + + useEffect(() => { + setDialogBoxV2View(true); + }, [dialogBoxAttributeV2]); + + useEffect(() => { + setNotificationView(true); + }, [notificationAttributes]); + + const showNavBar = (show: boolean) => setShowNavBar(show); + const updateMlSearchEnabled = async (enabled: boolean) => { + try { + const mlSearchConfig = await getMLSearchConfig(); + mlSearchConfig.enabled = enabled; + await updateMLSearchConfig(mlSearchConfig); + setMlSearchEnabled(enabled); + mlWorkManager.setMlSearchEnabled(enabled); + } catch (e) { + logError(e, "Error while updating mlSearchEnabled"); + } + }; + + const updateMapEnabled = async (enabled: boolean) => { + try { + await updateMapEnabledStatus(enabled); + setLocalMapEnabled(enabled); + setMapEnabled(enabled); + } catch (e) { + logError(e, "Error while updating mapEnabled"); + } + }; + + const startLoading = () => { + !isLoadingBarRunning.current && loadingBar.current?.continuousStart(); + isLoadingBarRunning.current = true; + }; + const finishLoading = () => { + setTimeout(() => { + isLoadingBarRunning.current && loadingBar.current?.complete(); + isLoadingBarRunning.current = false; + }, 100); + }; + + const closeMessageDialog = () => setMessageDialogView(false); + const closeDialogBoxV2 = () => setDialogBoxV2View(false); + + const somethingWentWrong = () => + setDialogMessage({ + title: t("ERROR"), + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + + return ( + + + + {isI18nReady + ? t("TITLE", { context: APPS.PHOTOS }) + : APP_TITLES.get(APPS.PHOTOS)} + + + + + + + {showNavbar && } + + {offline && t("OFFLINE_MSG")} + + {sharedFiles && + (router.pathname === "/gallery" ? ( + + {t("files_to_be_uploaded", { + count: sharedFiles.length, + })} + + ) : ( + + {t("login_to_upload_files", { + count: sharedFiles.length, + })} + + ))} + + + + + + + + {(loading || !isI18nReady) && ( + ({ + display: "flex", + justifyContent: "center", + alignItems: "center", + zIndex: 2000, + backgroundColor: theme.colors.background.base, + })} + > + + + )} + + + + + ); +} diff --git a/web/apps/photos/src/pages/_document.tsx b/web/apps/photos/src/pages/_document.tsx new file mode 100644 index 000000000..09d4d5782 --- /dev/null +++ b/web/apps/photos/src/pages/_document.tsx @@ -0,0 +1,7 @@ +import DocumentPage, { + EnteDocumentProps, +} from "@ente/shared/next/pages/_document"; + +export default function Document(props: EnteDocumentProps) { + return ; +} diff --git a/web/apps/photos/src/pages/_error.tsx b/web/apps/photos/src/pages/_error.tsx new file mode 100644 index 000000000..bf1bb89be --- /dev/null +++ b/web/apps/photos/src/pages/_error.tsx @@ -0,0 +1,17 @@ +import { APPS } from "@ente/shared/apps/constants"; +import ErrorPage from "@ente/shared/next/pages/_error"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Error() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/change-email/index.tsx b/web/apps/photos/src/pages/change-email/index.tsx new file mode 100644 index 000000000..bb4c111dc --- /dev/null +++ b/web/apps/photos/src/pages/change-email/index.tsx @@ -0,0 +1,17 @@ +import ChangeEmailPage from "@ente/accounts/pages/change-email"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function ChangeEmail() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/change-password/index.tsx b/web/apps/photos/src/pages/change-password/index.tsx new file mode 100644 index 000000000..33e44c938 --- /dev/null +++ b/web/apps/photos/src/pages/change-password/index.tsx @@ -0,0 +1,17 @@ +import ChangePasswordPage from "@ente/accounts/pages/change-password"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function ChangePassword() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/credentials/index.tsx b/web/apps/photos/src/pages/credentials/index.tsx new file mode 100644 index 000000000..6e6612074 --- /dev/null +++ b/web/apps/photos/src/pages/credentials/index.tsx @@ -0,0 +1,17 @@ +import CredentialPage from "@ente/accounts/pages/credentials"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Credential() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/deduplicate/index.tsx b/web/apps/photos/src/pages/deduplicate/index.tsx new file mode 100644 index 000000000..cbd297f78 --- /dev/null +++ b/web/apps/photos/src/pages/deduplicate/index.tsx @@ -0,0 +1,210 @@ +import { t } from "i18next"; + +import PhotoFrame from "components/PhotoFrame"; +import { ALL_SECTION } from "constants/collection"; +import { AppContext } from "pages/_app"; +import { createContext, useContext, useEffect, useState } from "react"; +import { Duplicate, getDuplicates } from "services/deduplicationService"; +import { getLocalFiles, syncFiles, trashFiles } from "services/fileService"; +import { SelectedState } from "types/gallery"; + +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import { ApiError } from "@ente/shared/error"; +import useMemoSingleThreaded from "@ente/shared/hooks/useMemoSingleThreaded"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { SESSION_KEYS, getKey } from "@ente/shared/storage/sessionStorage"; +import { styled } from "@mui/material"; +import Typography from "@mui/material/Typography"; +import { HttpStatusCode } from "axios"; +import DeduplicateOptions from "components/pages/dedupe/SelectedFileOptions"; +import { default as Router, default as router } from "next/router"; +import { + getAllLatestCollections, + getLocalCollections, +} from "services/collectionService"; +import { syncTrash } from "services/trashService"; +import { + DeduplicateContextType, + DefaultDeduplicateContext, +} from "types/deduplicate"; +import { constructFileToCollectionMap, getSelectedFiles } from "utils/file"; + +export const DeduplicateContext = createContext( + DefaultDeduplicateContext, +); +export const Info = styled("div")` + padding: 24px; + font-size: 18px; +`; + +export default function Deduplicate() { + const { setDialogMessage, startLoading, finishLoading, showNavBar } = + useContext(AppContext); + const [duplicates, setDuplicates] = useState(null); + const [collectionNameMap, setCollectionNameMap] = useState( + new Map(), + ); + const [selected, setSelected] = useState({ + count: 0, + collectionID: 0, + ownCount: 0, + }); + const closeDeduplication = function () { + Router.push(PAGES.GALLERY); + }; + useEffect(() => { + const key = getKey(SESSION_KEYS.ENCRYPTION_KEY); + if (!key) { + InMemoryStore.set(MS_KEYS.REDIRECT_URL, PAGES.DEDUPLICATE); + router.push(PAGES.ROOT); + return; + } + showNavBar(true); + }, []); + + useEffect(() => { + syncWithRemote(); + }, []); + + const syncWithRemote = async () => { + startLoading(); + const collections = await getLocalCollections(); + const collectionNameMap = new Map(); + for (const collection of collections) { + collectionNameMap.set(collection.id, collection.name); + } + setCollectionNameMap(collectionNameMap); + const files = await getLocalFiles(); + const duplicateFiles = await getDuplicates(files, collectionNameMap); + const currFileSizeMap = new Map(); + let toSelectFileIDs: number[] = []; + let count = 0; + for (const dupe of duplicateFiles) { + // select all except first file + toSelectFileIDs = [ + ...toSelectFileIDs, + ...dupe.files.slice(1).map((f) => f.id), + ]; + count += dupe.files.length - 1; + + for (const file of dupe.files) { + currFileSizeMap.set(file.id, dupe.size); + } + } + setDuplicates(duplicateFiles); + const selectedFiles = { + count: count, + ownCount: count, + collectionID: ALL_SECTION, + }; + for (const fileID of toSelectFileIDs) { + selectedFiles[fileID] = true; + } + setSelected(selectedFiles); + finishLoading(); + }; + + const duplicateFiles = useMemoSingleThreaded(() => { + return (duplicates ?? []).reduce((acc, dupe) => { + return [...acc, ...dupe.files]; + }, []); + }, [duplicates]); + + const fileToCollectionsMap = useMemoSingleThreaded(() => { + return constructFileToCollectionMap(duplicateFiles); + }, [duplicateFiles]); + + const deleteFileHelper = async () => { + try { + startLoading(); + const selectedFiles = getSelectedFiles(selected, duplicateFiles); + await trashFiles(selectedFiles); + + // trashFiles above does an API request, we still need to update our + // local state. + // + // Enhancement: This can be done in a more granular manner. Also, it + // is better to funnel these syncs instead of adding these here and + // there in an ad-hoc manner. For now, this fixes the issue with the + // UI not updating if the user deletes only some of the duplicates. + const collections = await getAllLatestCollections(); + await syncFiles("normal", collections, () => {}); + await syncTrash(collections, () => {}); + } catch (e) { + if ( + e instanceof ApiError && + e.httpStatusCode === HttpStatusCode.Forbidden + ) { + setDialogMessage({ + title: t("ERROR"), + + close: { variant: "critical" }, + content: t("NOT_FILE_OWNER"), + }); + } else { + setDialogMessage({ + title: t("ERROR"), + + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + } + } finally { + await syncWithRemote(); + finishLoading(); + } + }; + + const clearSelection = function () { + setSelected({ count: 0, collectionID: 0, ownCount: 0 }); + }; + + if (!duplicates) { + return ( + + + + ); + } + + return ( + + {duplicateFiles.length > 0 && ( + {t("DEDUPLICATE_BASED_ON_SIZE")} + )} + {duplicateFiles.length === 0 ? ( + + + {t("NO_DUPLICATES_FOUND")} + + + ) : ( + + )} + + + ); +} diff --git a/web/apps/photos/src/pages/gallery/index.tsx b/web/apps/photos/src/pages/gallery/index.tsx new file mode 100644 index 000000000..dc043a7da --- /dev/null +++ b/web/apps/photos/src/pages/gallery/index.tsx @@ -0,0 +1,1219 @@ +import { + SESSION_KEYS, + clearKeys, + getKey, +} from "@ente/shared/storage/sessionStorage"; +import { Typography, styled } from "@mui/material"; +import { t } from "i18next"; +import { useRouter } from "next/router"; +import { + createContext, + useContext, + useEffect, + useMemo, + useRef, + useState, +} from "react"; +import { + constructEmailList, + createAlbum, + getAllLatestCollections, + getAllLocalCollections, + getCollectionSummaries, + getFavItemIds, + getHiddenItemsSummary, + getSectionSummaries, +} from "services/collectionService"; +import { getLocalFiles, syncFiles } from "services/fileService"; + +import { checkSubscriptionPurchase } from "utils/billing"; + +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { + isFirstLogin, + justSignedUp, + setIsFirstLogin, + setJustSignedUp, +} from "@ente/shared/storage/localStorage/helpers"; +import CollectionSelector, { + CollectionSelectorAttributes, +} from "components/Collections/CollectionSelector"; +import FullScreenDropZone from "components/FullScreenDropZone"; +import { LoadingOverlay } from "components/LoadingOverlay"; +import PhotoFrame from "components/PhotoFrame"; +import Sidebar from "components/Sidebar"; +import SelectedFileOptions from "components/pages/gallery/SelectedFileOptions"; +import { useDropzone } from "react-dropzone"; +import { + isTokenValid, + syncMapEnabled, + validateKey, +} from "services/userService"; +import { mergeMaps, preloadImage } from "utils/common"; +import { + FILE_OPS_TYPE, + constructFileToCollectionMap, + getSelectedFiles, + getUniqueFiles, + handleFileOps, + mergeMetadata, + sortFiles, +} from "utils/file"; + +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import { CustomError } from "@ente/shared/error"; +import { logError } from "@ente/shared/sentry"; +import CollectionNamer, { + CollectionNamerAttributes, +} from "components/Collections/CollectionNamer"; +import Uploader from "components/Upload/Uploader"; +import PlanSelector from "components/pages/gallery/PlanSelector"; +import { + ALL_SECTION, + ARCHIVE_SECTION, + CollectionSummaryType, + DUMMY_UNCATEGORIZED_COLLECTION, + HIDDEN_ITEMS_SECTION, + TRASH_SECTION, +} from "constants/collection"; +import { AppContext } from "pages/_app"; +import { getLocalTrashedFiles, syncTrash } from "services/trashService"; +import { + COLLECTION_OPS_TYPE, + constructCollectionNameMap, + getArchivedCollections, + getDefaultHiddenCollectionIDs, + getSelectedCollection, + handleCollectionOps, + hasNonSystemCollections, + splitNormalAndHiddenCollections, +} from "utils/collection"; + +import { APPS } from "@ente/shared/apps/constants"; +import { CenteredFlex } from "@ente/shared/components/Container"; +import ElectronAPIs from "@ente/shared/electron"; +import useEffectSingleThreaded from "@ente/shared/hooks/useEffectSingleThreaded"; +import useFileInput from "@ente/shared/hooks/useFileInput"; +import useMemoSingleThreaded from "@ente/shared/hooks/useMemoSingleThreaded"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { User } from "@ente/shared/user/types"; +import AuthenticateUserModal from "components/AuthenticateUserModal"; +import Collections from "components/Collections"; +import ExportModal from "components/ExportModal"; +import { + FilesDownloadProgress, + FilesDownloadProgressAttributes, +} from "components/FilesDownloadProgress"; +import FixCreationTime, { + FixCreationTimeAttributes, +} from "components/FixCreationTime"; +import GalleryEmptyState from "components/GalleryEmptyState"; +import { ITEM_TYPE, TimeStampListItem } from "components/PhotoList"; +import SearchResultInfo from "components/Search/SearchResultInfo"; +import UploadInputs from "components/UploadSelectorInputs"; +import { GalleryNavbar } from "components/pages/gallery/Navbar"; +import { SYNC_INTERVAL_IN_MICROSECONDS } from "constants/gallery"; +import isElectron from "is-electron"; +import { ClipService } from "services/clipService"; +import { constructUserIDToEmailMap } from "services/collectionService"; +import downloadManager from "services/download"; +import { syncEmbeddings } from "services/embeddingService"; +import { syncEntities } from "services/entityService"; +import locationSearchService from "services/locationSearchService"; +import uploadManager from "services/upload/uploadManager"; +import { Collection, CollectionSummaries } from "types/collection"; +import { EnteFile } from "types/file"; +import { + GalleryContextType, + SelectedState, + SetFilesDownloadProgressAttributes, + SetFilesDownloadProgressAttributesCreator, + UploadTypeSelectorIntent, +} from "types/gallery"; +import { Search, SearchResultSummary, UpdateSearch } from "types/search"; +import { FamilyData } from "types/user"; +import ComlinkSearchWorker from "utils/comlink/ComlinkSearchWorker"; +import { checkConnectivity } from "utils/common"; +import { isArchivedFile } from "utils/magicMetadata"; +import { getSessionExpiredMessage } from "utils/ui"; +import { getLocalFamilyData } from "utils/user/family"; + +export const DeadCenter = styled("div")` + flex: 1; + display: flex; + justify-content: center; + align-items: center; + text-align: center; + flex-direction: column; +`; + +const defaultGalleryContext: GalleryContextType = { + showPlanSelectorModal: () => null, + setActiveCollectionID: () => null, + syncWithRemote: () => null, + setBlockingLoad: () => null, + setIsInSearchMode: () => null, + photoListHeader: null, + openExportModal: () => null, + authenticateUser: () => null, + user: null, + userIDToEmailMap: null, + emailList: null, + openHiddenSection: () => null, + isClipSearchResult: null, +}; + +export const GalleryContext = createContext( + defaultGalleryContext, +); + +export default function Gallery() { + const router = useRouter(); + const [user, setUser] = useState(null); + const [familyData, setFamilyData] = useState(null); + const [collections, setCollections] = useState(null); + const [hiddenCollections, setHiddenCollections] = + useState(null); + const [defaultHiddenCollectionIDs, setDefaultHiddenCollectionIDs] = + useState>(); + const [files, setFiles] = useState(null); + const [hiddenFiles, setHiddenFiles] = useState(null); + const [trashedFiles, setTrashedFiles] = useState(null); + + const [favItemIds, setFavItemIds] = useState>(); + + const [isFirstLoad, setIsFirstLoad] = useState(false); + const [isFirstFetch, setIsFirstFetch] = useState(false); + const [selected, setSelected] = useState({ + ownCount: 0, + count: 0, + collectionID: 0, + }); + const [planModalView, setPlanModalView] = useState(false); + const [blockingLoad, setBlockingLoad] = useState(false); + const [collectionSelectorAttributes, setCollectionSelectorAttributes] = + useState(null); + const [collectionSelectorView, setCollectionSelectorView] = useState(false); + const [collectionNamerAttributes, setCollectionNamerAttributes] = + useState(null); + const [collectionNamerView, setCollectionNamerView] = useState(false); + const [search, setSearch] = useState(null); + const [shouldDisableDropzone, setShouldDisableDropzone] = useState(false); + const [isPhotoSwipeOpen, setIsPhotoSwipeOpen] = useState(false); + + const { + getRootProps: getDragAndDropRootProps, + getInputProps: getDragAndDropInputProps, + acceptedFiles: dragAndDropFiles, + } = useDropzone({ + noClick: true, + noKeyboard: true, + disabled: shouldDisableDropzone, + }); + const { + selectedFiles: webFileSelectorFiles, + open: openFileSelector, + getInputProps: getFileSelectorInputProps, + } = useFileInput({ + directory: false, + }); + const { + selectedFiles: webFolderSelectorFiles, + open: openFolderSelector, + getInputProps: getFolderSelectorInputProps, + } = useFileInput({ + directory: true, + }); + + const [isInSearchMode, setIsInSearchMode] = useState(false); + const [searchResultSummary, setSetSearchResultSummary] = + useState(null); + const syncInProgress = useRef(true); + const syncInterval = useRef(); + const resync = useRef<{ force: boolean; silent: boolean }>(); + // tempDeletedFileIds and tempHiddenFileIds are used to keep track of files that are deleted/hidden in the current session but not yet synced with the server. + const [tempDeletedFileIds, setTempDeletedFileIds] = useState>( + new Set(), + ); + const [tempHiddenFileIds, setTempHiddenFileIds] = useState>( + new Set(), + ); + const { startLoading, finishLoading, setDialogMessage, ...appContext } = + useContext(AppContext); + const [collectionSummaries, setCollectionSummaries] = + useState(); + const [hiddenCollectionSummaries, setHiddenCollectionSummaries] = + useState(); + const [userIDToEmailMap, setUserIDToEmailMap] = + useState>(null); + const [emailList, setEmailList] = useState(null); + const [activeCollectionID, setActiveCollectionID] = + useState(undefined); + const [hiddenFileIds, setHiddenFileIds] = useState>( + new Set(), + ); + const [fixCreationTimeView, setFixCreationTimeView] = useState(false); + const [fixCreationTimeAttributes, setFixCreationTimeAttributes] = + useState(null); + + const [archivedCollections, setArchivedCollections] = + useState>(); + + const showPlanSelectorModal = () => setPlanModalView(true); + + const [uploadTypeSelectorView, setUploadTypeSelectorView] = useState(false); + const [uploadTypeSelectorIntent, setUploadTypeSelectorIntent] = + useState( + UploadTypeSelectorIntent.normalUpload, + ); + + const [sidebarView, setSidebarView] = useState(false); + + const closeSidebar = () => setSidebarView(false); + const openSidebar = () => setSidebarView(true); + const [photoListHeader, setPhotoListHeader] = + useState(null); + + const [exportModalView, setExportModalView] = useState(false); + + const [authenticateUserModalView, setAuthenticateUserModalView] = + useState(false); + + const onAuthenticateCallback = useRef<() => void>(); + + const authenticateUser = (callback: () => void) => { + onAuthenticateCallback.current = callback; + setAuthenticateUserModalView(true); + }; + const closeAuthenticateUserModal = () => + setAuthenticateUserModalView(false); + + const [isInHiddenSection, setIsInHiddenSection] = useState(false); + + const [ + filesDownloadProgressAttributesList, + setFilesDownloadProgressAttributesList, + ] = useState([]); + + const openHiddenSection: GalleryContextType["openHiddenSection"] = ( + callback, + ) => { + authenticateUser(() => { + setIsInHiddenSection(true); + setActiveCollectionID(HIDDEN_ITEMS_SECTION); + callback?.(); + }); + }; + + const [isClipSearchResult, setIsClipSearchResult] = + useState(false); + + useEffect(() => { + appContext.showNavBar(true); + const key = getKey(SESSION_KEYS.ENCRYPTION_KEY); + const token = getToken(); + if (!key || !token) { + InMemoryStore.set(MS_KEYS.REDIRECT_URL, PAGES.GALLERY); + router.push(PAGES.ROOT); + return; + } + preloadImage("/images/subscription-card-background"); + const main = async () => { + const valid = await validateKey(); + if (!valid) { + return; + } + await downloadManager.init(APPS.PHOTOS, { token }); + setupSelectAllKeyBoardShortcutHandler(); + setActiveCollectionID(ALL_SECTION); + setIsFirstLoad(isFirstLogin()); + setIsFirstFetch(true); + if (justSignedUp()) { + setPlanModalView(true); + } + setIsFirstLogin(false); + const user = getData(LS_KEYS.USER); + const familyData = getLocalFamilyData(); + const files = sortFiles( + mergeMetadata(await getLocalFiles("normal")), + ); + const hiddenFiles = sortFiles( + mergeMetadata(await getLocalFiles("hidden")), + ); + const collections = await getAllLocalCollections(); + const { normalCollections, hiddenCollections } = + await splitNormalAndHiddenCollections(collections); + const trashedFiles = await getLocalTrashedFiles(); + + setUser(user); + setFamilyData(familyData); + setFiles(files); + setTrashedFiles(trashedFiles); + setHiddenFiles(hiddenFiles); + setCollections(normalCollections); + setHiddenCollections(hiddenCollections); + await syncWithRemote(true); + setIsFirstLoad(false); + setJustSignedUp(false); + setIsFirstFetch(false); + locationSearchService.loadCities(); + syncInterval.current = setInterval(() => { + syncWithRemote(false, true); + }, SYNC_INTERVAL_IN_MICROSECONDS); + if (isElectron()) { + void ClipService.setupOnFileUploadListener(); + ElectronAPIs.registerForegroundEventListener(() => { + syncWithRemote(false, true); + }); + } + }; + main(); + return () => { + clearInterval(syncInterval.current); + if (isElectron()) { + ElectronAPIs.registerForegroundEventListener(() => {}); + ClipService.removeOnFileUploadListener(); + } + }; + }, []); + + useEffectSingleThreaded( + async ([files]: [files: EnteFile[]]) => { + const searchWorker = await ComlinkSearchWorker.getInstance(); + await searchWorker.setFiles(files); + }, + [files], + ); + + useEffect(() => { + if (!user || !files || !collections || !hiddenFiles || !trashedFiles) { + return; + } + setDerivativeState( + user, + collections, + hiddenCollections, + files, + trashedFiles, + hiddenFiles, + ); + }, [ + collections, + hiddenCollections, + files, + hiddenFiles, + trashedFiles, + user, + ]); + + useEffect(() => { + if (!collections || !user) { + return; + } + const userIdToEmailMap = constructUserIDToEmailMap(user, collections); + setUserIDToEmailMap(userIdToEmailMap); + }, [collections]); + + useEffect(() => { + if (!user || !collections) { + return; + } + const emailList = constructEmailList(user, collections, familyData); + setEmailList(emailList); + }, [user, collections, familyData]); + + useEffect(() => { + collectionSelectorAttributes && setCollectionSelectorView(true); + }, [collectionSelectorAttributes]); + + useEffect(() => { + collectionNamerAttributes && setCollectionNamerView(true); + }, [collectionNamerAttributes]); + useEffect(() => { + fixCreationTimeAttributes && setFixCreationTimeView(true); + }, [fixCreationTimeAttributes]); + + useEffect(() => { + if (typeof activeCollectionID === "undefined" || !router.isReady) { + return; + } + let collectionURL = ""; + if (activeCollectionID !== ALL_SECTION) { + collectionURL += "?collection="; + if (activeCollectionID === ARCHIVE_SECTION) { + collectionURL += t("ARCHIVE_SECTION_NAME"); + } else if (activeCollectionID === TRASH_SECTION) { + collectionURL += t("TRASH"); + } else if (activeCollectionID === DUMMY_UNCATEGORIZED_COLLECTION) { + collectionURL += t("UNCATEGORIZED"); + } else if (activeCollectionID === HIDDEN_ITEMS_SECTION) { + collectionURL += t("HIDDEN_ITEMS_SECTION_NAME"); + } else { + collectionURL += activeCollectionID; + } + } + const href = `/gallery${collectionURL}`; + router.push(href, undefined, { shallow: true }); + }, [activeCollectionID, router.isReady]); + + useEffect(() => { + const key = getKey(SESSION_KEYS.ENCRYPTION_KEY); + if (router.isReady && key) { + checkSubscriptionPurchase( + setDialogMessage, + router, + setBlockingLoad, + ); + } + }, [router.isReady]); + + useEffect(() => { + if (isInSearchMode && searchResultSummary) { + setPhotoListHeader({ + height: 104, + item: ( + + ), + itemType: ITEM_TYPE.HEADER, + }); + } + }, [isInSearchMode, searchResultSummary]); + + const activeCollection = useMemo(() => { + if (!collections || !hiddenCollections) { + return null; + } + return [...collections, ...hiddenCollections].find( + (collection) => collection.id === activeCollectionID, + ); + }, [collections, activeCollectionID]); + + const filteredData = useMemoSingleThreaded(async (): Promise< + EnteFile[] + > => { + if ( + !files || + !user || + !trashedFiles || + !hiddenFiles || + !archivedCollections + ) { + return; + } + + if (activeCollectionID === TRASH_SECTION && !isInSearchMode) { + return getUniqueFiles([ + ...trashedFiles, + ...files.filter((file) => tempDeletedFileIds?.has(file.id)), + ]); + } + + const searchWorker = await ComlinkSearchWorker.getInstance(); + + let filteredFiles: EnteFile[] = []; + if (isInSearchMode) { + filteredFiles = getUniqueFiles(await searchWorker.search(search)); + } else { + filteredFiles = getUniqueFiles( + (isInHiddenSection ? hiddenFiles : files).filter((item) => { + if (tempDeletedFileIds?.has(item.id)) { + return false; + } + + if (!isInHiddenSection && tempHiddenFileIds?.has(item.id)) { + return false; + } + + // archived collections files can only be seen in their respective collection + if (archivedCollections.has(item.collectionID)) { + if (activeCollectionID === item.collectionID) { + return true; + } else { + return false; + } + } + + // HIDDEN ITEMS SECTION - show all individual hidden files + if ( + activeCollectionID === HIDDEN_ITEMS_SECTION && + defaultHiddenCollectionIDs.has(item.collectionID) + ) { + return true; + } + + // Archived files can only be seen in archive section or their respective collection + if (isArchivedFile(item)) { + if ( + activeCollectionID === ARCHIVE_SECTION || + activeCollectionID === item.collectionID + ) { + return true; + } else { + return false; + } + } + + // ALL SECTION - show all files + if (activeCollectionID === ALL_SECTION) { + // show all files except the ones in hidden collections + if (hiddenFileIds.has(item.id)) { + return false; + } else { + return true; + } + } + + // COLLECTION SECTION - show files in the active collection + if (activeCollectionID === item.collectionID) { + return true; + } else { + return false; + } + }), + ); + } + if (search?.clip) { + return filteredFiles.sort((a, b) => { + return search.clip.get(b.id) - search.clip.get(a.id); + }); + } + const sortAsc = activeCollection?.pubMagicMetadata?.data?.asc ?? false; + if (sortAsc) { + return sortFiles(filteredFiles, true); + } else { + return filteredFiles; + } + }, [ + files, + trashedFiles, + hiddenFiles, + tempDeletedFileIds, + tempHiddenFileIds, + hiddenFileIds, + search, + activeCollectionID, + archivedCollections, + ]); + + const selectAll = (e: KeyboardEvent) => { + // ignore ctrl/cmd + a if the user is typing in a text field + if ( + e.target instanceof HTMLInputElement || + e.target instanceof HTMLTextAreaElement + ) { + return; + } + // if any of the modals are open, don't select all + if ( + sidebarView || + uploadTypeSelectorView || + collectionSelectorView || + collectionNamerView || + fixCreationTimeView || + planModalView || + exportModalView || + authenticateUserModalView || + isPhotoSwipeOpen || + !filteredData?.length || + !user + ) { + return; + } + e.preventDefault(); + const selected = { + ownCount: 0, + count: 0, + collectionID: activeCollectionID, + }; + + filteredData.forEach((item) => { + if (item.ownerID === user.id) { + selected.ownCount++; + } + selected.count++; + selected[item.id] = true; + }); + setSelected(selected); + }; + + const clearSelection = () => { + if (!selected?.count) { + return; + } + setSelected({ ownCount: 0, count: 0, collectionID: 0 }); + }; + + const keyboardShortcutHandlerRef = useRef({ + selectAll, + clearSelection, + }); + + useEffect(() => { + keyboardShortcutHandlerRef.current = { + selectAll, + clearSelection, + }; + }, [selectAll, clearSelection]); + + const fileToCollectionsMap = useMemoSingleThreaded(() => { + return constructFileToCollectionMap(files); + }, [files]); + + const collectionNameMap = useMemo(() => { + if (!collections || !hiddenCollections) { + return new Map(); + } + return constructCollectionNameMap([ + ...collections, + ...hiddenCollections, + ]); + }, [collections, hiddenCollections]); + + const showSessionExpiredMessage = () => { + setDialogMessage(getSessionExpiredMessage()); + }; + + const syncWithRemote = async (force = false, silent = false) => { + if (syncInProgress.current && !force) { + resync.current = { force, silent }; + return; + } + syncInProgress.current = true; + try { + checkConnectivity(); + const token = getToken(); + if (!token) { + return; + } + const tokenValid = await isTokenValid(token); + if (!tokenValid) { + throw new Error(CustomError.SESSION_EXPIRED); + } + !silent && startLoading(); + const collections = await getAllLatestCollections(); + const { normalCollections, hiddenCollections } = + await splitNormalAndHiddenCollections(collections); + setCollections(normalCollections); + setHiddenCollections(hiddenCollections); + await syncFiles("normal", normalCollections, setFiles); + await syncFiles("hidden", hiddenCollections, setHiddenFiles); + await syncTrash(collections, setTrashedFiles); + await syncEntities(); + await syncMapEnabled(); + await syncEmbeddings(); + if (ClipService.isPlatformSupported()) { + void ClipService.scheduleImageEmbeddingExtraction(); + } + } catch (e) { + switch (e.message) { + case CustomError.SESSION_EXPIRED: + showSessionExpiredMessage(); + break; + case CustomError.KEY_MISSING: + clearKeys(); + router.push(PAGES.CREDENTIALS); + break; + case CustomError.NO_INTERNET_CONNECTION: + break; + default: + logError(e, "syncWithRemote failed"); + } + } finally { + setTempDeletedFileIds(new Set()); + setTempHiddenFileIds(new Set()); + !silent && finishLoading(); + } + syncInProgress.current = false; + if (resync.current) { + const { force, silent } = resync.current; + setTimeout(() => syncWithRemote(force, silent), 0); + resync.current = null; + } + }; + + const setupSelectAllKeyBoardShortcutHandler = () => { + const handleKeyUp = (e: KeyboardEvent) => { + switch (e.key) { + case "Escape": + keyboardShortcutHandlerRef.current.clearSelection(); + break; + case "a": + if (e.ctrlKey || e.metaKey) { + keyboardShortcutHandlerRef.current.selectAll(e); + } + break; + } + }; + document.addEventListener("keydown", handleKeyUp); + return () => { + document.removeEventListener("keydown", handleKeyUp); + }; + }; + + const setDerivativeState = async ( + user: User, + collections: Collection[], + hiddenCollections: Collection[], + files: EnteFile[], + trashedFiles: EnteFile[], + hiddenFiles: EnteFile[], + ) => { + const favItemIds = await getFavItemIds(files); + setFavItemIds(favItemIds); + const archivedCollections = getArchivedCollections(collections); + setArchivedCollections(archivedCollections); + const defaultHiddenCollectionIDs = + getDefaultHiddenCollectionIDs(hiddenCollections); + setDefaultHiddenCollectionIDs(defaultHiddenCollectionIDs); + const hiddenFileIds = new Set(hiddenFiles.map((f) => f.id)); + setHiddenFileIds(hiddenFileIds); + const collectionSummaries = getCollectionSummaries( + user, + collections, + files, + ); + const sectionSummaries = getSectionSummaries( + files, + trashedFiles, + archivedCollections, + ); + const hiddenCollectionSummaries = getCollectionSummaries( + user, + hiddenCollections, + hiddenFiles, + ); + const hiddenItemsSummaries = getHiddenItemsSummary( + hiddenFiles, + hiddenCollections, + ); + hiddenCollectionSummaries.set( + HIDDEN_ITEMS_SECTION, + hiddenItemsSummaries, + ); + setCollectionSummaries( + mergeMaps(collectionSummaries, sectionSummaries), + ); + setHiddenCollectionSummaries(hiddenCollectionSummaries); + }; + + if (!collectionSummaries || !filteredData) { + return
; + } + + const setFilesDownloadProgressAttributesCreator: SetFilesDownloadProgressAttributesCreator = + (folderName, collectionID, isHidden) => { + const id = filesDownloadProgressAttributesList?.length ?? 0; + const updater: SetFilesDownloadProgressAttributes = (value) => { + setFilesDownloadProgressAttributesList((prev) => { + const attributes = prev?.find((attr) => attr.id === id); + const updatedAttributes = + typeof value === "function" + ? value(attributes) + : { ...attributes, ...value }; + const updatedAttributesList = attributes + ? prev.map((attr) => + attr.id === id ? updatedAttributes : attr, + ) + : [...prev, updatedAttributes]; + + return updatedAttributesList; + }); + }; + updater({ + id, + folderName, + collectionID, + isHidden, + canceller: null, + total: 0, + success: 0, + failed: 0, + downloadDirPath: null, + }); + return updater; + }; + + const collectionOpsHelper = + (ops: COLLECTION_OPS_TYPE) => async (collection: Collection) => { + startLoading(); + try { + setCollectionSelectorView(false); + const selectedFiles = getSelectedFiles(selected, filteredData); + const toProcessFiles = + ops === COLLECTION_OPS_TYPE.REMOVE + ? selectedFiles + : selectedFiles.filter( + (file) => file.ownerID === user.id, + ); + if (toProcessFiles.length > 0) { + await handleCollectionOps( + ops, + collection, + toProcessFiles, + selected.collectionID, + ); + } + if (selected?.ownCount === filteredData?.length) { + if ( + ops === COLLECTION_OPS_TYPE.REMOVE || + ops === COLLECTION_OPS_TYPE.RESTORE || + ops === COLLECTION_OPS_TYPE.MOVE + ) { + // redirect to all section when no items are left in the current collection. + setActiveCollectionID(ALL_SECTION); + } else if (ops === COLLECTION_OPS_TYPE.UNHIDE) { + exitHiddenSection(); + } + } + clearSelection(); + await syncWithRemote(false, true); + } catch (e) { + logError(e, "collection ops failed", { ops }); + setDialogMessage({ + title: t("ERROR"), + + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + } finally { + finishLoading(); + } + }; + + const fileOpsHelper = (ops: FILE_OPS_TYPE) => async () => { + startLoading(); + try { + // passing files here instead of filteredData for hide ops because we want to move all files copies to hidden collection + const selectedFiles = getSelectedFiles( + selected, + ops === FILE_OPS_TYPE.HIDE ? files : filteredData, + ); + const toProcessFiles = + ops === FILE_OPS_TYPE.DOWNLOAD + ? selectedFiles + : selectedFiles.filter((file) => file.ownerID === user.id); + if (toProcessFiles.length > 0) { + await handleFileOps( + ops, + toProcessFiles, + setTempDeletedFileIds, + setTempHiddenFileIds, + setFixCreationTimeAttributes, + setFilesDownloadProgressAttributesCreator, + ); + } + if ( + selected?.ownCount === filteredData?.length && + ops !== FILE_OPS_TYPE.ARCHIVE && + ops !== FILE_OPS_TYPE.DOWNLOAD && + ops !== FILE_OPS_TYPE.FIX_TIME + ) { + setActiveCollectionID(ALL_SECTION); + } + clearSelection(); + await syncWithRemote(false, true); + } catch (e) { + logError(e, "file ops failed", { ops }); + setDialogMessage({ + title: t("ERROR"), + + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + } finally { + finishLoading(); + } + }; + + const showCreateCollectionModal = (ops: COLLECTION_OPS_TYPE) => { + const callback = async (collectionName: string) => { + try { + startLoading(); + const collection = await createAlbum(collectionName); + await collectionOpsHelper(ops)(collection); + } catch (e) { + logError(e, "create and collection ops failed", { ops }); + setDialogMessage({ + title: t("ERROR"), + + close: { variant: "critical" }, + content: t("UNKNOWN_ERROR"), + }); + } finally { + finishLoading(); + } + }; + return () => + setCollectionNamerAttributes({ + title: t("CREATE_COLLECTION"), + buttonText: t("CREATE"), + autoFilledName: "", + callback, + }); + }; + + const updateSearch: UpdateSearch = (newSearch, summary) => { + if (newSearch?.collection) { + setActiveCollectionID(newSearch?.collection); + } else { + setSearch(newSearch); + } + setIsClipSearchResult(!!newSearch?.clip); + if (!newSearch?.collection) { + setIsInSearchMode(!!newSearch); + setSetSearchResultSummary(summary); + } else { + setIsInSearchMode(false); + } + }; + + const openUploader = (intent = UploadTypeSelectorIntent.normalUpload) => { + if (!uploadManager.shouldAllowNewUpload()) { + return; + } + setUploadTypeSelectorView(true); + setUploadTypeSelectorIntent(intent); + }; + + const closeCollectionSelector = () => { + setCollectionSelectorView(false); + }; + + const openExportModal = () => { + setExportModalView(true); + }; + + const closeExportModal = () => { + setExportModalView(false); + }; + + const exitHiddenSection = () => { + setIsInHiddenSection(false); + setActiveCollectionID(ALL_SECTION); + }; + + return ( + + + + {blockingLoad && ( + + + + )} + {isFirstLoad && ( + + + {t("INITIAL_LOAD_DELAY_WARNING")} + + + )} + setPlanModalView(false)} + setLoading={setBlockingLoad} + /> + + + + setFixCreationTimeView(false)} + show={() => setFixCreationTimeView(true)} + attributes={fixCreationTimeAttributes} + /> + + + + + + + {!isInSearchMode && + !isFirstLoad && + !files?.length && + !hiddenFiles?.length && + activeCollectionID === ALL_SECTION ? ( + + ) : ( + + )} + {selected.count > 0 && + selected.collectionID === activeCollectionID && ( + + )} + + + + + ); +} diff --git a/web/apps/photos/src/pages/generate/index.tsx b/web/apps/photos/src/pages/generate/index.tsx new file mode 100644 index 000000000..79a9007ef --- /dev/null +++ b/web/apps/photos/src/pages/generate/index.tsx @@ -0,0 +1,17 @@ +import GeneratePage from "@ente/accounts/pages/generate"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Generate() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/index.tsx b/web/apps/photos/src/pages/index.tsx new file mode 100644 index 000000000..9aa3500ec --- /dev/null +++ b/web/apps/photos/src/pages/index.tsx @@ -0,0 +1,266 @@ +import Login from "@ente/accounts/components/Login"; +import SignUp from "@ente/accounts/components/SignUp"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { getData, LS_KEYS } from "@ente/shared/storage/localStorage"; +import { Button, styled, Typography, TypographyProps } from "@mui/material"; +import { t } from "i18next"; +import { useRouter } from "next/router"; +import { useContext, useEffect, useState } from "react"; +import Carousel from "react-bootstrap/Carousel"; +import { AppContext } from "./_app"; + +import { APPS } from "@ente/shared/apps/constants"; +import { EnteLogo } from "@ente/shared/components/EnteLogo"; +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import { saveKeyInSessionStore } from "@ente/shared/crypto/helpers"; +import ElectronAPIs from "@ente/shared/electron"; +import { getAlbumsURL } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import localForage from "@ente/shared/storage/localForage"; +import { getKey, SESSION_KEYS } from "@ente/shared/storage/sessionStorage"; +import isElectron from "is-electron"; +import { Trans } from "react-i18next"; + +const Container = styled("div")` + display: flex; + flex: 1; + align-items: center; + justify-content: center; + background-color: #000; + + @media (max-width: 1024px) { + flex-direction: column; + } +`; + +const SlideContainer = styled("div")` + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + + @media (max-width: 1024px) { + flex-grow: 0; + } +`; + +const DesktopBox = styled("div")` + flex: 1; + height: 100%; + padding: 10px; + display: flex; + align-items: center; + justify-content: center; + background-color: #242424; + + @media (max-width: 1024px) { + display: none; + } +`; + +const MobileBox = styled("div")` + display: none; + + @media (max-width: 1024px) { + max-width: 375px; + width: 100%; + padding: 12px; + display: flex; + flex-direction: column; + gap: 8px; + } +`; + +const SideBox = styled("div")` + display: flex; + flex-direction: column; + min-width: 320px; +`; + +const TextContainer = (props: TypographyProps) => ( + +); + +const FeatureText = (props: TypographyProps) => ( + +); + +const Img = styled("img")` + height: 250px; + object-fit: contain; + + @media (max-width: 400px) { + height: 180px; + } +`; + +export default function LandingPage() { + const router = useRouter(); + const appContext = useContext(AppContext); + const [loading, setLoading] = useState(true); + const [showLogin, setShowLogin] = useState(true); + + useEffect(() => { + appContext.showNavBar(false); + const currentURL = new URL(window.location.href); + const albumsURL = new URL(getAlbumsURL()); + currentURL.pathname = router.pathname; + if ( + currentURL.host === albumsURL.host && + currentURL.pathname !== PAGES.SHARED_ALBUMS + ) { + handleAlbumsRedirect(currentURL); + } else { + handleNormalRedirect(); + } + }, []); + + const handleAlbumsRedirect = async (currentURL: URL) => { + const end = currentURL.hash.lastIndexOf("&"); + const hash = currentURL.hash.slice(1, end !== -1 ? end : undefined); + await router.replace({ + pathname: PAGES.SHARED_ALBUMS, + search: currentURL.search, + hash: hash, + }); + await initLocalForage(); + }; + + const handleNormalRedirect = async () => { + const user = getData(LS_KEYS.USER); + let key = getKey(SESSION_KEYS.ENCRYPTION_KEY); + if (!key && isElectron()) { + try { + key = await ElectronAPIs.getEncryptionKey(); + } catch (e) { + logError(e, "getEncryptionKey failed"); + } + if (key) { + await saveKeyInSessionStore( + SESSION_KEYS.ENCRYPTION_KEY, + key, + true, + ); + } + } + if (key) { + // if (appName === APPS.AUTH) { + // await router.push(PAGES.AUTH); + // } else { + await router.push(PAGES.GALLERY); + // } + } else if (user?.email) { + await router.push(PAGES.VERIFY); + } else { + // if (appName === APPS.AUTH) { + // await router.push(PAGES.LOGIN); + // } + } + await initLocalForage(); + setLoading(false); + }; + + const initLocalForage = async () => { + try { + await localForage.ready(); + } catch (e) { + logError(e, "usage in incognito mode tried"); + appContext.setDialogMessage({ + title: t("LOCAL_STORAGE_NOT_ACCESSIBLE"), + + nonClosable: true, + content: t("LOCAL_STORAGE_NOT_ACCESSIBLE_MESSAGE"), + }); + } finally { + setLoading(false); + } + }; + + const signUp = () => setShowLogin(false); + const login = () => setShowLogin(true); + + const redirectToSignupPage = () => router.push(PAGES.SIGNUP); + const redirectToLoginPage = () => router.push(PAGES.LOGIN); + + return ( + + {loading ? ( + + ) : ( + <> + + + + + + + + + + {t("HERO_SLIDE_1")} + + + + + + + + + {t("HERO_SLIDE_2")} + + + + + + + + + {t("HERO_SLIDE_3")} + + + + + + + + + + + {showLogin ? ( + + ) : ( + + )} + + + + )} + + ); +} diff --git a/web/apps/photos/src/pages/login/index.tsx b/web/apps/photos/src/pages/login/index.tsx new file mode 100644 index 000000000..8709af06c --- /dev/null +++ b/web/apps/photos/src/pages/login/index.tsx @@ -0,0 +1,17 @@ +import LoginPage from "@ente/accounts/pages/login"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Login() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/passkeys/finish/index.tsx b/web/apps/photos/src/pages/passkeys/finish/index.tsx new file mode 100644 index 000000000..289f351de --- /dev/null +++ b/web/apps/photos/src/pages/passkeys/finish/index.tsx @@ -0,0 +1,11 @@ +import PasskeysFinishPage from "@ente/accounts/pages/passkeys/finish"; + +const PasskeysFinish = () => { + return ( + <> + + + ); +}; + +export default PasskeysFinish; diff --git a/web/apps/photos/src/pages/recover/index.tsx b/web/apps/photos/src/pages/recover/index.tsx new file mode 100644 index 000000000..b3e16175f --- /dev/null +++ b/web/apps/photos/src/pages/recover/index.tsx @@ -0,0 +1,17 @@ +import RecoverPage from "@ente/accounts/pages/recover"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Recover() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/shared-albums/index.tsx b/web/apps/photos/src/pages/shared-albums/index.tsx new file mode 100644 index 000000000..5056f77eb --- /dev/null +++ b/web/apps/photos/src/pages/shared-albums/index.tsx @@ -0,0 +1,611 @@ +import { + CenteredFlex, + SpaceBetweenFlex, + VerticallyCentered, +} from "@ente/shared/components/Container"; +import { CustomError, parseSharingErrorCodes } from "@ente/shared/error"; +import PhotoFrame from "components/PhotoFrame"; +import { ALL_SECTION } from "constants/collection"; +import { t } from "i18next"; +import { AppContext } from "pages/_app"; +import { useContext, useEffect, useMemo, useRef, useState } from "react"; +import { + getLocalPublicCollection, + getLocalPublicCollectionPassword, + getLocalPublicFiles, + getPublicCollection, + getPublicCollectionUID, + getReferralCode, + removePublicCollectionWithFiles, + removePublicFiles, + savePublicCollectionPassword, + syncPublicFiles, + verifyPublicCollectionPassword, +} from "services/publicCollectionService"; +import { Collection } from "types/collection"; +import { EnteFile } from "types/file"; +import { + downloadSelectedFiles, + getSelectedFiles, + mergeMetadata, + sortFiles, +} from "utils/file"; +import { PublicCollectionGalleryContext } from "utils/publicCollectionGallery"; + +import { logoutUser } from "@ente/accounts/services/user"; +import { APPS } from "@ente/shared/apps/constants"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import OverflowMenu from "@ente/shared/components/OverflowMenu/menu"; +import { OverflowMenuOption } from "@ente/shared/components/OverflowMenu/option"; +import SingleInputForm, { + SingleInputFormProps, +} from "@ente/shared/components/SingleInputForm"; +import { PHOTOS_PAGES as PAGES } from "@ente/shared/constants/pages"; +import { ENTE_WEBSITE_LINK } from "@ente/shared/constants/urls"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import useFileInput from "@ente/shared/hooks/useFileInput"; +import { logError } from "@ente/shared/sentry"; +import AddPhotoAlternateOutlined from "@mui/icons-material/AddPhotoAlternateOutlined"; +import FileDownloadOutlinedIcon from "@mui/icons-material/FileDownloadOutlined"; +import MoreHoriz from "@mui/icons-material/MoreHoriz"; +import Typography from "@mui/material/Typography"; +import bs58 from "bs58"; +import { CollectionInfo } from "components/Collections/CollectionInfo"; +import { CollectionInfoBarWrapper } from "components/Collections/styledComponents"; +import { + FilesDownloadProgress, + FilesDownloadProgressAttributes, +} from "components/FilesDownloadProgress"; +import FullScreenDropZone from "components/FullScreenDropZone"; +import { LoadingOverlay } from "components/LoadingOverlay"; +import { ITEM_TYPE, TimeStampListItem } from "components/PhotoList"; +import UploadButton from "components/Upload/UploadButton"; +import Uploader from "components/Upload/Uploader"; +import UploadSelectorInputs from "components/UploadSelectorInputs"; +import SharedAlbumNavbar from "components/pages/sharedAlbum/Navbar"; +import SelectedFileOptions from "components/pages/sharedAlbum/SelectedFileOptions"; +import { useRouter } from "next/router"; +import { useDropzone } from "react-dropzone"; +import downloadManager from "services/download"; +import { + SelectedState, + SetFilesDownloadProgressAttributes, + SetFilesDownloadProgressAttributesCreator, + UploadTypeSelectorIntent, +} from "types/gallery"; +import { downloadCollectionFiles, isHiddenCollection } from "utils/collection"; + +export default function PublicCollectionGallery() { + const token = useRef(null); + // passwordJWTToken refers to the jwt token which is used for album protected by password. + const passwordJWTToken = useRef(null); + const collectionKey = useRef(null); + const url = useRef(null); + const referralCode = useRef(""); + const [publicFiles, setPublicFiles] = useState(null); + const [publicCollection, setPublicCollection] = useState(null); + const [errorMessage, setErrorMessage] = useState(null); + const appContext = useContext(AppContext); + const [loading, setLoading] = useState(true); + const router = useRouter(); + const [isPasswordProtected, setIsPasswordProtected] = + useState(false); + + const [photoListHeader, setPhotoListHeader] = + useState(null); + + const [photoListFooter, setPhotoListFooter] = + useState(null); + + const [uploadTypeSelectorView, setUploadTypeSelectorView] = useState(false); + const [blockingLoad, setBlockingLoad] = useState(false); + const [shouldDisableDropzone, setShouldDisableDropzone] = useState(false); + const [selected, setSelected] = useState({ + ownCount: 0, + count: 0, + collectionID: 0, + }); + + const { + getRootProps: getDragAndDropRootProps, + getInputProps: getDragAndDropInputProps, + acceptedFiles: dragAndDropFiles, + } = useDropzone({ + noClick: true, + noKeyboard: true, + disabled: shouldDisableDropzone, + }); + const { + selectedFiles: webFileSelectorFiles, + open: openFileSelector, + getInputProps: getFileSelectorInputProps, + } = useFileInput({ + directory: false, + }); + const { + selectedFiles: webFolderSelectorFiles, + open: openFolderSelector, + getInputProps: getFolderSelectorInputProps, + } = useFileInput({ + directory: true, + }); + + const [ + filesDownloadProgressAttributesList, + setFilesDownloadProgressAttributesList, + ] = useState([]); + + const setFilesDownloadProgressAttributesCreator: SetFilesDownloadProgressAttributesCreator = + (folderName, collectionID, isHidden) => { + const id = filesDownloadProgressAttributesList?.length ?? 0; + const updater: SetFilesDownloadProgressAttributes = (value) => { + setFilesDownloadProgressAttributesList((prev) => { + const attributes = prev?.find((attr) => attr.id === id); + const updatedAttributes = + typeof value === "function" + ? value(attributes) + : { ...attributes, ...value }; + const updatedAttributesList = attributes + ? prev.map((attr) => + attr.id === id ? updatedAttributes : attr, + ) + : [...prev, updatedAttributes]; + + return updatedAttributesList; + }); + }; + updater({ + id, + folderName, + collectionID, + isHidden, + canceller: null, + total: 0, + success: 0, + failed: 0, + downloadDirPath: null, + }); + return updater; + }; + + const openUploader = () => { + setUploadTypeSelectorView(true); + }; + + const closeUploadTypeSelectorView = () => { + setUploadTypeSelectorView(false); + }; + + const showPublicLinkExpiredMessage = () => + appContext.setDialogMessage({ + title: t("LINK_EXPIRED"), + content: t("LINK_EXPIRED_MESSAGE"), + + nonClosable: true, + proceed: { + text: t("LOGIN"), + action: logoutUser, + variant: "accent", + }, + }); + + useEffect(() => { + const currentURL = new URL(window.location.href); + if (currentURL.pathname !== PAGES.ROOT) { + router.replace( + { + pathname: PAGES.SHARED_ALBUMS, + search: currentURL.search, + hash: currentURL.hash, + }, + { + pathname: PAGES.ROOT, + search: currentURL.search, + hash: currentURL.hash, + }, + { + shallow: true, + }, + ); + } + const main = async () => { + let redirectingToWebsite = false; + try { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + await downloadManager.init(APPS.ALBUMS); + + url.current = window.location.href; + const currentURL = new URL(url.current); + const t = currentURL.searchParams.get("t"); + const ck = currentURL.hash.slice(1); + if (!t && !ck) { + window.location.href = ENTE_WEBSITE_LINK; + redirectingToWebsite = true; + } + if (!t || !ck) { + return; + } + const dck = + ck.length < 50 + ? await cryptoWorker.toB64(bs58.decode(ck)) + : await cryptoWorker.fromHex(ck); + token.current = t; + downloadManager.updateToken(token.current); + collectionKey.current = dck; + url.current = window.location.href; + const localCollection = await getLocalPublicCollection( + collectionKey.current, + ); + if (localCollection) { + referralCode.current = await getReferralCode(); + const sortAsc: boolean = + localCollection?.pubMagicMetadata?.data.asc ?? false; + setPublicCollection(localCollection); + const isPasswordProtected = + localCollection?.publicURLs?.[0]?.passwordEnabled; + setIsPasswordProtected(isPasswordProtected); + const collectionUID = getPublicCollectionUID(token.current); + const localFiles = await getLocalPublicFiles(collectionUID); + const localPublicFiles = sortFiles( + mergeMetadata(localFiles), + sortAsc, + ); + setPublicFiles(localPublicFiles); + passwordJWTToken.current = + await getLocalPublicCollectionPassword(collectionUID); + downloadManager.updateToken( + token.current, + passwordJWTToken.current, + ); + } + await syncWithRemote(); + } finally { + if (!redirectingToWebsite) { + setLoading(false); + } + } + }; + main(); + }, []); + + const downloadEnabled = useMemo( + () => publicCollection?.publicURLs?.[0]?.enableDownload ?? true, + [publicCollection], + ); + + const downloadAllFiles = async () => { + try { + if (!downloadEnabled) { + return; + } + const setFilesDownloadProgressAttributes = + setFilesDownloadProgressAttributesCreator( + publicCollection.name, + publicCollection.id, + isHiddenCollection(publicCollection), + ); + await downloadCollectionFiles( + publicCollection.name, + publicFiles, + setFilesDownloadProgressAttributes, + ); + } catch (e) { + logError(e, "failed to downloads shared album all files"); + } + }; + + useEffect(() => { + publicCollection && + publicFiles && + setPhotoListHeader({ + item: ( + + + + {downloadEnabled ? ( + } + > + } + onClick={downloadAllFiles} + > + {t("DOWNLOAD_COLLECTION")} + + + ) : ( +
+ )} + + + ), + itemType: ITEM_TYPE.HEADER, + height: 68, + }); + }, [publicCollection, publicFiles]); + + useEffect(() => { + if (publicCollection?.publicURLs?.[0]?.enableCollect) { + setPhotoListFooter({ + item: ( + + } + /> + + ), + itemType: ITEM_TYPE.FOOTER, + height: 104, + }); + } else { + setPhotoListFooter(null); + } + }, [publicCollection]); + + const syncWithRemote = async () => { + const collectionUID = getPublicCollectionUID(token.current); + try { + appContext.startLoading(); + setLoading(true); + const [collection, userReferralCode] = await getPublicCollection( + token.current, + collectionKey.current, + ); + referralCode.current = userReferralCode; + + setPublicCollection(collection); + const isPasswordProtected = + collection?.publicURLs?.[0]?.passwordEnabled; + setIsPasswordProtected(isPasswordProtected); + setErrorMessage(null); + + // remove outdated password, sharer has disabled the password + if (!isPasswordProtected && passwordJWTToken.current) { + passwordJWTToken.current = null; + savePublicCollectionPassword(collectionUID, null); + } + if ( + !isPasswordProtected || + (isPasswordProtected && passwordJWTToken.current) + ) { + try { + await syncPublicFiles( + token.current, + passwordJWTToken.current, + collection, + setPublicFiles, + ); + } catch (e) { + const parsedError = parseSharingErrorCodes(e); + if (parsedError.message === CustomError.TOKEN_EXPIRED) { + // passwordToken has expired, sharer has changed the password, + // so,clearing local cache token value to prompt user to re-enter password + passwordJWTToken.current = null; + } + } + } + if (isPasswordProtected && !passwordJWTToken.current) { + await removePublicFiles(collectionUID); + } + } catch (e) { + const parsedError = parseSharingErrorCodes(e); + if ( + parsedError.message === CustomError.TOKEN_EXPIRED || + parsedError.message === CustomError.TOO_MANY_REQUESTS + ) { + setErrorMessage( + parsedError.message === CustomError.TOO_MANY_REQUESTS + ? t("LINK_TOO_MANY_REQUESTS") + : t("LINK_EXPIRED_MESSAGE"), + ); + // share has been disabled + // local cache should be cleared + removePublicCollectionWithFiles( + collectionUID, + collectionKey.current, + ); + setPublicCollection(null); + setPublicFiles(null); + } else { + logError(e, "failed to sync public album with remote"); + } + } finally { + appContext.finishLoading(); + setLoading(false); + } + }; + + const verifyLinkPassword: SingleInputFormProps["callback"] = async ( + password, + setFieldError, + ) => { + try { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + let hashedPassword: string = null; + try { + const publicUrl = publicCollection.publicURLs[0]; + hashedPassword = await cryptoWorker.deriveKey( + password, + publicUrl.nonce, + publicUrl.opsLimit, + publicUrl.memLimit, + ); + } catch (e) { + logError(e, "failed to derive key for verifyLinkPassword"); + setFieldError(`${t("UNKNOWN_ERROR")} ${e.message}`); + return; + } + const collectionUID = getPublicCollectionUID(token.current); + try { + const jwtToken = await verifyPublicCollectionPassword( + token.current, + hashedPassword, + ); + passwordJWTToken.current = jwtToken; + downloadManager.updateToken( + token.current, + passwordJWTToken.current, + ); + await savePublicCollectionPassword(collectionUID, jwtToken); + } catch (e) { + const parsedError = parseSharingErrorCodes(e); + if (parsedError.message === CustomError.TOKEN_EXPIRED) { + setFieldError(t("INCORRECT_PASSPHRASE")); + return; + } + throw e; + } + await syncWithRemote(); + appContext.finishLoading(); + } catch (e) { + logError(e, "failed to verifyLinkPassword"); + setFieldError(`${t("UNKNOWN_ERROR")} ${e.message}`); + } + }; + + if (loading) { + if (!publicFiles) { + return ( + + + + ); + } + } else { + if (errorMessage) { + return {errorMessage}; + } + if (isPasswordProtected && !passwordJWTToken.current) { + return ( + + + {t("PASSWORD")} + + {t("LINK_PASSWORD")} + + + + + ); + } + if (!publicFiles) { + return {t("NOT_FOUND")}; + } + } + + const clearSelection = () => { + if (!selected?.count) { + return; + } + setSelected({ ownCount: 0, count: 0, collectionID: 0 }); + }; + + const downloadFilesHelper = async () => { + try { + const selectedFiles = getSelectedFiles(selected, publicFiles); + const setFilesDownloadProgressAttributes = + setFilesDownloadProgressAttributesCreator( + `${selectedFiles.length} ${t("FILES")}`, + ); + await downloadSelectedFiles( + selectedFiles, + setFilesDownloadProgressAttributes, + ); + clearSelection(); + } catch (e) { + logError(e, "failed to download selected files"); + } + }; + + return ( + + + + + + {blockingLoad && ( + + + + )} + + + {selected.count > 0 && ( + + )} + + + ); +} diff --git a/web/apps/photos/src/pages/signup/index.tsx b/web/apps/photos/src/pages/signup/index.tsx new file mode 100644 index 000000000..7c0409a02 --- /dev/null +++ b/web/apps/photos/src/pages/signup/index.tsx @@ -0,0 +1,17 @@ +import SignupPage from "@ente/accounts/pages/signup"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Sigup() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/two-factor/recover/index.tsx b/web/apps/photos/src/pages/two-factor/recover/index.tsx new file mode 100644 index 000000000..dcfb6fc15 --- /dev/null +++ b/web/apps/photos/src/pages/two-factor/recover/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorRecoverPage from "@ente/accounts/pages/two-factor/recover"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorRecover() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/two-factor/setup/index.tsx b/web/apps/photos/src/pages/two-factor/setup/index.tsx new file mode 100644 index 000000000..b357018ee --- /dev/null +++ b/web/apps/photos/src/pages/two-factor/setup/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorSetupPage from "@ente/accounts/pages/two-factor/setup"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorSetup() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/two-factor/verify/index.tsx b/web/apps/photos/src/pages/two-factor/verify/index.tsx new file mode 100644 index 000000000..a61852821 --- /dev/null +++ b/web/apps/photos/src/pages/two-factor/verify/index.tsx @@ -0,0 +1,17 @@ +import TwoFactorVerifyPage from "@ente/accounts/pages/two-factor/verify"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function TwoFactorVerify() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/pages/verify/index.tsx b/web/apps/photos/src/pages/verify/index.tsx new file mode 100644 index 000000000..9eeb6db60 --- /dev/null +++ b/web/apps/photos/src/pages/verify/index.tsx @@ -0,0 +1,17 @@ +import VerifyPage from "@ente/accounts/pages/verify"; +import { APPS } from "@ente/shared/apps/constants"; +import { useRouter } from "next/router"; +import { AppContext } from "pages/_app"; +import { useContext } from "react"; + +export default function Verify() { + const appContext = useContext(AppContext); + const router = useRouter(); + return ( + + ); +} diff --git a/web/apps/photos/src/services/billingService.ts b/web/apps/photos/src/services/billingService.ts new file mode 100644 index 000000000..a9af851b2 --- /dev/null +++ b/web/apps/photos/src/services/billingService.ts @@ -0,0 +1,211 @@ +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint, getPaymentsURL } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { + LS_KEYS, + removeData, + setData, +} from "@ente/shared/storage/localStorage"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { getDesktopRedirectURL } from "constants/billing"; +import isElectron from "is-electron"; +import { Plan, Subscription } from "types/billing"; +import { getPaymentToken } from "./userService"; + +const ENDPOINT = getEndpoint(); + +enum PaymentActionType { + Buy = "buy", + Update = "update", +} + +class billingService { + public async getPlans(): Promise { + const token = getToken(); + try { + let response; + if (!token) { + response = await HTTPService.get( + `${ENDPOINT}/billing/plans/v2`, + ); + } else { + response = await HTTPService.get( + `${ENDPOINT}/billing/user-plans`, + null, + { + "X-Auth-Token": getToken(), + }, + ); + } + const { plans } = response.data; + return plans; + } catch (e) { + logError(e, "failed to get plans"); + } + } + + public async syncSubscription() { + try { + const response = await HTTPService.get( + `${ENDPOINT}/billing/subscription`, + null, + { + "X-Auth-Token": getToken(), + }, + ); + const { subscription } = response.data; + setData(LS_KEYS.SUBSCRIPTION, subscription); + } catch (e) { + logError(e, "failed to get user's subscription details"); + } + } + + public async buySubscription(productID: string) { + try { + const paymentToken = await getPaymentToken(); + await this.redirectToPayments( + paymentToken, + productID, + PaymentActionType.Buy, + ); + } catch (e) { + logError(e, "unable to buy subscription"); + throw e; + } + } + + public async updateSubscription(productID: string) { + try { + const paymentToken = await getPaymentToken(); + await this.redirectToPayments( + paymentToken, + productID, + PaymentActionType.Update, + ); + } catch (e) { + logError(e, "subscription update failed"); + throw e; + } + } + + public async cancelSubscription() { + try { + const response = await HTTPService.post( + `${ENDPOINT}/billing/stripe/cancel-subscription`, + null, + null, + { + "X-Auth-Token": getToken(), + }, + ); + const { subscription } = response.data; + setData(LS_KEYS.SUBSCRIPTION, subscription); + } catch (e) { + logError(e, "subscription cancel failed"); + throw e; + } + } + + public async activateSubscription() { + try { + const response = await HTTPService.post( + `${ENDPOINT}/billing/stripe/activate-subscription`, + null, + null, + { + "X-Auth-Token": getToken(), + }, + ); + const { subscription } = response.data; + setData(LS_KEYS.SUBSCRIPTION, subscription); + } catch (e) { + logError(e, "failed to activate subscription"); + throw e; + } + } + + public async verifySubscription( + sessionID: string = null, + ): Promise { + try { + const token = getToken(); + if (!token) { + return; + } + const response = await HTTPService.post( + `${ENDPOINT}/billing/verify-subscription`, + { + paymentProvider: "stripe", + productID: null, + verificationData: sessionID, + }, + null, + { + "X-Auth-Token": token, + }, + ); + const { subscription } = response.data; + setData(LS_KEYS.SUBSCRIPTION, subscription); + return subscription; + } catch (err) { + logError(err, "Error while verifying subscription"); + throw err; + } + } + + public async leaveFamily() { + if (!getToken()) { + return; + } + try { + await HTTPService.delete(`${ENDPOINT}/family/leave`, null, null, { + "X-Auth-Token": getToken(), + }); + removeData(LS_KEYS.FAMILY_DATA); + } catch (e) { + logError(e, "/family/leave failed"); + throw e; + } + } + + public async redirectToPayments( + paymentToken: string, + productID: string, + action: string, + ) { + try { + const redirectURL = this.getRedirectURL(); + window.location.href = `${getPaymentsURL()}?productID=${productID}&paymentToken=${paymentToken}&action=${action}&redirectURL=${redirectURL}`; + } catch (e) { + logError(e, "unable to get payments url"); + throw e; + } + } + + public async redirectToCustomerPortal() { + try { + const redirectURL = this.getRedirectURL(); + const response = await HTTPService.get( + `${ENDPOINT}/billing/stripe/customer-portal`, + { redirectURL }, + { + "X-Auth-Token": getToken(), + }, + ); + window.location.href = response.data.url; + } catch (e) { + logError(e, "unable to get customer portal url"); + throw e; + } + } + + public getRedirectURL() { + if (isElectron()) { + return getDesktopRedirectURL(); + } else { + return `${window.location.origin}/gallery`; + } + } +} + +export default new billingService(); diff --git a/web/apps/photos/src/services/clipService.ts b/web/apps/photos/src/services/clipService.ts new file mode 100644 index 000000000..71cc17131 --- /dev/null +++ b/web/apps/photos/src/services/clipService.ts @@ -0,0 +1,430 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import ElectronAPIs from "@ente/shared/electron"; +import { CustomError } from "@ente/shared/error"; +import { Events, eventBus } from "@ente/shared/events"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { FILE_TYPE } from "constants/file"; +import isElectron from "is-electron"; +import PQueue from "p-queue"; +import { Embedding, Model } from "types/embedding"; +import { EnteFile } from "types/file"; +import { getPersonalFiles } from "utils/file"; +import downloadManager from "./download"; +import { getLocalEmbeddings, putEmbedding } from "./embeddingService"; +import { getAllLocalFiles, getLocalFiles } from "./fileService"; + +const CLIP_EMBEDDING_LENGTH = 512; + +export interface ClipExtractionStatus { + pending: number; + indexed: number; +} + +class ClipServiceImpl { + private embeddingExtractionInProgress: AbortController | null = null; + private reRunNeeded = false; + private clipExtractionStatus: ClipExtractionStatus = { + pending: 0, + indexed: 0, + }; + private onUpdateHandler: ((status: ClipExtractionStatus) => void) | null = + null; + private liveEmbeddingExtractionQueue: PQueue; + private onFileUploadedHandler: + | ((arg: { enteFile: EnteFile; localFile: globalThis.File }) => void) + | null = null; + private unsupportedPlatform = false; + + constructor() { + this.liveEmbeddingExtractionQueue = new PQueue({ + concurrency: 1, + }); + eventBus.on(Events.LOGOUT, this.logoutHandler, this); + } + + isPlatformSupported = () => { + return isElectron() && !this.unsupportedPlatform; + }; + + private logoutHandler = async () => { + if (this.embeddingExtractionInProgress) { + this.embeddingExtractionInProgress.abort(); + } + if (this.onFileUploadedHandler) { + await this.removeOnFileUploadListener(); + } + }; + + setupOnFileUploadListener = async () => { + try { + if (this.unsupportedPlatform) { + return; + } + if (this.onFileUploadedHandler) { + addLogLine("file upload listener already setup"); + return; + } + addLogLine("setting up file upload listener"); + this.onFileUploadedHandler = (args) => { + this.runLocalFileClipExtraction(args); + }; + eventBus.on(Events.FILE_UPLOADED, this.onFileUploadedHandler, this); + addLogLine("setup file upload listener successfully"); + } catch (e) { + logError(e, "failed to setup clip service"); + } + }; + + removeOnFileUploadListener = async () => { + try { + if (!this.onFileUploadedHandler) { + addLogLine("file upload listener already removed"); + return; + } + addLogLine("removing file upload listener"); + eventBus.removeListener( + Events.FILE_UPLOADED, + this.onFileUploadedHandler, + this, + ); + this.onFileUploadedHandler = null; + addLogLine("removed file upload listener successfully"); + } catch (e) { + logError(e, "failed to remove clip service"); + } + }; + + getIndexingStatus = async () => { + try { + if ( + !this.clipExtractionStatus || + (this.clipExtractionStatus.pending === 0 && + this.clipExtractionStatus.indexed === 0) + ) { + this.clipExtractionStatus = await getClipExtractionStatus(); + } + return this.clipExtractionStatus; + } catch (e) { + logError(e, "failed to get clip indexing status"); + } + }; + + setOnUpdateHandler = (handler: (status: ClipExtractionStatus) => void) => { + this.onUpdateHandler = handler; + handler(this.clipExtractionStatus); + }; + + scheduleImageEmbeddingExtraction = async ( + model: Model = Model.ONNX_CLIP, + ) => { + try { + if (this.embeddingExtractionInProgress) { + addLogLine( + "clip embedding extraction already in progress, scheduling re-run", + ); + this.reRunNeeded = true; + return; + } else { + addLogLine( + "clip embedding extraction not in progress, starting clip embedding extraction", + ); + } + const canceller = new AbortController(); + this.embeddingExtractionInProgress = canceller; + try { + await this.runClipEmbeddingExtraction(canceller, model); + } finally { + this.embeddingExtractionInProgress = null; + if (!canceller.signal.aborted && this.reRunNeeded) { + this.reRunNeeded = false; + addLogLine("re-running clip embedding extraction"); + setTimeout( + () => this.scheduleImageEmbeddingExtraction(), + 0, + ); + } + } + } catch (e) { + if (e.message !== CustomError.REQUEST_CANCELLED) { + logError(e, "failed to schedule clip embedding extraction"); + } + } + }; + + getTextEmbedding = async ( + text: string, + model: Model = Model.ONNX_CLIP, + ): Promise => { + try { + return ElectronAPIs.computeTextEmbedding(model, text); + } catch (e) { + if (e?.message?.includes(CustomError.UNSUPPORTED_PLATFORM)) { + this.unsupportedPlatform = true; + } + logError(e, "failed to compute text embedding"); + throw e; + } + }; + + private runClipEmbeddingExtraction = async ( + canceller: AbortController, + model: Model, + ) => { + try { + if (this.unsupportedPlatform) { + addLogLine( + `skipping clip embedding extraction, platform unsupported`, + ); + return; + } + const user = getData(LS_KEYS.USER); + if (!user) { + return; + } + const localFiles = getPersonalFiles(await getAllLocalFiles(), user); + const existingEmbeddings = await getLocalEmbeddings(model); + const pendingFiles = await getNonClipEmbeddingExtractedFiles( + localFiles, + existingEmbeddings, + ); + this.updateClipEmbeddingExtractionStatus({ + indexed: existingEmbeddings.length, + pending: pendingFiles.length, + }); + if (pendingFiles.length === 0) { + addLogLine("no clip embedding extraction needed, all done"); + return; + } + addLogLine( + `starting clip embedding extraction for ${pendingFiles.length} files`, + ); + for (const file of pendingFiles) { + try { + addLogLine( + `extracting clip embedding for file: ${file.metadata.title} fileID: ${file.id}`, + ); + if (canceller.signal.aborted) { + throw Error(CustomError.REQUEST_CANCELLED); + } + const embeddingData = + await this.extractFileClipImageEmbedding(model, file); + addLogLine( + `successfully extracted clip embedding for file: ${file.metadata.title} fileID: ${file.id} embedding length: ${embeddingData?.length}`, + ); + await this.encryptAndUploadEmbedding( + model, + file, + embeddingData, + ); + this.onSuccessStatusUpdater(); + addLogLine( + `successfully put clip embedding to server for file: ${file.metadata.title} fileID: ${file.id}`, + ); + } catch (e) { + if (e?.message !== CustomError.REQUEST_CANCELLED) { + logError( + e, + "failed to extract clip embedding for file", + ); + } + if ( + e?.message?.includes(CustomError.UNSUPPORTED_PLATFORM) + ) { + this.unsupportedPlatform = true; + } + if ( + e?.message === CustomError.REQUEST_CANCELLED || + e?.message?.includes(CustomError.UNSUPPORTED_PLATFORM) + ) { + throw e; + } + } + } + } catch (e) { + if (e.message !== CustomError.REQUEST_CANCELLED) { + logError(e, "failed to extract clip embedding"); + } + throw e; + } + }; + + private async runLocalFileClipExtraction( + arg: { + enteFile: EnteFile; + localFile: globalThis.File; + }, + model: Model = Model.ONNX_CLIP, + ) { + const { enteFile, localFile } = arg; + addLogLine( + `clip embedding extraction onFileUploadedHandler file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, + enteFile.id, + ); + if (enteFile.metadata.fileType === FILE_TYPE.VIDEO) { + addLogLine( + `skipping video file for clip embedding extraction file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, + ); + return; + } + const extension = enteFile.metadata.title.split(".").pop(); + if (!extension || !["jpg", "jpeg"].includes(extension)) { + addLogLine( + `skipping non jpg file for clip embedding extraction file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, + ); + return; + } + addLogLine( + `queuing up for local clip embedding extraction for file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, + ); + try { + await this.liveEmbeddingExtractionQueue.add(async () => { + const embedding = await this.extractLocalFileClipImageEmbedding( + model, + localFile, + ); + await this.encryptAndUploadEmbedding( + model, + enteFile, + embedding, + ); + }); + addLogLine( + `successfully extracted clip embedding for file: ${enteFile.metadata.title} fileID: ${enteFile.id}`, + ); + } catch (e) { + logError(e, "Failed in ML onFileUploadedHandler"); + } + } + + private extractLocalFileClipImageEmbedding = async ( + model: Model, + localFile: File, + ) => { + const file = await localFile + .arrayBuffer() + .then((buffer) => new Uint8Array(buffer)); + const embedding = await ElectronAPIs.computeImageEmbedding(model, file); + return embedding; + }; + + private encryptAndUploadEmbedding = async ( + model: Model, + file: EnteFile, + embeddingData: Float32Array, + ) => { + if (embeddingData?.length !== CLIP_EMBEDDING_LENGTH) { + throw Error( + `invalid length embedding data length: ${embeddingData?.length}`, + ); + } + const comlinkCryptoWorker = await ComlinkCryptoWorker.getInstance(); + const { file: encryptedEmbeddingData } = + await comlinkCryptoWorker.encryptEmbedding(embeddingData, file.key); + addLogLine( + `putting clip embedding to server for file: ${file.metadata.title} fileID: ${file.id}`, + ); + await putEmbedding({ + fileID: file.id, + encryptedEmbedding: encryptedEmbeddingData.encryptedData, + decryptionHeader: encryptedEmbeddingData.decryptionHeader, + model, + }); + }; + + updateClipEmbeddingExtractionStatus = (status: ClipExtractionStatus) => { + this.clipExtractionStatus = status; + if (this.onUpdateHandler) { + this.onUpdateHandler(status); + } + }; + + private extractFileClipImageEmbedding = async ( + model: Model, + file: EnteFile, + ) => { + const thumb = await downloadManager.getThumbnail(file); + const embedding = await ElectronAPIs.computeImageEmbedding( + model, + thumb, + ); + return embedding; + }; + + private onSuccessStatusUpdater = () => { + this.updateClipEmbeddingExtractionStatus({ + pending: this.clipExtractionStatus.pending - 1, + indexed: this.clipExtractionStatus.indexed + 1, + }); + }; +} + +export const ClipService = new ClipServiceImpl(); + +const getNonClipEmbeddingExtractedFiles = async ( + files: EnteFile[], + existingEmbeddings: Embedding[], +) => { + const existingEmbeddingFileIds = new Set(); + existingEmbeddings.forEach((embedding) => + existingEmbeddingFileIds.add(embedding.fileID), + ); + const idSet = new Set(); + return files.filter((file) => { + if (idSet.has(file.id)) { + return false; + } + if (existingEmbeddingFileIds.has(file.id)) { + return false; + } + idSet.add(file.id); + return true; + }); +}; + +export const computeClipMatchScore = async ( + imageEmbedding: Float32Array, + textEmbedding: Float32Array, +) => { + if (imageEmbedding.length !== textEmbedding.length) { + throw Error("imageEmbedding and textEmbedding length mismatch"); + } + let score = 0; + let imageNormalization = 0; + let textNormalization = 0; + + for (let index = 0; index < imageEmbedding.length; index++) { + imageNormalization += imageEmbedding[index] * imageEmbedding[index]; + textNormalization += textEmbedding[index] * textEmbedding[index]; + } + for (let index = 0; index < imageEmbedding.length; index++) { + imageEmbedding[index] = + imageEmbedding[index] / Math.sqrt(imageNormalization); + textEmbedding[index] = + textEmbedding[index] / Math.sqrt(textNormalization); + } + for (let index = 0; index < imageEmbedding.length; index++) { + score += imageEmbedding[index] * textEmbedding[index]; + } + return score; +}; + +const getClipExtractionStatus = async ( + model: Model = Model.ONNX_CLIP, +): Promise => { + const user = getData(LS_KEYS.USER); + if (!user) { + return; + } + const allEmbeddings = await getLocalEmbeddings(model); + const localFiles = getPersonalFiles(await getLocalFiles(), user); + const pendingFiles = await getNonClipEmbeddingExtractedFiles( + localFiles, + allEmbeddings, + ); + return { + indexed: allEmbeddings.length, + pending: pendingFiles.length, + }; +}; diff --git a/web/apps/photos/src/services/collectionService.ts b/web/apps/photos/src/services/collectionService.ts new file mode 100644 index 000000000..7a9a251ef --- /dev/null +++ b/web/apps/photos/src/services/collectionService.ts @@ -0,0 +1,1472 @@ +import { getEndpoint } from "@ente/shared/network/api"; +import localForage from "@ente/shared/storage/localForage"; +import { getData, LS_KEYS } from "@ente/shared/storage/localStorage"; + +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { CustomError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { getActualKey } from "@ente/shared/user"; +import { User } from "@ente/shared/user/types"; +import { REQUEST_BATCH_SIZE } from "constants/api"; +import { + ALL_SECTION, + ARCHIVE_SECTION, + COLLECTION_LIST_SORT_BY, + COLLECTION_SORT_ORDER, + CollectionSummaryType, + CollectionType, + DUMMY_UNCATEGORIZED_COLLECTION, + HIDDEN_ITEMS_SECTION, + TRASH_SECTION, +} from "constants/collection"; +import { t } from "i18next"; +import { + AddToCollectionRequest, + Collection, + CollectionFilesCount, + CollectionMagicMetadata, + CollectionMagicMetadataProps, + CollectionPublicMagicMetadata, + CollectionShareeMagicMetadata, + CollectionSummaries, + CollectionSummary, + CollectionToFileMap, + CreatePublicAccessTokenRequest, + EncryptedCollection, + EncryptedFileKey, + MoveToCollectionRequest, + PublicURL, + RemoveFromCollectionRequest, + UpdatePublicURL, +} from "types/collection"; +import { EnteFile } from "types/file"; +import { + EncryptedMagicMetadata, + SUB_TYPE, + UpdateMagicMetadataRequest, + VISIBILITY_STATE, +} from "types/magicMetadata"; +import { FamilyData } from "types/user"; +import { + changeCollectionSubType, + getHiddenCollections, + getNonHiddenCollections, + isDefaultHiddenCollection, + isHiddenCollection, + isIncomingCollabShare, + isIncomingShare, + isOutgoingShare, + isQuickLinkCollection, + isSharedOnlyViaLink, + isValidMoveTarget, +} from "utils/collection"; +import { batch } from "utils/common"; +import { + getUniqueFiles, + groupFilesBasedOnCollectionID, + sortFiles, +} from "utils/file"; +import { + isArchivedCollection, + isArchivedFile, + isPinnedCollection, + updateMagicMetadata, +} from "utils/magicMetadata"; +import { getLocalFiles } from "./fileService"; +import { getPublicKey } from "./userService"; + +const ENDPOINT = getEndpoint(); +const COLLECTION_TABLE = "collections"; +const COLLECTION_UPDATION_TIME = "collection-updation-time"; +const HIDDEN_COLLECTION_IDS = "hidden-collection-ids"; + +const UNCATEGORIZED_COLLECTION_NAME = "Uncategorized"; +export const HIDDEN_COLLECTION_NAME = ".hidden"; +const FAVORITE_COLLECTION_NAME = "Favorites"; + +export const getCollectionLastSyncTime = async (collection: Collection) => + (await localForage.getItem(`${collection.id}-time`)) ?? 0; + +export const setCollectionLastSyncTime = async ( + collection: Collection, + time: number, +) => await localForage.setItem(`${collection.id}-time`, time); + +export const removeCollectionLastSyncTime = async (collection: Collection) => + await localForage.removeItem(`${collection.id}-time`); + +const getCollectionWithSecrets = async ( + collection: EncryptedCollection, + masterKey: string, +): Promise => { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const userID = getData(LS_KEYS.USER).id; + let collectionKey: string; + if (collection.owner.id === userID) { + collectionKey = await cryptoWorker.decryptB64( + collection.encryptedKey, + collection.keyDecryptionNonce, + masterKey, + ); + } else { + const keyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); + const secretKey = await cryptoWorker.decryptB64( + keyAttributes.encryptedSecretKey, + keyAttributes.secretKeyDecryptionNonce, + masterKey, + ); + collectionKey = await cryptoWorker.boxSealOpen( + collection.encryptedKey, + keyAttributes.publicKey, + secretKey, + ); + } + const collectionName = + collection.name || + (await cryptoWorker.decryptToUTF8( + collection.encryptedName, + collection.nameDecryptionNonce, + collectionKey, + )); + + let collectionMagicMetadata: CollectionMagicMetadata; + if (collection.magicMetadata?.data) { + collectionMagicMetadata = { + ...collection.magicMetadata, + data: await cryptoWorker.decryptMetadata( + collection.magicMetadata.data, + collection.magicMetadata.header, + collectionKey, + ), + }; + } + let collectionPublicMagicMetadata: CollectionPublicMagicMetadata; + if (collection.pubMagicMetadata?.data) { + collectionPublicMagicMetadata = { + ...collection.pubMagicMetadata, + data: await cryptoWorker.decryptMetadata( + collection.pubMagicMetadata.data, + collection.pubMagicMetadata.header, + collectionKey, + ), + }; + } + + let collectionShareeMagicMetadata: CollectionShareeMagicMetadata; + if (collection.sharedMagicMetadata?.data) { + collectionShareeMagicMetadata = { + ...collection.sharedMagicMetadata, + data: await cryptoWorker.decryptMetadata( + collection.sharedMagicMetadata.data, + collection.sharedMagicMetadata.header, + collectionKey, + ), + }; + } + + return { + ...collection, + name: collectionName, + key: collectionKey, + magicMetadata: collectionMagicMetadata, + pubMagicMetadata: collectionPublicMagicMetadata, + sharedMagicMetadata: collectionShareeMagicMetadata, + }; +}; + +const getCollections = async ( + token: string, + sinceTime: number, + key: string, +): Promise => { + try { + const resp = await HTTPService.get( + `${ENDPOINT}/collections/v2`, + { + sinceTime, + }, + { "X-Auth-Token": token }, + ); + const decryptedCollections: Collection[] = await Promise.all( + resp.data.collections.map( + async (collection: EncryptedCollection) => { + if (collection.isDeleted) { + return collection; + } + try { + return await getCollectionWithSecrets(collection, key); + } catch (e) { + logError(e, `decryption failed for collection`, { + collectionID: collection.id, + }); + return collection; + } + }, + ), + ); + // only allow deleted or collection with key, filtering out collection whose decryption failed + const collections = decryptedCollections.filter( + (collection) => collection.isDeleted || collection.key, + ); + return collections; + } catch (e) { + logError(e, "getCollections failed"); + throw e; + } +}; + +export const getLocalCollections = async ( + type: "normal" | "hidden" = "normal", +): Promise => { + const collections = await getAllLocalCollections(); + return type === "normal" + ? getNonHiddenCollections(collections) + : getHiddenCollections(collections); +}; + +export const getAllLocalCollections = async (): Promise => { + const collections: Collection[] = + (await localForage.getItem(COLLECTION_TABLE)) ?? []; + return collections; +}; + +export const getCollectionUpdationTime = async (): Promise => + (await localForage.getItem(COLLECTION_UPDATION_TIME)) ?? 0; + +export const getHiddenCollectionIDs = async (): Promise => + (await localForage.getItem(HIDDEN_COLLECTION_IDS)) ?? []; + +export const getLatestCollections = async ( + type: "normal" | "hidden" = "normal", +): Promise => { + const collections = await getAllLatestCollections(); + return type === "normal" + ? getNonHiddenCollections(collections) + : getHiddenCollections(collections); +}; +export const getAllLatestCollections = async (): Promise => { + const collections = await syncCollections(); + return collections; +}; + +export const syncCollections = async () => { + const localCollections = await getAllLocalCollections(); + let lastCollectionUpdationTime = await getCollectionUpdationTime(); + const hiddenCollectionIDs = await getHiddenCollectionIDs(); + const token = getToken(); + const key = await getActualKey(); + const updatedCollections = + (await getCollections(token, lastCollectionUpdationTime, key)) ?? []; + if (updatedCollections.length === 0) { + return localCollections; + } + const allCollectionsInstances = [ + ...localCollections, + ...updatedCollections, + ]; + const latestCollectionsInstances = new Map(); + allCollectionsInstances.forEach((collection) => { + if ( + !latestCollectionsInstances.has(collection.id) || + latestCollectionsInstances.get(collection.id).updationTime < + collection.updationTime + ) { + latestCollectionsInstances.set(collection.id, collection); + } + }); + + const collections: Collection[] = []; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const [_, collection] of latestCollectionsInstances) { + const isDeletedCollection = collection.isDeleted; + const isNewlyHiddenCollection = + isHiddenCollection(collection) && + !hiddenCollectionIDs.includes(collection.id); + const isNewlyUnHiddenCollection = + !isHiddenCollection(collection) && + hiddenCollectionIDs.includes(collection.id); + if ( + isDeletedCollection || + isNewlyHiddenCollection || + isNewlyUnHiddenCollection + ) { + removeCollectionLastSyncTime(collection); + } + if (isDeletedCollection) { + continue; + } + collections.push(collection); + lastCollectionUpdationTime = Math.max( + lastCollectionUpdationTime, + collection.updationTime, + ); + } + + const updatedHiddenCollectionIDs = collections + .filter((collection) => isHiddenCollection(collection)) + .map((collection) => collection.id); + + await localForage.setItem(COLLECTION_TABLE, collections); + await localForage.setItem( + COLLECTION_UPDATION_TIME, + lastCollectionUpdationTime, + ); + await localForage.setItem( + HIDDEN_COLLECTION_IDS, + updatedHiddenCollectionIDs, + ); + return collections; +}; + +export const getCollection = async ( + collectionID: number, +): Promise => { + try { + const token = getToken(); + if (!token) { + return; + } + const resp = await HTTPService.get( + `${ENDPOINT}/collections/${collectionID}`, + null, + { "X-Auth-Token": token }, + ); + const key = await getActualKey(); + const collectionWithSecrets = await getCollectionWithSecrets( + resp.data?.collection, + key, + ); + return collectionWithSecrets; + } catch (e) { + logError(e, "failed to get collection"); + throw e; + } +}; + +export const getCollectionLatestFiles = ( + files: EnteFile[], +): CollectionToFileMap => { + const latestFiles = new Map(); + + files.forEach((file) => { + if (!latestFiles.has(file.collectionID)) { + latestFiles.set(file.collectionID, file); + } + }); + return latestFiles; +}; + +export const getCollectionCoverFiles = ( + files: EnteFile[], + collections: Collection[], +): CollectionToFileMap => { + const collectionIDToFileMap = groupFilesBasedOnCollectionID(files); + + const coverFiles = new Map(); + + collections.forEach((collection) => { + const collectionFiles = collectionIDToFileMap.get(collection.id); + if (!collectionFiles || collectionFiles.length === 0) { + return; + } + const coverID = collection.pubMagicMetadata?.data?.coverID; + if (typeof coverID === "number" && coverID > 0) { + const coverFile = collectionFiles.find( + (file) => file.id === coverID, + ); + if (coverFile) { + coverFiles.set(collection.id, coverFile); + return; + } + } + if (collection.pubMagicMetadata?.data?.asc) { + coverFiles.set( + collection.id, + collectionFiles[collectionFiles.length - 1], + ); + } else { + coverFiles.set(collection.id, collectionFiles[0]); + } + }); + return coverFiles; +}; + +export const getFavItemIds = async ( + files: EnteFile[], +): Promise> => { + const favCollection = await getFavCollection(); + if (!favCollection) return new Set(); + + return new Set( + files + .filter((file) => file.collectionID === favCollection.id) + .map((file): number => file.id), + ); +}; + +export const createAlbum = (albumName: string) => { + return createCollection(albumName, CollectionType.album); +}; + +const createCollection = async ( + collectionName: string, + type: CollectionType, + magicMetadataProps?: CollectionMagicMetadataProps, +): Promise => { + try { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const encryptionKey = await getActualKey(); + const token = getToken(); + const collectionKey = await cryptoWorker.generateEncryptionKey(); + const { encryptedData: encryptedKey, nonce: keyDecryptionNonce } = + await cryptoWorker.encryptToB64(collectionKey, encryptionKey); + const { encryptedData: encryptedName, nonce: nameDecryptionNonce } = + await cryptoWorker.encryptUTF8(collectionName, collectionKey); + let encryptedMagicMetadata: EncryptedMagicMetadata; + if (magicMetadataProps) { + const magicMetadata = await updateMagicMetadata(magicMetadataProps); + const { file: encryptedMagicMetadataProps } = + await cryptoWorker.encryptMetadata( + magicMetadataProps, + collectionKey, + ); + + encryptedMagicMetadata = { + ...magicMetadata, + data: encryptedMagicMetadataProps.encryptedData, + header: encryptedMagicMetadataProps.decryptionHeader, + }; + } + const newCollection: EncryptedCollection = { + id: null, + owner: null, + encryptedKey, + keyDecryptionNonce, + encryptedName, + nameDecryptionNonce, + type, + attributes: {}, + sharees: null, + updationTime: null, + isDeleted: false, + magicMetadata: encryptedMagicMetadata, + pubMagicMetadata: null, + sharedMagicMetadata: null, + }; + const createdCollection = await postCollection(newCollection, token); + const decryptedCreatedCollection = await getCollectionWithSecrets( + createdCollection, + encryptionKey, + ); + return decryptedCreatedCollection; + } catch (e) { + logError(e, "create collection failed"); + throw e; + } +}; + +const postCollection = async ( + collectionData: EncryptedCollection, + token: string, +): Promise => { + try { + const response = await HTTPService.post( + `${ENDPOINT}/collections`, + collectionData, + null, + { "X-Auth-Token": token }, + ); + return response.data.collection; + } catch (e) { + logError(e, "post Collection failed "); + } +}; + +export const createFavoritesCollection = () => { + return createCollection(FAVORITE_COLLECTION_NAME, CollectionType.favorites); +}; + +export const addToFavorites = async (file: EnteFile) => { + try { + let favCollection = await getFavCollection(); + if (!favCollection) { + favCollection = await createFavoritesCollection(); + } + await addToCollection(favCollection, [file]); + } catch (e) { + logError(e, "failed to add to favorite"); + } +}; + +export const removeFromFavorites = async (file: EnteFile) => { + try { + const favCollection = await getFavCollection(); + if (!favCollection) { + throw Error(CustomError.FAV_COLLECTION_MISSING); + } + await removeFromCollection(favCollection.id, [file]); + } catch (e) { + logError(e, "remove from favorite failed"); + } +}; + +export const addToCollection = async ( + collection: Collection, + files: EnteFile[], +) => { + try { + const token = getToken(); + const batchedFiles = batch(files, REQUEST_BATCH_SIZE); + for (const batch of batchedFiles) { + const fileKeysEncryptedWithNewCollection = + await encryptWithNewCollectionKey(collection, batch); + + const requestBody: AddToCollectionRequest = { + collectionID: collection.id, + files: fileKeysEncryptedWithNewCollection, + }; + await HTTPService.post( + `${ENDPOINT}/collections/add-files`, + requestBody, + null, + { + "X-Auth-Token": token, + }, + ); + } + } catch (e) { + logError(e, "Add to collection Failed "); + throw e; + } +}; + +export const restoreToCollection = async ( + collection: Collection, + files: EnteFile[], +) => { + try { + const token = getToken(); + const batchedFiles = batch(files, REQUEST_BATCH_SIZE); + for (const batch of batchedFiles) { + const fileKeysEncryptedWithNewCollection = + await encryptWithNewCollectionKey(collection, batch); + + const requestBody: AddToCollectionRequest = { + collectionID: collection.id, + files: fileKeysEncryptedWithNewCollection, + }; + await HTTPService.post( + `${ENDPOINT}/collections/restore-files`, + requestBody, + null, + { + "X-Auth-Token": token, + }, + ); + } + } catch (e) { + logError(e, "restore to collection Failed "); + throw e; + } +}; +export const moveToCollection = async ( + fromCollectionID: number, + toCollection: Collection, + files: EnteFile[], +) => { + try { + const token = getToken(); + const batchedFiles = batch(files, REQUEST_BATCH_SIZE); + for (const batch of batchedFiles) { + const fileKeysEncryptedWithNewCollection = + await encryptWithNewCollectionKey(toCollection, batch); + + const requestBody: MoveToCollectionRequest = { + fromCollectionID: fromCollectionID, + toCollectionID: toCollection.id, + files: fileKeysEncryptedWithNewCollection, + }; + await HTTPService.post( + `${ENDPOINT}/collections/move-files`, + requestBody, + null, + { + "X-Auth-Token": token, + }, + ); + } + } catch (e) { + logError(e, "move to collection Failed "); + throw e; + } +}; + +const encryptWithNewCollectionKey = async ( + newCollection: Collection, + files: EnteFile[], +): Promise => { + const fileKeysEncryptedWithNewCollection: EncryptedFileKey[] = []; + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + for (const file of files) { + const newEncryptedKey = await cryptoWorker.encryptToB64( + file.key, + newCollection.key, + ); + const encryptedKey = newEncryptedKey.encryptedData; + const keyDecryptionNonce = newEncryptedKey.nonce; + + fileKeysEncryptedWithNewCollection.push({ + id: file.id, + encryptedKey, + keyDecryptionNonce, + }); + } + return fileKeysEncryptedWithNewCollection; +}; +export const removeFromCollection = async ( + collectionID: number, + toRemoveFiles: EnteFile[], + allFiles?: EnteFile[], +) => { + try { + const user: User = getData(LS_KEYS.USER); + const nonUserFiles = []; + const userFiles = []; + for (const file of toRemoveFiles) { + if (file.ownerID === user.id) { + userFiles.push(file); + } else { + nonUserFiles.push(file); + } + } + + if (nonUserFiles.length > 0) { + await removeNonUserFiles(collectionID, nonUserFiles); + } + if (userFiles.length > 0) { + await removeUserFiles(collectionID, userFiles, allFiles); + } + } catch (e) { + logError(e, "remove from collection failed "); + throw e; + } +}; + +export const removeUserFiles = async ( + sourceCollectionID: number, + toRemoveFiles: EnteFile[], + allFiles?: EnteFile[], +) => { + try { + if (!allFiles) { + allFiles = await getLocalFiles(); + } + const toRemoveFilesIds = new Set(toRemoveFiles.map((f) => f.id)); + const toRemoveFilesCopiesInOtherCollections = allFiles.filter((f) => { + return toRemoveFilesIds.has(f.id); + }); + const groupiedFiles = groupFilesBasedOnCollectionID( + toRemoveFilesCopiesInOtherCollections, + ); + + const collections = await getLocalCollections(); + const collectionsMap = new Map(collections.map((c) => [c.id, c])); + const user: User = getData(LS_KEYS.USER); + + for (const [targetCollectionID, files] of groupiedFiles.entries()) { + const targetCollection = collectionsMap.get(targetCollectionID); + if ( + !isValidMoveTarget(sourceCollectionID, targetCollection, user) + ) { + continue; + } + const toMoveFiles = files.filter((f) => { + if (toRemoveFilesIds.has(f.id)) { + toRemoveFilesIds.delete(f.id); + return true; + } + return false; + }); + if (toMoveFiles.length === 0) { + continue; + } + await moveToCollection( + sourceCollectionID, + targetCollection, + toMoveFiles, + ); + } + const leftFiles = toRemoveFiles.filter((f) => + toRemoveFilesIds.has(f.id), + ); + + if (leftFiles.length === 0) { + return; + } + let uncategorizedCollection = await getUncategorizedCollection(); + if (!uncategorizedCollection) { + uncategorizedCollection = await createUnCategorizedCollection(); + } + await moveToCollection( + sourceCollectionID, + uncategorizedCollection, + leftFiles, + ); + } catch (e) { + logError(e, "remove user files failed "); + throw e; + } +}; + +export const removeNonUserFiles = async ( + collectionID: number, + nonUserFiles: EnteFile[], +) => { + try { + const fileIDs = nonUserFiles.map((f) => f.id); + const token = getToken(); + const batchedFileIDs = batch(fileIDs, REQUEST_BATCH_SIZE); + for (const batch of batchedFileIDs) { + const request: RemoveFromCollectionRequest = { + collectionID, + fileIDs: batch, + }; + + await HTTPService.post( + `${ENDPOINT}/collections/v3/remove-files`, + request, + null, + { "X-Auth-Token": token }, + ); + } + } catch (e) { + logError(e, "remove non user files failed "); + throw e; + } +}; + +export const deleteCollection = async ( + collectionID: number, + keepFiles: boolean, +) => { + try { + if (keepFiles) { + const allFiles = await getLocalFiles(); + const collectionFiles = allFiles.filter((file) => { + return file.collectionID === collectionID; + }); + await removeFromCollection(collectionID, collectionFiles, allFiles); + } + const token = getToken(); + + await HTTPService.delete( + `${ENDPOINT}/collections/v3/${collectionID}`, + null, + { collectionID, keepFiles }, + { "X-Auth-Token": token }, + ); + } catch (e) { + logError(e, "delete collection failed "); + throw e; + } +}; + +export const leaveSharedAlbum = async (collectionID: number) => { + try { + const token = getToken(); + + await HTTPService.post( + `${ENDPOINT}/collections/leave/${collectionID}`, + null, + null, + { "X-Auth-Token": token }, + ); + } catch (e) { + logError(e, "leave shared album failed "); + throw e; + } +}; + +export const updateCollectionMagicMetadata = async ( + collection: Collection, + updatedMagicMetadata: CollectionMagicMetadata, +) => { + const token = getToken(); + if (!token) { + return; + } + + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + const { file: encryptedMagicMetadata } = await cryptoWorker.encryptMetadata( + updatedMagicMetadata.data, + collection.key, + ); + + const reqBody: UpdateMagicMetadataRequest = { + id: collection.id, + magicMetadata: { + version: updatedMagicMetadata.version, + count: updatedMagicMetadata.count, + data: encryptedMagicMetadata.encryptedData, + header: encryptedMagicMetadata.decryptionHeader, + }, + }; + + await HTTPService.put( + `${ENDPOINT}/collections/magic-metadata`, + reqBody, + null, + { + "X-Auth-Token": token, + }, + ); + const updatedCollection: Collection = { + ...collection, + magicMetadata: { + ...updatedMagicMetadata, + version: updatedMagicMetadata.version + 1, + }, + }; + return updatedCollection; +}; + +export const updateSharedCollectionMagicMetadata = async ( + collection: Collection, + updatedMagicMetadata: CollectionMagicMetadata, +) => { + const token = getToken(); + if (!token) { + return; + } + + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + const { file: encryptedMagicMetadata } = await cryptoWorker.encryptMetadata( + updatedMagicMetadata.data, + collection.key, + ); + + const reqBody: UpdateMagicMetadataRequest = { + id: collection.id, + magicMetadata: { + version: updatedMagicMetadata.version, + count: updatedMagicMetadata.count, + data: encryptedMagicMetadata.encryptedData, + header: encryptedMagicMetadata.decryptionHeader, + }, + }; + + await HTTPService.put( + `${ENDPOINT}/collections/sharee-magic-metadata`, + reqBody, + null, + { + "X-Auth-Token": token, + }, + ); + const updatedCollection: Collection = { + ...collection, + magicMetadata: { + ...updatedMagicMetadata, + version: updatedMagicMetadata.version + 1, + }, + }; + return updatedCollection; +}; + +export const updatePublicCollectionMagicMetadata = async ( + collection: Collection, + updatedPublicMagicMetadata: CollectionPublicMagicMetadata, +) => { + const token = getToken(); + if (!token) { + return; + } + + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + const { file: encryptedMagicMetadata } = await cryptoWorker.encryptMetadata( + updatedPublicMagicMetadata.data, + collection.key, + ); + + const reqBody: UpdateMagicMetadataRequest = { + id: collection.id, + magicMetadata: { + version: updatedPublicMagicMetadata.version, + count: updatedPublicMagicMetadata.count, + data: encryptedMagicMetadata.encryptedData, + header: encryptedMagicMetadata.decryptionHeader, + }, + }; + + await HTTPService.put( + `${ENDPOINT}/collections/public-magic-metadata`, + reqBody, + null, + { + "X-Auth-Token": token, + }, + ); + const updatedCollection: Collection = { + ...collection, + pubMagicMetadata: { + ...updatedPublicMagicMetadata, + version: updatedPublicMagicMetadata.version + 1, + }, + }; + return updatedCollection; +}; + +export const renameCollection = async ( + collection: Collection, + newCollectionName: string, +) => { + if (isQuickLinkCollection(collection)) { + // Convert quick link collection to normal collection on rename + await changeCollectionSubType(collection, SUB_TYPE.DEFAULT); + } + const token = getToken(); + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const { encryptedData: encryptedName, nonce: nameDecryptionNonce } = + await cryptoWorker.encryptUTF8(newCollectionName, collection.key); + const collectionRenameRequest = { + collectionID: collection.id, + encryptedName, + nameDecryptionNonce, + }; + await HTTPService.post( + `${ENDPOINT}/collections/rename`, + collectionRenameRequest, + null, + { + "X-Auth-Token": token, + }, + ); +}; + +export const shareCollection = async ( + collection: Collection, + withUserEmail: string, + role: string, +) => { + try { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const token = getToken(); + const publicKey: string = await getPublicKey(withUserEmail); + const encryptedKey = await cryptoWorker.boxSeal( + collection.key, + publicKey, + ); + const shareCollectionRequest = { + collectionID: collection.id, + email: withUserEmail, + role: role, + encryptedKey, + }; + await HTTPService.post( + `${ENDPOINT}/collections/share`, + shareCollectionRequest, + null, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "share collection failed "); + throw e; + } +}; + +export const unshareCollection = async ( + collection: Collection, + withUserEmail: string, +) => { + try { + const token = getToken(); + const shareCollectionRequest = { + collectionID: collection.id, + email: withUserEmail, + }; + await HTTPService.post( + `${ENDPOINT}/collections/unshare`, + shareCollectionRequest, + null, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "unshare collection failed "); + } +}; + +export const createShareableURL = async (collection: Collection) => { + try { + const token = getToken(); + if (!token) { + return null; + } + const createPublicAccessTokenRequest: CreatePublicAccessTokenRequest = { + collectionID: collection.id, + }; + const resp = await HTTPService.post( + `${ENDPOINT}/collections/share-url`, + createPublicAccessTokenRequest, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data.result as PublicURL; + } catch (e) { + logError(e, "createShareableURL failed "); + throw e; + } +}; + +export const deleteShareableURL = async (collection: Collection) => { + try { + const token = getToken(); + if (!token) { + return null; + } + await HTTPService.delete( + `${ENDPOINT}/collections/share-url/${collection.id}`, + null, + null, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "deleteShareableURL failed "); + throw e; + } +}; + +export const updateShareableURL = async ( + request: UpdatePublicURL, +): Promise => { + try { + const token = getToken(); + if (!token) { + return null; + } + const res = await HTTPService.put( + `${ENDPOINT}/collections/share-url`, + request, + null, + { + "X-Auth-Token": token, + }, + ); + return res.data.result as PublicURL; + } catch (e) { + logError(e, "updateShareableURL failed "); + throw e; + } +}; + +export const getFavCollection = async () => { + const collections = await getLocalCollections(); + for (const collection of collections) { + if (collection.type === CollectionType.favorites) { + return collection; + } + } +}; + +export const getNonEmptyCollections = ( + collections: Collection[], + files: EnteFile[], +) => { + const nonEmptyCollectionsIds = new Set(); + for (const file of files) { + nonEmptyCollectionsIds.add(file.collectionID); + } + return collections.filter((collection) => + nonEmptyCollectionsIds.has(collection.id), + ); +}; + +export function sortCollectionSummaries( + collectionSummaries: CollectionSummary[], + sortBy: COLLECTION_LIST_SORT_BY, +) { + return collectionSummaries + .sort((a, b) => { + switch (sortBy) { + case COLLECTION_LIST_SORT_BY.CREATION_TIME_ASCENDING: + return ( + -1 * + compareCollectionsLatestFile(b.latestFile, a.latestFile) + ); + case COLLECTION_LIST_SORT_BY.UPDATION_TIME_DESCENDING: + return b.updationTime - a.updationTime; + case COLLECTION_LIST_SORT_BY.NAME: + return a.name.localeCompare(b.name); + } + }) + .sort((a, b) => b.order ?? 0 - a.order ?? 0) + .sort( + (a, b) => + COLLECTION_SORT_ORDER.get(a.type) - + COLLECTION_SORT_ORDER.get(b.type), + ); +} + +function compareCollectionsLatestFile(first: EnteFile, second: EnteFile) { + if (!first) { + return 1; + } else if (!second) { + return -1; + } else { + const sortedFiles = sortFiles([first, second]); + if (sortedFiles[0].id !== first.id) { + return 1; + } else { + return -1; + } + } +} + +export function getCollectionSummaries( + user: User, + collections: Collection[], + files: EnteFile[], +): CollectionSummaries { + const collectionSummaries: CollectionSummaries = new Map(); + const collectionLatestFiles = getCollectionLatestFiles(files); + const collectionCoverFiles = getCollectionCoverFiles(files, collections); + const collectionFilesCount = getCollectionsFileCount(files); + + let hasUncategorizedCollection = false; + for (const collection of collections) { + if ( + !hasUncategorizedCollection && + collection.type === CollectionType.uncategorized + ) { + hasUncategorizedCollection = true; + } + if ( + collectionFilesCount.get(collection.id) || + collection.type === CollectionType.uncategorized + ) { + let type: CollectionSummaryType; + if (isIncomingShare(collection, user)) { + if (isIncomingCollabShare(collection, user)) { + type = CollectionSummaryType.incomingShareCollaborator; + } else { + type = CollectionSummaryType.incomingShareViewer; + } + } else if (isOutgoingShare(collection, user)) { + type = CollectionSummaryType.outgoingShare; + } else if (isSharedOnlyViaLink(collection)) { + type = CollectionSummaryType.sharedOnlyViaLink; + } else if (isArchivedCollection(collection)) { + type = CollectionSummaryType.archived; + } else if (isDefaultHiddenCollection(collection)) { + type = CollectionSummaryType.defaultHidden; + } else if (isPinnedCollection(collection)) { + type = CollectionSummaryType.pinned; + } else { + type = CollectionSummaryType[collection.type]; + } + + let CollectionSummaryItemName: string; + if (type === CollectionSummaryType.uncategorized) { + CollectionSummaryItemName = t("UNCATEGORIZED"); + } else if (type === CollectionSummaryType.favorites) { + CollectionSummaryItemName = t("FAVORITES"); + } else { + CollectionSummaryItemName = collection.name; + } + + collectionSummaries.set(collection.id, { + id: collection.id, + name: CollectionSummaryItemName, + latestFile: collectionLatestFiles.get(collection.id), + coverFile: collectionCoverFiles.get(collection.id), + fileCount: collectionFilesCount.get(collection.id) ?? 0, + updationTime: collection.updationTime, + type: type, + order: collection.magicMetadata?.data?.order ?? 0, + }); + } + } + if (!hasUncategorizedCollection) { + collectionSummaries.set( + DUMMY_UNCATEGORIZED_COLLECTION, + getDummyUncategorizedCollectionSummary(), + ); + } + + return collectionSummaries; +} + +function getCollectionsFileCount(files: EnteFile[]): CollectionFilesCount { + const collectionIDToFileMap = groupFilesBasedOnCollectionID(files); + const collectionFilesCount = new Map(); + for (const [id, files] of collectionIDToFileMap) { + collectionFilesCount.set(id, files.length); + } + return collectionFilesCount; +} + +export function getSectionSummaries( + files: EnteFile[], + trashedFiles: EnteFile[], + archivedCollections: Set, +): CollectionSummaries { + const collectionSummaries: CollectionSummaries = new Map(); + collectionSummaries.set( + ALL_SECTION, + getAllSectionSummary(files, archivedCollections), + ); + collectionSummaries.set( + TRASH_SECTION, + getTrashedCollectionSummary(trashedFiles), + ); + collectionSummaries.set(ARCHIVE_SECTION, getArchivedSectionSummary(files)); + + return collectionSummaries; +} + +function getAllSectionSummary( + files: EnteFile[], + archivedCollections: Set, +): CollectionSummary { + const allSectionFiles = getAllSectionVisibleFiles( + files, + archivedCollections, + ); + return { + id: ALL_SECTION, + name: t("ALL_SECTION_NAME"), + type: CollectionSummaryType.all, + coverFile: allSectionFiles?.[0], + latestFile: allSectionFiles?.[0], + fileCount: allSectionFiles?.length || 0, + updationTime: allSectionFiles?.[0]?.updationTime, + }; +} + +function getAllSectionVisibleFiles( + files: EnteFile[], + archivedCollections: Set, +): EnteFile[] { + const allSectionVisibleFiles = getUniqueFiles( + files.filter((file) => { + if ( + isArchivedFile(file) || + archivedCollections.has(file.collectionID) + ) { + return false; + } + return true; + }), + ); + return allSectionVisibleFiles; +} + +export function getDummyUncategorizedCollectionSummary(): CollectionSummary { + return { + id: DUMMY_UNCATEGORIZED_COLLECTION, + name: t("UNCATEGORIZED"), + type: CollectionSummaryType.uncategorized, + latestFile: null, + coverFile: null, + fileCount: 0, + updationTime: 0, + }; +} + +export function getArchivedSectionSummary( + files: EnteFile[], +): CollectionSummary { + const archivedFiles = getUniqueFiles( + files.filter((file) => isArchivedFile(file)), + ); + return { + id: ARCHIVE_SECTION, + name: t("ARCHIVE_SECTION_NAME"), + type: CollectionSummaryType.archive, + coverFile: null, + latestFile: archivedFiles?.[0], + fileCount: archivedFiles?.length, + updationTime: archivedFiles?.[0]?.updationTime, + }; +} + +export function getHiddenItemsSummary( + hiddenFiles: EnteFile[], + hiddenCollections: Collection[], +): CollectionSummary { + const defaultHiddenCollectionIds = new Set( + hiddenCollections + .filter((collection) => isDefaultHiddenCollection(collection)) + .map((collection) => collection.id), + ); + const hiddenItems = getUniqueFiles( + hiddenFiles.filter((file) => + defaultHiddenCollectionIds.has(file.collectionID), + ), + ); + return { + id: HIDDEN_ITEMS_SECTION, + name: t("HIDDEN_ITEMS"), + type: CollectionSummaryType.hiddenItems, + coverFile: hiddenItems?.[0], + latestFile: hiddenItems?.[0], + fileCount: hiddenItems?.length, + updationTime: hiddenItems?.[0]?.updationTime, + }; +} + +export function getTrashedCollectionSummary( + trashedFiles: EnteFile[], +): CollectionSummary { + return { + id: TRASH_SECTION, + name: t("TRASH"), + type: CollectionSummaryType.trash, + coverFile: null, + latestFile: trashedFiles?.[0], + fileCount: trashedFiles?.length, + updationTime: trashedFiles?.[0]?.updationTime, + }; +} + +export async function getUncategorizedCollection( + collections?: Collection[], +): Promise { + if (!collections) { + collections = await getLocalCollections(); + } + const uncategorizedCollection = collections.find( + (collection) => collection.type === CollectionType.uncategorized, + ); + + return uncategorizedCollection; +} + +export function createUnCategorizedCollection() { + return createCollection( + UNCATEGORIZED_COLLECTION_NAME, + CollectionType.uncategorized, + ); +} + +export async function getDefaultHiddenCollection(): Promise { + const collections = await getLocalCollections("hidden"); + const hiddenCollection = collections.find((collection) => + isDefaultHiddenCollection(collection), + ); + + return hiddenCollection; +} + +export function createHiddenCollection() { + return createCollection(HIDDEN_COLLECTION_NAME, CollectionType.album, { + subType: SUB_TYPE.DEFAULT_HIDDEN, + visibility: VISIBILITY_STATE.HIDDEN, + }); +} + +export async function moveToHiddenCollection(files: EnteFile[]) { + try { + let hiddenCollection = await getDefaultHiddenCollection(); + if (!hiddenCollection) { + hiddenCollection = await createHiddenCollection(); + } + const groupiedFiles = groupFilesBasedOnCollectionID(files); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const [collectionID, files] of groupiedFiles.entries()) { + if (collectionID === hiddenCollection.id) { + continue; + } + await moveToCollection(collectionID, hiddenCollection, files); + } + } catch (e) { + logError(e, "move to hidden collection failed "); + throw e; + } +} + +export async function unhideToCollection( + collection: Collection, + files: EnteFile[], +) { + try { + const groupiedFiles = groupFilesBasedOnCollectionID(files); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const [collectionID, files] of groupiedFiles.entries()) { + if (collectionID === collection.id) { + continue; + } + await moveToCollection(collectionID, collection, files); + } + } catch (e) { + logError(e, "unhide to collection failed "); + throw e; + } +} + +export const constructUserIDToEmailMap = ( + user: User, + collections: Collection[], +): Map => { + try { + const userIDToEmailMap = new Map(); + collections.forEach((item) => { + const { owner, sharees } = item; + if (user.id !== owner.id && owner.email) { + userIDToEmailMap.set(owner.id, owner.email); + } + if (sharees) { + sharees.forEach((item) => { + if (item.id !== user.id) + userIDToEmailMap.set(item.id, item.email); + }); + } + }); + return userIDToEmailMap; + } catch (e) { + logError("Error Mapping UserId to email:", e); + return new Map(); + } +}; + +export const constructEmailList = ( + user: User, + collections: Collection[], + familyData: FamilyData, +): string[] => { + const emails = collections + .map((item) => { + const { owner, sharees } = item; + if (owner.email && item.owner.id !== user.id) { + return [item.owner.email]; + } else { + if (!sharees?.length) { + return []; + } + const shareeEmails = item.sharees + .filter((sharee) => sharee.email !== user.email) + .map((sharee) => sharee.email); + return shareeEmails; + } + }) + .flat(); + + // adding family members + if (familyData) { + const family = familyData.members.map((member) => member.email); + emails.push(...family); + } + return Array.from(new Set(emails)); +}; diff --git a/web/apps/photos/src/services/deduplicationService.ts b/web/apps/photos/src/services/deduplicationService.ts new file mode 100644 index 000000000..e261f8e77 --- /dev/null +++ b/web/apps/photos/src/services/deduplicationService.ts @@ -0,0 +1,187 @@ +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { FILE_TYPE } from "constants/file"; +import { EnteFile } from "types/file"; +import { Metadata } from "types/upload"; +import { hasFileHash } from "utils/upload"; + +const ENDPOINT = getEndpoint(); + +interface DuplicatesResponse { + duplicates: Array<{ + fileIDs: number[]; + size: number; + }>; +} + +export interface Duplicate { + files: EnteFile[]; + size: number; +} + +export async function getDuplicates( + files: EnteFile[], + collectionNameMap: Map, +) { + try { + const ascDupes = await fetchDuplicateFileIDs(); + + const descSortedDupes = ascDupes.sort((firstDupe, secondDupe) => { + return secondDupe.size - firstDupe.size; + }); + + const fileMap = new Map(); + for (const file of files) { + fileMap.set(file.id, file); + } + + let result: Duplicate[] = []; + + for (const dupe of descSortedDupes) { + let duplicateFiles: EnteFile[] = []; + for (const fileID of dupe.fileIDs) { + if (fileMap.has(fileID)) { + duplicateFiles.push(fileMap.get(fileID)); + } + } + duplicateFiles = await sortDuplicateFiles( + duplicateFiles, + collectionNameMap, + ); + + if (duplicateFiles.length > 1) { + result = [ + ...result, + ...getDupesGroupedBySameFileHashes({ + files: duplicateFiles, + size: dupe.size, + }), + ]; + } + } + + return result; + } catch (e) { + logError(e, "failed to get duplicate files"); + } +} + +function getDupesGroupedBySameFileHashes(dupe: Duplicate) { + const result: Duplicate[] = []; + + const fileWithHashes: EnteFile[] = []; + const fileWithoutHashes: EnteFile[] = []; + for (const file of dupe.files) { + if (hasFileHash(file.metadata)) { + fileWithHashes.push(file); + } else { + fileWithoutHashes.push(file); + } + } + + if (fileWithHashes.length > 1) { + result.push( + ...groupDupesByFileHashes({ + files: fileWithHashes, + size: dupe.size, + }), + ); + } + + if (fileWithoutHashes.length > 1) { + result.push({ + files: fileWithoutHashes, + size: dupe.size, + }); + } + return result; +} + +function groupDupesByFileHashes(dupe: Duplicate) { + const result: Duplicate[] = []; + + const filesSortedByFileHash = dupe.files + .map((file) => { + return { + file, + hash: + file.metadata.hash ?? + `${file.metadata.imageHash}_${file.metadata.videoHash}`, + }; + }) + .sort((firstFile, secondFile) => { + return firstFile.hash.localeCompare(secondFile.hash); + }); + + let sameHashFiles: EnteFile[] = []; + sameHashFiles.push(filesSortedByFileHash[0].file); + for (let i = 1; i < filesSortedByFileHash.length; i++) { + if ( + areFileHashesSame( + filesSortedByFileHash[i - 1].file.metadata, + filesSortedByFileHash[i].file.metadata, + ) + ) { + sameHashFiles.push(filesSortedByFileHash[i].file); + } else { + if (sameHashFiles.length > 1) { + result.push({ + files: [...sameHashFiles], + size: dupe.size, + }); + } + sameHashFiles = [filesSortedByFileHash[i].file]; + } + } + if (sameHashFiles.length > 1) { + result.push({ + files: sameHashFiles, + size: dupe.size, + }); + } + + return result; +} + +async function fetchDuplicateFileIDs() { + try { + const response = await HTTPService.get( + `${ENDPOINT}/files/duplicates`, + null, + { + "X-Auth-Token": getToken(), + }, + ); + return (response.data as DuplicatesResponse).duplicates; + } catch (e) { + logError(e, "failed to fetch duplicate file IDs"); + } +} + +async function sortDuplicateFiles( + files: EnteFile[], + collectionNameMap: Map, +) { + return files.sort((firstFile, secondFile) => { + const firstCollectionName = collectionNameMap + .get(firstFile.collectionID) + .toLocaleLowerCase(); + const secondCollectionName = collectionNameMap + .get(secondFile.collectionID) + .toLocaleLowerCase(); + return firstCollectionName.localeCompare(secondCollectionName); + }); +} + +function areFileHashesSame(firstFile: Metadata, secondFile: Metadata) { + if (firstFile.fileType === FILE_TYPE.LIVE_PHOTO) { + return ( + firstFile.imageHash === secondFile.imageHash && + firstFile.videoHash === secondFile.videoHash + ); + } else { + return firstFile.hash === secondFile.hash; + } +} diff --git a/web/apps/photos/src/services/download/clients/photos.ts b/web/apps/photos/src/services/download/clients/photos.ts new file mode 100644 index 000000000..11666041d --- /dev/null +++ b/web/apps/photos/src/services/download/clients/photos.ts @@ -0,0 +1,76 @@ +import { CustomError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getFileURL, getThumbnailURL } from "@ente/shared/network/api"; +import { DownloadClient } from "services/download"; +import { EnteFile } from "types/file"; +import { retryAsyncFunction } from "utils/network"; + +export class PhotosDownloadClient implements DownloadClient { + constructor( + private token: string, + private timeout: number, + ) {} + updateTokens(token: string) { + this.token = token; + } + + updateTimeout(timeout: number) { + this.timeout = timeout; + } + + async downloadThumbnail(file: EnteFile): Promise { + if (!this.token) { + throw Error(CustomError.TOKEN_MISSING); + } + const resp = await retryAsyncFunction(() => + HTTPService.get( + getThumbnailURL(file.id), + null, + { "X-Auth-Token": this.token }, + { responseType: "arraybuffer", timeout: this.timeout }, + ), + ); + if (typeof resp.data === "undefined") { + throw Error(CustomError.REQUEST_FAILED); + } + return new Uint8Array(resp.data); + } + + async downloadFile( + file: EnteFile, + onDownloadProgress: (event: { loaded: number; total: number }) => void, + ): Promise { + if (!this.token) { + throw Error(CustomError.TOKEN_MISSING); + } + const resp = await retryAsyncFunction(() => + HTTPService.get( + getFileURL(file.id), + null, + { "X-Auth-Token": this.token }, + { + responseType: "arraybuffer", + timeout: this.timeout, + onDownloadProgress, + }, + ), + ); + if (typeof resp.data === "undefined") { + throw Error(CustomError.REQUEST_FAILED); + } + return new Uint8Array(resp.data); + } + + async downloadFileStream(file: EnteFile): Promise { + if (!this.token) { + throw Error(CustomError.TOKEN_MISSING); + } + return retryAsyncFunction(() => + fetch(getFileURL(file.id), { + headers: { + "X-Auth-Token": this.token, + }, + }), + ); + } +} diff --git a/web/apps/photos/src/services/download/clients/publicAlbums.ts b/web/apps/photos/src/services/download/clients/publicAlbums.ts new file mode 100644 index 000000000..f3412595c --- /dev/null +++ b/web/apps/photos/src/services/download/clients/publicAlbums.ts @@ -0,0 +1,95 @@ +import { CustomError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { + getPublicCollectionFileURL, + getPublicCollectionThumbnailURL, +} from "@ente/shared/network/api"; +import { DownloadClient } from "services/download"; +import { EnteFile } from "types/file"; +import { retryAsyncFunction } from "utils/network"; + +export class PublicAlbumsDownloadClient implements DownloadClient { + constructor( + private token: string, + private passwordToken: string, + private timeout: number, + ) {} + + updateTokens(token: string, passwordToken: string) { + this.token = token; + this.passwordToken = passwordToken; + } + + updateTimeout(timeout: number) { + this.timeout = timeout; + } + + downloadThumbnail = async (file: EnteFile) => { + if (!this.token) { + throw Error(CustomError.TOKEN_MISSING); + } + const resp = await HTTPService.get( + getPublicCollectionThumbnailURL(file.id), + null, + { + "X-Auth-Access-Token": this.token, + ...(this.passwordToken && { + "X-Auth-Access-Token-JWT": this.passwordToken, + }), + }, + { responseType: "arraybuffer" }, + ); + + if (typeof resp.data === "undefined") { + throw Error(CustomError.REQUEST_FAILED); + } + return new Uint8Array(resp.data); + }; + + downloadFile = async ( + file: EnteFile, + onDownloadProgress: (event: { loaded: number; total: number }) => void, + ) => { + if (!this.token) { + throw Error(CustomError.TOKEN_MISSING); + } + const resp = await retryAsyncFunction(() => + HTTPService.get( + getPublicCollectionFileURL(file.id), + null, + { + "X-Auth-Access-Token": this.token, + ...(this.passwordToken && { + "X-Auth-Access-Token-JWT": this.passwordToken, + }), + }, + { + responseType: "arraybuffer", + timeout: this.timeout, + onDownloadProgress, + }, + ), + ); + + if (typeof resp.data === "undefined") { + throw Error(CustomError.REQUEST_FAILED); + } + return new Uint8Array(resp.data); + }; + + async downloadFileStream(file: EnteFile): Promise { + if (!this.token) { + throw Error(CustomError.TOKEN_MISSING); + } + return retryAsyncFunction(() => + fetch(getPublicCollectionFileURL(file.id), { + headers: { + "X-Auth-Access-Token": this.token, + ...(this.passwordToken && { + "X-Auth-Access-Token-JWT": this.passwordToken, + }), + }, + }), + ); + } +} diff --git a/web/apps/photos/src/services/download/index.ts b/web/apps/photos/src/services/download/index.ts new file mode 100644 index 000000000..3d71ed8ad --- /dev/null +++ b/web/apps/photos/src/services/download/index.ts @@ -0,0 +1,605 @@ +import { EnteFile } from "types/file"; +import { + generateStreamFromArrayBuffer, + getRenderableFileURL, +} from "utils/file"; + +import { APPS } from "@ente/shared/apps/constants"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { CustomError } from "@ente/shared/error"; +import { Events, eventBus } from "@ente/shared/events"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { CacheStorageService } from "@ente/shared/storage/cacheStorage"; +import { CACHES } from "@ente/shared/storage/cacheStorage/constants"; +import { LimitedCache } from "@ente/shared/storage/cacheStorage/types"; +import { Remote } from "comlink"; +import { FILE_TYPE } from "constants/file"; +import isElectron from "is-electron"; +import { isInternalUser } from "utils/user"; +import { PhotosDownloadClient } from "./clients/photos"; +import { PublicAlbumsDownloadClient } from "./clients/publicAlbums"; + +export type LivePhotoSourceURL = { + image: () => Promise; + video: () => Promise; +}; + +export type LoadedLivePhotoSourceURL = { + image: string; + video: string; +}; + +export type SourceURLs = { + url: string | LivePhotoSourceURL | LoadedLivePhotoSourceURL; + isOriginal: boolean; + isRenderable: boolean; + type: "normal" | "livePhoto"; +}; + +export type OnDownloadProgress = (event: { + loaded: number; + total: number; +}) => void; + +export interface DownloadClient { + updateTokens: (token: string, passwordToken?: string) => void; + updateTimeout: (timeout: number) => void; + downloadThumbnail: ( + file: EnteFile, + timeout?: number, + ) => Promise; + downloadFile: ( + file: EnteFile, + onDownloadProgress: OnDownloadProgress, + ) => Promise; + downloadFileStream: (file: EnteFile) => Promise; +} + +const FILE_CACHE_LIMIT = 5 * 1024 * 1024 * 1024; // 5GB + +class DownloadManagerImpl { + private ready: boolean = false; + private downloadClient: DownloadClient; + private thumbnailCache?: LimitedCache; + // disk cache is only available on electron + private diskFileCache?: LimitedCache; + private cryptoWorker: Remote; + + private fileObjectURLPromises = new Map>(); + private fileConversionPromises = new Map>(); + private thumbnailObjectURLPromises = new Map>(); + + private fileDownloadProgress = new Map(); + + private progressUpdater: (value: Map) => void = () => {}; + + async init( + app: APPS, + tokens?: { token: string; passwordToken?: string } | { token: string }, + timeout?: number, + ) { + try { + if (this.ready) { + addLogLine("DownloadManager already initialized"); + return; + } + this.downloadClient = createDownloadClient(app, tokens, timeout); + this.thumbnailCache = await openThumbnailCache(); + this.diskFileCache = isElectron() && (await openDiskFileCache()); + this.cryptoWorker = await ComlinkCryptoWorker.getInstance(); + this.ready = true; + eventBus.on(Events.LOGOUT, this.logoutHandler.bind(this), this); + } catch (e) { + logError(e, "DownloadManager init failed"); + throw e; + } + } + + private async logoutHandler() { + try { + addLogLine("downloadManger logoutHandler started"); + this.ready = false; + this.cryptoWorker = null; + this.downloadClient = null; + this.fileObjectURLPromises.clear(); + this.fileConversionPromises.clear(); + this.thumbnailObjectURLPromises.clear(); + this.fileDownloadProgress.clear(); + this.progressUpdater = () => {}; + addLogLine("downloadManager logoutHandler completed"); + } catch (e) { + logError(e, "downloadManager logoutHandler failed"); + } + } + + updateToken(token: string, passwordToken?: string) { + this.downloadClient.updateTokens(token, passwordToken); + } + + updateCryptoWorker(cryptoWorker: Remote) { + this.cryptoWorker = cryptoWorker; + } + + updateTimeout(timeout: number) { + this.downloadClient.updateTimeout(timeout); + } + + setProgressUpdater(progressUpdater: (value: Map) => void) { + this.progressUpdater = progressUpdater; + } + + async reloadCaches() { + this.thumbnailCache = await openThumbnailCache(); + this.diskFileCache = isElectron() && (await openDiskFileCache()); + } + + private async getCachedThumbnail(fileID: number) { + try { + const cacheResp: Response = await this.thumbnailCache?.match( + fileID.toString(), + ); + + if (cacheResp) { + return new Uint8Array(await cacheResp.arrayBuffer()); + } + } catch (e) { + logError(e, "failed to get cached thumbnail"); + throw e; + } + } + private async getCachedFile(file: EnteFile): Promise { + try { + if (!this.diskFileCache) { + return null; + } + const cacheResp: Response = await this.diskFileCache?.match( + file.id.toString(), + { sizeInBytes: file.info?.fileSize }, + ); + return cacheResp?.clone(); + } catch (e) { + logError(e, "failed to get cached file"); + throw e; + } + } + + private downloadThumb = async (file: EnteFile) => { + const encrypted = await this.downloadClient.downloadThumbnail(file); + const decrypted = await this.cryptoWorker.decryptThumbnail( + encrypted, + await this.cryptoWorker.fromB64(file.thumbnail.decryptionHeader), + file.key, + ); + return decrypted; + }; + + async getThumbnail(file: EnteFile, localOnly = false) { + try { + if (!this.ready) { + throw Error(CustomError.DOWNLOAD_MANAGER_NOT_READY); + } + const cachedThumb = await this.getCachedThumbnail(file.id); + if (cachedThumb) { + return cachedThumb; + } + if (localOnly) { + return null; + } + const thumb = await this.downloadThumb(file); + + this.thumbnailCache + ?.put(file.id.toString(), new Response(thumb)) + .catch((e) => { + logError(e, "thumb cache put failed"); + // TODO: handle storage full exception. + }); + return thumb; + } catch (e) { + logError(e, "getThumbnail failed"); + throw e; + } + } + + async getThumbnailForPreview(file: EnteFile, localOnly = false) { + try { + if (!this.ready) { + throw Error(CustomError.DOWNLOAD_MANAGER_NOT_READY); + } + if (!this.thumbnailObjectURLPromises.has(file.id)) { + const thumbPromise = this.getThumbnail(file, localOnly); + const thumbURLPromise = thumbPromise.then( + (thumb) => thumb && URL.createObjectURL(new Blob([thumb])), + ); + this.thumbnailObjectURLPromises.set(file.id, thumbURLPromise); + } + let thumb = await this.thumbnailObjectURLPromises.get(file.id); + if (!thumb && !localOnly) { + this.thumbnailObjectURLPromises.delete(file.id); + thumb = await this.getThumbnailForPreview(file, localOnly); + } + return thumb; + } catch (e) { + this.thumbnailObjectURLPromises.delete(file.id); + logError(e, "get DownloadManager preview Failed"); + throw e; + } + } + + getFileForPreview = async ( + file: EnteFile, + forceConvert = false, + ): Promise => { + try { + if (!this.ready) { + throw Error(CustomError.DOWNLOAD_MANAGER_NOT_READY); + } + const getFileForPreviewPromise = async () => { + const fileBlob = await new Response( + await this.getFile(file, true), + ).blob(); + const { url: originalFileURL } = + await this.fileObjectURLPromises.get(file.id); + + const converted = await getRenderableFileURL( + file, + fileBlob, + originalFileURL as string, + forceConvert, + ); + return converted; + }; + if (forceConvert || !this.fileConversionPromises.has(file.id)) { + this.fileConversionPromises.set( + file.id, + getFileForPreviewPromise(), + ); + } + const fileURLs = await this.fileConversionPromises.get(file.id); + return fileURLs; + } catch (e) { + this.fileConversionPromises.delete(file.id); + logError(e, "download manager getFileForPreview Failed"); + throw e; + } + }; + + async getFile( + file: EnteFile, + cacheInMemory = false, + ): Promise> { + try { + if (!this.ready) { + throw Error(CustomError.DOWNLOAD_MANAGER_NOT_READY); + } + const getFilePromise = async (): Promise => { + const fileStream = await this.downloadFile(file); + const fileBlob = await new Response(fileStream).blob(); + return { + url: URL.createObjectURL(fileBlob), + isOriginal: true, + isRenderable: false, + type: "normal", + }; + }; + if (!this.fileObjectURLPromises.has(file.id)) { + if (!cacheInMemory) { + return await this.downloadFile(file); + } + this.fileObjectURLPromises.set(file.id, getFilePromise()); + } + const fileURLs = await this.fileObjectURLPromises.get(file.id); + if (fileURLs.isOriginal) { + const fileStream = (await fetch(fileURLs.url as string)).body; + return fileStream; + } else { + return await this.downloadFile(file); + } + } catch (e) { + this.fileObjectURLPromises.delete(file.id); + logError(e, "download manager getFile Failed"); + throw e; + } + } + + private async downloadFile( + file: EnteFile, + ): Promise> { + try { + addLogLine(`download attempted for fileID:${file.id}`); + const onDownloadProgress = this.trackDownloadProgress( + file.id, + file.info?.fileSize, + ); + if ( + file.metadata.fileType === FILE_TYPE.IMAGE || + file.metadata.fileType === FILE_TYPE.LIVE_PHOTO + ) { + let encrypted = await this.getCachedFile(file); + if (!encrypted) { + encrypted = new Response( + await this.downloadClient.downloadFile( + file, + onDownloadProgress, + ), + ); + if (this.diskFileCache) { + this.diskFileCache + .put(file.id.toString(), encrypted.clone()) + .catch((e) => { + logError(e, "file cache put failed"); + // TODO: handle storage full exception. + }); + } + } + this.clearDownloadProgress(file.id); + try { + const decrypted = await this.cryptoWorker.decryptFile( + new Uint8Array(await encrypted.arrayBuffer()), + await this.cryptoWorker.fromB64( + file.file.decryptionHeader, + ), + file.key, + ); + return generateStreamFromArrayBuffer(decrypted); + } catch (e) { + if (e.message === CustomError.PROCESSING_FAILED) { + logError(e, "Failed to process file", { + fileID: file.id, + fromMobile: + !!file.metadata.localID || + !!file.metadata.deviceFolder || + !!file.metadata.version, + }); + addLogLine( + `Failed to process file with fileID:${file.id}, localID: ${file.metadata.localID}, version: ${file.metadata.version}, deviceFolder:${file.metadata.deviceFolder} with error: ${e.message}`, + ); + } + throw e; + } + } + + let resp: Response = await this.getCachedFile(file); + if (!resp) { + resp = await this.downloadClient.downloadFileStream(file); + if (this.diskFileCache) { + this.diskFileCache + .put(file.id.toString(), resp.clone()) + .catch((e) => { + logError(e, "file cache put failed"); + }); + } + } + const reader = resp.body.getReader(); + + const contentLength = +resp.headers.get("Content-Length") ?? 0; + let downloadedBytes = 0; + + const stream = new ReadableStream({ + start: async (controller) => { + try { + const decryptionHeader = + await this.cryptoWorker.fromB64( + file.file.decryptionHeader, + ); + const fileKey = await this.cryptoWorker.fromB64( + file.key, + ); + const { pullState, decryptionChunkSize } = + await this.cryptoWorker.initChunkDecryption( + decryptionHeader, + fileKey, + ); + let data = new Uint8Array(); + // The following function handles each data chunk + const push = () => { + // "done" is a Boolean and value a "Uint8Array" + reader.read().then(async ({ done, value }) => { + try { + // Is there more data to read? + if (!done) { + downloadedBytes += value.byteLength; + onDownloadProgress({ + loaded: downloadedBytes, + total: contentLength, + }); + const buffer = new Uint8Array( + data.byteLength + value.byteLength, + ); + buffer.set(new Uint8Array(data), 0); + buffer.set( + new Uint8Array(value), + data.byteLength, + ); + if ( + buffer.length > decryptionChunkSize + ) { + const fileData = buffer.slice( + 0, + decryptionChunkSize, + ); + try { + const { decryptedData } = + await this.cryptoWorker.decryptFileChunk( + fileData, + pullState, + ); + controller.enqueue( + decryptedData, + ); + data = + buffer.slice( + decryptionChunkSize, + ); + } catch (e) { + if ( + e.message === + CustomError.PROCESSING_FAILED + ) { + logError( + e, + "Failed to process file", + { + fileID: file.id, + fromMobile: + !!file.metadata + .localID || + !!file.metadata + .deviceFolder || + !!file.metadata + .version, + }, + ); + addLogLine( + `Failed to process file ${file.id} from localID: ${file.metadata.localID} version: ${file.metadata.version} deviceFolder:${file.metadata.deviceFolder} with error: ${e.message}`, + ); + } + throw e; + } + } else { + data = buffer; + } + push(); + } else { + if (data) { + try { + const { decryptedData } = + await this.cryptoWorker.decryptFileChunk( + data, + pullState, + ); + controller.enqueue( + decryptedData, + ); + data = null; + } catch (e) { + if ( + e.message === + CustomError.PROCESSING_FAILED + ) { + logError( + e, + "Failed to process file", + { + fileID: file.id, + fromMobile: + !!file.metadata + .localID || + !!file.metadata + .deviceFolder || + !!file.metadata + .version, + }, + ); + addLogLine( + `Failed to process file ${file.id} from localID: ${file.metadata.localID} version: ${file.metadata.version} deviceFolder:${file.metadata.deviceFolder} with error: ${e.message}`, + ); + } + throw e; + } + } + controller.close(); + } + } catch (e) { + logError(e, "Failed to process file chunk"); + controller.error(e); + } + }); + }; + + push(); + } catch (e) { + logError(e, "Failed to process file stream"); + controller.error(e); + } + }, + }); + return stream; + } catch (e) { + logError(e, "Failed to download file"); + throw e; + } + } + + trackDownloadProgress = (fileID: number, fileSize: number) => { + return (event: { loaded: number; total: number }) => { + if (isNaN(event.total) || event.total === 0) { + if (!fileSize) { + return; + } + event.total = fileSize; + } + if (event.loaded === event.total) { + this.fileDownloadProgress.delete(fileID); + } else { + this.fileDownloadProgress.set( + fileID, + Math.round((event.loaded * 100) / event.total), + ); + } + this.progressUpdater(new Map(this.fileDownloadProgress)); + }; + }; + + clearDownloadProgress = (fileID: number) => { + this.fileDownloadProgress.delete(fileID); + this.progressUpdater(new Map(this.fileDownloadProgress)); + }; +} + +const DownloadManager = new DownloadManagerImpl(); + +export default DownloadManager; + +async function openThumbnailCache() { + try { + return await CacheStorageService.open(CACHES.THUMBS); + } catch (e) { + logError(e, "Failed to open thumbnail cache"); + if (isInternalUser()) { + throw e; + } else { + return null; + } + } +} + +async function openDiskFileCache() { + try { + if (!isElectron()) { + throw Error(CustomError.NOT_AVAILABLE_ON_WEB); + } + return await CacheStorageService.open(CACHES.FILES, FILE_CACHE_LIMIT); + } catch (e) { + logError(e, "Failed to open file cache"); + if (isInternalUser()) { + throw e; + } else { + return null; + } + } +} + +function createDownloadClient( + app: APPS, + tokens?: { token: string; passwordToken?: string } | { token: string }, + timeout?: number, +): DownloadClient { + if (!timeout) { + timeout = 300000; // 5 minute + } + if (app === APPS.ALBUMS) { + if (!tokens) { + tokens = { token: undefined, passwordToken: undefined }; + } + const { token, passwordToken } = tokens as { + token: string; + passwordToken: string; + }; + return new PublicAlbumsDownloadClient(token, passwordToken, timeout); + } else { + const { token } = tokens; + return new PhotosDownloadClient(token, timeout); + } +} diff --git a/web/apps/photos/src/services/embeddingService.ts b/web/apps/photos/src/services/embeddingService.ts new file mode 100644 index 000000000..68d065aec --- /dev/null +++ b/web/apps/photos/src/services/embeddingService.ts @@ -0,0 +1,213 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import localForage from "@ente/shared/storage/localForage"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { + Embedding, + EncryptedEmbedding, + GetEmbeddingDiffResponse, + Model, + PutEmbeddingRequest, +} from "types/embedding"; +import { EnteFile } from "types/file"; +import { getLatestVersionEmbeddings } from "utils/embedding"; +import { getLocalCollections } from "./collectionService"; +import { getAllLocalFiles } from "./fileService"; +import { getLocalTrashedFiles } from "./trashService"; + +const ENDPOINT = getEndpoint(); + +const DIFF_LIMIT = 500; + +const EMBEDDINGS_TABLE_V1 = "embeddings"; +const EMBEDDINGS_TABLE = "embeddings_v2"; +const EMBEDDING_SYNC_TIME_TABLE = "embedding_sync_time"; + +export const getAllLocalEmbeddings = async () => { + const embeddings: Array = + await localForage.getItem(EMBEDDINGS_TABLE); + if (!embeddings) { + await localForage.removeItem(EMBEDDINGS_TABLE_V1); + await localForage.removeItem(EMBEDDING_SYNC_TIME_TABLE); + await localForage.setItem(EMBEDDINGS_TABLE, []); + return []; + } + return embeddings; +}; + +export const getLocalEmbeddings = async (model: Model) => { + const embeddings = await getAllLocalEmbeddings(); + return embeddings.filter((embedding) => embedding.model === model); +}; + +const getModelEmbeddingSyncTime = async (model: Model) => { + return ( + (await localForage.getItem( + `${model}-${EMBEDDING_SYNC_TIME_TABLE}`, + )) ?? 0 + ); +}; + +const setModelEmbeddingSyncTime = async (model: Model, time: number) => { + await localForage.setItem(`${model}-${EMBEDDING_SYNC_TIME_TABLE}`, time); +}; + +export const syncEmbeddings = async (models: Model[] = [Model.ONNX_CLIP]) => { + try { + let allEmbeddings = await getAllLocalEmbeddings(); + const localFiles = await getAllLocalFiles(); + const hiddenAlbums = await getLocalCollections("hidden"); + const localTrashFiles = await getLocalTrashedFiles(); + const fileIdToKeyMap = new Map(); + const allLocalFiles = [...localFiles, ...localTrashFiles]; + allLocalFiles.forEach((file) => { + fileIdToKeyMap.set(file.id, file.key); + }); + await cleanupDeletedEmbeddings(allLocalFiles, allEmbeddings); + addLogLine(`Syncing embeddings localCount: ${allEmbeddings.length}`); + for (const model of models) { + let modelLastSinceTime = await getModelEmbeddingSyncTime(model); + addLogLine( + `Syncing ${model} model's embeddings sinceTime: ${modelLastSinceTime}`, + ); + let response: GetEmbeddingDiffResponse; + do { + response = await getEmbeddingsDiff(modelLastSinceTime, model); + if (!response.diff?.length) { + return; + } + const newEmbeddings = await Promise.all( + response.diff.map(async (embedding) => { + try { + const { + encryptedEmbedding, + decryptionHeader, + ...rest + } = embedding; + const worker = + await ComlinkCryptoWorker.getInstance(); + const fileKey = fileIdToKeyMap.get( + embedding.fileID, + ); + if (!fileKey) { + throw Error(CustomError.FILE_NOT_FOUND); + } + const decryptedData = await worker.decryptEmbedding( + encryptedEmbedding, + decryptionHeader, + fileIdToKeyMap.get(embedding.fileID), + ); + + return { + ...rest, + embedding: decryptedData, + } as Embedding; + } catch (e) { + let info: Record; + if (e.message === CustomError.FILE_NOT_FOUND) { + const hasHiddenAlbums = + hiddenAlbums?.length > 0; + info = { + hasHiddenAlbums, + }; + } + logError( + e, + "decryptEmbedding failed for file", + info, + ); + } + }), + ); + allEmbeddings = getLatestVersionEmbeddings([ + ...allEmbeddings, + ...newEmbeddings, + ]); + if (response.diff.length) { + modelLastSinceTime = response.diff.slice(-1)[0].updatedAt; + } + await localForage.setItem(EMBEDDINGS_TABLE, allEmbeddings); + await setModelEmbeddingSyncTime(model, modelLastSinceTime); + addLogLine( + `Syncing embeddings syncedEmbeddingsCount: ${allEmbeddings.length}`, + ); + } while (response.diff.length === DIFF_LIMIT); + } + } catch (e) { + logError(e, "Sync embeddings failed"); + } +}; + +export const getEmbeddingsDiff = async ( + sinceTime: number, + model: Model, +): Promise => { + try { + const token = getToken(); + if (!token) { + return; + } + const response = await HTTPService.get( + `${ENDPOINT}/embeddings/diff`, + { + sinceTime, + limit: DIFF_LIMIT, + model, + }, + { + "X-Auth-Token": token, + }, + ); + return await response.data; + } catch (e) { + logError(e, "get embeddings diff failed"); + throw e; + } +}; + +export const putEmbedding = async ( + putEmbeddingReq: PutEmbeddingRequest, +): Promise => { + try { + const token = getToken(); + if (!token) { + return; + } + const resp = await HTTPService.put( + `${ENDPOINT}/embeddings`, + putEmbeddingReq, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data; + } catch (e) { + logError(e, "put embedding failed"); + throw e; + } +}; + +export const cleanupDeletedEmbeddings = async ( + allLocalFiles: EnteFile[], + allLocalEmbeddings: Embedding[], +) => { + const activeFileIds = new Set(); + allLocalFiles.forEach((file) => { + activeFileIds.add(file.id); + }); + + const remainingEmbeddings = allLocalEmbeddings.filter((embedding) => + activeFileIds.has(embedding.fileID), + ); + if (allLocalEmbeddings.length !== remainingEmbeddings.length) { + addLogLine( + `cleanupDeletedEmbeddings embeddingsCount: ${allLocalEmbeddings.length} remainingEmbeddingsCount: ${remainingEmbeddings.length}`, + ); + await localForage.setItem(EMBEDDINGS_TABLE, remainingEmbeddings); + } +}; diff --git a/web/apps/photos/src/services/entityService.ts b/web/apps/photos/src/services/entityService.ts new file mode 100644 index 000000000..64ead657e --- /dev/null +++ b/web/apps/photos/src/services/entityService.ts @@ -0,0 +1,195 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { addLogLine } from "@ente/shared/logging"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import localForage from "@ente/shared/storage/localForage"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { getActualKey } from "@ente/shared/user"; +import { + EncryptedEntity, + EncryptedEntityKey, + Entity, + EntityKey, + EntitySyncDiffResponse, + EntityType, +} from "types/entity"; +import { getLatestVersionEntities } from "utils/entity"; + +const ENDPOINT = getEndpoint(); + +const DIFF_LIMIT = 500; + +const ENTITY_TABLES: Record = { + [EntityType.LOCATION_TAG]: "location_tags", +}; + +const ENTITY_KEY_TABLES: Record = { + [EntityType.LOCATION_TAG]: "location_tags_key", +}; + +const ENTITY_SYNC_TIME_TABLES: Record = { + [EntityType.LOCATION_TAG]: "location_tags_time", +}; + +const getLocalEntity = async (type: EntityType) => { + const entities: Array> = + (await localForage.getItem[]>(ENTITY_TABLES[type])) || []; + return entities; +}; + +const getEntityLastSyncTime = async (type: EntityType) => { + return ( + (await localForage.getItem(ENTITY_SYNC_TIME_TABLES[type])) ?? 0 + ); +}; + +const getCachedEntityKey = async (type: EntityType) => { + const entityKey: EntityKey = + (await localForage.getItem(ENTITY_KEY_TABLES[type])) || null; + return entityKey; +}; + +const getEntityKey = async (type: EntityType) => { + try { + const entityKey = await getCachedEntityKey(type); + if (entityKey) { + return entityKey; + } + const token = getToken(); + if (!token) { + return; + } + const resp = await HTTPService.get( + `${ENDPOINT}/user-entity/key`, + { + type, + }, + { + "X-Auth-Token": token, + }, + ); + const encryptedEntityKey: EncryptedEntityKey = resp.data; + const worker = await ComlinkCryptoWorker.getInstance(); + const masterKey = await getActualKey(); + const { encryptedKey, header, ...rest } = encryptedEntityKey; + const decryptedData = await worker.decryptB64( + encryptedKey, + header, + masterKey, + ); + const decryptedEntityKey: EntityKey = { data: decryptedData, ...rest }; + localForage.setItem(ENTITY_KEY_TABLES[type], decryptedEntityKey); + return decryptedEntityKey; + } catch (e) { + logError(e, "Get entity key failed"); + throw e; + } +}; + +export const getLatestEntities = async (type: EntityType) => { + try { + await syncEntity(type); + return await getLocalEntity(type); + } catch (e) { + logError(e, "Sync entities failed"); + throw e; + } +}; + +export const syncEntities = async () => { + try { + await syncEntity(EntityType.LOCATION_TAG); + } catch (e) { + logError(e, "Sync entities failed"); + throw e; + } +}; + +const syncEntity = async (type: EntityType): Promise> => { + try { + let entities = await getLocalEntity(type); + addLogLine( + `Syncing ${type} entities localEntitiesCount: ${entities.length}`, + ); + let syncTime = await getEntityLastSyncTime(type); + addLogLine(`Syncing ${type} entities syncTime: ${syncTime}`); + let response: EntitySyncDiffResponse; + do { + response = await getEntityDiff(type, syncTime); + if (!response.diff?.length) { + return; + } + + const entityKey = await getEntityKey(type); + const newDecryptedEntities: Array> = await Promise.all( + response.diff.map(async (entity: EncryptedEntity) => { + if (entity.isDeleted) { + // This entry is deleted, so we don't need to decrypt it, just return it as is + // as unknown as EntityData is a hack to get around the type system + return entity as unknown as Entity; + } + const { encryptedData, header, ...rest } = entity; + const worker = await ComlinkCryptoWorker.getInstance(); + const decryptedData = await worker.decryptMetadata( + encryptedData, + header, + entityKey.data, + ); + return { + ...rest, + data: decryptedData, + }; + }), + ); + + entities = getLatestVersionEntities([ + ...entities, + ...newDecryptedEntities, + ]); + + const nonDeletedEntities = entities.filter( + (entity) => !entity.isDeleted, + ); + + if (response.diff.length) { + syncTime = response.diff.slice(-1)[0].updatedAt; + } + await localForage.setItem(ENTITY_TABLES[type], nonDeletedEntities); + await localForage.setItem(ENTITY_SYNC_TIME_TABLES[type], syncTime); + addLogLine( + `Syncing ${type} entities syncedEntitiesCount: ${nonDeletedEntities.length}`, + ); + } while (response.diff.length === DIFF_LIMIT); + } catch (e) { + logError(e, "Sync entity failed"); + } +}; + +const getEntityDiff = async ( + type: EntityType, + time: number, +): Promise => { + try { + const token = getToken(); + if (!token) { + return; + } + const resp = await HTTPService.get( + `${ENDPOINT}/user-entity/entity/diff`, + { + sinceTime: time, + type, + limit: DIFF_LIMIT, + }, + { + "X-Auth-Token": token, + }, + ); + + return resp.data; + } catch (e) { + logError(e, "Get entity diff failed"); + throw e; + } +}; diff --git a/web/apps/photos/src/services/export/index.ts b/web/apps/photos/src/services/export/index.ts new file mode 100644 index 000000000..7190b5b93 --- /dev/null +++ b/web/apps/photos/src/services/export/index.ts @@ -0,0 +1,1217 @@ +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { EnteFile } from "types/file"; +import { sleep } from "utils/common"; +import { + convertCollectionIDExportNameObjectToMap, + convertFileIDExportNameObjectToMap, + getCollectionExportPath, + getCollectionExportedFiles, + getCollectionIDFromFileUID, + getDeletedExportedCollections, + getDeletedExportedFiles, + getExportRecordFileUID, + getFileExportPath, + getFileMetadataExportPath, + getGoogleLikeMetadataFile, + getLivePhotoExportName, + getMetadataFileExportPath, + getMetadataFolderExportPath, + getRenamedExportedCollections, + getTrashedFileExportPath, + getUnExportedFiles, + getUniqueCollectionExportName, + getUniqueFileExportName, + isLivePhotoExportName, + parseLivePhotoExportName, +} from "utils/export"; +import { getAllLocalCollections } from "../collectionService"; +import downloadManager from "../download"; +import { getAllLocalFiles } from "../fileService"; + +import { + generateStreamFromArrayBuffer, + getPersonalFiles, + getUpdatedEXIFFileForDownload, + mergeMetadata, +} from "utils/file"; +import { decodeLivePhoto } from "../livePhotoService"; + +import ElectronAPIs from "@ente/shared/electron"; +import { CustomError } from "@ente/shared/error"; +import { Events, eventBus } from "@ente/shared/events"; +import { addLogLine } from "@ente/shared/logging"; +import { User } from "@ente/shared/user/types"; +import { ExportStage } from "constants/export"; +import { FILE_TYPE } from "constants/file"; +import { Collection } from "types/collection"; +import { + ExportProgress, + ExportRecord, + ExportSettings, + ExportUIUpdaters, +} from "types/export"; +import { + constructCollectionNameMap, + getCollectionUserFacingName, + getNonEmptyPersonalCollections, +} from "utils/collection"; +import QueueProcessor, { + CancellationStatus, + RequestCanceller, +} from "../queueProcessor"; +import { migrateExport } from "./migration"; + +const EXPORT_RECORD_FILE_NAME = "export_status.json"; + +export const ENTE_EXPORT_DIRECTORY = "ente Photos"; + +export const NULL_EXPORT_RECORD: ExportRecord = { + version: 3, + lastAttemptTimestamp: null, + stage: ExportStage.INIT, + fileExportNames: {}, + collectionExportNames: {}, +}; + +class ExportService { + private exportSettings: ExportSettings; + private exportInProgress: RequestCanceller = null; + private reRunNeeded = false; + private exportRecordUpdater = new QueueProcessor(1); + private fileReader: FileReader = null; + private continuousExportEventHandler: () => void; + private uiUpdater: ExportUIUpdaters = { + setExportProgress: () => {}, + setExportStage: () => {}, + setLastExportTime: () => {}, + setPendingExports: () => {}, + }; + private currentExportProgress: ExportProgress = { + total: 0, + success: 0, + failed: 0, + }; + + getExportSettings(): ExportSettings { + try { + if (this.exportSettings) { + return this.exportSettings; + } + const exportSettings = getData(LS_KEYS.EXPORT); + this.exportSettings = exportSettings; + return exportSettings; + } catch (e) { + logError(e, "getExportSettings failed"); + throw e; + } + } + + updateExportSettings(newData: Partial) { + try { + const exportSettings = this.getExportSettings(); + const newSettings = { ...exportSettings, ...newData }; + this.exportSettings = newSettings; + setData(LS_KEYS.EXPORT, newSettings); + } catch (e) { + logError(e, "updateExportSettings failed"); + throw e; + } + } + + async runMigration( + exportDir: string, + exportRecord: ExportRecord, + updateProgress: (progress: ExportProgress) => void, + ) { + try { + addLogLine("running migration"); + await migrateExport(exportDir, exportRecord, updateProgress); + addLogLine("migration completed"); + } catch (e) { + logError(e, "migration failed"); + throw e; + } + } + + setUIUpdaters(uiUpdater: ExportUIUpdaters) { + this.uiUpdater = uiUpdater; + this.uiUpdater.setExportProgress(this.currentExportProgress); + } + + private updateExportProgress(exportProgress: ExportProgress) { + this.currentExportProgress = exportProgress; + this.uiUpdater.setExportProgress(exportProgress); + } + + private async updateExportStage(stage: ExportStage) { + const exportFolder = this.getExportSettings()?.folder; + await this.updateExportRecord(exportFolder, { stage }); + this.uiUpdater.setExportStage(stage); + } + + private async updateLastExportTime(exportTime: number) { + const exportFolder = this.getExportSettings()?.folder; + await this.updateExportRecord(exportFolder, { + lastAttemptTimestamp: exportTime, + }); + this.uiUpdater.setLastExportTime(exportTime); + } + + async changeExportDirectory() { + try { + const newRootDir = await ElectronAPIs.selectDirectory(); + if (!newRootDir) { + throw Error(CustomError.SELECT_FOLDER_ABORTED); + } + const newExportDir = `${newRootDir}/${ENTE_EXPORT_DIRECTORY}`; + await ElectronAPIs.checkExistsAndCreateDir(newExportDir); + return newExportDir; + } catch (e) { + if (e.message !== CustomError.SELECT_FOLDER_ABORTED) { + logError(e, "changeExportDirectory failed"); + } + throw e; + } + } + + enableContinuousExport() { + try { + if (this.continuousExportEventHandler) { + addLogLine("continuous export already enabled"); + return; + } + addLogLine("enabling continuous export"); + this.continuousExportEventHandler = () => { + this.scheduleExport(); + }; + this.continuousExportEventHandler(); + eventBus.addListener( + Events.LOCAL_FILES_UPDATED, + this.continuousExportEventHandler, + ); + } catch (e) { + logError(e, "failed to enableContinuousExport "); + throw e; + } + } + + disableContinuousExport() { + try { + if (!this.continuousExportEventHandler) { + addLogLine("continuous export already disabled"); + return; + } + addLogLine("disabling continuous export"); + eventBus.removeListener( + Events.LOCAL_FILES_UPDATED, + this.continuousExportEventHandler, + ); + this.continuousExportEventHandler = null; + } catch (e) { + logError(e, "failed to disableContinuousExport"); + throw e; + } + } + + getPendingExports = async ( + exportRecord: ExportRecord, + ): Promise => { + try { + const user: User = getData(LS_KEYS.USER); + const files = await getAllLocalFiles(); + const collections = await getAllLocalCollections(); + const collectionIdToOwnerIDMap = new Map( + collections.map((collection) => [ + collection.id, + collection.owner.id, + ]), + ); + const userPersonalFiles = getPersonalFiles( + files, + user, + collectionIdToOwnerIDMap, + ); + + const unExportedFiles = getUnExportedFiles( + userPersonalFiles, + exportRecord, + ); + return unExportedFiles; + } catch (e) { + logError(e, "getUpdateFileLists failed"); + throw e; + } + }; + + async preExport(exportFolder: string) { + this.verifyExportFolderExists(exportFolder); + const exportRecord = await this.getExportRecord(exportFolder); + await this.updateExportStage(ExportStage.MIGRATION); + await this.runMigration( + exportFolder, + exportRecord, + this.updateExportProgress.bind(this), + ); + await this.updateExportStage(ExportStage.STARTING); + } + + async postExport() { + try { + const exportFolder = this.getExportSettings()?.folder; + if (!this.exportFolderExists(exportFolder)) { + this.uiUpdater.setExportStage(ExportStage.INIT); + return; + } + await this.updateExportStage(ExportStage.FINISHED); + await this.updateLastExportTime(Date.now()); + + const exportRecord = await this.getExportRecord(exportFolder); + + const pendingExports = await this.getPendingExports(exportRecord); + this.uiUpdater.setPendingExports(pendingExports); + } catch (e) { + logError(e, "postExport failed"); + } + } + + async stopRunningExport() { + try { + addLogLine("user requested export cancellation"); + this.exportInProgress.exec(); + this.exportInProgress = null; + this.reRunNeeded = false; + await this.postExport(); + } catch (e) { + logError(e, "stopRunningExport failed"); + } + } + + scheduleExport = async () => { + try { + if (this.exportInProgress) { + addLogLine("export in progress, scheduling re-run"); + this.reRunNeeded = true; + return; + } else { + addLogLine("export not in progress, starting export"); + } + + const isCanceled: CancellationStatus = { status: false }; + const canceller: RequestCanceller = { + exec: () => { + isCanceled.status = true; + }, + }; + this.exportInProgress = canceller; + try { + const exportFolder = this.getExportSettings()?.folder; + await this.preExport(exportFolder); + addLogLine("export started"); + await this.runExport(exportFolder, isCanceled); + addLogLine("export completed"); + } finally { + if (isCanceled.status) { + addLogLine("export cancellation done"); + if (!this.exportInProgress) { + await this.postExport(); + } + } else { + await this.postExport(); + addLogLine("resetting export in progress after completion"); + this.exportInProgress = null; + if (this.reRunNeeded) { + this.reRunNeeded = false; + addLogLine("re-running export"); + setTimeout(() => this.scheduleExport(), 0); + } + } + } + } catch (e) { + if ( + e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST && + e.message !== CustomError.EXPORT_STOPPED + ) { + logError(e, "scheduleExport failed"); + } + } + }; + + private async runExport( + exportFolder: string, + isCanceled: CancellationStatus, + ) { + try { + const user: User = getData(LS_KEYS.USER); + const files = mergeMetadata(await getAllLocalFiles()); + const collections = await getAllLocalCollections(); + const collectionIdToOwnerIDMap = new Map( + collections.map((collection) => [ + collection.id, + collection.owner.id, + ]), + ); + const personalFiles = getPersonalFiles( + files, + user, + collectionIdToOwnerIDMap, + ); + + const nonEmptyPersonalCollections = getNonEmptyPersonalCollections( + collections, + personalFiles, + user, + ); + + const exportRecord = await this.getExportRecord(exportFolder); + const collectionIDExportNameMap = + convertCollectionIDExportNameObjectToMap( + exportRecord.collectionExportNames, + ); + const collectionIDNameMap = constructCollectionNameMap( + nonEmptyPersonalCollections, + ); + + const renamedCollections = getRenamedExportedCollections( + nonEmptyPersonalCollections, + exportRecord, + ); + + const removedFileUIDs = getDeletedExportedFiles( + personalFiles, + exportRecord, + ); + const filesToExport = getUnExportedFiles( + personalFiles, + exportRecord, + ); + const deletedExportedCollections = getDeletedExportedCollections( + nonEmptyPersonalCollections, + exportRecord, + ); + + addLogLine( + `personal files:${personalFiles.length} unexported files: ${filesToExport.length}, deleted exported files: ${removedFileUIDs.length}, renamed collections: ${renamedCollections.length}, deleted collections: ${deletedExportedCollections.length}`, + ); + let success = 0; + let failed = 0; + this.uiUpdater.setExportProgress({ + success: success, + failed: failed, + total: filesToExport.length, + }); + const incrementSuccess = () => { + this.updateExportProgress({ + success: ++success, + failed: failed, + total: filesToExport.length, + }); + }; + const incrementFailed = () => { + this.updateExportProgress({ + success: success, + failed: ++failed, + total: filesToExport.length, + }); + }; + if (renamedCollections?.length > 0) { + this.updateExportStage(ExportStage.RENAMING_COLLECTION_FOLDERS); + addLogLine(`renaming ${renamedCollections.length} collections`); + await this.collectionRenamer( + exportFolder, + collectionIDExportNameMap, + renamedCollections, + isCanceled, + ); + } + + if (removedFileUIDs?.length > 0) { + this.updateExportStage(ExportStage.TRASHING_DELETED_FILES); + addLogLine(`trashing ${removedFileUIDs.length} files`); + await this.fileTrasher( + exportFolder, + collectionIDExportNameMap, + removedFileUIDs, + isCanceled, + ); + } + if (filesToExport?.length > 0) { + this.updateExportStage(ExportStage.EXPORTING_FILES); + addLogLine(`exporting ${filesToExport.length} files`); + await this.fileExporter( + filesToExport, + collectionIDNameMap, + collectionIDExportNameMap, + exportFolder, + incrementSuccess, + incrementFailed, + isCanceled, + ); + } + if (deletedExportedCollections?.length > 0) { + this.updateExportStage( + ExportStage.TRASHING_DELETED_COLLECTIONS, + ); + addLogLine( + `removing ${deletedExportedCollections.length} collections`, + ); + await this.collectionRemover( + deletedExportedCollections, + exportFolder, + isCanceled, + ); + } + } catch (e) { + if ( + e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST && + e.message !== CustomError.EXPORT_STOPPED + ) { + logError(e, "runExport failed"); + } + throw e; + } + } + + async collectionRenamer( + exportFolder: string, + collectionIDExportNameMap: Map, + renamedCollections: Collection[], + isCanceled: CancellationStatus, + ) { + try { + for (const collection of renamedCollections) { + try { + if (isCanceled.status) { + throw Error(CustomError.EXPORT_STOPPED); + } + this.verifyExportFolderExists(exportFolder); + const oldCollectionExportName = + collectionIDExportNameMap.get(collection.id); + const oldCollectionExportPath = getCollectionExportPath( + exportFolder, + oldCollectionExportName, + ); + + const newCollectionExportName = + getUniqueCollectionExportName( + exportFolder, + getCollectionUserFacingName(collection), + ); + addLogLine( + `renaming collection with id ${collection.id} from ${oldCollectionExportName} to ${newCollectionExportName}`, + ); + const newCollectionExportPath = getCollectionExportPath( + exportFolder, + newCollectionExportName, + ); + + await this.addCollectionExportedRecord( + exportFolder, + collection.id, + newCollectionExportName, + ); + collectionIDExportNameMap.set( + collection.id, + newCollectionExportName, + ); + try { + await ElectronAPIs.rename( + oldCollectionExportPath, + newCollectionExportPath, + ); + } catch (e) { + await this.addCollectionExportedRecord( + exportFolder, + collection.id, + oldCollectionExportName, + ); + collectionIDExportNameMap.set( + collection.id, + oldCollectionExportName, + ); + throw e; + } + addLogLine( + `renaming collection with id ${collection.id} from ${oldCollectionExportName} to ${newCollectionExportName} successful`, + ); + } catch (e) { + logError(e, "collectionRenamer failed a collection"); + if ( + e.message === + CustomError.UPDATE_EXPORTED_RECORD_FAILED || + e.message === + CustomError.EXPORT_FOLDER_DOES_NOT_EXIST || + e.message === CustomError.EXPORT_STOPPED + ) { + throw e; + } + } + } + } catch (e) { + if ( + e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST && + e.message !== CustomError.EXPORT_STOPPED + ) { + logError(e, "collectionRenamer failed"); + } + throw e; + } + } + + async collectionRemover( + deletedExportedCollectionIDs: number[], + exportFolder: string, + isCanceled: CancellationStatus, + ) { + try { + const exportRecord = await this.getExportRecord(exportFolder); + const collectionIDPathMap = + convertCollectionIDExportNameObjectToMap( + exportRecord.collectionExportNames, + ); + for (const collectionID of deletedExportedCollectionIDs) { + try { + if (isCanceled.status) { + throw Error(CustomError.EXPORT_STOPPED); + } + this.verifyExportFolderExists(exportFolder); + addLogLine( + `removing collection with id ${collectionID} from export folder`, + ); + const collectionExportName = + collectionIDPathMap.get(collectionID); + // verify that the all exported files from the collection has been removed + const collectionExportedFiles = getCollectionExportedFiles( + exportRecord, + collectionID, + ); + if (collectionExportedFiles.length > 0) { + throw new Error( + "collection is not empty, can't remove", + ); + } + const collectionExportPath = getCollectionExportPath( + exportFolder, + collectionExportName, + ); + await this.removeCollectionExportedRecord( + exportFolder, + collectionID, + ); + try { + // delete the collection metadata folder + await ElectronAPIs.deleteFolder( + getMetadataFolderExportPath(collectionExportPath), + ); + // delete the collection folder + await ElectronAPIs.deleteFolder(collectionExportPath); + } catch (e) { + await this.addCollectionExportedRecord( + exportFolder, + collectionID, + collectionExportName, + ); + throw e; + } + addLogLine( + `removing collection with id ${collectionID} from export folder successful`, + ); + } catch (e) { + logError(e, "collectionRemover failed a collection"); + if ( + e.message === + CustomError.UPDATE_EXPORTED_RECORD_FAILED || + e.message === + CustomError.EXPORT_FOLDER_DOES_NOT_EXIST || + e.message === CustomError.EXPORT_STOPPED + ) { + throw e; + } + } + } + } catch (e) { + if ( + e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST && + e.message !== CustomError.EXPORT_STOPPED + ) { + logError(e, "collectionRemover failed"); + } + throw e; + } + } + + async fileExporter( + files: EnteFile[], + collectionIDNameMap: Map, + collectionIDFolderNameMap: Map, + exportDir: string, + incrementSuccess: () => void, + incrementFailed: () => void, + isCanceled: CancellationStatus, + ): Promise { + try { + for (const file of files) { + addLogLine( + `exporting file ${file.metadata.title} with id ${ + file.id + } from collection ${collectionIDNameMap.get( + file.collectionID, + )}`, + ); + if (isCanceled.status) { + throw Error(CustomError.EXPORT_STOPPED); + } + try { + this.verifyExportFolderExists(exportDir); + let collectionExportName = collectionIDFolderNameMap.get( + file.collectionID, + ); + if (!collectionExportName) { + collectionExportName = + await this.createNewCollectionExport( + exportDir, + file.collectionID, + collectionIDNameMap, + ); + await this.addCollectionExportedRecord( + exportDir, + file.collectionID, + collectionExportName, + ); + collectionIDFolderNameMap.set( + file.collectionID, + collectionExportName, + ); + } + const collectionExportPath = getCollectionExportPath( + exportDir, + collectionExportName, + ); + await ElectronAPIs.checkExistsAndCreateDir( + collectionExportPath, + ); + await ElectronAPIs.checkExistsAndCreateDir( + getMetadataFolderExportPath(collectionExportPath), + ); + await this.downloadAndSave( + exportDir, + collectionExportPath, + file, + ); + incrementSuccess(); + addLogLine( + `exporting file ${file.metadata.title} with id ${ + file.id + } from collection ${collectionIDNameMap.get( + file.collectionID, + )} successful`, + ); + } catch (e) { + incrementFailed(); + logError(e, "export failed for a file"); + if ( + e.message === + CustomError.UPDATE_EXPORTED_RECORD_FAILED || + e.message === + CustomError.EXPORT_FOLDER_DOES_NOT_EXIST || + e.message === CustomError.EXPORT_STOPPED + ) { + throw e; + } + } + } + } catch (e) { + if ( + e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST && + e.message !== CustomError.EXPORT_STOPPED + ) { + logError(e, "fileExporter failed"); + } + throw e; + } + } + + async fileTrasher( + exportDir: string, + collectionIDExportNameMap: Map, + removedFileUIDs: string[], + isCanceled: CancellationStatus, + ): Promise { + try { + const exportRecord = await this.getExportRecord(exportDir); + const fileIDExportNameMap = convertFileIDExportNameObjectToMap( + exportRecord.fileExportNames, + ); + for (const fileUID of removedFileUIDs) { + this.verifyExportFolderExists(exportDir); + addLogLine(`trashing file with id ${fileUID}`); + if (isCanceled.status) { + throw Error(CustomError.EXPORT_STOPPED); + } + try { + const fileExportName = fileIDExportNameMap.get(fileUID); + const collectionID = getCollectionIDFromFileUID(fileUID); + const collectionExportPath = getCollectionExportPath( + exportDir, + collectionIDExportNameMap.get(collectionID), + ); + await this.removeFileExportedRecord(exportDir, fileUID); + try { + if (isLivePhotoExportName(fileExportName)) { + const { + image: imageExportName, + video: videoExportName, + } = parseLivePhotoExportName(fileExportName); + const imageExportPath = getFileExportPath( + collectionExportPath, + imageExportName, + ); + addLogLine( + `moving image file ${imageExportPath} to trash folder`, + ); + if (this.exists(imageExportPath)) { + await ElectronAPIs.moveFile( + imageExportPath, + getTrashedFileExportPath( + exportDir, + imageExportPath, + ), + ); + } + + const imageMetadataFileExportPath = + getMetadataFileExportPath(imageExportPath); + + if (this.exists(imageMetadataFileExportPath)) { + await ElectronAPIs.moveFile( + imageMetadataFileExportPath, + getTrashedFileExportPath( + exportDir, + imageMetadataFileExportPath, + ), + ); + } + + const videoExportPath = getFileExportPath( + collectionExportPath, + videoExportName, + ); + addLogLine( + `moving video file ${videoExportPath} to trash folder`, + ); + if (this.exists(videoExportPath)) { + await ElectronAPIs.moveFile( + videoExportPath, + getTrashedFileExportPath( + exportDir, + videoExportPath, + ), + ); + } + const videoMetadataFileExportPath = + getMetadataFileExportPath(videoExportPath); + if (this.exists(videoMetadataFileExportPath)) { + await ElectronAPIs.moveFile( + videoMetadataFileExportPath, + getTrashedFileExportPath( + exportDir, + videoMetadataFileExportPath, + ), + ); + } + } else { + const fileExportPath = getFileExportPath( + collectionExportPath, + fileExportName, + ); + const trashedFilePath = getTrashedFileExportPath( + exportDir, + fileExportPath, + ); + addLogLine( + `moving file ${fileExportPath} to ${trashedFilePath} trash folder`, + ); + if (this.exists(fileExportPath)) { + await ElectronAPIs.moveFile( + fileExportPath, + trashedFilePath, + ); + } + const metadataFileExportPath = + getMetadataFileExportPath(fileExportPath); + if (this.exists(metadataFileExportPath)) { + await ElectronAPIs.moveFile( + metadataFileExportPath, + getTrashedFileExportPath( + exportDir, + metadataFileExportPath, + ), + ); + } + } + } catch (e) { + await this.addFileExportedRecord( + exportDir, + fileUID, + fileExportName, + ); + throw e; + } + addLogLine(`trashing file with id ${fileUID} successful`); + } catch (e) { + logError(e, "trashing failed for a file"); + if ( + e.message === + CustomError.UPDATE_EXPORTED_RECORD_FAILED || + e.message === + CustomError.EXPORT_FOLDER_DOES_NOT_EXIST || + e.message === CustomError.EXPORT_STOPPED + ) { + throw e; + } + } + } + } catch (e) { + if ( + e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST && + e.message !== CustomError.EXPORT_STOPPED + ) { + logError(e, "fileTrasher failed"); + } + throw e; + } + } + + async addFileExportedRecord( + folder: string, + fileUID: string, + fileExportName: string, + ) { + try { + const exportRecord = await this.getExportRecord(folder); + if (!exportRecord.fileExportNames) { + exportRecord.fileExportNames = {}; + } + exportRecord.fileExportNames = { + ...exportRecord.fileExportNames, + [fileUID]: fileExportName, + }; + await this.updateExportRecord(folder, exportRecord); + } catch (e) { + if (e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + logError(e, "addFileExportedRecord failed"); + } + throw e; + } + } + + async addCollectionExportedRecord( + folder: string, + collectionID: number, + collectionExportName: string, + ) { + try { + const exportRecord = await this.getExportRecord(folder); + if (!exportRecord?.collectionExportNames) { + exportRecord.collectionExportNames = {}; + } + exportRecord.collectionExportNames = { + ...exportRecord.collectionExportNames, + [collectionID]: collectionExportName, + }; + + await this.updateExportRecord(folder, exportRecord); + } catch (e) { + if (e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + logError(e, "addCollectionExportedRecord failed"); + } + throw e; + } + } + + async removeCollectionExportedRecord(folder: string, collectionID: number) { + try { + const exportRecord = await this.getExportRecord(folder); + + exportRecord.collectionExportNames = Object.fromEntries( + Object.entries(exportRecord.collectionExportNames).filter( + ([key]) => key !== collectionID.toString(), + ), + ); + + await this.updateExportRecord(folder, exportRecord); + } catch (e) { + if (e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + logError(e, "removeCollectionExportedRecord failed"); + } + throw e; + } + } + + async removeFileExportedRecord(folder: string, fileUID: string) { + try { + const exportRecord = await this.getExportRecord(folder); + exportRecord.fileExportNames = Object.fromEntries( + Object.entries(exportRecord.fileExportNames).filter( + ([key]) => key !== fileUID, + ), + ); + await this.updateExportRecord(folder, exportRecord); + } catch (e) { + if (e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + logError(e, "removeFileExportedRecord failed"); + } + throw e; + } + } + + async updateExportRecord(folder: string, newData: Partial) { + const response = this.exportRecordUpdater.queueUpRequest(() => + this.updateExportRecordHelper(folder, newData), + ); + return response.promise; + } + + async updateExportRecordHelper( + folder: string, + newData: Partial, + ) { + try { + const exportRecord = await this.getExportRecord(folder); + const newRecord: ExportRecord = { ...exportRecord, ...newData }; + await ElectronAPIs.saveFileToDisk( + `${folder}/${EXPORT_RECORD_FILE_NAME}`, + JSON.stringify(newRecord, null, 2), + ); + return newRecord; + } catch (e) { + if (e.message === CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + throw e; + } + logError(e, "error updating Export Record"); + throw Error(CustomError.UPDATE_EXPORTED_RECORD_FAILED); + } + } + + async getExportRecord(folder: string, retry = true): Promise { + try { + this.verifyExportFolderExists(folder); + const exportRecordJSONPath = `${folder}/${EXPORT_RECORD_FILE_NAME}`; + if (!this.exists(exportRecordJSONPath)) { + return this.createEmptyExportRecord(exportRecordJSONPath); + } + const recordFile = + await ElectronAPIs.readTextFile(exportRecordJSONPath); + try { + return JSON.parse(recordFile); + } catch (e) { + throw Error(CustomError.EXPORT_RECORD_JSON_PARSING_FAILED); + } + } catch (e) { + if ( + e.message === CustomError.EXPORT_RECORD_JSON_PARSING_FAILED && + retry + ) { + await sleep(1000); + return await this.getExportRecord(folder, false); + } + if (e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + logError(e, "export Record JSON parsing failed"); + } + throw e; + } + } + + async createNewCollectionExport( + exportFolder: string, + collectionID: number, + collectionIDNameMap: Map, + ) { + this.verifyExportFolderExists(exportFolder); + const collectionName = collectionIDNameMap.get(collectionID); + const collectionExportName = getUniqueCollectionExportName( + exportFolder, + collectionName, + ); + const collectionExportPath = getCollectionExportPath( + exportFolder, + collectionExportName, + ); + await ElectronAPIs.checkExistsAndCreateDir(collectionExportPath); + await ElectronAPIs.checkExistsAndCreateDir( + getMetadataFolderExportPath(collectionExportPath), + ); + + return collectionExportName; + } + + async downloadAndSave( + exportDir: string, + collectionExportPath: string, + file: EnteFile, + ): Promise { + try { + const fileUID = getExportRecordFileUID(file); + const originalFileStream = await downloadManager.getFile(file); + if (!this.fileReader) { + this.fileReader = new FileReader(); + } + const updatedFileStream = await getUpdatedEXIFFileForDownload( + this.fileReader, + file, + originalFileStream, + ); + if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + await this.exportLivePhoto( + exportDir, + fileUID, + collectionExportPath, + updatedFileStream, + file, + ); + } else { + const fileExportName = getUniqueFileExportName( + collectionExportPath, + file.metadata.title, + ); + await this.addFileExportedRecord( + exportDir, + fileUID, + fileExportName, + ); + try { + await this.saveMetadataFile( + collectionExportPath, + fileExportName, + file, + ); + await ElectronAPIs.saveStreamToDisk( + getFileExportPath(collectionExportPath, fileExportName), + updatedFileStream, + ); + } catch (e) { + await this.removeFileExportedRecord(exportDir, fileUID); + throw e; + } + } + } catch (e) { + logError(e, "download and save failed"); + throw e; + } + } + + private async exportLivePhoto( + exportDir: string, + fileUID: string, + collectionExportPath: string, + fileStream: ReadableStream, + file: EnteFile, + ) { + const fileBlob = await new Response(fileStream).blob(); + const livePhoto = await decodeLivePhoto(file, fileBlob); + const imageExportName = getUniqueFileExportName( + collectionExportPath, + livePhoto.imageNameTitle, + ); + const videoExportName = getUniqueFileExportName( + collectionExportPath, + livePhoto.videoNameTitle, + ); + const livePhotoExportName = getLivePhotoExportName( + imageExportName, + videoExportName, + ); + await this.addFileExportedRecord( + exportDir, + fileUID, + livePhotoExportName, + ); + try { + const imageStream = generateStreamFromArrayBuffer(livePhoto.image); + await this.saveMetadataFile( + collectionExportPath, + imageExportName, + file, + ); + await ElectronAPIs.saveStreamToDisk( + getFileExportPath(collectionExportPath, imageExportName), + imageStream, + ); + + const videoStream = generateStreamFromArrayBuffer(livePhoto.video); + await this.saveMetadataFile( + collectionExportPath, + videoExportName, + file, + ); + try { + await ElectronAPIs.saveStreamToDisk( + getFileExportPath(collectionExportPath, videoExportName), + videoStream, + ); + } catch (e) { + ElectronAPIs.deleteFile( + getFileExportPath(collectionExportPath, imageExportName), + ); + throw e; + } + } catch (e) { + await this.removeFileExportedRecord(exportDir, fileUID); + throw e; + } + } + + private async saveMetadataFile( + collectionExportPath: string, + fileExportName: string, + file: EnteFile, + ) { + await ElectronAPIs.saveFileToDisk( + getFileMetadataExportPath(collectionExportPath, fileExportName), + getGoogleLikeMetadataFile(fileExportName, file), + ); + } + + isExportInProgress = () => { + return this.exportInProgress; + }; + + exists = (path: string) => { + return ElectronAPIs.exists(path); + }; + + rename = (oldPath: string, newPath: string) => { + return ElectronAPIs.rename(oldPath, newPath); + }; + + checkExistsAndCreateDir = (path: string) => { + return ElectronAPIs.checkExistsAndCreateDir(path); + }; + + exportFolderExists = (exportFolder: string) => { + return exportFolder && this.exists(exportFolder); + }; + + private verifyExportFolderExists = (exportFolder: string) => { + try { + if (!this.exportFolderExists(exportFolder)) { + throw Error(CustomError.EXPORT_FOLDER_DOES_NOT_EXIST); + } + } catch (e) { + if (e.message !== CustomError.EXPORT_FOLDER_DOES_NOT_EXIST) { + logError(e, "verifyExportFolderExists failed"); + } + throw e; + } + }; + + private createEmptyExportRecord = async (exportRecordJSONPath: string) => { + const exportRecord: ExportRecord = NULL_EXPORT_RECORD; + await ElectronAPIs.saveFileToDisk( + exportRecordJSONPath, + JSON.stringify(exportRecord, null, 2), + ); + return exportRecord; + }; +} +export default new ExportService(); diff --git a/web/apps/photos/src/services/export/migration.ts b/web/apps/photos/src/services/export/migration.ts new file mode 100644 index 000000000..327f42f77 --- /dev/null +++ b/web/apps/photos/src/services/export/migration.ts @@ -0,0 +1,469 @@ +import { addLocalLog, addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { User } from "@ente/shared/user/types"; +import { FILE_TYPE } from "constants/file"; +import { getLocalCollections } from "services/collectionService"; +import downloadManager from "services/download"; +import { getAllLocalFiles } from "services/fileService"; +import { decodeLivePhoto } from "services/livePhotoService"; +import { Collection } from "types/collection"; +import { + CollectionExportNames, + ExportProgress, + ExportRecord, + ExportRecordV0, + ExportRecordV1, + ExportRecordV2, + FileExportNames, +} from "types/export"; +import { EnteFile } from "types/file"; +import { getNonEmptyPersonalCollections } from "utils/collection"; +import { sleep } from "utils/common"; +import { + getCollectionExportPath, + getCollectionIDFromFileUID, + getExportRecordFileUID, + getLivePhotoExportName, + getMetadataFolderExportPath, +} from "utils/export"; +import { + convertCollectionIDFolderPathObjectToMap, + getExportedFiles, + getFileMetadataSavePath, + getFileSavePath, + getOldCollectionFolderPath, + getOldFileMetadataSavePath, + getOldFileSavePath, + getUniqueCollectionFolderPath, + getUniqueFileExportNameForMigration, + getUniqueFileSaveName, +} from "utils/export/migration"; +import { + getIDBasedSortedFiles, + getPersonalFiles, + mergeMetadata, +} from "utils/file"; +import exportService from "./index"; + +export async function migrateExport( + exportDir: string, + exportRecord: ExportRecordV1 | ExportRecordV2 | ExportRecord, + updateProgress: (progress: ExportProgress) => void, +) { + try { + addLogLine(`current export version: ${exportRecord.version}`); + if (exportRecord.version === 0) { + addLogLine("migrating export to version 1"); + await migrationV0ToV1(exportDir, exportRecord as ExportRecordV0); + exportRecord = await exportService.updateExportRecord(exportDir, { + version: 1, + }); + addLogLine("migration to version 1 complete"); + } + if (exportRecord.version === 1) { + addLogLine("migrating export to version 2"); + await migrationV1ToV2(exportRecord as ExportRecordV1, exportDir); + exportRecord = await exportService.updateExportRecord(exportDir, { + version: 2, + }); + addLogLine("migration to version 2 complete"); + } + if (exportRecord.version === 2) { + addLogLine("migrating export to version 3"); + await migrationV2ToV3( + exportDir, + exportRecord as ExportRecordV2, + updateProgress, + ); + exportRecord = await exportService.updateExportRecord(exportDir, { + version: 3, + }); + addLogLine("migration to version 3 complete"); + } + + if (exportRecord.version === 3) { + addLogLine("migrating export to version 4"); + await migrationV3ToV4(exportDir, exportRecord as ExportRecord); + exportRecord = await exportService.updateExportRecord(exportDir, { + version: 4, + }); + addLogLine("migration to version 4 complete"); + } + if (exportRecord.version === 4) { + addLogLine("migrating export to version 5"); + await migrationV4ToV5(exportDir, exportRecord as ExportRecord); + exportRecord = await exportService.updateExportRecord(exportDir, { + version: 5, + }); + addLogLine("migration to version 5 complete"); + } + addLogLine(`Record at latest version`); + } catch (e) { + logError(e, "export record migration failed"); + throw e; + } +} + +async function migrationV0ToV1( + exportDir: string, + exportRecord: ExportRecordV0, +) { + if (!exportRecord?.exportedFiles) { + return; + } + const collectionIDPathMap = new Map(); + const user: User = getData(LS_KEYS.USER); + const localFiles = mergeMetadata(await getAllLocalFiles()); + const localCollections = await getLocalCollections(); + const personalFiles = getIDBasedSortedFiles( + getPersonalFiles(localFiles, user), + ); + const nonEmptyPersonalCollections = getNonEmptyPersonalCollections( + localCollections, + personalFiles, + user, + ); + await migrateCollectionFolders( + nonEmptyPersonalCollections, + exportDir, + collectionIDPathMap, + ); + await migrateFiles( + getExportedFiles(personalFiles, exportRecord), + collectionIDPathMap, + ); +} + +async function migrationV1ToV2( + exportRecord: ExportRecordV1, + exportDir: string, +) { + await removeDeprecatedExportRecordProperties(exportRecord, exportDir); +} + +async function migrationV2ToV3( + exportDir: string, + exportRecord: ExportRecordV2, + updateProgress: (progress: ExportProgress) => void, +) { + if (!exportRecord?.exportedFiles) { + return; + } + const user: User = getData(LS_KEYS.USER); + const localFiles = mergeMetadata(await getAllLocalFiles()); + const personalFiles = getIDBasedSortedFiles( + getPersonalFiles(localFiles, user), + ); + + const collectionExportNames = + await getCollectionExportNamesFromExportedCollectionPaths(exportRecord); + + const fileExportNames = await getFileExportNamesFromExportedFiles( + exportRecord, + getExportedFiles(personalFiles, exportRecord), + updateProgress, + ); + + exportRecord.exportedCollectionPaths = undefined; + exportRecord.exportedFiles = undefined; + const updatedExportRecord: ExportRecord = { + ...exportRecord, + fileExportNames, + collectionExportNames, + }; + await exportService.updateExportRecord(exportDir, updatedExportRecord); +} + +async function migrationV3ToV4(exportDir: string, exportRecord: ExportRecord) { + if (!exportRecord?.collectionExportNames) { + return; + } + + const collectionExportNames = reMigrateCollectionExportNames(exportRecord); + + const updatedExportRecord: ExportRecord = { + ...exportRecord, + collectionExportNames, + }; + + await exportService.updateExportRecord(exportDir, updatedExportRecord); +} + +async function migrationV4ToV5(exportDir: string, exportRecord: ExportRecord) { + await removeCollectionExportMissingMetadataFolder(exportDir, exportRecord); +} + +/* + This updates the folder name of already exported folders from the earlier format of + `collectionID_collectionName` to newer `collectionName(numbered)` format +*/ +async function migrateCollectionFolders( + collections: Collection[], + exportDir: string, + collectionIDPathMap: Map, +) { + for (const collection of collections) { + const oldCollectionExportPath = getOldCollectionFolderPath( + exportDir, + collection.id, + collection.name, + ); + const newCollectionExportPath = getUniqueCollectionFolderPath( + exportDir, + collection.name, + ); + collectionIDPathMap.set(collection.id, newCollectionExportPath); + if (!exportService.exists(oldCollectionExportPath)) { + continue; + } + await exportService.rename( + oldCollectionExportPath, + newCollectionExportPath, + ); + await addCollectionExportedRecordV1( + exportDir, + collection.id, + newCollectionExportPath, + ); + } +} + +/* + This updates the file name of already exported files from the earlier format of + `fileID_fileName` to newer `fileName(numbered)` format +*/ +async function migrateFiles( + files: EnteFile[], + collectionIDPathMap: Map, +) { + for (const file of files) { + const oldFileSavePath = getOldFileSavePath( + collectionIDPathMap.get(file.collectionID), + file, + ); + const oldFileMetadataSavePath = getOldFileMetadataSavePath( + collectionIDPathMap.get(file.collectionID), + file, + ); + const newFileSaveName = getUniqueFileSaveName( + collectionIDPathMap.get(file.collectionID), + file.metadata.title, + ); + + const newFileSavePath = getFileSavePath( + collectionIDPathMap.get(file.collectionID), + newFileSaveName, + ); + + const newFileMetadataSavePath = getFileMetadataSavePath( + collectionIDPathMap.get(file.collectionID), + newFileSaveName, + ); + if (!exportService.exists(oldFileSavePath)) { + continue; + } + await exportService.rename(oldFileSavePath, newFileSavePath); + await exportService.rename( + oldFileMetadataSavePath, + newFileMetadataSavePath, + ); + } +} + +async function removeDeprecatedExportRecordProperties( + exportRecord: ExportRecordV1, + exportDir: string, +) { + if (exportRecord?.queuedFiles) { + exportRecord.queuedFiles = undefined; + } + if (exportRecord?.progress) { + exportRecord.progress = undefined; + } + if (exportRecord?.failedFiles) { + exportRecord.failedFiles = undefined; + } + await exportService.updateExportRecord(exportDir, exportRecord); +} + +async function getCollectionExportNamesFromExportedCollectionPaths( + exportRecord: ExportRecordV2, +): Promise { + if (!exportRecord.exportedCollectionPaths) { + return; + } + const exportedCollectionNames = Object.fromEntries( + Object.entries(exportRecord.exportedCollectionPaths).map( + ([key, exportedCollectionPath]) => { + const exportedCollectionName = exportedCollectionPath + .split("/") + .pop(); + return [key, exportedCollectionName]; + }, + ), + ); + return exportedCollectionNames; +} + +/* + Earlier the file were sorted by id, + which we can use to determine which file got which number suffix + this can be used to determine the filepaths of the those already exported files + and update the exportedFilePaths property of the exportRecord + This is based on the assumption new files have higher ids than the older ones +*/ +async function getFileExportNamesFromExportedFiles( + exportRecord: ExportRecordV2, + exportedFiles: EnteFile[], + updateProgress: (progress: ExportProgress) => void, +): Promise { + if (!exportedFiles.length) { + return; + } + addLogLine( + "updating exported files to exported file paths property", + `got ${exportedFiles.length} files`, + ); + let exportedFileNames: FileExportNames; + const usedFilePaths = new Map>(); + const exportedCollectionPaths = convertCollectionIDFolderPathObjectToMap( + exportRecord.exportedCollectionPaths, + ); + let success = 0; + for (const file of exportedFiles) { + await sleep(0); + const collectionPath = exportedCollectionPaths.get(file.collectionID); + addLocalLog( + () => + `collection path for ${file.collectionID} is ${collectionPath}`, + ); + let fileExportName: string; + /* + For Live Photos we need to download the file to get the image and video name + */ + if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + const fileStream = await downloadManager.getFile(file); + const fileBlob = await new Response(fileStream).blob(); + const livePhoto = await decodeLivePhoto(file, fileBlob); + const imageExportName = getUniqueFileExportNameForMigration( + collectionPath, + livePhoto.imageNameTitle, + usedFilePaths, + ); + const videoExportName = getUniqueFileExportNameForMigration( + collectionPath, + livePhoto.videoNameTitle, + usedFilePaths, + ); + fileExportName = getLivePhotoExportName( + imageExportName, + videoExportName, + ); + } else { + fileExportName = getUniqueFileExportNameForMigration( + collectionPath, + file.metadata.title, + usedFilePaths, + ); + } + addLocalLog( + () => + `file export name for ${file.metadata.title} is ${fileExportName}`, + ); + exportedFileNames = { + ...exportedFileNames, + [getExportRecordFileUID(file)]: fileExportName, + }; + updateProgress({ + total: exportedFiles.length, + success: success++, + failed: 0, + }); + } + return exportedFileNames; +} + +function reMigrateCollectionExportNames( + exportRecord: ExportRecord, +): CollectionExportNames { + const exportedCollectionNames = Object.fromEntries( + Object.entries(exportRecord.collectionExportNames).map( + ([key, exportedCollectionPath]) => { + const exportedCollectionName = exportedCollectionPath + .split("/") + .pop(); + return [key, exportedCollectionName]; + }, + ), + ); + return exportedCollectionNames; +} + +async function addCollectionExportedRecordV1( + folder: string, + collectionID: number, + collectionExportPath: string, +) { + try { + const exportRecord = (await exportService.getExportRecord( + folder, + )) as unknown as ExportRecordV1; + if (!exportRecord?.exportedCollectionPaths) { + exportRecord.exportedCollectionPaths = {}; + } + exportRecord.exportedCollectionPaths = { + ...exportRecord.exportedCollectionPaths, + [collectionID]: collectionExportPath, + }; + + await exportService.updateExportRecord(folder, exportRecord); + } catch (e) { + logError(e, "addCollectionExportedRecord failed"); + throw e; + } +} + +async function removeCollectionExportMissingMetadataFolder( + exportDir: string, + exportRecord: ExportRecord, +) { + if (!exportRecord?.collectionExportNames) { + return; + } + + const properlyExportedCollections = Object.entries( + exportRecord.collectionExportNames, + ) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .filter(([_, collectionExportName]) => + exportService.exists( + getMetadataFolderExportPath( + getCollectionExportPath(exportDir, collectionExportName), + ), + ), + ); + + const properlyExportedCollectionIDs = properlyExportedCollections.map( + ([collectionID]) => collectionID, + ); + + const properlyExportedFiles = Object.entries( + exportRecord.fileExportNames, + ).filter(([fileUID]) => + properlyExportedCollectionIDs.includes( + getCollectionIDFromFileUID(fileUID).toString(), + ), + ); + + const updatedExportRecord: ExportRecord = { + ...exportRecord, + collectionExportNames: Object.fromEntries( + properlyExportedCollections, + ) as CollectionExportNames, + fileExportNames: Object.fromEntries( + properlyExportedFiles, + ) as FileExportNames, + }; + await exportService.updateExportRecord(exportDir, updatedExportRecord); +} diff --git a/web/apps/photos/src/services/ffmpeg/ffmpegFactory.ts b/web/apps/photos/src/services/ffmpeg/ffmpegFactory.ts new file mode 100644 index 000000000..040f15047 --- /dev/null +++ b/web/apps/photos/src/services/ffmpeg/ffmpegFactory.ts @@ -0,0 +1,38 @@ +import ElectronAPIs from "@ente/shared/electron"; +import isElectron from "is-electron"; +import { ElectronFile } from "types/upload"; +import ComlinkFFmpegWorker from "utils/comlink/ComlinkFFmpegWorker"; + +export interface IFFmpeg { + run: ( + cmd: string[], + inputFile: File | ElectronFile, + outputFilename: string, + dontTimeout?: boolean, + ) => Promise; +} + +class FFmpegFactory { + private client: IFFmpeg; + async getFFmpegClient() { + if (!this.client) { + if (isElectron()) { + this.client = { + run(cmd, inputFile, outputFilename, dontTimeout) { + return ElectronAPIs.runFFmpegCmd( + cmd, + inputFile, + outputFilename, + dontTimeout, + ); + }, + }; + } else { + this.client = await ComlinkFFmpegWorker.getInstance(); + } + } + return this.client; + } +} + +export default new FFmpegFactory(); diff --git a/web/apps/photos/src/services/ffmpeg/ffmpegService.ts b/web/apps/photos/src/services/ffmpeg/ffmpegService.ts new file mode 100644 index 000000000..f6addc134 --- /dev/null +++ b/web/apps/photos/src/services/ffmpeg/ffmpegService.ts @@ -0,0 +1,100 @@ +import { logError } from "@ente/shared/sentry"; +import { + FFMPEG_PLACEHOLDER, + INPUT_PATH_PLACEHOLDER, + OUTPUT_PATH_PLACEHOLDER, +} from "constants/ffmpeg"; +import { ElectronFile } from "types/upload"; +import { parseFFmpegExtractedMetadata } from "utils/ffmpeg"; +import ffmpegFactory from "./ffmpegFactory"; + +export async function generateVideoThumbnail( + file: File | ElectronFile, +): Promise { + try { + let seekTime = 1; + const ffmpegClient = await ffmpegFactory.getFFmpegClient(); + while (seekTime >= 0) { + try { + return await ffmpegClient.run( + [ + FFMPEG_PLACEHOLDER, + "-i", + INPUT_PATH_PLACEHOLDER, + "-ss", + `00:00:0${seekTime}`, + "-vframes", + "1", + "-vf", + "scale=-1:720", + OUTPUT_PATH_PLACEHOLDER, + ], + file, + "thumb.jpeg", + ); + } catch (e) { + if (seekTime === 0) { + throw e; + } + } + seekTime--; + } + } catch (e) { + logError(e, "ffmpeg generateVideoThumbnail failed"); + throw e; + } +} + +export async function extractVideoMetadata(file: File | ElectronFile) { + try { + const ffmpegClient = await ffmpegFactory.getFFmpegClient(); + // https://stackoverflow.com/questions/9464617/retrieving-and-saving-media-metadata-using-ffmpeg + // -c [short for codex] copy[(stream_specifier)[ffmpeg.org/ffmpeg.html#Stream-specifiers]] => copies all the stream without re-encoding + // -map_metadata [http://ffmpeg.org/ffmpeg.html#Advanced-options search for map_metadata] => copies all stream metadata to the out + // -f ffmetadata [https://ffmpeg.org/ffmpeg-formats.html#Metadata-1] => dump metadata from media files into a simple UTF-8-encoded INI-like text file + const metadata = await ffmpegClient.run( + [ + FFMPEG_PLACEHOLDER, + "-i", + INPUT_PATH_PLACEHOLDER, + "-c", + "copy", + "-map_metadata", + "0", + "-f", + "ffmetadata", + OUTPUT_PATH_PLACEHOLDER, + ], + file, + `metadata.txt`, + ); + return parseFFmpegExtractedMetadata( + new Uint8Array(await metadata.arrayBuffer()), + ); + } catch (e) { + logError(e, "ffmpeg extractVideoMetadata failed"); + throw e; + } +} + +export async function convertToMP4(file: File | ElectronFile) { + try { + const ffmpegClient = await ffmpegFactory.getFFmpegClient(); + return await ffmpegClient.run( + [ + FFMPEG_PLACEHOLDER, + "-i", + INPUT_PATH_PLACEHOLDER, + "-preset", + "ultrafast", + OUTPUT_PATH_PLACEHOLDER, + ], + file, + "output.mp4", + true, + ); + } catch (e) { + logError(e, "ffmpeg convertToMP4 failed"); + throw e; + } +} diff --git a/web/apps/photos/src/services/fileService.ts b/web/apps/photos/src/services/fileService.ts new file mode 100644 index 000000000..62d5e309e --- /dev/null +++ b/web/apps/photos/src/services/fileService.ts @@ -0,0 +1,311 @@ +import { getEndpoint } from "@ente/shared/network/api"; +import localForage from "@ente/shared/storage/localForage"; + +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { Events, eventBus } from "@ente/shared/events"; +import { addLogLine } from "@ente/shared/logging"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { REQUEST_BATCH_SIZE } from "constants/api"; +import { Collection } from "types/collection"; +import { + EncryptedEnteFile, + EnteFile, + FileWithUpdatedMagicMetadata, + FileWithUpdatedPublicMagicMetadata, + TrashRequest, +} from "types/file"; +import { SetFiles } from "types/gallery"; +import { BulkUpdateMagicMetadataRequest } from "types/magicMetadata"; +import { batch } from "utils/common"; +import { + decryptFile, + getLatestVersionFiles, + mergeMetadata, + sortFiles, +} from "utils/file"; +import { + getCollectionLastSyncTime, + setCollectionLastSyncTime, +} from "./collectionService"; + +const ENDPOINT = getEndpoint(); +const FILES_TABLE = "files"; +const HIDDEN_FILES_TABLE = "hidden-files"; + +export const getLocalFiles = async (type: "normal" | "hidden" = "normal") => { + const tableName = type === "normal" ? FILES_TABLE : HIDDEN_FILES_TABLE; + const files: Array = + (await localForage.getItem(tableName)) || []; + return files; +}; + +const setLocalFiles = async (type: "normal" | "hidden", files: EnteFile[]) => { + try { + const tableName = type === "normal" ? FILES_TABLE : HIDDEN_FILES_TABLE; + await localForage.setItem(tableName, files); + try { + eventBus.emit(Events.LOCAL_FILES_UPDATED); + } catch (e) { + logError(e, "Error in localFileUpdated handlers"); + } + } catch (e1) { + try { + const storageEstimate = await navigator.storage.estimate(); + logError(e1, "failed to save files to indexedDB", { + storageEstimate, + }); + addLogLine(`storage estimate ${JSON.stringify(storageEstimate)}`); + } catch (e2) { + logError(e1, "failed to save files to indexedDB"); + logError(e2, "failed to get storage stats"); + } + throw e1; + } +}; + +export const getAllLocalFiles = async () => { + const normalFiles = await getLocalFiles("normal"); + const hiddenFiles = await getLocalFiles("hidden"); + return [...normalFiles, ...hiddenFiles]; +}; + +export const syncFiles = async ( + type: "normal" | "hidden", + collections: Collection[], + setFiles: SetFiles, +) => { + const localFiles = await getLocalFiles(type); + let files = await removeDeletedCollectionFiles(collections, localFiles); + if (files.length !== localFiles.length) { + await setLocalFiles(type, files); + setFiles(sortFiles(mergeMetadata(files))); + } + for (const collection of collections) { + if (!getToken()) { + continue; + } + const lastSyncTime = await getCollectionLastSyncTime(collection); + if (collection.updationTime === lastSyncTime) { + continue; + } + + const newFiles = await getFiles(collection, lastSyncTime, setFiles); + files = getLatestVersionFiles([...files, ...newFiles]); + await setLocalFiles(type, files); + setCollectionLastSyncTime(collection, collection.updationTime); + } + return files; +}; + +export const getFiles = async ( + collection: Collection, + sinceTime: number, + setFiles: SetFiles, +): Promise => { + try { + let decryptedFiles: EnteFile[] = []; + let time = sinceTime; + let resp; + do { + const token = getToken(); + if (!token) { + break; + } + resp = await HTTPService.get( + `${ENDPOINT}/collections/v2/diff`, + { + collectionID: collection.id, + sinceTime: time, + }, + { + "X-Auth-Token": token, + }, + ); + + const newDecryptedFilesBatch = await Promise.all( + resp.data.diff.map(async (file: EncryptedEnteFile) => { + if (!file.isDeleted) { + return await decryptFile(file, collection.key); + } else { + return file; + } + }) as Promise[], + ); + decryptedFiles = [...decryptedFiles, ...newDecryptedFilesBatch]; + + setFiles((files) => + sortFiles( + mergeMetadata( + getLatestVersionFiles([ + ...(files || []), + ...decryptedFiles, + ]), + ), + ), + ); + if (resp.data.diff.length) { + time = resp.data.diff.slice(-1)[0].updationTime; + } + } while (resp.data.hasMore); + return decryptedFiles; + } catch (e) { + logError(e, "Get files failed"); + throw e; + } +}; + +const removeDeletedCollectionFiles = async ( + collections: Collection[], + files: EnteFile[], +) => { + const syncedCollectionIds = new Set(); + for (const collection of collections) { + syncedCollectionIds.add(collection.id); + } + files = files.filter((file) => syncedCollectionIds.has(file.collectionID)); + return files; +}; + +export const trashFiles = async (filesToTrash: EnteFile[]) => { + try { + const token = getToken(); + if (!token) { + return; + } + const batchedFilesToTrash = batch(filesToTrash, REQUEST_BATCH_SIZE); + for (const batch of batchedFilesToTrash) { + const trashRequest: TrashRequest = { + items: batch.map((file) => ({ + fileID: file.id, + collectionID: file.collectionID, + })), + }; + await HTTPService.post( + `${ENDPOINT}/files/trash`, + trashRequest, + null, + { + "X-Auth-Token": token, + }, + ); + } + } catch (e) { + logError(e, "trash file failed"); + throw e; + } +}; + +export const deleteFromTrash = async (filesToDelete: number[]) => { + try { + const token = getToken(); + if (!token) { + return; + } + const batchedFilesToDelete = batch(filesToDelete, REQUEST_BATCH_SIZE); + + for (const batch of batchedFilesToDelete) { + await HTTPService.post( + `${ENDPOINT}/trash/delete`, + { fileIDs: batch }, + null, + { + "X-Auth-Token": token, + }, + ); + } + } catch (e) { + logError(e, "deleteFromTrash failed"); + throw e; + } +}; + +export const updateFileMagicMetadata = async ( + fileWithUpdatedMagicMetadataList: FileWithUpdatedMagicMetadata[], +) => { + const token = getToken(); + if (!token) { + return; + } + const reqBody: BulkUpdateMagicMetadataRequest = { metadataList: [] }; + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + for (const { + file, + updatedMagicMetadata, + } of fileWithUpdatedMagicMetadataList) { + const { file: encryptedMagicMetadata } = + await cryptoWorker.encryptMetadata( + updatedMagicMetadata.data, + file.key, + ); + reqBody.metadataList.push({ + id: file.id, + magicMetadata: { + version: updatedMagicMetadata.version, + count: updatedMagicMetadata.count, + data: encryptedMagicMetadata.encryptedData, + header: encryptedMagicMetadata.decryptionHeader, + }, + }); + } + await HTTPService.put(`${ENDPOINT}/files/magic-metadata`, reqBody, null, { + "X-Auth-Token": token, + }); + return fileWithUpdatedMagicMetadataList.map( + ({ file, updatedMagicMetadata }): EnteFile => ({ + ...file, + magicMetadata: { + ...updatedMagicMetadata, + version: updatedMagicMetadata.version + 1, + }, + }), + ); +}; + +export const updateFilePublicMagicMetadata = async ( + fileWithUpdatedPublicMagicMetadataList: FileWithUpdatedPublicMagicMetadata[], +): Promise => { + const token = getToken(); + if (!token) { + return; + } + const reqBody: BulkUpdateMagicMetadataRequest = { metadataList: [] }; + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + for (const { + file, + updatedPublicMagicMetadata: updatePublicMagicMetadata, + } of fileWithUpdatedPublicMagicMetadataList) { + const { file: encryptedPubMagicMetadata } = + await cryptoWorker.encryptMetadata( + updatePublicMagicMetadata.data, + file.key, + ); + reqBody.metadataList.push({ + id: file.id, + magicMetadata: { + version: updatePublicMagicMetadata.version, + count: updatePublicMagicMetadata.count, + data: encryptedPubMagicMetadata.encryptedData, + header: encryptedPubMagicMetadata.decryptionHeader, + }, + }); + } + await HTTPService.put( + `${ENDPOINT}/files/public-magic-metadata`, + reqBody, + null, + { + "X-Auth-Token": token, + }, + ); + return fileWithUpdatedPublicMagicMetadataList.map( + ({ file, updatedPublicMagicMetadata }): EnteFile => ({ + ...file, + pubMagicMetadata: { + ...updatedPublicMagicMetadata, + version: updatedPublicMagicMetadata.version + 1, + }, + }), + ); +}; diff --git a/web/apps/photos/src/services/heicConversionService.ts b/web/apps/photos/src/services/heicConversionService.ts new file mode 100644 index 000000000..f11a9f4a4 --- /dev/null +++ b/web/apps/photos/src/services/heicConversionService.ts @@ -0,0 +1,14 @@ +import { logError } from "@ente/shared/sentry"; +import WasmHEICConverterService from "./wasmHeicConverter/wasmHEICConverterService"; + +class HeicConversionService { + async convert(heicFileData: Blob): Promise { + try { + return await WasmHEICConverterService.convert(heicFileData); + } catch (e) { + logError(e, "failed to convert heic file"); + throw e; + } + } +} +export default new HeicConversionService(); diff --git a/web/apps/photos/src/services/imageProcessor.ts b/web/apps/photos/src/services/imageProcessor.ts new file mode 100644 index 000000000..ac67c54ec --- /dev/null +++ b/web/apps/photos/src/services/imageProcessor.ts @@ -0,0 +1,72 @@ +import ElectronAPIs from "@ente/shared/electron"; +import { WorkerSafeElectronService } from "@ente/shared/electron/service"; +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { ElectronFile } from "types/upload"; + +class ElectronImageProcessorService { + async convertToJPEG(fileBlob: Blob, filename: string): Promise { + try { + const startTime = Date.now(); + const inputFileData = new Uint8Array(await fileBlob.arrayBuffer()); + const convertedFileData = + await WorkerSafeElectronService.convertToJPEG( + inputFileData, + filename, + ); + addLogLine( + `originalFileSize:${convertBytesToHumanReadable( + fileBlob?.size, + )},convertedFileSize:${convertBytesToHumanReadable( + convertedFileData?.length, + )}, native conversion time: ${Date.now() - startTime}ms `, + ); + return new Blob([convertedFileData]); + } catch (e) { + if ( + e.message !== + CustomError.WINDOWS_NATIVE_IMAGE_PROCESSING_NOT_SUPPORTED + ) { + logError(e, "failed to convert to jpeg natively"); + } + throw e; + } + } + + async generateImageThumbnail( + inputFile: File | ElectronFile, + maxDimension: number, + maxSize: number, + ): Promise { + try { + const startTime = Date.now(); + const thumb = await ElectronAPIs.generateImageThumbnail( + inputFile, + maxDimension, + maxSize, + ); + addLogLine( + `originalFileSize:${convertBytesToHumanReadable( + inputFile?.size, + )},thumbFileSize:${convertBytesToHumanReadable( + thumb?.length, + )}, native thumbnail generation time: ${ + Date.now() - startTime + }ms `, + ); + return thumb; + } catch (e) { + if ( + e.message !== + CustomError.WINDOWS_NATIVE_IMAGE_PROCESSING_NOT_SUPPORTED + ) { + logError(e, "failed to generate image thumbnail natively"); + } + throw e; + } + } +} + +export default new ElectronImageProcessorService(); diff --git a/web/apps/photos/src/services/importService.ts b/web/apps/photos/src/services/importService.ts new file mode 100644 index 000000000..2b99686d0 --- /dev/null +++ b/web/apps/photos/src/services/importService.ts @@ -0,0 +1,70 @@ +import ElectronAPIs from "@ente/shared/electron"; +import { logError } from "@ente/shared/sentry"; +import { PICKED_UPLOAD_TYPE } from "constants/upload"; +import { Collection } from "types/collection"; +import { ElectronFile, FileWithCollection } from "types/upload"; + +interface PendingUploads { + files: ElectronFile[]; + collectionName: string; + type: PICKED_UPLOAD_TYPE; +} + +class ImportService { + async getPendingUploads(): Promise { + try { + const pendingUploads = + (await ElectronAPIs.getPendingUploads()) as PendingUploads; + return pendingUploads; + } catch (e) { + if (e?.message?.includes("ENOENT: no such file or directory")) { + // ignore + } else { + logError(e, "failed to getPendingUploads "); + } + return { files: [], collectionName: null, type: null }; + } + } + + async setToUploadCollection(collections: Collection[]) { + let collectionName: string = null; + /* collection being one suggest one of two things + 1. Either the user has upload to a single existing collection + 2. Created a new single collection to upload to + may have had multiple folder, but chose to upload + to one album + hence saving the collection name when upload collection count is 1 + helps the info of user choosing this options + and on next upload we can directly start uploading to this collection + */ + if (collections.length === 1) { + collectionName = collections[0].name; + } + ElectronAPIs.setToUploadCollection(collectionName); + } + + updatePendingUploads(files: FileWithCollection[]) { + const filePaths = []; + for (const fileWithCollection of files) { + if (fileWithCollection.isLivePhoto) { + filePaths.push( + (fileWithCollection.livePhotoAssets.image as ElectronFile) + .path, + (fileWithCollection.livePhotoAssets.video as ElectronFile) + .path, + ); + } else { + filePaths.push((fileWithCollection.file as ElectronFile).path); + } + } + ElectronAPIs.setToUploadFiles(PICKED_UPLOAD_TYPE.FILES, filePaths); + } + + cancelRemainingUploads() { + ElectronAPIs.setToUploadCollection(null); + ElectronAPIs.setToUploadFiles(PICKED_UPLOAD_TYPE.ZIPS, []); + ElectronAPIs.setToUploadFiles(PICKED_UPLOAD_TYPE.FILES, []); + } +} + +export default new ImportService(); diff --git a/web/apps/photos/src/services/livePhotoService.ts b/web/apps/photos/src/services/livePhotoService.ts new file mode 100644 index 000000000..4d96e812c --- /dev/null +++ b/web/apps/photos/src/services/livePhotoService.ts @@ -0,0 +1,45 @@ +import JSZip from "jszip"; +import { EnteFile } from "types/file"; +import { + getFileExtensionWithDot, + getFileNameWithoutExtension, +} from "utils/file"; + +class LivePhoto { + image: Uint8Array; + video: Uint8Array; + imageNameTitle: string; + videoNameTitle: string; +} + +export const decodeLivePhoto = async (file: EnteFile, zipBlob: Blob) => { + const originalName = getFileNameWithoutExtension(file.metadata.title); + const zip = await JSZip.loadAsync(zipBlob, { createFolders: true }); + + const livePhoto = new LivePhoto(); + for (const zipFilename in zip.files) { + if (zipFilename.startsWith("image")) { + livePhoto.imageNameTitle = + originalName + getFileExtensionWithDot(zipFilename); + livePhoto.image = await zip.files[zipFilename].async("uint8array"); + } else if (zipFilename.startsWith("video")) { + livePhoto.videoNameTitle = + originalName + getFileExtensionWithDot(zipFilename); + livePhoto.video = await zip.files[zipFilename].async("uint8array"); + } + } + return livePhoto; +}; + +export const encodeLivePhoto = async (livePhoto: LivePhoto) => { + const zip = new JSZip(); + zip.file( + "image" + getFileExtensionWithDot(livePhoto.imageNameTitle), + livePhoto.image, + ); + zip.file( + "video" + getFileExtensionWithDot(livePhoto.videoNameTitle), + livePhoto.video, + ); + return await zip.generateAsync({ type: "uint8array" }); +}; diff --git a/web/apps/photos/src/services/locationSearchService.ts b/web/apps/photos/src/services/locationSearchService.ts new file mode 100644 index 000000000..a77557dee --- /dev/null +++ b/web/apps/photos/src/services/locationSearchService.ts @@ -0,0 +1,97 @@ +import { CITIES_URL } from "@ente/shared/constants/urls"; +import { logError } from "@ente/shared/sentry"; +import { LocationTagData } from "types/entity"; +import { Location } from "types/upload"; + +export interface City { + city: string; + country: string; + lat: number; + lng: number; +} + +const DEFAULT_CITY_RADIUS = 10; +const KMS_PER_DEGREE = 111.16; + +class LocationSearchService { + private cities: Array = []; + private citiesPromise: Promise; + + async loadCities() { + try { + if (this.citiesPromise) { + return; + } + this.citiesPromise = fetch(CITIES_URL).then((response) => { + return response.json().then((data) => { + this.cities = data["data"]; + }); + }); + await this.citiesPromise; + } catch (e) { + logError(e, "LocationSearchService loadCities failed"); + this.citiesPromise = null; + } + } + + async searchCities(searchTerm: string) { + try { + if (!this.citiesPromise) { + this.loadCities(); + } + await this.citiesPromise; + return this.cities.filter((city) => { + return city.city + .toLowerCase() + .startsWith(searchTerm.toLowerCase()); + }); + } catch (e) { + logError(e, "LocationSearchService searchCities failed"); + throw e; + } + } +} + +export default new LocationSearchService(); + +export function isInsideLocationTag( + location: Location, + locationTag: LocationTagData, +) { + return isLocationCloseToPoint( + location, + locationTag.centerPoint, + locationTag.radius, + ); +} + +export function isInsideCity(location: Location, city: City) { + return isLocationCloseToPoint( + { latitude: city.lat, longitude: city.lng }, + location, + DEFAULT_CITY_RADIUS, + ); +} + +function isLocationCloseToPoint( + centerPoint: Location, + location: Location, + radius: number, +) { + const a = (radius * _scaleFactor(centerPoint.latitude)) / KMS_PER_DEGREE; + const b = radius / KMS_PER_DEGREE; + const x = centerPoint.latitude - location.latitude; + const y = centerPoint.longitude - location.longitude; + if ((x * x) / (a * a) + (y * y) / (b * b) <= 1) { + return true; + } + return false; +} + +///The area bounded by the location tag becomes more elliptical with increase +///in the magnitude of the latitude on the caritesian plane. When latitude is +///0 degrees, the ellipse is a circle with a = b = r. When latitude incrases, +///the major axis (a) has to be scaled by the secant of the latitude. +function _scaleFactor(lat: number) { + return 1 / Math.cos(lat * (Math.PI / 180)); +} diff --git a/web/apps/photos/src/services/machineLearning/arcfaceAlignmentService.ts b/web/apps/photos/src/services/machineLearning/arcfaceAlignmentService.ts new file mode 100644 index 000000000..99063b3f2 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/arcfaceAlignmentService.ts @@ -0,0 +1,25 @@ +import { + FaceAlignment, + FaceAlignmentMethod, + FaceAlignmentService, + FaceDetection, + Versioned, +} from "types/machineLearning"; +import { getArcfaceAlignment } from "utils/machineLearning/faceAlign"; + +class ArcfaceAlignmentService implements FaceAlignmentService { + public method: Versioned; + + constructor() { + this.method = { + value: "ArcFace", + version: 1, + }; + } + + public getFaceAlignment(faceDetection: FaceDetection): FaceAlignment { + return getArcfaceAlignment(faceDetection); + } +} + +export default new ArcfaceAlignmentService(); diff --git a/web/apps/photos/src/services/machineLearning/arcfaceCropService.ts b/web/apps/photos/src/services/machineLearning/arcfaceCropService.ts new file mode 100644 index 000000000..cb6ccd029 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/arcfaceCropService.ts @@ -0,0 +1,34 @@ +import { + FaceCrop, + FaceCropConfig, + FaceCropMethod, + FaceCropService, + FaceDetection, + Versioned, +} from "types/machineLearning"; +import { getArcfaceAlignment } from "utils/machineLearning/faceAlign"; +import { getFaceCrop } from "utils/machineLearning/faceCrop"; + +class ArcFaceCropService implements FaceCropService { + public method: Versioned; + + constructor() { + this.method = { + value: "ArcFace", + version: 1, + }; + } + + public async getFaceCrop( + imageBitmap: ImageBitmap, + faceDetection: FaceDetection, + config: FaceCropConfig, + ): Promise { + const alignedFace = getArcfaceAlignment(faceDetection); + const faceCrop = getFaceCrop(imageBitmap, alignedFace, config); + + return faceCrop; + } +} + +export default new ArcFaceCropService(); diff --git a/web/apps/photos/src/services/machineLearning/blazeFaceDetectionService.ts b/web/apps/photos/src/services/machineLearning/blazeFaceDetectionService.ts new file mode 100644 index 000000000..2a82efb0a --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/blazeFaceDetectionService.ts @@ -0,0 +1,252 @@ +import { addLogLine } from "@ente/shared/logging"; +import { GraphModel } from "@tensorflow/tfjs-converter"; +import * as tf from "@tensorflow/tfjs-core"; +import { + load as blazeFaceLoad, + BlazeFaceModel, + NormalizedFace, +} from "blazeface-back"; +import { + BLAZEFACE_FACE_SIZE, + BLAZEFACE_INPUT_SIZE, + BLAZEFACE_IOU_THRESHOLD, + BLAZEFACE_MAX_FACES, + BLAZEFACE_PASS1_SCORE_THRESHOLD, + BLAZEFACE_SCORE_THRESHOLD, + MAX_FACE_DISTANCE_PERCENT, +} from "constants/mlConfig"; +import { + FaceDetection, + FaceDetectionMethod, + FaceDetectionService, + Versioned, +} from "types/machineLearning"; +import { addPadding, crop, resizeToSquare } from "utils/image"; +import { enlargeBox, newBox, normFaceBox } from "utils/machineLearning"; +import { + getNearestDetection, + removeDuplicateDetections, + transformPaddedToImage, +} from "utils/machineLearning/faceDetection"; +import { + computeTransformToBox, + transformBox, + transformPoints, +} from "utils/machineLearning/transform"; +import { Box, Point } from "../../../thirdparty/face-api/classes"; + +class BlazeFaceDetectionService implements FaceDetectionService { + private blazeFaceModel: Promise; + private blazeFaceBackModel: GraphModel; + public method: Versioned; + + private desiredLeftEye = [0.36, 0.45]; + private desiredFaceSize; + + public constructor(desiredFaceSize: number = BLAZEFACE_FACE_SIZE) { + this.method = { + value: "BlazeFace", + version: 1, + }; + this.desiredFaceSize = desiredFaceSize; + } + + private async init() { + this.blazeFaceModel = blazeFaceLoad({ + maxFaces: BLAZEFACE_MAX_FACES, + scoreThreshold: BLAZEFACE_PASS1_SCORE_THRESHOLD, + iouThreshold: BLAZEFACE_IOU_THRESHOLD, + modelUrl: "/models/blazeface/back/model.json", + inputHeight: BLAZEFACE_INPUT_SIZE, + inputWidth: BLAZEFACE_INPUT_SIZE, + }); + addLogLine( + "loaded blazeFaceModel: ", + // await this.blazeFaceModel, + // eslint-disable-next-line @typescript-eslint/await-thenable + await tf.getBackend(), + ); + } + + private getDlibAlignedFace(normFace: NormalizedFace): Box { + const relX = 0.5; + const relY = 0.43; + const relScale = 0.45; + + const leftEyeCenter = normFace.landmarks[0]; + const rightEyeCenter = normFace.landmarks[1]; + const mountCenter = normFace.landmarks[3]; + + const distToMouth = (pt) => { + const dy = mountCenter[1] - pt[1]; + const dx = mountCenter[0] - pt[0]; + return Math.sqrt(dx * dx + dy * dy); + }; + const eyeToMouthDist = + (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2; + + const size = Math.floor(eyeToMouthDist / relScale); + + const center = [ + (leftEyeCenter[0] + rightEyeCenter[0] + mountCenter[0]) / 3, + (leftEyeCenter[1] + rightEyeCenter[1] + mountCenter[1]) / 3, + ]; + + const left = center[0] - relX * size; + const top = center[1] - relY * size; + const right = center[0] + relX * size; + const bottom = center[1] + relY * size; + + return new Box({ + left: left, + top: top, + right: right, + bottom: bottom, + }); + } + + private getAlignedFace(normFace: NormalizedFace): Box { + const leftEye = normFace.landmarks[0]; + const rightEye = normFace.landmarks[1]; + // const noseTip = normFace.landmarks[2]; + + const dy = rightEye[1] - leftEye[1]; + const dx = rightEye[0] - leftEye[0]; + + const desiredRightEyeX = 1.0 - this.desiredLeftEye[0]; + + // const eyesCenterX = (leftEye[0] + rightEye[0]) / 2; + // const yaw = Math.abs(noseTip[0] - eyesCenterX) + const dist = Math.sqrt(dx * dx + dy * dy); + let desiredDist = desiredRightEyeX - this.desiredLeftEye[0]; + desiredDist *= this.desiredFaceSize; + const scale = desiredDist / dist; + // addLogLine("scale: ", scale); + + const eyesCenter = []; + eyesCenter[0] = Math.floor((leftEye[0] + rightEye[0]) / 2); + eyesCenter[1] = Math.floor((leftEye[1] + rightEye[1]) / 2); + // addLogLine("eyesCenter: ", eyesCenter); + + const faceWidth = this.desiredFaceSize / scale; + const faceHeight = this.desiredFaceSize / scale; + // addLogLine("faceWidth: ", faceWidth, "faceHeight: ", faceHeight) + + const tx = eyesCenter[0] - faceWidth * 0.5; + const ty = eyesCenter[1] - faceHeight * this.desiredLeftEye[1]; + // addLogLine("tx: ", tx, "ty: ", ty); + + return new Box({ + left: tx, + top: ty, + right: tx + faceWidth, + bottom: ty + faceHeight, + }); + } + + public async detectFacesUsingModel(image: tf.Tensor3D) { + const resizedImage = tf.image.resizeBilinear(image, [256, 256]); + const reshapedImage = tf.reshape(resizedImage, [ + 1, + resizedImage.shape[0], + resizedImage.shape[1], + 3, + ]); + const normalizedImage = tf.sub(tf.div(reshapedImage, 127.5), 1.0); + // eslint-disable-next-line @typescript-eslint/await-thenable + const results = await this.blazeFaceBackModel.predict(normalizedImage); + // addLogLine('onFacesDetected: ', results); + return results; + } + + private async getBlazefaceModel() { + if (!this.blazeFaceModel) { + await this.init(); + } + + return this.blazeFaceModel; + } + + private async estimateFaces( + imageBitmap: ImageBitmap, + ): Promise> { + const resized = resizeToSquare(imageBitmap, BLAZEFACE_INPUT_SIZE); + const tfImage = tf.browser.fromPixels(resized.image); + const blazeFaceModel = await this.getBlazefaceModel(); + // TODO: check if this works concurrently, else use serialqueue + const faces = await blazeFaceModel.estimateFaces(tfImage); + tf.dispose(tfImage); + + const inBox = newBox(0, 0, resized.width, resized.height); + const toBox = newBox(0, 0, imageBitmap.width, imageBitmap.height); + const transform = computeTransformToBox(inBox, toBox); + // addLogLine("1st pass: ", { transform }); + + const faceDetections: Array = faces?.map((f) => { + const box = transformBox(normFaceBox(f), transform); + const normLandmarks = (f.landmarks as number[][])?.map( + (l) => new Point(l[0], l[1]), + ); + const landmarks = transformPoints(normLandmarks, transform); + return { + box, + landmarks, + probability: f.probability as number, + // detectionMethod: this.method, + } as FaceDetection; + }); + + return faceDetections; + } + + public async detectFaces( + imageBitmap: ImageBitmap, + ): Promise> { + const maxFaceDistance = imageBitmap.width * MAX_FACE_DISTANCE_PERCENT; + const pass1Detections = await this.estimateFaces(imageBitmap); + + // run 2nd pass for accuracy + const detections: Array = []; + for (const pass1Detection of pass1Detections) { + const imageBox = enlargeBox(pass1Detection.box, 2); + const faceImage = crop( + imageBitmap, + imageBox, + BLAZEFACE_INPUT_SIZE / 2, + ); + const paddedImage = addPadding(faceImage, 0.5); + const paddedBox = enlargeBox(imageBox, 2); + const pass2Detections = await this.estimateFaces(paddedImage); + + pass2Detections?.forEach((d) => + transformPaddedToImage(d, faceImage, imageBox, paddedBox), + ); + let selected = pass2Detections?.[0]; + if (pass2Detections?.length > 1) { + // addLogLine('2nd pass >1 face', pass2Detections.length); + selected = getNearestDetection( + pass1Detection, + pass2Detections, + // maxFaceDistance + ); + } + + // we might miss 1st pass face actually having score within threshold + // it is ok as results will be consistent with 2nd pass only detections + if (selected && selected.probability >= BLAZEFACE_SCORE_THRESHOLD) { + // addLogLine("pass2: ", { imageBox, paddedBox, transform, selected }); + detections.push(selected); + } + } + + return removeDuplicateDetections(detections, maxFaceDistance); + } + + public async dispose() { + const blazeFaceModel = await this.getBlazefaceModel(); + blazeFaceModel?.dispose(); + this.blazeFaceModel = undefined; + } +} + +export default new BlazeFaceDetectionService(); diff --git a/web/apps/photos/src/services/machineLearning/clusteringService.ts b/web/apps/photos/src/services/machineLearning/clusteringService.ts new file mode 100644 index 000000000..d4c0b4ea1 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/clusteringService.ts @@ -0,0 +1,88 @@ +import { DBSCAN, KMEANS, OPTICS } from "density-clustering"; +import { Hdbscan } from "hdbscan"; +import { HdbscanInput } from "hdbscan/dist/types"; +import { + ClusteringConfig, + ClusteringInput, + ClusteringMethod, + ClusteringResults, + HdbscanResults, + Versioned, +} from "types/machineLearning"; + +class ClusteringService { + private dbscan: DBSCAN; + private optics: OPTICS; + private kmeans: KMEANS; + + constructor() { + this.dbscan = new DBSCAN(); + this.optics = new OPTICS(); + this.kmeans = new KMEANS(); + } + + public clusterUsingDBSCAN( + dataset: Array>, + epsilon: number = 1.0, + minPts: number = 2, + ): ClusteringResults { + // addLogLine("distanceFunction", DBSCAN._); + const clusters = this.dbscan.run(dataset, epsilon, minPts); + const noise = this.dbscan.noise; + return { clusters, noise }; + } + + public clusterUsingOPTICS( + dataset: Array>, + epsilon: number = 1.0, + minPts: number = 2, + ) { + const clusters = this.optics.run(dataset, epsilon, minPts); + return { clusters, noise: [] }; + } + + public clusterUsingKMEANS( + dataset: Array>, + numClusters: number = 5, + ) { + const clusters = this.kmeans.run(dataset, numClusters); + return { clusters, noise: [] }; + } + + public clusterUsingHdbscan(hdbscanInput: HdbscanInput): HdbscanResults { + if (hdbscanInput.input.length < 10) { + throw Error("too few samples to run Hdbscan"); + } + + const hdbscan = new Hdbscan(hdbscanInput); + const clusters = hdbscan.getClusters(); + const noise = hdbscan.getNoise(); + const debugInfo = hdbscan.getDebugInfo(); + + return { clusters, noise, debugInfo }; + } + + public cluster( + method: Versioned, + input: ClusteringInput, + config: ClusteringConfig, + ) { + if (method.value === "Hdbscan") { + return this.clusterUsingHdbscan({ + input, + minClusterSize: config.minClusterSize, + debug: config.generateDebugInfo, + }); + } else if (method.value === "Dbscan") { + return this.clusterUsingDBSCAN( + input, + config.maxDistanceInsideCluster, + config.minClusterSize, + ); + } else { + throw Error("Unknown clustering method: " + method.value); + } + } +} + +export default ClusteringService; diff --git a/web/apps/photos/src/services/machineLearning/dbscanClusteringService.ts b/web/apps/photos/src/services/machineLearning/dbscanClusteringService.ts new file mode 100644 index 000000000..b2343bdd5 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/dbscanClusteringService.ts @@ -0,0 +1,37 @@ +import { DBSCAN } from "density-clustering"; +import { + ClusteringConfig, + ClusteringInput, + ClusteringMethod, + ClusteringService, + HdbscanResults, + Versioned, +} from "types/machineLearning"; + +class DbscanClusteringService implements ClusteringService { + public method: Versioned; + + constructor() { + this.method = { + value: "Dbscan", + version: 1, + }; + } + + public async cluster( + input: ClusteringInput, + config: ClusteringConfig, + ): Promise { + // addLogLine('Clustering input: ', input); + const dbscan = new DBSCAN(); + const clusters = dbscan.run( + input, + config.clusterSelectionEpsilon, + config.minClusterSize, + ); + const noise = dbscan.noise; + return { clusters, noise }; + } +} + +export default new DbscanClusteringService(); diff --git a/web/apps/photos/src/services/machineLearning/faceService.ts b/web/apps/photos/src/services/machineLearning/faceService.ts new file mode 100644 index 000000000..1355ca494 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/faceService.ts @@ -0,0 +1,259 @@ +import { addLogLine } from "@ente/shared/logging"; +import { + DetectedFace, + Face, + MLSyncContext, + MLSyncFileContext, +} from "types/machineLearning"; +import { imageBitmapToBlob } from "utils/image"; +import { + areFaceIdsSame, + extractFaceImages, + getFaceId, + getLocalFile, + getOriginalImageBitmap, + isDifferentOrOld, +} from "utils/machineLearning"; +import { storeFaceCrop } from "utils/machineLearning/faceCrop"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; +import ReaderService from "./readerService"; + +class FaceService { + async syncFileFaceDetections( + syncContext: MLSyncContext, + fileContext: MLSyncFileContext, + ) { + const { oldMlFile, newMlFile } = fileContext; + if ( + !isDifferentOrOld( + oldMlFile?.faceDetectionMethod, + syncContext.faceDetectionService.method, + ) && + oldMlFile?.imageSource === syncContext.config.imageSource + ) { + newMlFile.faces = oldMlFile?.faces?.map((existingFace) => ({ + id: existingFace.id, + fileId: existingFace.fileId, + detection: existingFace.detection, + })); + + newMlFile.imageSource = oldMlFile.imageSource; + newMlFile.imageDimensions = oldMlFile.imageDimensions; + newMlFile.faceDetectionMethod = oldMlFile.faceDetectionMethod; + return; + } + + newMlFile.faceDetectionMethod = syncContext.faceDetectionService.method; + fileContext.newDetection = true; + const imageBitmap = await ReaderService.getImageBitmap( + syncContext, + fileContext, + ); + const faceDetections = + await syncContext.faceDetectionService.detectFaces(imageBitmap); + // addLogLine('3 TF Memory stats: ',JSON.stringify(tf.memory())); + // TODO: reenable faces filtering based on width + const detectedFaces = faceDetections?.map((detection) => { + return { + fileId: fileContext.enteFile.id, + detection, + } as DetectedFace; + }); + newMlFile.faces = detectedFaces?.map((detectedFace) => ({ + ...detectedFace, + id: getFaceId(detectedFace, newMlFile.imageDimensions), + })); + // ?.filter((f) => + // f.box.width > syncContext.config.faceDetection.minFaceSize + // ); + addLogLine("[MLService] Detected Faces: ", newMlFile.faces?.length); + } + + async syncFileFaceCrops( + syncContext: MLSyncContext, + fileContext: MLSyncFileContext, + ) { + const { oldMlFile, newMlFile } = fileContext; + if ( + // !syncContext.config.faceCrop.enabled || + !fileContext.newDetection && + !isDifferentOrOld( + oldMlFile?.faceCropMethod, + syncContext.faceCropService.method, + ) && + areFaceIdsSame(newMlFile.faces, oldMlFile?.faces) + ) { + for (const [index, face] of newMlFile.faces.entries()) { + face.crop = oldMlFile.faces[index].crop; + } + newMlFile.faceCropMethod = oldMlFile.faceCropMethod; + return; + } + + const imageBitmap = await ReaderService.getImageBitmap( + syncContext, + fileContext, + ); + newMlFile.faceCropMethod = syncContext.faceCropService.method; + + for (const face of newMlFile.faces) { + await this.saveFaceCrop(imageBitmap, face, syncContext); + } + } + + async syncFileFaceAlignments( + syncContext: MLSyncContext, + fileContext: MLSyncFileContext, + ) { + const { oldMlFile, newMlFile } = fileContext; + if ( + !fileContext.newDetection && + !isDifferentOrOld( + oldMlFile?.faceAlignmentMethod, + syncContext.faceAlignmentService.method, + ) && + areFaceIdsSame(newMlFile.faces, oldMlFile?.faces) + ) { + for (const [index, face] of newMlFile.faces.entries()) { + face.alignment = oldMlFile.faces[index].alignment; + } + newMlFile.faceAlignmentMethod = oldMlFile.faceAlignmentMethod; + return; + } + + newMlFile.faceAlignmentMethod = syncContext.faceAlignmentService.method; + fileContext.newAlignment = true; + for (const face of newMlFile.faces) { + face.alignment = syncContext.faceAlignmentService.getFaceAlignment( + face.detection, + ); + } + addLogLine("[MLService] alignedFaces: ", newMlFile.faces?.length); + // addLogLine('4 TF Memory stats: ',JSON.stringify(tf.memory())); + } + + async syncFileFaceEmbeddings( + syncContext: MLSyncContext, + fileContext: MLSyncFileContext, + ) { + const { oldMlFile, newMlFile } = fileContext; + if ( + !fileContext.newAlignment && + !isDifferentOrOld( + oldMlFile?.faceEmbeddingMethod, + syncContext.faceEmbeddingService.method, + ) && + areFaceIdsSame(newMlFile.faces, oldMlFile?.faces) + ) { + for (const [index, face] of newMlFile.faces.entries()) { + face.embedding = oldMlFile.faces[index].embedding; + } + newMlFile.faceEmbeddingMethod = oldMlFile.faceEmbeddingMethod; + return; + } + + newMlFile.faceEmbeddingMethod = syncContext.faceEmbeddingService.method; + // TODO: when not storing face crops, image will be needed to extract faces + // fileContext.imageBitmap || + // (await this.getImageBitmap(syncContext, fileContext)); + const faceImages = await extractFaceImages( + newMlFile.faces, + syncContext.faceEmbeddingService.faceSize, + ); + + const embeddings = + await syncContext.faceEmbeddingService.getFaceEmbeddings( + faceImages, + ); + faceImages.forEach((faceImage) => faceImage.close()); + newMlFile.faces.forEach((f, i) => (f.embedding = embeddings[i])); + + addLogLine("[MLService] facesWithEmbeddings: ", newMlFile.faces.length); + // addLogLine('5 TF Memory stats: ',JSON.stringify(tf.memory())); + } + + async saveFaceCrop( + imageBitmap: ImageBitmap, + face: Face, + syncContext: MLSyncContext, + ) { + const faceCrop = await syncContext.faceCropService.getFaceCrop( + imageBitmap, + face.detection, + syncContext.config.faceCrop, + ); + face.crop = await storeFaceCrop( + face.id, + faceCrop, + syncContext.config.faceCrop.blobOptions, + ); + const blob = await imageBitmapToBlob(faceCrop.image); + faceCrop.image.close(); + return blob; + } + + async getAllSyncedFacesMap(syncContext: MLSyncContext) { + if (syncContext.allSyncedFacesMap) { + return syncContext.allSyncedFacesMap; + } + + syncContext.allSyncedFacesMap = await mlIDbStorage.getAllFacesMap(); + return syncContext.allSyncedFacesMap; + } + + public async runFaceClustering( + syncContext: MLSyncContext, + allFaces: Array, + ) { + // await this.init(); + + const clusteringConfig = syncContext.config.faceClustering; + + if (!allFaces || allFaces.length < clusteringConfig.minInputSize) { + addLogLine( + "[MLService] Too few faces to cluster, not running clustering: ", + allFaces.length, + ); + return; + } + + addLogLine("Running clustering allFaces: ", allFaces.length); + syncContext.mlLibraryData.faceClusteringResults = + await syncContext.faceClusteringService.cluster( + allFaces.map((f) => Array.from(f.embedding)), + syncContext.config.faceClustering, + ); + syncContext.mlLibraryData.faceClusteringMethod = + syncContext.faceClusteringService.method; + addLogLine( + "[MLService] Got face clustering results: ", + JSON.stringify(syncContext.mlLibraryData.faceClusteringResults), + ); + + // syncContext.faceClustersWithNoise = { + // clusters: syncContext.faceClusteringResults.clusters.map( + // (faces) => ({ + // faces, + // }) + // ), + // noise: syncContext.faceClusteringResults.noise, + // }; + } + + public async regenerateFaceCrop( + syncContext: MLSyncContext, + faceID: string, + ) { + const fileID = Number(faceID.split("-")[0]); + const personFace = await mlIDbStorage.getFace(fileID, faceID); + if (!personFace) { + throw Error("Face not found"); + } + + const file = await getLocalFile(personFace.fileId); + const imageBitmap = await getOriginalImageBitmap(file); + return await this.saveFaceCrop(imageBitmap, personFace, syncContext); + } +} + +export default new FaceService(); diff --git a/web/apps/photos/src/services/machineLearning/hdbscanClusteringService.ts b/web/apps/photos/src/services/machineLearning/hdbscanClusteringService.ts new file mode 100644 index 000000000..da7808d45 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/hdbscanClusteringService.ts @@ -0,0 +1,44 @@ +import { Hdbscan } from "hdbscan"; +import { + ClusteringConfig, + ClusteringInput, + ClusteringMethod, + ClusteringService, + HdbscanResults, + Versioned, +} from "types/machineLearning"; + +class HdbscanClusteringService implements ClusteringService { + public method: Versioned; + + constructor() { + this.method = { + value: "Hdbscan", + version: 1, + }; + } + + public async cluster( + input: ClusteringInput, + config: ClusteringConfig, + ): Promise { + // addLogLine('Clustering input: ', input); + const hdbscan = new Hdbscan({ + input, + + minClusterSize: config.minClusterSize, + minSamples: config.minSamples, + clusterSelectionEpsilon: config.clusterSelectionEpsilon, + clusterSelectionMethod: config.clusterSelectionMethod, + debug: config.generateDebugInfo, + }); + + return { + clusters: hdbscan.getClusters(), + noise: hdbscan.getNoise(), + debugInfo: hdbscan.getDebugInfo(), + }; + } +} + +export default new HdbscanClusteringService(); diff --git a/web/apps/photos/src/services/machineLearning/imageSceneService.ts b/web/apps/photos/src/services/machineLearning/imageSceneService.ts new file mode 100644 index 000000000..65438a5b9 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/imageSceneService.ts @@ -0,0 +1,111 @@ +import { addLogLine } from "@ente/shared/logging"; +import * as tfjsConverter from "@tensorflow/tfjs-converter"; +import * as tf from "@tensorflow/tfjs-core"; +import { SCENE_DETECTION_IMAGE_SIZE } from "constants/mlConfig"; +import { + ObjectDetection, + SceneDetectionMethod, + SceneDetectionService, + Versioned, +} from "types/machineLearning"; +import { resizeToSquare } from "utils/image"; + +class ImageScene implements SceneDetectionService { + method: Versioned; + private model: tfjsConverter.GraphModel; + private sceneMap: { [key: string]: string }; + private ready: Promise; + private workerID: number; + + public constructor() { + this.method = { + value: "ImageScene", + version: 1, + }; + this.workerID = Math.round(Math.random() * 1000); + } + + private async init() { + addLogLine(`[${this.workerID}]`, "ImageScene init called"); + if (this.model) { + return; + } + + this.sceneMap = await ( + await fetch("/models/imagescene/sceneMap.json") + ).json(); + + this.model = await tfjsConverter.loadGraphModel( + "/models/imagescene/model.json", + ); + addLogLine( + `[${this.workerID}]`, + "loaded ImageScene model", + tf.getBackend(), + ); + + tf.tidy(() => { + const zeroTensor = tf.zeros([1, 224, 224, 3]); + // warmup the model + this.model.predict(zeroTensor) as tf.Tensor; + }); + } + + private async getImageSceneModel() { + addLogLine( + `[${this.workerID}]`, + "ImageScene getImageSceneModel called", + ); + if (!this.ready) { + this.ready = this.init(); + } + await this.ready; + return this.model; + } + + async detectScenes(image: ImageBitmap, minScore: number) { + const resized = resizeToSquare(image, SCENE_DETECTION_IMAGE_SIZE); + + const model = await this.getImageSceneModel(); + + const output = tf.tidy(() => { + const tfImage = tf.browser.fromPixels(resized.image); + const input = tf.expandDims(tf.cast(tfImage, "float32")); + const output = model.predict(input) as tf.Tensor; + return output; + }); + + const data = (await output.data()) as Float32Array; + output.dispose(); + + const scenes = this.parseSceneDetectionResult( + data, + minScore, + image.width, + image.height, + ); + + return scenes; + } + + private parseSceneDetectionResult( + outputData: Float32Array, + minScore: number, + width: number, + height: number, + ): ObjectDetection[] { + const scenes = []; + for (let i = 0; i < outputData.length; i++) { + if (outputData[i] >= minScore) { + scenes.push({ + class: this.sceneMap[i.toString()], + score: outputData[i], + bbox: [0, 0, width, height], + }); + } + } + return scenes; + } +} + +export default new ImageScene(); diff --git a/web/apps/photos/src/services/machineLearning/machineLearningFactory.ts b/web/apps/photos/src/services/machineLearning/machineLearningFactory.ts new file mode 100644 index 000000000..d397a60ad --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/machineLearningFactory.ts @@ -0,0 +1,234 @@ +import { getDedicatedCryptoWorker } from "@ente/shared/crypto"; +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { addLogLine } from "@ente/shared/logging"; +import { ComlinkWorker } from "@ente/shared/worker/comlinkWorker"; +import PQueue from "p-queue"; +import { EnteFile } from "types/file"; +import { + ClusteringMethod, + ClusteringService, + Face, + FaceAlignmentMethod, + FaceAlignmentService, + FaceCropMethod, + FaceCropService, + FaceDetectionMethod, + FaceDetectionService, + FaceEmbeddingMethod, + FaceEmbeddingService, + MLLibraryData, + MLSyncConfig, + MLSyncContext, + ObjectDetectionMethod, + ObjectDetectionService, + SceneDetectionMethod, + SceneDetectionService, +} from "types/machineLearning"; +import { getConcurrency } from "utils/common/concurrency"; +import { logQueueStats } from "utils/machineLearning"; +import arcfaceAlignmentService from "./arcfaceAlignmentService"; +import arcfaceCropService from "./arcfaceCropService"; +import blazeFaceDetectionService from "./blazeFaceDetectionService"; +import dbscanClusteringService from "./dbscanClusteringService"; +import hdbscanClusteringService from "./hdbscanClusteringService"; +import imageSceneService from "./imageSceneService"; +import mobileFaceNetEmbeddingService from "./mobileFaceNetEmbeddingService"; +import ssdMobileNetV2Service from "./ssdMobileNetV2Service"; + +export class MLFactory { + public static getFaceDetectionService( + method: FaceDetectionMethod, + ): FaceDetectionService { + if (method === "BlazeFace") { + return blazeFaceDetectionService; + } + + throw Error("Unknon face detection method: " + method); + } + + public static getObjectDetectionService( + method: ObjectDetectionMethod, + ): ObjectDetectionService { + if (method === "SSDMobileNetV2") { + return ssdMobileNetV2Service; + } + + throw Error("Unknown object detection method: " + method); + } + + public static getSceneDetectionService( + method: SceneDetectionMethod, + ): SceneDetectionService { + if (method === "ImageScene") { + return imageSceneService; + } + + throw Error("Unknown scene detection method: " + method); + } + + public static getFaceCropService(method: FaceCropMethod) { + if (method === "ArcFace") { + return arcfaceCropService; + } + + throw Error("Unknon face crop method: " + method); + } + + public static getFaceAlignmentService( + method: FaceAlignmentMethod, + ): FaceAlignmentService { + if (method === "ArcFace") { + return arcfaceAlignmentService; + } + + throw Error("Unknon face alignment method: " + method); + } + + public static getFaceEmbeddingService( + method: FaceEmbeddingMethod, + ): FaceEmbeddingService { + if (method === "MobileFaceNet") { + return mobileFaceNetEmbeddingService; + } + + throw Error("Unknon face embedding method: " + method); + } + + public static getClusteringService( + method: ClusteringMethod, + ): ClusteringService { + if (method === "Hdbscan") { + return hdbscanClusteringService; + } + if (method === "Dbscan") { + return dbscanClusteringService; + } + + throw Error("Unknon clustering method: " + method); + } + + public static getMLSyncContext( + token: string, + userID: number, + config: MLSyncConfig, + shouldUpdateMLVersion: boolean = true, + ) { + return new LocalMLSyncContext( + token, + userID, + config, + shouldUpdateMLVersion, + ); + } +} + +export class LocalMLSyncContext implements MLSyncContext { + public token: string; + public userID: number; + public config: MLSyncConfig; + public shouldUpdateMLVersion: boolean; + + public faceDetectionService: FaceDetectionService; + public faceCropService: FaceCropService; + public faceAlignmentService: FaceAlignmentService; + public faceEmbeddingService: FaceEmbeddingService; + public faceClusteringService: ClusteringService; + public objectDetectionService: ObjectDetectionService; + public sceneDetectionService: SceneDetectionService; + + public localFilesMap: Map; + public outOfSyncFiles: EnteFile[]; + public nSyncedFiles: number; + public nSyncedFaces: number; + public allSyncedFacesMap?: Map>; + public tsne?: any; + + public error?: Error; + + public mlLibraryData: MLLibraryData; + + public syncQueue: PQueue; + // TODO: wheather to limit concurrent downloads + // private downloadQueue: PQueue; + + private concurrency: number; + private comlinkCryptoWorker: Array< + ComlinkWorker + >; + private enteWorkers: Array; + + constructor( + token: string, + userID: number, + config: MLSyncConfig, + shouldUpdateMLVersion: boolean = true, + concurrency?: number, + ) { + this.token = token; + this.userID = userID; + this.config = config; + this.shouldUpdateMLVersion = shouldUpdateMLVersion; + + this.faceDetectionService = MLFactory.getFaceDetectionService( + this.config.faceDetection.method, + ); + this.faceCropService = MLFactory.getFaceCropService( + this.config.faceCrop.method, + ); + this.faceAlignmentService = MLFactory.getFaceAlignmentService( + this.config.faceAlignment.method, + ); + this.faceEmbeddingService = MLFactory.getFaceEmbeddingService( + this.config.faceEmbedding.method, + ); + this.faceClusteringService = MLFactory.getClusteringService( + this.config.faceClustering.method, + ); + + this.objectDetectionService = MLFactory.getObjectDetectionService( + this.config.objectDetection.method, + ); + this.sceneDetectionService = MLFactory.getSceneDetectionService( + this.config.sceneDetection.method, + ); + + this.outOfSyncFiles = []; + this.nSyncedFiles = 0; + this.nSyncedFaces = 0; + + this.concurrency = concurrency || getConcurrency(); + + addLogLine("Using concurrency: ", this.concurrency); + // timeout is added on downloads + // timeout on queue will keep the operation open till worker is terminated + this.syncQueue = new PQueue({ concurrency: this.concurrency }); + logQueueStats(this.syncQueue, "sync"); + // this.downloadQueue = new PQueue({ concurrency: 1 }); + // logQueueStats(this.downloadQueue, 'download'); + + this.comlinkCryptoWorker = new Array(this.concurrency); + this.enteWorkers = new Array(this.concurrency); + } + + public async getEnteWorker(id: number): Promise { + const wid = id % this.enteWorkers.length; + if (!this.enteWorkers[wid]) { + this.comlinkCryptoWorker[wid] = getDedicatedCryptoWorker(); + this.enteWorkers[wid] = await this.comlinkCryptoWorker[wid].remote; + } + + return this.enteWorkers[wid]; + } + + public async dispose() { + // await this.faceDetectionService.dispose(); + // await this.faceEmbeddingService.dispose(); + + this.localFilesMap = undefined; + await this.syncQueue.onIdle(); + this.syncQueue.removeAllListeners(); + for (const enteComlinkWorker of this.comlinkCryptoWorker) { + enteComlinkWorker?.terminate(); + } + } +} diff --git a/web/apps/photos/src/services/machineLearning/machineLearningService.ts b/web/apps/photos/src/services/machineLearning/machineLearningService.ts new file mode 100644 index 000000000..c95effc76 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/machineLearningService.ts @@ -0,0 +1,611 @@ +import { getLocalFiles } from "services/fileService"; +import { EnteFile } from "types/file"; + +import "@tensorflow/tfjs-backend-cpu"; +import "@tensorflow/tfjs-backend-webgl"; +import * as tf from "@tensorflow/tfjs-core"; +// import '@tensorflow/tfjs-backend-wasm'; +// import { setWasmPaths } from '@tensorflow/tfjs-backend-wasm'; +// import '@tensorflow/tfjs-backend-cpu'; + +import { + MlFileData, + MLSyncContext, + MLSyncFileContext, + MLSyncResult, +} from "types/machineLearning"; + +// import { toTSNE } from 'utils/machineLearning/visualization'; +// import { +// incrementIndexVersion, +// mlFilesStore +// } from 'utils/storage/mlStorage'; +// import { getAllFacesFromMap } from 'utils/machineLearning'; +import { CustomError, parseUploadErrorCodes } from "@ente/shared/error"; +import { MAX_ML_SYNC_ERROR_COUNT } from "constants/mlConfig"; +import { getMLSyncConfig } from "utils/machineLearning/config"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; +import FaceService from "./faceService"; +import { MLFactory } from "./machineLearningFactory"; +import ObjectService from "./objectService"; +import PeopleService from "./peopleService"; +// import TextService from './textService'; +import { APPS } from "@ente/shared/apps/constants"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import downloadManager from "services/download"; +import ReaderService from "./readerService"; + +class MachineLearningService { + private initialized = false; + // private faceDetectionService: FaceDetectionService; + // private faceLandmarkService: FAPIFaceLandmarksService; + // private faceAlignmentService: FaceAlignmentService; + // private faceEmbeddingService: FaceEmbeddingService; + // private faceEmbeddingService: FAPIFaceEmbeddingService; + // private clusteringService: ClusteringService; + + private localSyncContext: Promise; + private syncContext: Promise; + + public constructor() { + // setWasmPaths('/js/tfjs/'); + // this.faceDetectionService = new TFJSFaceDetectionService(); + // this.faceLandmarkService = new FAPIFaceLandmarksService(); + // this.faceAlignmentService = new ArcfaceAlignmentService(); + // this.faceEmbeddingService = new TFJSFaceEmbeddingService(); + // this.faceEmbeddingService = new FAPIFaceEmbeddingService(); + // this.clusteringService = new ClusteringService(); + } + + public async sync(token: string, userID: number): Promise { + if (!token) { + throw Error("Token needed by ml service to sync file"); + } + + await downloadManager.init(APPS.PHOTOS, { token }); + // await this.init(); + + // Used to debug tf memory leak, all tf memory + // needs to be cleaned using tf.dispose or tf.tidy + // tf.engine().startScope(); + + const syncContext = await this.getSyncContext(token, userID); + + await this.syncLocalFiles(syncContext); + + await this.getOutOfSyncFiles(syncContext); + + if (syncContext.outOfSyncFiles.length > 0) { + await this.syncFiles(syncContext); + } + + // TODO: running index before all files are on latest ml version + // may be need to just take synced files on latest ml version for indexing + if ( + syncContext.outOfSyncFiles.length <= 0 || + (syncContext.nSyncedFiles === syncContext.config.batchSize && + Math.random() < 0.2) + ) { + await this.syncIndex(syncContext); + } + + // tf.engine().endScope(); + + // if (syncContext.config.tsne) { + // await this.runTSNE(syncContext); + // } + + const mlSyncResult: MLSyncResult = { + nOutOfSyncFiles: syncContext.outOfSyncFiles.length, + nSyncedFiles: syncContext.nSyncedFiles, + nSyncedFaces: syncContext.nSyncedFaces, + nFaceClusters: + syncContext.mlLibraryData?.faceClusteringResults?.clusters + .length, + nFaceNoise: + syncContext.mlLibraryData?.faceClusteringResults?.noise.length, + tsne: syncContext.tsne, + error: syncContext.error, + }; + // addLogLine('[MLService] sync results: ', mlSyncResult); + + // await syncContext.dispose(); + addLogLine("Final TF Memory stats: ", JSON.stringify(tf.memory())); + + return mlSyncResult; + } + + public async regenerateFaceCrop( + token: string, + userID: number, + faceID: string, + ) { + await downloadManager.init(APPS.PHOTOS, { token }); + const syncContext = await this.getSyncContext(token, userID); + return FaceService.regenerateFaceCrop(syncContext, faceID); + } + + private newMlData(fileId: number) { + return { + fileId, + mlVersion: 0, + errorCount: 0, + } as MlFileData; + } + + private async getLocalFilesMap(syncContext: MLSyncContext) { + if (!syncContext.localFilesMap) { + const localFiles = await getLocalFiles(); + + const personalFiles = localFiles.filter( + (f) => f.ownerID === syncContext.userID, + ); + syncContext.localFilesMap = new Map(); + personalFiles.forEach((f) => + syncContext.localFilesMap.set(f.id, f), + ); + } + + return syncContext.localFilesMap; + } + + private async syncLocalFiles(syncContext: MLSyncContext) { + const startTime = Date.now(); + const localFilesMap = await this.getLocalFilesMap(syncContext); + + const db = await mlIDbStorage.db; + const tx = db.transaction("files", "readwrite"); + const mlFileIdsArr = await mlIDbStorage.getAllFileIdsForUpdate(tx); + const mlFileIds = new Set(); + mlFileIdsArr.forEach((mlFileId) => mlFileIds.add(mlFileId)); + + const newFileIds: Array = []; + for (const localFileId of localFilesMap.keys()) { + if (!mlFileIds.has(localFileId)) { + newFileIds.push(localFileId); + } + } + + let updated = false; + if (newFileIds.length > 0) { + addLogLine("newFiles: ", newFileIds.length); + const newFiles = newFileIds.map((fileId) => this.newMlData(fileId)); + await mlIDbStorage.putAllFiles(newFiles, tx); + updated = true; + } + + const removedFileIds: Array = []; + for (const mlFileId of mlFileIds) { + if (!localFilesMap.has(mlFileId)) { + removedFileIds.push(mlFileId); + } + } + + if (removedFileIds.length > 0) { + addLogLine("removedFiles: ", removedFileIds.length); + await mlIDbStorage.removeAllFiles(removedFileIds, tx); + updated = true; + } + + await tx.done; + + if (updated) { + // TODO: should do in same transaction + await mlIDbStorage.incrementIndexVersion("files"); + } + + addLogLine("syncLocalFiles", Date.now() - startTime, "ms"); + } + + // TODO: not required if ml data is stored as field inside ente file object + // remove, not required now + // it removes ml data for files in trash, they will be resynced if restored + // private async syncRemovedFiles(syncContext: MLSyncContext) { + // const db = await mlIDbStorage.db; + // const localFileIdMap = await this.getLocalFilesMap(syncContext); + + // const removedFileIds: Array = []; + // await mlFilesStore.iterate((file, idStr) => { + // if (!localFileIdMap.has(parseInt(idStr))) { + // removedFileIds.push(idStr); + // } + // }); + + // if (removedFileIds.length < 1) { + // return; + // } + + // removedFileIds.forEach((fileId) => mlFilesStore.removeItem(fileId)); + // addLogLine('Removed local file ids: ', removedFileIds); + + // await incrementIndexVersion('files'); + // } + + private async getOutOfSyncFiles(syncContext: MLSyncContext) { + const startTime = Date.now(); + const fileIds = await mlIDbStorage.getFileIds( + syncContext.config.batchSize, + syncContext.config.mlVersion, + MAX_ML_SYNC_ERROR_COUNT, + ); + + addLogLine("fileIds: ", JSON.stringify(fileIds)); + + const localFilesMap = await this.getLocalFilesMap(syncContext); + syncContext.outOfSyncFiles = fileIds.map((fileId) => + localFilesMap.get(fileId), + ); + addLogLine("getOutOfSyncFiles", Date.now() - startTime, "ms"); + } + + // TODO: optimize, use indexdb indexes, move facecrops to cache to reduce io + // remove, already done + private async getUniqueOutOfSyncFilesNoIdx( + syncContext: MLSyncContext, + files: EnteFile[], + ) { + const limit = syncContext.config.batchSize; + const mlVersion = syncContext.config.mlVersion; + const uniqueFiles: Map = new Map(); + for (let i = 0; uniqueFiles.size < limit && i < files.length; i++) { + const mlFileData = await this.getMLFileData(files[i].id); + const mlFileVersion = mlFileData?.mlVersion || 0; + if ( + !uniqueFiles.has(files[i].id) && + (!mlFileData?.errorCount || mlFileData.errorCount < 2) && + (mlFileVersion < mlVersion || + syncContext.config.imageSource !== mlFileData.imageSource) + ) { + uniqueFiles.set(files[i].id, files[i]); + } + } + + return [...uniqueFiles.values()]; + } + + // private async getOutOfSyncFilesNoIdx(syncContext: MLSyncContext) { + // const existingFilesMap = await this.getLocalFilesMap(syncContext); + // // existingFiles.sort( + // // (a, b) => b.metadata.creationTime - a.metadata.creationTime + // // ); + // console.time('getUniqueOutOfSyncFiles'); + // syncContext.outOfSyncFiles = await this.getUniqueOutOfSyncFilesNoIdx( + // syncContext, + // [...existingFilesMap.values()] + // ); + // addLogLine('getUniqueOutOfSyncFiles'); + // addLogLine( + // 'Got unique outOfSyncFiles: ', + // syncContext.outOfSyncFiles.length, + // 'for batchSize: ', + // syncContext.config.batchSize + // ); + // } + + private async syncFiles(syncContext: MLSyncContext) { + try { + const functions = syncContext.outOfSyncFiles.map( + (outOfSyncfile) => async () => { + await this.syncFileWithErrorHandler( + syncContext, + outOfSyncfile, + ); + // TODO: just store file and faces count in syncContext + }, + ); + syncContext.syncQueue.on("error", () => { + syncContext.syncQueue.clear(); + }); + await syncContext.syncQueue.addAll(functions); + } catch (error) { + console.error("Error in sync job: ", error); + syncContext.error = error; + } + await syncContext.syncQueue.onIdle(); + addLogLine("allFaces: ", syncContext.nSyncedFaces); + + // TODO: In case syncJob has to use multiple ml workers + // do in same transaction with each file update + // or keep in files store itself + await mlIDbStorage.incrementIndexVersion("files"); + // await this.disposeMLModels(); + } + + private async getSyncContext(token: string, userID: number) { + if (!this.syncContext) { + addLogLine("Creating syncContext"); + + this.syncContext = getMLSyncConfig().then((mlSyncConfig) => + MLFactory.getMLSyncContext(token, userID, mlSyncConfig, true), + ); + } else { + addLogLine("reusing existing syncContext"); + } + return this.syncContext; + } + + private async getLocalSyncContext(token: string, userID: number) { + if (!this.localSyncContext) { + addLogLine("Creating localSyncContext"); + this.localSyncContext = getMLSyncConfig().then((mlSyncConfig) => + MLFactory.getMLSyncContext(token, userID, mlSyncConfig, false), + ); + } else { + addLogLine("reusing existing localSyncContext"); + } + return this.localSyncContext; + } + + public async closeLocalSyncContext() { + if (this.localSyncContext) { + addLogLine("Closing localSyncContext"); + const syncContext = await this.localSyncContext; + await syncContext.dispose(); + this.localSyncContext = undefined; + } + } + + public async syncLocalFile( + token: string, + userID: number, + enteFile: EnteFile, + localFile?: globalThis.File, + textDetectionTimeoutIndex?: number, + ): Promise { + const syncContext = await this.getLocalSyncContext(token, userID); + + try { + const mlFileData = await this.syncFileWithErrorHandler( + syncContext, + enteFile, + localFile, + textDetectionTimeoutIndex, + ); + + if (syncContext.nSyncedFiles >= syncContext.config.batchSize) { + await this.closeLocalSyncContext(); + } + // await syncContext.dispose(); + return mlFileData; + } catch (e) { + console.error("Error while syncing local file: ", enteFile.id, e); + return e; + } + } + + private async syncFileWithErrorHandler( + syncContext: MLSyncContext, + enteFile: EnteFile, + localFile?: globalThis.File, + textDetectionTimeoutIndex?: number, + ): Promise { + try { + const mlFileData = await this.syncFile( + syncContext, + enteFile, + localFile, + textDetectionTimeoutIndex, + ); + syncContext.nSyncedFaces += mlFileData.faces?.length || 0; + syncContext.nSyncedFiles += 1; + return mlFileData; + } catch (e) { + logError(e, "ML syncFile failed"); + let error = e; + console.error( + "Error in ml sync, fileId: ", + enteFile.id, + "name: ", + enteFile.metadata.title, + error, + ); + if ("status" in error) { + const parsedMessage = parseUploadErrorCodes(error); + error = parsedMessage; + } + // TODO: throw errors not related to specific file + // sync job run should stop after these errors + // don't persist these errors against file, + // can include indexeddb/cache errors too + switch (error.message) { + case CustomError.SESSION_EXPIRED: + case CustomError.NETWORK_ERROR: + throw error; + } + + await this.persistMLFileSyncError(syncContext, enteFile, error); + syncContext.nSyncedFiles += 1; + } finally { + addLogLine("TF Memory stats: ", JSON.stringify(tf.memory())); + } + } + + private async syncFile( + syncContext: MLSyncContext, + enteFile: EnteFile, + localFile?: globalThis.File, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + textDetectionTimeoutIndex?: number, + ) { + const fileContext: MLSyncFileContext = { enteFile, localFile }; + const oldMlFile = + (fileContext.oldMlFile = await this.getMLFileData(enteFile.id)) ?? + this.newMlData(enteFile.id); + if ( + fileContext.oldMlFile?.mlVersion === syncContext.config.mlVersion + // TODO: reset mlversion of all files when user changes image source + ) { + return fileContext.oldMlFile; + } + const newMlFile = (fileContext.newMlFile = this.newMlData(enteFile.id)); + + if (syncContext.shouldUpdateMLVersion) { + newMlFile.mlVersion = syncContext.config.mlVersion; + } else if (fileContext.oldMlFile?.mlVersion) { + newMlFile.mlVersion = fileContext.oldMlFile.mlVersion; + } + + try { + await ReaderService.getImageBitmap(syncContext, fileContext); + // await this.syncFaceDetections(syncContext, fileContext); + // await ObjectService.syncFileObjectDetections( + // syncContext, + // fileContext + // ); + await Promise.all([ + this.syncFaceDetections(syncContext, fileContext), + ObjectService.syncFileObjectDetections( + syncContext, + fileContext, + ), + // TextService.syncFileTextDetections( + // syncContext, + // fileContext, + // textDetectionTimeoutIndex + // ), + ]); + newMlFile.errorCount = 0; + newMlFile.lastErrorMessage = undefined; + await this.persistMLFileData(syncContext, newMlFile); + } catch (e) { + logError(e, "ml detection failed"); + newMlFile.mlVersion = oldMlFile.mlVersion; + throw e; + } finally { + fileContext.tfImage && fileContext.tfImage.dispose(); + fileContext.imageBitmap && fileContext.imageBitmap.close(); + // addLogLine('8 TF Memory stats: ',JSON.stringify(tf.memory())); + + // TODO: enable once faceId changes go in + // await removeOldFaceCrops( + // fileContext.oldMlFile, + // fileContext.newMlFile + // ); + } + + return newMlFile; + } + + public async init() { + if (this.initialized) { + return; + } + + await tf.ready(); + + addLogLine("01 TF Memory stats: ", JSON.stringify(tf.memory())); + // await tfjsFaceDetectionService.init(); + // // addLogLine('02 TF Memory stats: ',JSON.stringify(tf.memory())); + // await this.faceLandmarkService.init(); + // await faceapi.nets.faceLandmark68Net.loadFromUri('/models/face-api/'); + // // addLogLine('03 TF Memory stats: ',JSON.stringify(tf.memory())); + // await tfjsFaceEmbeddingService.init(); + // await faceapi.nets.faceRecognitionNet.loadFromUri('/models/face-api/'); + // addLogLine('04 TF Memory stats: ',JSON.stringify(tf.memory())); + + this.initialized = true; + } + + public async dispose() { + this.initialized = false; + // await this.faceDetectionService.dispose(); + // addLogLine('11 TF Memory stats: ',JSON.stringify(tf.memory())); + // await this.faceLandmarkService.dispose(); + // addLogLine('12 TF Memory stats: ',JSON.stringify(tf.memory())); + // await this.faceEmbeddingService.dispose(); + // addLogLine('13 TF Memory stats: ',JSON.stringify(tf.memory())); + } + + private async getMLFileData(fileId: number) { + // return mlFilesStore.getItem(fileId); + return mlIDbStorage.getFile(fileId); + } + + private async persistMLFileData( + syncContext: MLSyncContext, + mlFileData: MlFileData, + ) { + // return mlFilesStore.setItem(mlFileData.fileId.toString(), mlFileData); + mlIDbStorage.putFile(mlFileData); + } + + private async persistMLFileSyncError( + syncContext: MLSyncContext, + enteFile: EnteFile, + e: Error, + ) { + try { + await mlIDbStorage.upsertFileInTx(enteFile.id, (mlFileData) => { + if (!mlFileData) { + mlFileData = this.newMlData(enteFile.id); + } + mlFileData.errorCount = (mlFileData.errorCount || 0) + 1; + mlFileData.lastErrorMessage = e.message; + + return mlFileData; + }); + } catch (e) { + // TODO: logError or stop sync job after most of the requests are failed + console.error("Error while storing ml sync error", e); + } + } + + private async getMLLibraryData(syncContext: MLSyncContext) { + syncContext.mlLibraryData = await mlIDbStorage.getLibraryData(); + if (!syncContext.mlLibraryData) { + syncContext.mlLibraryData = {}; + } + } + + private async persistMLLibraryData(syncContext: MLSyncContext) { + // return mlLibraryStore.setItem('data', syncContext.mlLibraryData); + return mlIDbStorage.putLibraryData(syncContext.mlLibraryData); + } + + public async syncIndex(syncContext: MLSyncContext) { + await this.getMLLibraryData(syncContext); + + // await this.init(); + await PeopleService.syncPeopleIndex(syncContext); + + await ObjectService.syncThingsIndex(syncContext); + + await this.persistMLLibraryData(syncContext); + } + + // private async runTSNE(syncContext: MLSyncContext) { + // const allFacesMap = await FaceService.getAllSyncedFacesMap(syncContext); + // const allFaces = getAllFacesFromMap(allFacesMap); + + // const input = allFaces + // .slice(0, syncContext.config.tsne.samples) + // .map((f) => Array.from(f.embedding)); + // syncContext.tsne = toTSNE(input, syncContext.config.tsne); + // addLogLine('tsne: ', syncContext.tsne); + // } + + private async syncFaceDetections( + syncContext: MLSyncContext, + fileContext: MLSyncFileContext, + ) { + const { newMlFile } = fileContext; + const startTime = Date.now(); + await FaceService.syncFileFaceDetections(syncContext, fileContext); + + if (newMlFile.faces && newMlFile.faces.length > 0) { + await FaceService.syncFileFaceCrops(syncContext, fileContext); + + await FaceService.syncFileFaceAlignments(syncContext, fileContext); + + await FaceService.syncFileFaceEmbeddings(syncContext, fileContext); + } + addLogLine( + `face detection time taken ${fileContext.enteFile.id}`, + Date.now() - startTime, + "ms", + ); + } +} + +export default new MachineLearningService(); diff --git a/web/apps/photos/src/services/machineLearning/mlSyncJob.ts b/web/apps/photos/src/services/machineLearning/mlSyncJob.ts new file mode 100644 index 000000000..d041b976f --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/mlSyncJob.ts @@ -0,0 +1,9 @@ +import { JobResult } from "types/common/job"; +import { MLSyncResult } from "types/machineLearning"; +import { SimpleJob } from "utils/common/job"; + +export interface MLSyncJobResult extends JobResult { + mlSyncResult: MLSyncResult; +} + +export class MLSyncJob extends SimpleJob {} diff --git a/web/apps/photos/src/services/machineLearning/mlWorkManager.ts b/web/apps/photos/src/services/machineLearning/mlWorkManager.ts new file mode 100644 index 000000000..41d7b346c --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/mlWorkManager.ts @@ -0,0 +1,274 @@ +import { eventBus, Events } from "@ente/shared/events"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers"; +import { ComlinkWorker } from "@ente/shared/worker/comlinkWorker"; +import { FILE_TYPE } from "constants/file"; +import debounce from "debounce"; +import PQueue from "p-queue"; +import { EnteFile } from "types/file"; +import { getDedicatedMLWorker } from "utils/comlink/ComlinkMLWorker"; +import { logQueueStats } from "utils/machineLearning"; +import { getMLSyncJobConfig } from "utils/machineLearning/config"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; +import { DedicatedMLWorker } from "worker/ml.worker"; +import { MLSyncJob, MLSyncJobResult } from "./mlSyncJob"; + +const LIVE_SYNC_IDLE_DEBOUNCE_SEC = 30; +const LIVE_SYNC_QUEUE_TIMEOUT_SEC = 300; +const LOCAL_FILES_UPDATED_DEBOUNCE_SEC = 30; + +class MLWorkManager { + private mlSyncJob: MLSyncJob; + private syncJobWorker: ComlinkWorker; + + private debouncedLiveSyncIdle: () => void; + private debouncedFilesUpdated: () => void; + + private liveSyncQueue: PQueue; + private liveSyncWorker: ComlinkWorker; + private mlSearchEnabled: boolean; + + constructor() { + this.liveSyncQueue = new PQueue({ + concurrency: 1, + // TODO: temp, remove + timeout: LIVE_SYNC_QUEUE_TIMEOUT_SEC * 1000, + throwOnTimeout: true, + }); + this.mlSearchEnabled = false; + + eventBus.on(Events.LOGOUT, this.logoutHandler.bind(this), this); + this.debouncedLiveSyncIdle = debounce( + () => this.onLiveSyncIdle(), + LIVE_SYNC_IDLE_DEBOUNCE_SEC * 1000, + ); + this.debouncedFilesUpdated = debounce( + () => this.mlSearchEnabled && this.localFilesUpdatedHandler(), + LOCAL_FILES_UPDATED_DEBOUNCE_SEC * 1000, + ); + } + + public async setMlSearchEnabled(enabled: boolean) { + if (!this.mlSearchEnabled && enabled) { + addLogLine("Enabling MLWorkManager"); + this.mlSearchEnabled = true; + + logQueueStats(this.liveSyncQueue, "livesync"); + this.liveSyncQueue.on("idle", this.debouncedLiveSyncIdle, this); + + eventBus.on( + Events.FILE_UPLOADED, + this.fileUploadedHandler.bind(this), + this, + ); + eventBus.on( + Events.LOCAL_FILES_UPDATED, + this.debouncedFilesUpdated, + this, + ); + + await this.startSyncJob(); + } else if (this.mlSearchEnabled && !enabled) { + addLogLine("Disabling MLWorkManager"); + this.mlSearchEnabled = false; + + this.liveSyncQueue.removeAllListeners(); + + eventBus.removeListener( + Events.FILE_UPLOADED, + this.fileUploadedHandler.bind(this), + this, + ); + eventBus.removeListener( + Events.LOCAL_FILES_UPDATED, + this.debouncedFilesUpdated, + this, + ); + + this.stopSyncJob(); + } + } + + // Handlers + private async appStartHandler() { + addLogLine("appStartHandler"); + try { + this.startSyncJob(); + } catch (e) { + logError(e, "Failed in ML appStart Handler"); + } + } + + private async logoutHandler() { + addLogLine("logoutHandler"); + try { + this.stopSyncJob(); + this.mlSyncJob = undefined; + await this.terminateLiveSyncWorker(); + await mlIDbStorage.clearMLDB(); + } catch (e) { + logError(e, "Failed in ML logout Handler"); + } + } + + private async fileUploadedHandler(arg: { + enteFile: EnteFile; + localFile: globalThis.File; + }) { + if (!this.mlSearchEnabled) { + return; + } + addLogLine("fileUploadedHandler: ", arg.enteFile.id); + if (arg.enteFile.metadata.fileType !== FILE_TYPE.IMAGE) { + addLogLine("Skipping non image file for local file processing"); + return; + } + try { + await this.syncLocalFile(arg.enteFile, arg.localFile); + } catch (error) { + console.error("Error in syncLocalFile: ", arg.enteFile.id, error); + this.liveSyncQueue.clear(); + // logError(e, 'Failed in ML fileUploaded Handler'); + } + } + + private async localFilesUpdatedHandler() { + addLogLine("Local files updated"); + this.startSyncJob(); + } + + // Live Sync + private async getLiveSyncWorker() { + if (!this.liveSyncWorker) { + this.liveSyncWorker = getDedicatedMLWorker("ml-sync-live"); + } + + return await this.liveSyncWorker.remote; + } + + private async terminateLiveSyncWorker() { + if (!this.liveSyncWorker) { + return; + } + try { + const liveSyncWorker = await this.liveSyncWorker.remote; + await liveSyncWorker.closeLocalSyncContext(); + } catch (error) { + console.error( + "Error while closing local sync context, terminating worker", + error, + ); + } + this.liveSyncWorker?.terminate(); + this.liveSyncWorker = undefined; + } + + private async onLiveSyncIdle() { + addLogLine("Live sync idle"); + await this.terminateLiveSyncWorker(); + this.mlSearchEnabled && this.startSyncJob(); + } + + public async syncLocalFile(enteFile: EnteFile, localFile: globalThis.File) { + const result = await this.liveSyncQueue.add(async () => { + this.stopSyncJob(); + const token = getToken(); + const userID = getUserID(); + const mlWorker = await this.getLiveSyncWorker(); + return mlWorker.syncLocalFile(token, userID, enteFile, localFile); + }); + + // @ts-expect-error "TODO: Fix ML related type errors" + if ("message" in result) { + // TODO: redirect/refresh to gallery in case of session_expired + // may not be required as uploader should anyways take care of this + console.error("Error while syncing local file: ", result); + } + } + + // Sync Job + private async getSyncJobWorker() { + if (!this.syncJobWorker) { + this.syncJobWorker = getDedicatedMLWorker("ml-sync-job"); + } + + return await this.syncJobWorker.remote; + } + + private terminateSyncJobWorker() { + this.syncJobWorker?.terminate(); + this.syncJobWorker = undefined; + } + + private async runMLSyncJob(): Promise { + try { + // TODO: skipping is not required if we are caching chunks through service worker + // currently worker chunk itself is not loaded when network is not there + if (!navigator.onLine) { + addLogLine( + "Skipping ml-sync job run as not connected to internet.", + ); + return { + shouldBackoff: true, + mlSyncResult: undefined, + }; + } + + const token = getToken(); + const userID = getUserID(); + const jobWorkerProxy = await this.getSyncJobWorker(); + + const mlSyncResult = await jobWorkerProxy.sync(token, userID); + + // this.terminateSyncJobWorker(); + const jobResult: MLSyncJobResult = { + shouldBackoff: + !!mlSyncResult.error || mlSyncResult.nOutOfSyncFiles < 1, + mlSyncResult, + }; + addLogLine("ML Sync Job result: ", JSON.stringify(jobResult)); + + // TODO: redirect/refresh to gallery in case of session_expired, stop ml sync job + + return jobResult; + } catch (e) { + logError(e, "Failed to run MLSync Job"); + } + } + + public async startSyncJob() { + try { + addLogLine("MLWorkManager.startSyncJob"); + if (!this.mlSearchEnabled) { + addLogLine("ML Search disabled, not starting ml sync job"); + return; + } + if (!getToken()) { + addLogLine("User not logged in, not starting ml sync job"); + return; + } + const mlSyncJobConfig = await getMLSyncJobConfig(); + if (!this.mlSyncJob) { + this.mlSyncJob = new MLSyncJob(mlSyncJobConfig, () => + this.runMLSyncJob(), + ); + } + this.mlSyncJob.start(); + } catch (e) { + logError(e, "Failed to start MLSync Job"); + } + } + + public stopSyncJob(terminateWorker: boolean = true) { + try { + addLogLine("MLWorkManager.stopSyncJob"); + this.mlSyncJob?.stop(); + terminateWorker && this.terminateSyncJobWorker(); + } catch (e) { + logError(e, "Failed to stop MLSync Job"); + } + } +} + +export default new MLWorkManager(); diff --git a/web/apps/photos/src/services/machineLearning/mobileFaceNetEmbeddingService.ts b/web/apps/photos/src/services/machineLearning/mobileFaceNetEmbeddingService.ts new file mode 100644 index 000000000..52eabbd8e --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/mobileFaceNetEmbeddingService.ts @@ -0,0 +1,106 @@ +import { addLogLine } from "@ente/shared/logging"; +import * as tf from "@tensorflow/tfjs-core"; +import { TFLiteModel } from "@tensorflow/tfjs-tflite"; +import { MOBILEFACENET_FACE_SIZE } from "constants/mlConfig"; +import PQueue from "p-queue"; +import { + FaceEmbedding, + FaceEmbeddingMethod, + FaceEmbeddingService, + Versioned, +} from "types/machineLearning"; +import { imageBitmapsToTensor4D } from "utils/machineLearning"; + +class MobileFaceNetEmbeddingService implements FaceEmbeddingService { + public method: Versioned; + public faceSize: number; + + private mobileFaceNetModel: Promise; + private serialQueue: PQueue; + + public constructor(faceSize: number = MOBILEFACENET_FACE_SIZE) { + this.method = { + value: "MobileFaceNet", + version: 2, + }; + this.faceSize = faceSize; + // TODO: set timeout + this.serialQueue = new PQueue({ concurrency: 1 }); + } + + private async init() { + // TODO: can also create new instance per new syncContext + const tflite = await import("@tensorflow/tfjs-tflite"); + tflite.setWasmPath("/js/tflite/"); + + this.mobileFaceNetModel = tflite.loadTFLiteModel( + "/models/mobilefacenet/mobilefacenet.tflite", + ); + + addLogLine("loaded mobileFaceNetModel: ", tf.getBackend()); + } + + private async getMobileFaceNetModel() { + if (!this.mobileFaceNetModel) { + await this.init(); + } + + return this.mobileFaceNetModel; + } + + public getFaceEmbeddingTF( + faceTensor: tf.Tensor4D, + mobileFaceNetModel: TFLiteModel, + ): tf.Tensor2D { + return tf.tidy(() => { + const normalizedFace = tf.sub(tf.div(faceTensor, 127.5), 1.0); + return mobileFaceNetModel.predict(normalizedFace) as tf.Tensor2D; + }); + } + + // Do not use this, use getFaceEmbedding which calls this through serialqueue + private async getFaceEmbeddingNoQueue( + faceImage: ImageBitmap, + ): Promise { + const mobileFaceNetModel = await this.getMobileFaceNetModel(); + + const embeddingTensor = tf.tidy(() => { + const faceTensor = imageBitmapsToTensor4D([faceImage]); + const embeddingsTensor = this.getFaceEmbeddingTF( + faceTensor, + mobileFaceNetModel, + ); + return tf.squeeze(embeddingsTensor, [0]); + }); + + const embedding = new Float32Array(await embeddingTensor.data()); + embeddingTensor.dispose(); + + return embedding; + } + + // TODO: TFLiteModel seems to not work concurrenly, + // remove serialqueue if that is not the case + private async getFaceEmbedding( + faceImage: ImageBitmap, + ): Promise { + // @ts-expect-error "TODO: Fix ML related type errors" + return this.serialQueue.add(() => + this.getFaceEmbeddingNoQueue(faceImage), + ); + } + + public async getFaceEmbeddings( + faceImages: Array, + ): Promise> { + return Promise.all( + faceImages.map((faceImage) => this.getFaceEmbedding(faceImage)), + ); + } + + public async dispose() { + this.mobileFaceNetModel = undefined; + } +} + +export default new MobileFaceNetEmbeddingService(); diff --git a/web/apps/photos/src/services/machineLearning/objectService.ts b/web/apps/photos/src/services/machineLearning/objectService.ts new file mode 100644 index 000000000..c9eee2887 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/objectService.ts @@ -0,0 +1,146 @@ +import { addLogLine } from "@ente/shared/logging"; +import { + DetectedObject, + MLSyncContext, + MLSyncFileContext, + Thing, +} from "types/machineLearning"; +import { + getAllObjectsFromMap, + getObjectId, + isDifferentOrOld, +} from "utils/machineLearning"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; +import ReaderService from "./readerService"; + +class ObjectService { + async syncFileObjectDetections( + syncContext: MLSyncContext, + fileContext: MLSyncFileContext, + ) { + const startTime = Date.now(); + const { oldMlFile, newMlFile } = fileContext; + if ( + !isDifferentOrOld( + oldMlFile?.objectDetectionMethod, + syncContext.objectDetectionService.method, + ) && + !isDifferentOrOld( + oldMlFile?.sceneDetectionMethod, + syncContext.sceneDetectionService.method, + ) && + oldMlFile?.imageSource === syncContext.config.imageSource + ) { + newMlFile.objects = oldMlFile?.objects; + newMlFile.imageSource = oldMlFile.imageSource; + newMlFile.imageDimensions = oldMlFile.imageDimensions; + newMlFile.objectDetectionMethod = oldMlFile.objectDetectionMethod; + newMlFile.sceneDetectionMethod = oldMlFile.sceneDetectionMethod; + return; + } + + newMlFile.objectDetectionMethod = + syncContext.objectDetectionService.method; + newMlFile.sceneDetectionMethod = + syncContext.sceneDetectionService.method; + + fileContext.newDetection = true; + const imageBitmap = await ReaderService.getImageBitmap( + syncContext, + fileContext, + ); + const objectDetections = + await syncContext.objectDetectionService.detectObjects( + imageBitmap, + syncContext.config.objectDetection.maxNumBoxes, + syncContext.config.objectDetection.minScore, + ); + objectDetections.push( + ...(await syncContext.sceneDetectionService.detectScenes( + imageBitmap, + syncContext.config.sceneDetection.minScore, + )), + ); + // addLogLine('3 TF Memory stats: ',JSON.stringify(tf.memory())); + // TODO: reenable faces filtering based on width + const detectedObjects = objectDetections?.map((detection) => { + return { + fileID: fileContext.enteFile.id, + detection, + } as DetectedObject; + }); + newMlFile.objects = detectedObjects?.map((detectedObject) => ({ + ...detectedObject, + id: getObjectId(detectedObject, newMlFile.imageDimensions), + className: detectedObject.detection.class, + })); + // ?.filter((f) => + // f.box.width > syncContext.config.faceDetection.minFaceSize + // ); + addLogLine( + `object detection time taken ${fileContext.enteFile.id}`, + Date.now() - startTime, + "ms", + ); + + addLogLine("[MLService] Detected Objects: ", newMlFile.objects?.length); + } + + async getAllSyncedObjectsMap(syncContext: MLSyncContext) { + if (syncContext.allSyncedObjectsMap) { + return syncContext.allSyncedObjectsMap; + } + + syncContext.allSyncedObjectsMap = await mlIDbStorage.getAllObjectsMap(); + return syncContext.allSyncedObjectsMap; + } + + public async clusterThings(syncContext: MLSyncContext): Promise { + const allObjectsMap = await this.getAllSyncedObjectsMap(syncContext); + const allObjects = getAllObjectsFromMap(allObjectsMap); + const objectClusters = new Map(); + allObjects.map((object) => { + if (!objectClusters.has(object.detection.class)) { + objectClusters.set(object.detection.class, []); + } + const objectsInCluster = objectClusters.get(object.detection.class); + objectsInCluster.push(object.fileID); + }); + return [...objectClusters.entries()].map(([className, files], id) => ({ + id, + name: className, + files, + })); + } + + async syncThingsIndex(syncContext: MLSyncContext) { + const filesVersion = await mlIDbStorage.getIndexVersion("files"); + addLogLine("things", await mlIDbStorage.getIndexVersion("things")); + if (filesVersion <= (await mlIDbStorage.getIndexVersion("things"))) { + addLogLine( + "[MLService] Skipping people index as already synced to latest version", + ); + return; + } + + const things = await this.clusterThings(syncContext); + + if (!things || things.length < 1) { + return; + } + + await mlIDbStorage.clearAllThings(); + + for (const thing of things) { + await mlIDbStorage.putThing(thing); + } + + await mlIDbStorage.setIndexVersion("things", filesVersion); + } + + async getAllThings() { + return await mlIDbStorage.getAllThings(); + } +} + +export default new ObjectService(); diff --git a/web/apps/photos/src/services/machineLearning/peopleService.ts b/web/apps/photos/src/services/machineLearning/peopleService.ts new file mode 100644 index 000000000..d5a470807 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/peopleService.ts @@ -0,0 +1,94 @@ +import { addLogLine } from "@ente/shared/logging"; +import { Face, MLSyncContext, Person } from "types/machineLearning"; +import { + findFirstIfSorted, + getAllFacesFromMap, + getLocalFile, + getOriginalImageBitmap, + isDifferentOrOld, +} from "utils/machineLearning"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; +import FaceService from "./faceService"; + +class PeopleService { + async syncPeopleIndex(syncContext: MLSyncContext) { + const filesVersion = await mlIDbStorage.getIndexVersion("files"); + if ( + filesVersion <= (await mlIDbStorage.getIndexVersion("people")) && + !isDifferentOrOld( + syncContext.mlLibraryData?.faceClusteringMethod, + syncContext.faceClusteringService.method, + ) + ) { + addLogLine( + "[MLService] Skipping people index as already synced to latest version", + ); + return; + } + + // TODO: have faces addresable through fileId + faceId + // to avoid index based addressing, which is prone to wrong results + // one way could be to match nearest face within threshold in the file + const allFacesMap = await FaceService.getAllSyncedFacesMap(syncContext); + const allFaces = getAllFacesFromMap(allFacesMap); + + await FaceService.runFaceClustering(syncContext, allFaces); + await this.syncPeopleFromClusters(syncContext, allFacesMap, allFaces); + + await mlIDbStorage.setIndexVersion("people", filesVersion); + } + + private async syncPeopleFromClusters( + syncContext: MLSyncContext, + allFacesMap: Map>, + allFaces: Array, + ) { + const clusters = + syncContext.mlLibraryData.faceClusteringResults?.clusters; + if (!clusters || clusters.length < 1) { + return; + } + + for (const face of allFaces) { + face.personId = undefined; + } + await mlIDbStorage.clearAllPeople(); + for (const [index, cluster] of clusters.entries()) { + const faces = cluster.map((f) => allFaces[f]).filter((f) => f); + + // TODO: take default display face from last leaves of hdbscan clusters + const personFace = findFirstIfSorted( + faces, + (a, b) => b.detection.probability - a.detection.probability, + ); + + if (personFace && !personFace.crop?.imageUrl) { + const file = await getLocalFile(personFace.fileId); + const imageBitmap = await getOriginalImageBitmap(file); + await FaceService.saveFaceCrop( + imageBitmap, + personFace, + syncContext, + ); + } + + const person: Person = { + id: index, + files: faces.map((f) => f.fileId), + displayFaceId: personFace?.id, + displayImageUrl: personFace?.crop?.imageUrl, + }; + + await mlIDbStorage.putPerson(person); + + faces.forEach((face) => { + face.personId = person.id; + }); + // addLogLine("Creating person: ", person, faces); + } + + await mlIDbStorage.updateFaces(allFacesMap); + } +} + +export default new PeopleService(); diff --git a/web/apps/photos/src/services/machineLearning/readerService.ts b/web/apps/photos/src/services/machineLearning/readerService.ts new file mode 100644 index 000000000..d141cf057 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/readerService.ts @@ -0,0 +1,59 @@ +import { logError } from "@ente/shared/sentry"; +import { FILE_TYPE } from "constants/file"; +import { MLSyncContext, MLSyncFileContext } from "types/machineLearning"; +import { + getLocalFileImageBitmap, + getOriginalImageBitmap, + getThumbnailImageBitmap, +} from "utils/machineLearning"; + +class ReaderService { + async getImageBitmap( + syncContext: MLSyncContext, + fileContext: MLSyncFileContext, + ) { + try { + if (fileContext.imageBitmap) { + return fileContext.imageBitmap; + } + // addLogLine('1 TF Memory stats: ',JSON.stringify(tf.memory())); + if (fileContext.localFile) { + if ( + fileContext.enteFile.metadata.fileType !== FILE_TYPE.IMAGE + ) { + throw new Error( + "Local file of only image type is supported", + ); + } + fileContext.imageBitmap = await getLocalFileImageBitmap( + fileContext.enteFile, + fileContext.localFile, + ); + } else if ( + syncContext.config.imageSource === "Original" && + [FILE_TYPE.IMAGE, FILE_TYPE.LIVE_PHOTO].includes( + fileContext.enteFile.metadata.fileType, + ) + ) { + fileContext.imageBitmap = await getOriginalImageBitmap( + fileContext.enteFile, + ); + } else { + fileContext.imageBitmap = await getThumbnailImageBitmap( + fileContext.enteFile, + ); + } + + fileContext.newMlFile.imageSource = syncContext.config.imageSource; + const { width, height } = fileContext.imageBitmap; + fileContext.newMlFile.imageDimensions = { width, height }; + // addLogLine('2 TF Memory stats: ',JSON.stringify(tf.memory())); + + return fileContext.imageBitmap; + } catch (e) { + logError(e, "failed to create image bitmap"); + throw e; + } + } +} +export default new ReaderService(); diff --git a/web/apps/photos/src/services/machineLearning/ssdMobileNetV2Service.ts b/web/apps/photos/src/services/machineLearning/ssdMobileNetV2Service.ts new file mode 100644 index 000000000..4adde7707 --- /dev/null +++ b/web/apps/photos/src/services/machineLearning/ssdMobileNetV2Service.ts @@ -0,0 +1,66 @@ +import * as tf from "@tensorflow/tfjs-core"; +import { + ObjectDetection, + ObjectDetectionMethod, + ObjectDetectionService, + Versioned, +} from "types/machineLearning"; + +import { addLogLine } from "@ente/shared/logging"; +import * as SSDMobileNet from "@tensorflow-models/coco-ssd"; +import { OBJECT_DETECTION_IMAGE_SIZE } from "constants/mlConfig"; +import { resizeToSquare } from "utils/image"; + +class SSDMobileNetV2 implements ObjectDetectionService { + private ssdMobileNetV2Model: SSDMobileNet.ObjectDetection; + public method: Versioned; + private ready: Promise; + + public constructor() { + this.method = { + value: "SSDMobileNetV2", + version: 1, + }; + } + + private async init() { + this.ssdMobileNetV2Model = await SSDMobileNet.load({ + base: "mobilenet_v2", + modelUrl: "/models/ssdmobilenet/model.json", + }); + addLogLine("loaded ssdMobileNetV2Model", tf.getBackend()); + } + + private async getSSDMobileNetV2Model() { + if (!this.ready) { + this.ready = this.init(); + } + await this.ready; + return this.ssdMobileNetV2Model; + } + + public async detectObjects( + image: ImageBitmap, + maxNumberBoxes: number, + minScore: number, + ): Promise { + const ssdMobileNetV2Model = await this.getSSDMobileNetV2Model(); + const resized = resizeToSquare(image, OBJECT_DETECTION_IMAGE_SIZE); + const tfImage = tf.browser.fromPixels(resized.image); + const detections = await ssdMobileNetV2Model.detect( + tfImage, + maxNumberBoxes, + minScore, + ); + tfImage.dispose(); + return detections; + } + + public async dispose() { + const ssdMobileNetV2Model = await this.getSSDMobileNetV2Model(); + ssdMobileNetV2Model?.dispose(); + this.ssdMobileNetV2Model = null; + } +} + +export default new SSDMobileNetV2(); diff --git a/web/apps/photos/src/services/migrateThumbnailService.ts b/web/apps/photos/src/services/migrateThumbnailService.ts new file mode 100644 index 000000000..ad83f4e4b --- /dev/null +++ b/web/apps/photos/src/services/migrateThumbnailService.ts @@ -0,0 +1,147 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { Remote } from "comlink"; +import { SetProgressTracker } from "components/FixLargeThumbnail"; +import downloadManager from "services/download"; +import { getLocalFiles } from "services/fileService"; +import { getFileType } from "services/typeDetectionService"; +import { generateThumbnail } from "services/upload/thumbnailService"; +import uploadHttpClient from "services/upload/uploadHttpClient"; +import { S3FileAttributes } from "types/file"; +import { UploadURL } from "types/upload"; +import { getLocalTrashedFiles } from "./trashService"; + +const ENDPOINT = getEndpoint(); +const REPLACE_THUMBNAIL_THRESHOLD = 500 * 1024; // 500KB +export async function getLargeThumbnailFiles() { + try { + const token = getToken(); + if (!token) { + return; + } + const resp = await HTTPService.get( + `${ENDPOINT}/files/large-thumbnails`, + { + threshold: REPLACE_THUMBNAIL_THRESHOLD, + }, + { + "X-Auth-Token": token, + }, + ); + return resp.data.largeThumbnailFiles as number[]; + } catch (e) { + logError(e, "failed to get large thumbnail files"); + throw e; + } +} +export async function replaceThumbnail( + setProgressTracker: SetProgressTracker, + largeThumbnailFileIDs: Set, +) { + let completedWithError = false; + try { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const files = await getLocalFiles(); + const trashFiles = await getLocalTrashedFiles(); + const largeThumbnailFiles = [...files, ...trashFiles].filter((file) => + largeThumbnailFileIDs.has(file.id), + ); + if (largeThumbnailFileIDs.size !== largeThumbnailFiles.length) { + logError(Error(), "all large thumbnail files not found locally"); + } + if (largeThumbnailFiles.length === 0) { + return completedWithError; + } + setProgressTracker({ current: 0, total: largeThumbnailFiles.length }); + const uploadURLs: UploadURL[] = []; + await uploadHttpClient.fetchUploadURLs( + largeThumbnailFiles.length, + uploadURLs, + ); + for (const [idx, file] of largeThumbnailFiles.entries()) { + try { + setProgressTracker({ + current: idx, + total: largeThumbnailFiles.length, + }); + const originalThumbnail = + await downloadManager.getThumbnail(file); + const dummyImageFile = new File( + [originalThumbnail], + file.metadata.title, + ); + const fileTypeInfo = await getFileType(dummyImageFile); + const { thumbnail: newThumbnail } = await generateThumbnail( + dummyImageFile, + fileTypeInfo, + ); + const newUploadedThumbnail = await uploadThumbnail( + cryptoWorker, + file.key, + newThumbnail, + uploadURLs.pop(), + ); + await updateThumbnail(file.id, newUploadedThumbnail); + } catch (e) { + logError(e, "failed to replace a thumbnail"); + completedWithError = true; + } + } + } catch (e) { + logError(e, "replace Thumbnail function failed"); + completedWithError = true; + } + return completedWithError; +} + +export async function uploadThumbnail( + worker: Remote, + fileKey: string, + updatedThumbnail: Uint8Array, + uploadURL: UploadURL, +): Promise { + const { file: encryptedThumbnail } = await worker.encryptThumbnail( + updatedThumbnail, + fileKey, + ); + const thumbnailObjectKey = await uploadHttpClient.putFile( + uploadURL, + encryptedThumbnail.encryptedData, + () => {}, + ); + + return { + objectKey: thumbnailObjectKey, + decryptionHeader: encryptedThumbnail.decryptionHeader, + }; +} + +export async function updateThumbnail( + fileID: number, + newThumbnail: S3FileAttributes, +) { + try { + const token = getToken(); + if (!token) { + return; + } + await HTTPService.put( + `${ENDPOINT}/files/thumbnail`, + { + fileID: fileID, + thumbnail: newThumbnail, + }, + null, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "failed to update thumbnail"); + throw e; + } +} diff --git a/web/apps/photos/src/services/publicCollectionService.ts b/web/apps/photos/src/services/publicCollectionService.ts new file mode 100644 index 000000000..353281f66 --- /dev/null +++ b/web/apps/photos/src/services/publicCollectionService.ts @@ -0,0 +1,436 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { CustomError, parseSharingErrorCodes } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import localForage from "@ente/shared/storage/localForage"; +import { REPORT_REASON } from "constants/publicCollection"; +import { Collection, CollectionPublicMagicMetadata } from "types/collection"; +import { EncryptedEnteFile, EnteFile } from "types/file"; +import { + AbuseReportDetails, + AbuseReportRequest, + LocalSavedPublicCollectionFiles, +} from "types/publicCollection"; +import { decryptFile, mergeMetadata, sortFiles } from "utils/file"; + +const ENDPOINT = getEndpoint(); +const PUBLIC_COLLECTION_FILES_TABLE = "public-collection-files"; +const PUBLIC_COLLECTIONS_TABLE = "public-collections"; +const PUBLIC_REFERRAL_CODE = "public-referral-code"; + +export const getPublicCollectionUID = (token: string) => `${token}`; + +const getPublicCollectionLastSyncTimeKey = (collectionUID: string) => + `public-${collectionUID}-time`; + +const getPublicCollectionPasswordKey = (collectionUID: string) => + `public-${collectionUID}-passkey`; + +const getPublicCollectionUploaderNameKey = (collectionUID: string) => + `public-${collectionUID}-uploaderName`; + +export const getPublicCollectionUploaderName = async (collectionUID: string) => + await localForage.getItem( + getPublicCollectionUploaderNameKey(collectionUID), + ); + +export const savePublicCollectionUploaderName = async ( + collectionUID: string, + uploaderName: string, +) => + await localForage.setItem( + getPublicCollectionUploaderNameKey(collectionUID), + uploaderName, + ); + +export const getLocalPublicFiles = async (collectionUID: string) => { + const localSavedPublicCollectionFiles = + ( + (await localForage.getItem( + PUBLIC_COLLECTION_FILES_TABLE, + )) || [] + ).find( + (localSavedPublicCollectionFiles) => + localSavedPublicCollectionFiles.collectionUID === collectionUID, + ) || + ({ + collectionUID: null, + files: [] as EnteFile[], + } as LocalSavedPublicCollectionFiles); + return localSavedPublicCollectionFiles.files; +}; +export const savePublicCollectionFiles = async ( + collectionUID: string, + files: EnteFile[], +) => { + const publicCollectionFiles = + (await localForage.getItem( + PUBLIC_COLLECTION_FILES_TABLE, + )) || []; + await localForage.setItem( + PUBLIC_COLLECTION_FILES_TABLE, + dedupeCollectionFiles([ + { collectionUID, files }, + ...publicCollectionFiles, + ]), + ); +}; + +export const getLocalPublicCollectionPassword = async ( + collectionUID: string, +): Promise => { + return ( + (await localForage.getItem( + getPublicCollectionPasswordKey(collectionUID), + )) || "" + ); +}; + +export const savePublicCollectionPassword = async ( + collectionUID: string, + passToken: string, +): Promise => { + return await localForage.setItem( + getPublicCollectionPasswordKey(collectionUID), + passToken, + ); +}; + +export const getLocalPublicCollection = async (collectionKey: string) => { + const localCollections = + (await localForage.getItem(PUBLIC_COLLECTIONS_TABLE)) || + []; + const publicCollection = + localCollections.find( + (localSavedPublicCollection) => + localSavedPublicCollection.key === collectionKey, + ) || null; + return publicCollection; +}; + +export const savePublicCollection = async (collection: Collection) => { + const publicCollections = + (await localForage.getItem(PUBLIC_COLLECTIONS_TABLE)) ?? + []; + await localForage.setItem( + PUBLIC_COLLECTIONS_TABLE, + dedupeCollections([collection, ...publicCollections]), + ); +}; + +export const getReferralCode = async () => { + return await localForage.getItem(PUBLIC_REFERRAL_CODE); +}; + +export const saveReferralCode = async (code: string) => { + if (!code) { + localForage.removeItem(PUBLIC_REFERRAL_CODE); + } + await localForage.setItem(PUBLIC_REFERRAL_CODE, code); +}; + +const dedupeCollections = (collections: Collection[]) => { + const keySet = new Set([]); + return collections.filter((collection) => { + if (!keySet.has(collection.key)) { + keySet.add(collection.key); + return true; + } else { + return false; + } + }); +}; + +const dedupeCollectionFiles = ( + collectionFiles: LocalSavedPublicCollectionFiles[], +) => { + const keySet = new Set([]); + return collectionFiles.filter(({ collectionUID }) => { + if (!keySet.has(collectionUID)) { + keySet.add(collectionUID); + return true; + } else { + return false; + } + }); +}; + +const getPublicCollectionLastSyncTime = async (collectionUID: string) => + (await localForage.getItem( + getPublicCollectionLastSyncTimeKey(collectionUID), + )) ?? 0; + +const savePublicCollectionLastSyncTime = async ( + collectionUID: string, + time: number, +) => + await localForage.setItem( + getPublicCollectionLastSyncTimeKey(collectionUID), + time, + ); + +export const syncPublicFiles = async ( + token: string, + passwordToken: string, + collection: Collection, + setPublicFiles: (files: EnteFile[]) => void, +) => { + try { + let files: EnteFile[] = []; + const sortAsc = collection?.pubMagicMetadata?.data.asc ?? false; + const collectionUID = getPublicCollectionUID(token); + const localFiles = await getLocalPublicFiles(collectionUID); + + files = [...files, ...localFiles]; + try { + if (!token) { + return sortFiles(files, sortAsc); + } + const lastSyncTime = + await getPublicCollectionLastSyncTime(collectionUID); + if (collection.updationTime === lastSyncTime) { + return sortFiles(files, sortAsc); + } + const fetchedFiles = await getPublicFiles( + token, + passwordToken, + collection, + lastSyncTime, + files, + setPublicFiles, + ); + + files = [...files, ...fetchedFiles]; + const latestVersionFiles = new Map(); + files.forEach((file) => { + const uid = `${file.collectionID}-${file.id}`; + if ( + !latestVersionFiles.has(uid) || + latestVersionFiles.get(uid).updationTime < file.updationTime + ) { + latestVersionFiles.set(uid, file); + } + }); + files = []; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const [_, file] of latestVersionFiles) { + if (file.isDeleted) { + continue; + } + files.push(file); + } + await savePublicCollectionFiles(collectionUID, files); + await savePublicCollectionLastSyncTime( + collectionUID, + collection.updationTime, + ); + setPublicFiles([...sortFiles(mergeMetadata(files), sortAsc)]); + } catch (e) { + const parsedError = parseSharingErrorCodes(e); + logError(e, "failed to sync shared collection files"); + if (parsedError.message === CustomError.TOKEN_EXPIRED) { + throw e; + } + } + return [...sortFiles(mergeMetadata(files), sortAsc)]; + } catch (e) { + logError(e, "failed to get local or sync shared collection files"); + throw e; + } +}; + +const getPublicFiles = async ( + token: string, + passwordToken: string, + collection: Collection, + sinceTime: number, + files: EnteFile[], + setPublicFiles: (files: EnteFile[]) => void, +): Promise => { + try { + let decryptedFiles: EnteFile[] = []; + let time = sinceTime; + let resp; + const sortAsc = collection?.pubMagicMetadata?.data.asc ?? false; + do { + if (!token) { + break; + } + resp = await HTTPService.get( + `${ENDPOINT}/public-collection/diff`, + { + sinceTime: time, + }, + { + "Cache-Control": "no-cache", + "X-Auth-Access-Token": token, + ...(passwordToken && { + "X-Auth-Access-Token-JWT": passwordToken, + }), + }, + ); + decryptedFiles = [ + ...decryptedFiles, + ...(await Promise.all( + resp.data.diff.map(async (file: EncryptedEnteFile) => { + if (!file.isDeleted) { + return await decryptFile(file, collection.key); + } else { + return file; + } + }) as Promise[], + )), + ]; + + if (resp.data.diff.length) { + time = resp.data.diff.slice(-1)[0].updationTime; + } + setPublicFiles( + sortFiles( + mergeMetadata( + [...(files || []), ...decryptedFiles].filter( + (item) => !item.isDeleted, + ), + ), + sortAsc, + ), + ); + } while (resp.data.hasMore); + return decryptedFiles; + } catch (e) { + logError(e, "Get public files failed"); + throw e; + } +}; + +export const getPublicCollection = async ( + token: string, + collectionKey: string, +): Promise<[Collection, string]> => { + try { + if (!token) { + return; + } + const resp = await HTTPService.get( + `${ENDPOINT}/public-collection/info`, + null, + { "Cache-Control": "no-cache", "X-Auth-Access-Token": token }, + ); + const fetchedCollection = resp.data.collection; + const referralCode = resp.data.referralCode ?? ""; + + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + const collectionName = (fetchedCollection.name = + fetchedCollection.name || + (await cryptoWorker.decryptToUTF8( + fetchedCollection.encryptedName, + fetchedCollection.nameDecryptionNonce, + collectionKey, + ))); + + let collectionPublicMagicMetadata: CollectionPublicMagicMetadata; + if (fetchedCollection.pubMagicMetadata?.data) { + collectionPublicMagicMetadata = { + ...fetchedCollection.pubMagicMetadata, + data: await cryptoWorker.decryptMetadata( + fetchedCollection.pubMagicMetadata.data, + fetchedCollection.pubMagicMetadata.header, + collectionKey, + ), + }; + } + + const collection = { + ...fetchedCollection, + name: collectionName, + key: collectionKey, + pubMagicMetadata: collectionPublicMagicMetadata, + }; + await savePublicCollection(collection); + await saveReferralCode(referralCode); + return [collection, referralCode]; + } catch (e) { + logError(e, "failed to get public collection"); + throw e; + } +}; + +export const verifyPublicCollectionPassword = async ( + token: string, + passwordHash: string, +): Promise => { + try { + const resp = await HTTPService.post( + `${ENDPOINT}/public-collection/verify-password`, + { passHash: passwordHash }, + null, + { "Cache-Control": "no-cache", "X-Auth-Access-Token": token }, + ); + const jwtToken = resp.data.jwtToken; + return jwtToken; + } catch (e) { + logError(e, "failed to verify public collection password"); + throw e; + } +}; + +export const reportAbuse = async ( + token: string, + url: string, + reason: REPORT_REASON, + details: AbuseReportDetails, +) => { + try { + if (!token) { + return; + } + const abuseReportRequest: AbuseReportRequest = { url, reason, details }; + + await HTTPService.post( + `${ENDPOINT}/public-collection/report-abuse`, + abuseReportRequest, + null, + { "X-Auth-Access-Token": token }, + ); + } catch (e) { + logError(e, "failed to post abuse report"); + throw e; + } +}; + +export const removePublicCollectionWithFiles = async ( + collectionUID: string, + collectionKey: string, +) => { + const publicCollections = + (await localForage.getItem(PUBLIC_COLLECTIONS_TABLE)) || + []; + await localForage.setItem( + PUBLIC_COLLECTIONS_TABLE, + publicCollections.filter( + (collection) => collection.key !== collectionKey, + ), + ); + await removePublicFiles(collectionUID); +}; + +export const removePublicFiles = async (collectionUID: string) => { + await localForage.removeItem(getPublicCollectionPasswordKey(collectionUID)); + await localForage.removeItem( + getPublicCollectionLastSyncTimeKey(collectionUID), + ); + + const publicCollectionFiles = + (await localForage.getItem( + PUBLIC_COLLECTION_FILES_TABLE, + )) ?? []; + await localForage.setItem( + PUBLIC_COLLECTION_FILES_TABLE, + publicCollectionFiles.filter( + (collectionFiles) => + collectionFiles.collectionUID !== collectionUID, + ), + ); +}; diff --git a/web/apps/photos/src/services/queueProcessor.ts b/web/apps/photos/src/services/queueProcessor.ts new file mode 100644 index 000000000..8e70c4a7f --- /dev/null +++ b/web/apps/photos/src/services/queueProcessor.ts @@ -0,0 +1,86 @@ +import { CustomError } from "@ente/shared/error"; + +interface RequestQueueItem { + request: (canceller?: RequestCanceller) => Promise; + successCallback: (response: any) => void; + failureCallback: (error: Error) => void; + isCanceled: { status: boolean }; + canceller: { exec: () => void }; +} + +export enum PROCESSING_STRATEGY { + FIFO, + LIFO, +} + +export interface RequestCanceller { + exec: () => void; +} + +export interface CancellationStatus { + status: boolean; +} + +export default class QueueProcessor { + private requestQueue: RequestQueueItem[] = []; + + private requestInProcessing = 0; + + constructor( + private maxParallelProcesses: number, + private processingStrategy = PROCESSING_STRATEGY.FIFO, + ) {} + + public queueUpRequest( + request: (canceller?: RequestCanceller) => Promise, + ) { + const isCanceled: CancellationStatus = { status: false }; + const canceller: RequestCanceller = { + exec: () => { + isCanceled.status = true; + }, + }; + + const promise = new Promise((resolve, reject) => { + this.requestQueue.push({ + request, + successCallback: resolve, + failureCallback: reject, + isCanceled, + canceller, + }); + this.pollQueue(); + }); + + return { promise, canceller }; + } + + private async pollQueue() { + if (this.requestInProcessing < this.maxParallelProcesses) { + this.requestInProcessing++; + this.processQueue(); + } + } + + private async processQueue() { + while (this.requestQueue.length > 0) { + const queueItem = + this.processingStrategy === PROCESSING_STRATEGY.LIFO + ? this.requestQueue.pop() + : this.requestQueue.shift(); + let response = null; + + if (queueItem.isCanceled.status) { + queueItem.failureCallback(Error(CustomError.REQUEST_CANCELLED)); + } else { + try { + response = await queueItem.request(queueItem.canceller); + queueItem.successCallback(response); + } catch (e) { + queueItem.failureCallback(e); + } + } + } + this.requestInProcessing--; + } +} diff --git a/web/apps/photos/src/services/readerService.ts b/web/apps/photos/src/services/readerService.ts new file mode 100644 index 000000000..344fd9f20 --- /dev/null +++ b/web/apps/photos/src/services/readerService.ts @@ -0,0 +1,93 @@ +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { ElectronFile } from "types/upload"; + +export async function getUint8ArrayView( + file: Blob | ElectronFile, +): Promise { + try { + return new Uint8Array(await file.arrayBuffer()); + } catch (e) { + logError(e, "reading file blob failed", { + fileSize: convertBytesToHumanReadable(file.size), + }); + throw e; + } +} + +export function getFileStream(file: File, chunkSize: number) { + const fileChunkReader = fileChunkReaderMaker(file, chunkSize); + + const stream = new ReadableStream({ + async pull(controller: ReadableStreamDefaultController) { + const chunk = await fileChunkReader.next(); + if (chunk.done) { + controller.close(); + } else { + controller.enqueue(chunk.value); + } + }, + }); + const chunkCount = Math.ceil(file.size / chunkSize); + return { + stream, + chunkCount, + }; +} + +export async function getElectronFileStream( + file: ElectronFile, + chunkSize: number, +) { + const chunkCount = Math.ceil(file.size / chunkSize); + return { + stream: await file.stream(), + chunkCount, + }; +} + +async function* fileChunkReaderMaker(file: File, chunkSize: number) { + let offset = 0; + while (offset < file.size) { + const blob = file.slice(offset, chunkSize + offset); + const fileChunk = await getUint8ArrayView(blob); + yield fileChunk; + offset += chunkSize; + } + return null; +} + +// depreciated +// eslint-disable-next-line @typescript-eslint/no-unused-vars +async function getUint8ArrayViewOld( + reader: FileReader, + file: Blob, +): Promise { + return await new Promise((resolve, reject) => { + reader.onabort = () => + reject( + Error( + `file reading was aborted, file size= ${convertBytesToHumanReadable( + file.size, + )}`, + ), + ); + reader.onerror = () => + reject( + Error( + `file reading has failed, file size= ${convertBytesToHumanReadable( + file.size, + )} , reason= ${reader.error}`, + ), + ); + reader.onload = () => { + // Do whatever you want with the file contents + const result = + typeof reader.result === "string" + ? new TextEncoder().encode(reader.result) + : new Uint8Array(reader.result); + resolve(result); + }; + reader.readAsArrayBuffer(file); + }); +} diff --git a/web/apps/photos/src/services/searchService.ts b/web/apps/photos/src/services/searchService.ts new file mode 100644 index 000000000..0b6d3a5fb --- /dev/null +++ b/web/apps/photos/src/services/searchService.ts @@ -0,0 +1,456 @@ +import * as chrono from "chrono-node"; +import { t } from "i18next"; +import { getAllPeople } from "utils/machineLearning"; + +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { FILE_TYPE } from "constants/file"; +import { Collection } from "types/collection"; +import { Model } from "types/embedding"; +import { EntityType, LocationTag, LocationTagData } from "types/entity"; +import { EnteFile } from "types/file"; +import { Person, Thing } from "types/machineLearning"; +import { + ClipSearchScores, + DateValue, + Search, + SearchOption, + Suggestion, + SuggestionType, +} from "types/search"; +import ComlinkSearchWorker from "utils/comlink/ComlinkSearchWorker"; +import { getUniqueFiles } from "utils/file"; +import { getMLSyncConfig } from "utils/machineLearning/config"; +import { getFormattedDate } from "utils/search"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; +import { ClipService, computeClipMatchScore } from "./clipService"; +import { getLocalEmbeddings } from "./embeddingService"; +import { getLatestEntities } from "./entityService"; +import locationSearchService, { City } from "./locationSearchService"; +import ObjectService from "./machineLearning/objectService"; + +const DIGITS = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]); + +const CLIP_SCORE_THRESHOLD = 0.23; + +export const getDefaultOptions = async () => { + return [ + await getIndexStatusSuggestion(), + ...(await convertSuggestionsToOptions(await getAllPeopleSuggestion())), + ].filter((t) => !!t); +}; + +export const getAutoCompleteSuggestions = + (files: EnteFile[], collections: Collection[]) => + async (searchPhrase: string): Promise => { + try { + searchPhrase = searchPhrase.trim().toLowerCase(); + if (!searchPhrase?.length) { + return []; + } + const suggestions: Suggestion[] = [ + await getClipSuggestion(searchPhrase), + ...getFileTypeSuggestion(searchPhrase), + ...getHolidaySuggestion(searchPhrase), + ...getYearSuggestion(searchPhrase), + ...getDateSuggestion(searchPhrase), + ...getCollectionSuggestion(searchPhrase, collections), + getFileNameSuggestion(searchPhrase, files), + getFileCaptionSuggestion(searchPhrase, files), + ...(await getLocationSuggestions(searchPhrase)), + ...(await getThingSuggestion(searchPhrase)), + ].filter((suggestion) => !!suggestion); + + return convertSuggestionsToOptions(suggestions); + } catch (e) { + logError(e, "getAutoCompleteSuggestions failed"); + return []; + } + }; + +async function convertSuggestionsToOptions( + suggestions: Suggestion[], +): Promise { + const searchWorker = await ComlinkSearchWorker.getInstance(); + const previewImageAppendedOptions: SearchOption[] = []; + for (const suggestion of suggestions) { + const searchQuery = convertSuggestionToSearchQuery(suggestion); + const resultFiles = getUniqueFiles( + await searchWorker.search(searchQuery), + ); + if (searchQuery?.clip) { + resultFiles.sort((a, b) => { + const aScore = searchQuery.clip.get(a.id); + const bScore = searchQuery.clip.get(b.id); + return bScore - aScore; + }); + } + if (resultFiles.length) { + previewImageAppendedOptions.push({ + ...suggestion, + fileCount: resultFiles.length, + previewFiles: resultFiles.slice(0, 3), + }); + } + } + return previewImageAppendedOptions; +} +function getFileTypeSuggestion(searchPhrase: string): Suggestion[] { + return [ + { + label: t("IMAGE"), + value: FILE_TYPE.IMAGE, + type: SuggestionType.FILE_TYPE, + }, + { + label: t("VIDEO"), + value: FILE_TYPE.VIDEO, + type: SuggestionType.FILE_TYPE, + }, + { + label: t("LIVE_PHOTO"), + value: FILE_TYPE.LIVE_PHOTO, + type: SuggestionType.FILE_TYPE, + }, + ].filter((suggestion) => + suggestion.label.toLowerCase().includes(searchPhrase), + ); +} + +function getHolidaySuggestion(searchPhrase: string): Suggestion[] { + return [ + { + label: t("CHRISTMAS"), + value: { month: 11, date: 25 }, + type: SuggestionType.DATE, + }, + { + label: t("CHRISTMAS_EVE"), + value: { month: 11, date: 24 }, + type: SuggestionType.DATE, + }, + { + label: t("NEW_YEAR"), + value: { month: 0, date: 1 }, + type: SuggestionType.DATE, + }, + { + label: t("NEW_YEAR_EVE"), + value: { month: 11, date: 31 }, + type: SuggestionType.DATE, + }, + ].filter((suggestion) => + suggestion.label.toLowerCase().includes(searchPhrase), + ); +} + +function getYearSuggestion(searchPhrase: string): Suggestion[] { + if (searchPhrase.length === 4) { + try { + const year = parseInt(searchPhrase); + if (year >= 1970 && year <= new Date().getFullYear()) { + return [ + { + label: searchPhrase, + value: { year }, + type: SuggestionType.DATE, + }, + ]; + } + } catch (e) { + logError(e, "getYearSuggestion failed"); + } + } + return []; +} + +export async function getAllPeopleSuggestion(): Promise> { + try { + const people = await getAllPeople(200); + return people.map((person) => ({ + label: person.name, + type: SuggestionType.PERSON, + value: person, + hide: true, + })); + } catch (e) { + logError(e, "getAllPeopleSuggestion failed"); + return []; + } +} + +export async function getIndexStatusSuggestion(): Promise { + try { + const config = await getMLSyncConfig(); + const indexStatus = await mlIDbStorage.getIndexStatus(config.mlVersion); + + let label; + if (!indexStatus.localFilesSynced) { + label = t("INDEXING_SCHEDULED"); + } else if (indexStatus.outOfSyncFilesExists) { + label = t("ANALYZING_PHOTOS", { + indexStatus, + }); + } else if (!indexStatus.peopleIndexSynced) { + label = t("INDEXING_PEOPLE", { indexStatus }); + } else { + label = t("INDEXING_DONE", { indexStatus }); + } + + return { + label, + type: SuggestionType.INDEX_STATUS, + value: indexStatus, + hide: true, + }; + } catch (e) { + logError(e, "getIndexStatusSuggestion failed"); + } +} + +function getDateSuggestion(searchPhrase: string): Suggestion[] { + const searchedDates = parseHumanDate(searchPhrase); + + return searchedDates.map((searchedDate) => ({ + type: SuggestionType.DATE, + value: searchedDate, + label: getFormattedDate(searchedDate), + })); +} + +function getCollectionSuggestion( + searchPhrase: string, + collections: Collection[], +): Suggestion[] { + const collectionResults = searchCollection(searchPhrase, collections); + + return collectionResults.map( + (searchResult) => + ({ + type: SuggestionType.COLLECTION, + value: searchResult.id, + label: searchResult.name, + }) as Suggestion, + ); +} + +function getFileNameSuggestion( + searchPhrase: string, + files: EnteFile[], +): Suggestion { + const matchedFiles = searchFilesByName(searchPhrase, files); + return { + type: SuggestionType.FILE_NAME, + value: matchedFiles.map((file) => file.id), + label: searchPhrase, + }; +} + +function getFileCaptionSuggestion( + searchPhrase: string, + files: EnteFile[], +): Suggestion { + const matchedFiles = searchFilesByCaption(searchPhrase, files); + return { + type: SuggestionType.FILE_CAPTION, + value: matchedFiles.map((file) => file.id), + label: searchPhrase, + }; +} + +async function getLocationSuggestions(searchPhrase: string) { + const locationTagResults = await searchLocationTag(searchPhrase); + const locationTagSuggestions = locationTagResults.map( + (locationTag) => + ({ + type: SuggestionType.LOCATION, + value: locationTag.data, + label: locationTag.data.name, + }) as Suggestion, + ); + const locationTagNames = new Set( + locationTagSuggestions.map((result) => result.label), + ); + + const citySearchResults = + await locationSearchService.searchCities(searchPhrase); + + const nonConflictingCityResult = citySearchResults.filter( + (city) => !locationTagNames.has(city.city), + ); + + const citySearchSuggestions = nonConflictingCityResult.map( + (city) => + ({ + type: SuggestionType.CITY, + value: city, + label: city.city, + }) as Suggestion, + ); + + return [...locationTagSuggestions, ...citySearchSuggestions]; +} + +async function getThingSuggestion(searchPhrase: string): Promise { + const thingResults = await searchThing(searchPhrase); + + return thingResults.map( + (searchResult) => + ({ + type: SuggestionType.THING, + value: searchResult, + label: searchResult.name, + }) as Suggestion, + ); +} + +async function getClipSuggestion(searchPhrase: string): Promise { + try { + if (!ClipService.isPlatformSupported()) { + return null; + } + + const clipResults = await searchClip(searchPhrase); + return { + type: SuggestionType.CLIP, + value: clipResults, + label: searchPhrase, + }; + } catch (e) { + if (!e.message?.includes(CustomError.MODEL_DOWNLOAD_PENDING)) { + logError(e, "getClipSuggestion failed"); + } + return null; + } +} + +function searchCollection( + searchPhrase: string, + collections: Collection[], +): Collection[] { + return collections.filter((collection) => + collection.name.toLowerCase().includes(searchPhrase), + ); +} + +function searchFilesByName(searchPhrase: string, files: EnteFile[]) { + return files.filter((file) => + file.metadata.title.toLowerCase().includes(searchPhrase), + ); +} + +function searchFilesByCaption(searchPhrase: string, files: EnteFile[]) { + return files.filter( + (file) => + file.pubMagicMetadata && + file.pubMagicMetadata.data.caption + ?.toLowerCase() + .includes(searchPhrase), + ); +} + +function parseHumanDate(humanDate: string): DateValue[] { + const date = chrono.parseDate(humanDate); + const date1 = chrono.parseDate(`${humanDate} 1`); + if (date !== null) { + const dates = [ + { month: date.getMonth() }, + { date: date.getDate(), month: date.getMonth() }, + ]; + let reverse = false; + humanDate.split("").forEach((c) => { + if (DIGITS.has(c)) { + reverse = true; + } + }); + if (reverse) { + return dates.reverse(); + } + return dates; + } + if (date1) { + return [{ month: date1.getMonth() }]; + } + return []; +} + +async function searchLocationTag(searchPhrase: string): Promise { + const locationTags = await getLatestEntities( + EntityType.LOCATION_TAG, + ); + const matchedLocationTags = locationTags.filter((locationTag) => + locationTag.data.name.toLowerCase().includes(searchPhrase), + ); + if (matchedLocationTags.length > 0) { + addLogLine( + `Found ${matchedLocationTags.length} location tags for search phrase`, + ); + } + return matchedLocationTags; +} + +async function searchThing(searchPhrase: string) { + const things = await ObjectService.getAllThings(); + return things.filter((thing) => + thing.name.toLocaleLowerCase().includes(searchPhrase), + ); +} + +async function searchClip(searchPhrase: string): Promise { + const imageEmbeddings = await getLocalEmbeddings(Model.ONNX_CLIP); + const textEmbedding = await ClipService.getTextEmbedding(searchPhrase); + const clipSearchResult = new Map( + ( + await Promise.all( + imageEmbeddings.map( + async (imageEmbedding): Promise<[number, number]> => [ + imageEmbedding.fileID, + await computeClipMatchScore( + imageEmbedding.embedding, + textEmbedding, + ), + ], + ), + ) + ).filter(([, score]) => score >= CLIP_SCORE_THRESHOLD), + ); + + return clipSearchResult; +} + +function convertSuggestionToSearchQuery(option: Suggestion): Search { + switch (option.type) { + case SuggestionType.DATE: + return { + date: option.value as DateValue, + }; + + case SuggestionType.LOCATION: + return { + location: option.value as LocationTagData, + }; + + case SuggestionType.CITY: + return { city: option.value as City }; + + case SuggestionType.COLLECTION: + return { collection: option.value as number }; + + case SuggestionType.FILE_NAME: + return { files: option.value as number[] }; + + case SuggestionType.FILE_CAPTION: + return { files: option.value as number[] }; + + case SuggestionType.PERSON: + return { person: option.value as Person }; + + case SuggestionType.THING: + return { thing: option.value as Thing }; + case SuggestionType.FILE_TYPE: + return { fileType: option.value as FILE_TYPE }; + case SuggestionType.CLIP: + return { clip: option.value as ClipSearchScores }; + } +} diff --git a/web/apps/photos/src/services/trashService.ts b/web/apps/photos/src/services/trashService.ts new file mode 100644 index 000000000..5137bbdd5 --- /dev/null +++ b/web/apps/photos/src/services/trashService.ts @@ -0,0 +1,180 @@ +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import localForage from "@ente/shared/storage/localForage"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { Collection } from "types/collection"; +import { SetFiles } from "types/gallery"; +import { decryptFile, sortTrashFiles } from "utils/file"; +import { getCollection } from "./collectionService"; + +import HTTPService from "@ente/shared/network/HTTPService"; +import { EnteFile } from "types/file"; +import { EncryptedTrashItem, Trash } from "types/trash"; +import { mergeMetadata } from "utils/file"; + +const TRASH = "file-trash"; +const TRASH_TIME = "trash-time"; +const DELETED_COLLECTION = "deleted-collection"; + +const ENDPOINT = getEndpoint(); + +async function getLocalTrash() { + const trash = (await localForage.getItem(TRASH)) || []; + return trash; +} + +export async function getLocalTrashedFiles() { + return getTrashedFiles(await getLocalTrash()); +} + +export async function getLocalDeletedCollections() { + const trashedCollections: Array = + (await localForage.getItem(DELETED_COLLECTION)) || []; + const nonUndefinedCollections = trashedCollections.filter( + (collection) => !!collection, + ); + if (nonUndefinedCollections.length !== trashedCollections.length) { + await localForage.setItem(DELETED_COLLECTION, nonUndefinedCollections); + } + return nonUndefinedCollections; +} + +export async function cleanTrashCollections(fileTrash: Trash) { + const trashedCollections = await getLocalDeletedCollections(); + const neededTrashCollections = new Set( + fileTrash.map((item) => item.file.collectionID), + ); + const filterCollections = trashedCollections.filter((item) => + neededTrashCollections.has(item.id), + ); + await localForage.setItem(DELETED_COLLECTION, filterCollections); +} + +async function getLastSyncTime() { + return (await localForage.getItem(TRASH_TIME)) ?? 0; +} +export async function syncTrash( + collections: Collection[], + setTrashedFiles: SetFiles, +): Promise { + const trash = await getLocalTrash(); + collections = [...collections, ...(await getLocalDeletedCollections())]; + const collectionMap = new Map( + collections.map((collection) => [collection.id, collection]), + ); + if (!getToken()) { + return; + } + const lastSyncTime = await getLastSyncTime(); + + const updatedTrash = await updateTrash( + collectionMap, + lastSyncTime, + setTrashedFiles, + trash, + ); + cleanTrashCollections(updatedTrash); +} + +export const updateTrash = async ( + collections: Map, + sinceTime: number, + setTrashedFiles: SetFiles, + currentTrash: Trash, +): Promise => { + try { + let updatedTrash: Trash = [...currentTrash]; + let time = sinceTime; + + let resp; + do { + const token = getToken(); + if (!token) { + break; + } + resp = await HTTPService.get( + `${ENDPOINT}/trash/v2/diff`, + { + sinceTime: time, + }, + { + "X-Auth-Token": token, + }, + ); + // #Perf: This can be optimized by running the decryption in parallel + for (const trashItem of resp.data.diff as EncryptedTrashItem[]) { + const collectionID = trashItem.file.collectionID; + let collection = collections.get(collectionID); + if (!collection) { + collection = await getCollection(collectionID); + collections.set(collectionID, collection); + localForage.setItem(DELETED_COLLECTION, [ + ...collections.values(), + ]); + } + if (!trashItem.isDeleted && !trashItem.isRestored) { + const decryptedFile = await decryptFile( + trashItem.file, + collection.key, + ); + updatedTrash.push({ ...trashItem, file: decryptedFile }); + } else { + updatedTrash = updatedTrash.filter( + (item) => item.file.id !== trashItem.file.id, + ); + } + } + + if (resp.data.diff.length) { + time = resp.data.diff.slice(-1)[0].updatedAt; + } + + setTrashedFiles(getTrashedFiles(updatedTrash)); + await localForage.setItem(TRASH, updatedTrash); + await localForage.setItem(TRASH_TIME, time); + } while (resp.data.hasMore); + return updatedTrash; + } catch (e) { + logError(e, "Get trash files failed"); + } + return currentTrash; +}; + +export function getTrashedFiles(trash: Trash): EnteFile[] { + return sortTrashFiles( + mergeMetadata( + trash.map((trashedFile) => ({ + ...trashedFile.file, + updationTime: trashedFile.updatedAt, + deleteBy: trashedFile.deleteBy, + isTrashed: true, + })), + ), + ); +} + +export const emptyTrash = async () => { + try { + const token = getToken(); + if (!token) { + return; + } + const lastUpdatedAt = await getLastSyncTime(); + + await HTTPService.post( + `${ENDPOINT}/trash/empty`, + { lastUpdatedAt }, + null, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "empty trash failed"); + throw e; + } +}; + +export const clearLocalTrash = async () => { + await localForage.setItem(TRASH, []); +}; diff --git a/web/apps/photos/src/services/typeDetectionService.ts b/web/apps/photos/src/services/typeDetectionService.ts new file mode 100644 index 000000000..cfa36a037 --- /dev/null +++ b/web/apps/photos/src/services/typeDetectionService.ts @@ -0,0 +1,105 @@ +import { CustomError } from "@ente/shared/error"; +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { FILE_TYPE } from "constants/file"; +import { + KNOWN_NON_MEDIA_FORMATS, + WHITELISTED_FILE_FORMATS, +} from "constants/upload"; +import FileType, { FileTypeResult } from "file-type"; +import { ElectronFile, FileTypeInfo } from "types/upload"; +import { getFileExtension } from "utils/file"; +import { getUint8ArrayView } from "./readerService"; +import { getFileSize } from "./upload/fileService"; + +const TYPE_VIDEO = "video"; +const TYPE_IMAGE = "image"; +const CHUNK_SIZE_FOR_TYPE_DETECTION = 4100; + +export async function getFileType( + receivedFile: File | ElectronFile, +): Promise { + try { + let fileType: FILE_TYPE; + let typeResult: FileTypeResult; + + if (receivedFile instanceof File) { + typeResult = await extractFileType(receivedFile); + } else { + typeResult = await extractElectronFileType(receivedFile); + } + + const mimTypeParts: string[] = typeResult.mime?.split("/"); + + if (mimTypeParts?.length !== 2) { + throw Error(CustomError.INVALID_MIME_TYPE(typeResult.mime)); + } + switch (mimTypeParts[0]) { + case TYPE_IMAGE: + fileType = FILE_TYPE.IMAGE; + break; + case TYPE_VIDEO: + fileType = FILE_TYPE.VIDEO; + break; + default: + throw Error(CustomError.NON_MEDIA_FILE); + } + return { + fileType, + exactType: typeResult.ext, + mimeType: typeResult.mime, + }; + } catch (e) { + const fileFormat = getFileExtension(receivedFile.name); + const fileSize = convertBytesToHumanReadable(getFileSize(receivedFile)); + const whiteListedFormat = WHITELISTED_FILE_FORMATS.find( + (a) => a.exactType === fileFormat, + ); + if (whiteListedFormat) { + return whiteListedFormat; + } + if (KNOWN_NON_MEDIA_FORMATS.includes(fileFormat)) { + throw Error(CustomError.UNSUPPORTED_FILE_FORMAT); + } + if (e.message === CustomError.NON_MEDIA_FILE) { + logError(e, "unsupported file format", { + fileFormat, + fileSize, + }); + throw Error(CustomError.UNSUPPORTED_FILE_FORMAT); + } + logError(e, "type detection failed", { + fileFormat, + fileSize, + }); + throw Error(CustomError.TYPE_DETECTION_FAILED(fileFormat)); + } +} + +async function extractFileType(file: File) { + const fileBlobChunk = file.slice(0, CHUNK_SIZE_FOR_TYPE_DETECTION); + const fileDataChunk = await getUint8ArrayView(fileBlobChunk); + return getFileTypeFromBuffer(fileDataChunk); +} + +async function extractElectronFileType(file: ElectronFile) { + const stream = await file.stream(); + const reader = stream.getReader(); + const { value: fileDataChunk } = await reader.read(); + await reader.cancel(); + return getFileTypeFromBuffer(fileDataChunk); +} + +async function getFileTypeFromBuffer(buffer: Uint8Array) { + const result = await FileType.fromBuffer(buffer); + if (!result?.mime) { + let logableInfo = ""; + try { + logableInfo = `result: ${JSON.stringify(result)}`; + } catch (e) { + logableInfo = "failed to stringify result"; + } + throw Error(`mimetype missing from file type result - ${logableInfo}`); + } + return result; +} diff --git a/web/apps/photos/src/services/updateCreationTimeWithExif.ts b/web/apps/photos/src/services/updateCreationTimeWithExif.ts new file mode 100644 index 000000000..4cc4cc3d6 --- /dev/null +++ b/web/apps/photos/src/services/updateCreationTimeWithExif.ts @@ -0,0 +1,102 @@ +import { logError } from "@ente/shared/sentry"; +import { FIX_OPTIONS } from "components/FixCreationTime"; +import { SetProgressTracker } from "components/FixLargeThumbnail"; +import { EnteFile } from "types/file"; +import { + changeFileCreationTime, + updateExistingFilePubMetadata, +} from "utils/file"; +import downloadManager from "./download"; + +import { validateAndGetCreationUnixTimeInMicroSeconds } from "@ente/shared/time"; +import { FILE_TYPE } from "constants/file"; +import { getFileType } from "services/typeDetectionService"; +import { getParsedExifData } from "./upload/exifService"; + +const EXIF_TIME_TAGS = [ + "DateTimeOriginal", + "CreateDate", + "ModifyDate", + "DateCreated", + "MetadataDate", +]; + +export async function updateCreationTimeWithExif( + filesToBeUpdated: EnteFile[], + fixOption: FIX_OPTIONS, + customTime: Date, + setProgressTracker: SetProgressTracker, +) { + let completedWithError = false; + try { + if (filesToBeUpdated.length === 0) { + return completedWithError; + } + setProgressTracker({ current: 0, total: filesToBeUpdated.length }); + for (const [index, file] of filesToBeUpdated.entries()) { + try { + let correctCreationTime: number; + if (fixOption === FIX_OPTIONS.CUSTOM_TIME) { + correctCreationTime = customTime.getTime() * 1000; + } else { + if (file.metadata.fileType !== FILE_TYPE.IMAGE) { + continue; + } + const fileStream = await downloadManager.getFile(file); + const fileBlob = await new Response(fileStream).blob(); + const fileObject = new File( + [fileBlob], + file.metadata.title, + ); + const fileTypeInfo = await getFileType(fileObject); + const exifData = await getParsedExifData( + fileObject, + fileTypeInfo, + EXIF_TIME_TAGS, + ); + if (fixOption === FIX_OPTIONS.DATE_TIME_ORIGINAL) { + correctCreationTime = + validateAndGetCreationUnixTimeInMicroSeconds( + exifData?.DateTimeOriginal ?? + exifData?.DateCreated, + ); + } else if (fixOption === FIX_OPTIONS.DATE_TIME_DIGITIZED) { + correctCreationTime = + validateAndGetCreationUnixTimeInMicroSeconds( + exifData?.CreateDate, + ); + } else if (fixOption === FIX_OPTIONS.METADATA_DATE) { + correctCreationTime = + validateAndGetCreationUnixTimeInMicroSeconds( + exifData?.MetadataDate, + ); + } else { + throw new Error("Invalid fix option"); + } + } + if ( + correctCreationTime && + correctCreationTime !== file.metadata.creationTime + ) { + const updatedFile = await changeFileCreationTime( + file, + correctCreationTime, + ); + updateExistingFilePubMetadata(file, updatedFile); + } + } catch (e) { + logError(e, "failed to updated a CreationTime With Exif"); + completedWithError = true; + } finally { + setProgressTracker({ + current: index + 1, + total: filesToBeUpdated.length, + }); + } + } + } catch (e) { + logError(e, "update CreationTime With Exif failed"); + completedWithError = true; + } + return completedWithError; +} diff --git a/web/apps/photos/src/services/upload/encryptionService.ts b/web/apps/photos/src/services/upload/encryptionService.ts new file mode 100644 index 000000000..90f100c9f --- /dev/null +++ b/web/apps/photos/src/services/upload/encryptionService.ts @@ -0,0 +1,46 @@ +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { EncryptionResult } from "@ente/shared/crypto/types"; +import { Remote } from "comlink"; +import { DataStream, isDataStream } from "types/upload"; + +async function encryptFileStream( + worker: Remote, + fileData: DataStream, +) { + const { stream, chunkCount } = fileData; + const fileStreamReader = stream.getReader(); + const { key, decryptionHeader, pushState } = + await worker.initChunkEncryption(); + const ref = { pullCount: 1 }; + const encryptedFileStream = new ReadableStream({ + async pull(controller) { + const { value } = await fileStreamReader.read(); + const encryptedFileChunk = await worker.encryptFileChunk( + value, + pushState, + ref.pullCount === chunkCount, + ); + controller.enqueue(encryptedFileChunk); + if (ref.pullCount === chunkCount) { + controller.close(); + } + ref.pullCount++; + }, + }); + return { + key, + file: { + decryptionHeader, + encryptedData: { stream: encryptedFileStream, chunkCount }, + }, + }; +} + +export async function encryptFiledata( + worker: Remote, + filedata: Uint8Array | DataStream, +): Promise> { + return isDataStream(filedata) + ? await encryptFileStream(worker, filedata) + : await worker.encryptFile(filedata); +} diff --git a/web/apps/photos/src/services/upload/exifService.ts b/web/apps/photos/src/services/upload/exifService.ts new file mode 100644 index 000000000..7fffb473b --- /dev/null +++ b/web/apps/photos/src/services/upload/exifService.ts @@ -0,0 +1,374 @@ +import { CustomError } from "@ente/shared/error"; +import { logError } from "@ente/shared/sentry"; +import { validateAndGetCreationUnixTimeInMicroSeconds } from "@ente/shared/time"; +import { EXIFLESS_FORMATS, NULL_LOCATION } from "constants/upload"; +import exifr from "exifr"; +import piexif from "piexifjs"; +import { FileTypeInfo, Location } from "types/upload"; + +const EXIFR_UNSUPPORTED_FILE_FORMAT_MESSAGE = "Unknown file format"; + +type ParsedEXIFData = Record & + Partial<{ + DateTimeOriginal: Date; + CreateDate: Date; + ModifyDate: Date; + DateCreated: Date; + MetadataDate: Date; + latitude: number; + longitude: number; + imageWidth: number; + imageHeight: number; + }>; + +type RawEXIFData = Record & + Partial<{ + DateTimeOriginal: string; + CreateDate: string; + ModifyDate: string; + DateCreated: string; + MetadataDate: string; + GPSLatitude: number[]; + GPSLongitude: number[]; + GPSLatitudeRef: string; + GPSLongitudeRef: string; + ImageWidth: number; + ImageHeight: number; + }>; + +export async function getParsedExifData( + receivedFile: File, + fileTypeInfo: FileTypeInfo, + tags?: string[], +): Promise { + try { + if (EXIFLESS_FORMATS.includes(fileTypeInfo.exactType)) { + return null; + } + const exifData: RawEXIFData = await exifr.parse(receivedFile, { + reviveValues: false, + tiff: true, + xmp: true, + icc: true, + iptc: true, + jfif: true, + ihdr: true, + }); + if (!exifData) { + return null; + } + const filteredExifData = tags + ? Object.fromEntries( + Object.entries(exifData).filter(([key]) => + tags.includes(key), + ), + ) + : exifData; + return parseExifData(filteredExifData); + } catch (e) { + if (e.message === EXIFR_UNSUPPORTED_FILE_FORMAT_MESSAGE) { + logError(e, "exif library unsupported format", { + fileType: fileTypeInfo.exactType, + }); + } else { + logError(e, "get parsed exif data failed", { + fileType: fileTypeInfo.exactType, + }); + throw e; + } + } +} + +function parseExifData(exifData: RawEXIFData): ParsedEXIFData { + if (!exifData) { + return null; + } + const { + DateTimeOriginal, + CreateDate, + ModifyDate, + DateCreated, + ImageHeight, + ImageWidth, + ExifImageHeight, + ExifImageWidth, + PixelXDimension, + PixelYDimension, + MetadataDate, + ...rest + } = exifData; + const parsedExif: ParsedEXIFData = { ...rest }; + if (DateTimeOriginal) { + parsedExif.DateTimeOriginal = parseEXIFDate(exifData.DateTimeOriginal); + } + if (CreateDate) { + parsedExif.CreateDate = parseEXIFDate(exifData.CreateDate); + } + if (ModifyDate) { + parsedExif.ModifyDate = parseEXIFDate(exifData.ModifyDate); + } + if (DateCreated) { + parsedExif.DateCreated = parseEXIFDate(exifData.DateCreated); + } + if (MetadataDate) { + parsedExif.MetadataDate = parseEXIFDate(exifData.MetadataDate); + } + if (exifData.GPSLatitude && exifData.GPSLongitude) { + const parsedLocation = parseEXIFLocation( + exifData.GPSLatitude, + exifData.GPSLatitudeRef, + exifData.GPSLongitude, + exifData.GPSLongitudeRef, + ); + parsedExif.latitude = parsedLocation.latitude; + parsedExif.longitude = parsedLocation.longitude; + } + if (ImageWidth && ImageHeight) { + if (typeof ImageWidth === "number" && typeof ImageHeight === "number") { + parsedExif.imageWidth = ImageWidth; + parsedExif.imageHeight = ImageHeight; + } else { + logError( + new Error("ImageWidth or ImageHeight is not a number"), + "Image dimension parsing failed", + { + ImageWidth, + ImageHeight, + }, + ); + } + } else if (ExifImageWidth && ExifImageHeight) { + if ( + typeof ExifImageWidth === "number" && + typeof ExifImageHeight === "number" + ) { + parsedExif.imageWidth = ExifImageWidth; + parsedExif.imageHeight = ExifImageHeight; + } else { + logError( + new Error("ExifImageWidth or ExifImageHeight is not a number"), + "Image dimension parsing failed", + { + ExifImageWidth, + ExifImageHeight, + }, + ); + } + } else if (PixelXDimension && PixelYDimension) { + if ( + typeof PixelXDimension === "number" && + typeof PixelYDimension === "number" + ) { + parsedExif.imageWidth = PixelXDimension; + parsedExif.imageHeight = PixelYDimension; + } else { + logError( + new Error("PixelXDimension or PixelYDimension is not a number"), + "Image dimension parsing failed", + { + PixelXDimension, + PixelYDimension, + }, + ); + } + } + return parsedExif; +} + +function parseEXIFDate(dateTimeString: string) { + try { + if (typeof dateTimeString !== "string" || dateTimeString === "") { + throw Error(CustomError.NOT_A_DATE); + } + + // Check and parse date in the format YYYYMMDD + if (dateTimeString.length === 8) { + const year = Number(dateTimeString.slice(0, 4)); + const month = Number(dateTimeString.slice(4, 6)); + const day = Number(dateTimeString.slice(6, 8)); + if ( + !Number.isNaN(year) && + !Number.isNaN(month) && + !Number.isNaN(day) + ) { + const date = new Date(year, month - 1, day); + if (!Number.isNaN(+date)) { + return date; + } + } + } + const [year, month, day, hour, minute, second] = dateTimeString + .match(/\d+/g) + .map(Number); + + if ( + typeof year === "undefined" || + Number.isNaN(year) || + typeof month === "undefined" || + Number.isNaN(month) || + typeof day === "undefined" || + Number.isNaN(day) + ) { + throw Error(CustomError.NOT_A_DATE); + } + let date: Date; + if ( + typeof hour === "undefined" || + Number.isNaN(hour) || + typeof minute === "undefined" || + Number.isNaN(minute) || + typeof second === "undefined" || + Number.isNaN(second) + ) { + date = new Date(year, month - 1, day); + } else { + date = new Date(year, month - 1, day, hour, minute, second); + } + if (Number.isNaN(+date)) { + throw Error(CustomError.NOT_A_DATE); + } + return date; + } catch (e) { + logError(e, "parseEXIFDate failed", { + dateTimeString, + }); + return null; + } +} + +export function parseEXIFLocation( + gpsLatitude: number[], + gpsLatitudeRef: string, + gpsLongitude: number[], + gpsLongitudeRef: string, +) { + try { + if ( + !Array.isArray(gpsLatitude) || + !Array.isArray(gpsLongitude) || + gpsLatitude.length !== 3 || + gpsLongitude.length !== 3 + ) { + throw Error(CustomError.NOT_A_LOCATION); + } + const latitude = convertDMSToDD( + gpsLatitude[0], + gpsLatitude[1], + gpsLatitude[2], + gpsLatitudeRef, + ); + const longitude = convertDMSToDD( + gpsLongitude[0], + gpsLongitude[1], + gpsLongitude[2], + gpsLongitudeRef, + ); + return { latitude, longitude }; + } catch (e) { + logError(e, "parseEXIFLocation failed", { + gpsLatitude, + gpsLatitudeRef, + gpsLongitude, + gpsLongitudeRef, + }); + return NULL_LOCATION; + } +} + +function convertDMSToDD( + degrees: number, + minutes: number, + seconds: number, + direction: string, +) { + let dd = degrees + minutes / 60 + seconds / (60 * 60); + if (direction === "S" || direction === "W") dd *= -1; + return dd; +} + +export function getEXIFLocation(exifData: ParsedEXIFData): Location { + if (!exifData || (!exifData.latitude && exifData.latitude !== 0)) { + return NULL_LOCATION; + } + return { latitude: exifData.latitude, longitude: exifData.longitude }; +} + +export function getEXIFTime(exifData: ParsedEXIFData): number { + if (!exifData) { + return null; + } + const dateTime = + exifData.DateTimeOriginal ?? + exifData.DateCreated ?? + exifData.CreateDate ?? + exifData.MetadataDate ?? + exifData.ModifyDate; + if (!dateTime) { + return null; + } + return validateAndGetCreationUnixTimeInMicroSeconds(dateTime); +} + +export async function updateFileCreationDateInEXIF( + reader: FileReader, + fileBlob: Blob, + updatedDate: Date, +) { + try { + let imageDataURL = await convertImageToDataURL(reader, fileBlob); + imageDataURL = + "data:image/jpeg;base64" + + imageDataURL.slice(imageDataURL.indexOf(",")); + const exifObj = piexif.load(imageDataURL); + if (!exifObj["Exif"]) { + exifObj["Exif"] = {}; + } + exifObj["Exif"][piexif.ExifIFD.DateTimeOriginal] = + convertToExifDateFormat(updatedDate); + + const exifBytes = piexif.dump(exifObj); + const exifInsertedFile = piexif.insert(exifBytes, imageDataURL); + return dataURIToBlob(exifInsertedFile); + } catch (e) { + logError(e, "updateFileModifyDateInEXIF failed"); + return fileBlob; + } +} + +async function convertImageToDataURL(reader: FileReader, blob: Blob) { + const dataURL = await new Promise((resolve) => { + reader.onload = () => resolve(reader.result as string); + reader.readAsDataURL(blob); + }); + return dataURL; +} + +function dataURIToBlob(dataURI: string) { + // convert base64 to raw binary data held in a string + // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this + const byteString = atob(dataURI.split(",")[1]); + + // separate out the mime component + const mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0]; + + // write the bytes of the string to an ArrayBuffer + const ab = new ArrayBuffer(byteString.length); + + // create a view into the buffer + const ia = new Uint8Array(ab); + + // set the bytes of the buffer to the correct values + for (let i = 0; i < byteString.length; i++) { + ia[i] = byteString.charCodeAt(i); + } + + // write the ArrayBuffer to a blob, and you're done + const blob = new Blob([ab], { type: mimeString }); + return blob; +} + +function convertToExifDateFormat(date: Date) { + return `${date.getFullYear()}:${ + date.getMonth() + 1 + }:${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; +} diff --git a/web/apps/photos/src/services/upload/fileService.ts b/web/apps/photos/src/services/upload/fileService.ts new file mode 100644 index 000000000..d9f402df4 --- /dev/null +++ b/web/apps/photos/src/services/upload/fileService.ts @@ -0,0 +1,158 @@ +import { addLogLine } from "@ente/shared/logging"; +import { getFileNameSize } from "@ente/shared/logging/web"; +import { logError } from "@ente/shared/sentry"; +import { FILE_READER_CHUNK_SIZE, MULTIPART_PART_SIZE } from "constants/upload"; +import { + DataStream, + ElectronFile, + EncryptedFile, + ExtractMetadataResult, + FileInMemory, + FileTypeInfo, + FileWithMetadata, + ParsedMetadataJSON, + ParsedMetadataJSONMap, +} from "types/upload"; + +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { Remote } from "comlink"; +import { EncryptedMagicMetadata } from "types/magicMetadata"; +import { + getElectronFileStream, + getFileStream, + getUint8ArrayView, +} from "../readerService"; +import { encryptFiledata } from "./encryptionService"; +import { + MAX_FILE_NAME_LENGTH_GOOGLE_EXPORT, + extractMetadata, + getClippedMetadataJSONMapKeyForFile, + getMetadataJSONMapKeyForFile, +} from "./metadataService"; +import { generateThumbnail } from "./thumbnailService"; + +export function getFileSize(file: File | ElectronFile) { + return file.size; +} + +export function getFilename(file: File | ElectronFile) { + return file.name; +} + +export async function readFile( + fileTypeInfo: FileTypeInfo, + rawFile: File | ElectronFile, +): Promise { + const { thumbnail, hasStaticThumbnail } = await generateThumbnail( + rawFile, + fileTypeInfo, + ); + addLogLine(`reading file data ${getFileNameSize(rawFile)} `); + let filedata: Uint8Array | DataStream; + if (!(rawFile instanceof File)) { + if (rawFile.size > MULTIPART_PART_SIZE) { + filedata = await getElectronFileStream( + rawFile, + FILE_READER_CHUNK_SIZE, + ); + } else { + filedata = await getUint8ArrayView(rawFile); + } + } else if (rawFile.size > MULTIPART_PART_SIZE) { + filedata = getFileStream(rawFile, FILE_READER_CHUNK_SIZE); + } else { + filedata = await getUint8ArrayView(rawFile); + } + + addLogLine(`read file data successfully ${getFileNameSize(rawFile)} `); + + return { + filedata, + thumbnail, + hasStaticThumbnail, + }; +} + +export async function extractFileMetadata( + worker: Remote, + parsedMetadataJSONMap: ParsedMetadataJSONMap, + collectionID: number, + fileTypeInfo: FileTypeInfo, + rawFile: File | ElectronFile, +): Promise { + let key = getMetadataJSONMapKeyForFile(collectionID, rawFile.name); + let googleMetadata: ParsedMetadataJSON = parsedMetadataJSONMap.get(key); + + if (!googleMetadata && key.length > MAX_FILE_NAME_LENGTH_GOOGLE_EXPORT) { + key = getClippedMetadataJSONMapKeyForFile(collectionID, rawFile.name); + googleMetadata = parsedMetadataJSONMap.get(key); + } + + const { metadata, publicMagicMetadata } = await extractMetadata( + worker, + rawFile, + fileTypeInfo, + ); + + for (const [key, value] of Object.entries(googleMetadata ?? {})) { + if (!value) { + continue; + } + metadata[key] = value; + } + return { metadata, publicMagicMetadata }; +} + +export async function encryptFile( + worker: Remote, + file: FileWithMetadata, + encryptionKey: string, +): Promise { + try { + const { key: fileKey, file: encryptedFiledata } = await encryptFiledata( + worker, + file.filedata, + ); + + const { file: encryptedThumbnail } = await worker.encryptThumbnail( + file.thumbnail, + fileKey, + ); + const { file: encryptedMetadata } = await worker.encryptMetadata( + file.metadata, + fileKey, + ); + + let encryptedPubMagicMetadata: EncryptedMagicMetadata; + if (file.pubMagicMetadata) { + const { file: encryptedPubMagicMetadataData } = + await worker.encryptMetadata( + file.pubMagicMetadata.data, + fileKey, + ); + encryptedPubMagicMetadata = { + version: file.pubMagicMetadata.version, + count: file.pubMagicMetadata.count, + data: encryptedPubMagicMetadataData.encryptedData, + header: encryptedPubMagicMetadataData.decryptionHeader, + }; + } + + const encryptedKey = await worker.encryptToB64(fileKey, encryptionKey); + + const result: EncryptedFile = { + file: { + file: encryptedFiledata, + thumbnail: encryptedThumbnail, + metadata: encryptedMetadata, + pubMagicMetadata: encryptedPubMagicMetadata, + localID: file.localID, + }, + fileKey: encryptedKey, + }; + return result; + } catch (e) { + logError(e, "Error encrypting files"); + throw e; + } +} diff --git a/web/apps/photos/src/services/upload/hashService.tsx b/web/apps/photos/src/services/upload/hashService.tsx new file mode 100644 index 000000000..17e1346b2 --- /dev/null +++ b/web/apps/photos/src/services/upload/hashService.tsx @@ -0,0 +1,51 @@ +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { getFileNameSize } from "@ente/shared/logging/web"; +import { logError } from "@ente/shared/sentry"; +import { Remote } from "comlink"; +import { FILE_READER_CHUNK_SIZE } from "constants/upload"; +import { getElectronFileStream, getFileStream } from "services/readerService"; +import { DataStream, ElectronFile } from "types/upload"; + +export async function getFileHash( + worker: Remote, + file: File | ElectronFile, +) { + try { + addLogLine(`getFileHash called for ${getFileNameSize(file)}`); + let filedata: DataStream; + if (file instanceof File) { + filedata = getFileStream(file, FILE_READER_CHUNK_SIZE); + } else { + filedata = await getElectronFileStream( + file, + FILE_READER_CHUNK_SIZE, + ); + } + const hashState = await worker.initChunkHashing(); + + const streamReader = filedata.stream.getReader(); + for (let i = 0; i < filedata.chunkCount; i++) { + const { done, value: chunk } = await streamReader.read(); + if (done) { + throw Error(CustomError.CHUNK_LESS_THAN_EXPECTED); + } + await worker.hashFileChunk(hashState, Uint8Array.from(chunk)); + } + const { done } = await streamReader.read(); + if (!done) { + throw Error(CustomError.CHUNK_MORE_THAN_EXPECTED); + } + const hash = await worker.completeChunkHashing(hashState); + addLogLine( + `file hashing completed successfully ${getFileNameSize(file)}`, + ); + return hash; + } catch (e) { + logError(e, "getFileHash failed"); + addLogLine( + `file hashing failed ${getFileNameSize(file)} ,${e.message} `, + ); + } +} diff --git a/web/apps/photos/src/services/upload/livePhotoService.ts b/web/apps/photos/src/services/upload/livePhotoService.ts new file mode 100644 index 000000000..52fbc93d8 --- /dev/null +++ b/web/apps/photos/src/services/upload/livePhotoService.ts @@ -0,0 +1,308 @@ +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { CustomError } from "@ente/shared/error"; +import { logError } from "@ente/shared/sentry"; +import { Remote } from "comlink"; +import { FILE_TYPE } from "constants/file"; +import { LIVE_PHOTO_ASSET_SIZE_LIMIT } from "constants/upload"; +import { encodeLivePhoto } from "services/livePhotoService"; +import { getFileType } from "services/typeDetectionService"; +import { + ElectronFile, + ExtractMetadataResult, + FileTypeInfo, + FileWithCollection, + LivePhotoAssets, + ParsedMetadataJSONMap, +} from "types/upload"; +import { + getFileExtensionWithDot, + getFileNameWithoutExtension, + isImageOrVideo, + splitFilenameAndExtension, +} from "utils/file"; +import { getFileTypeFromExtensionForLivePhotoClustering } from "utils/file/livePhoto"; +import { getUint8ArrayView } from "../readerService"; +import { extractFileMetadata } from "./fileService"; +import { getFileHash } from "./hashService"; +import { generateThumbnail } from "./thumbnailService"; +import uploadCancelService from "./uploadCancelService"; + +interface LivePhotoIdentifier { + collectionID: number; + fileType: FILE_TYPE; + name: string; + size: number; +} + +const UNDERSCORE_THREE = "_3"; +// Note: The icloud-photos-downloader library appends _HVEC to the end of the filename in case of live photos +// https://github.com/icloud-photos-downloader/icloud_photos_downloader +const UNDERSCORE_HEVC = "_HVEC"; + +export async function getLivePhotoFileType( + livePhotoAssets: LivePhotoAssets, +): Promise { + const imageFileTypeInfo = await getFileType(livePhotoAssets.image); + const videoFileTypeInfo = await getFileType(livePhotoAssets.video); + return { + fileType: FILE_TYPE.LIVE_PHOTO, + exactType: `${imageFileTypeInfo.exactType}+${videoFileTypeInfo.exactType}`, + imageType: imageFileTypeInfo.exactType, + videoType: videoFileTypeInfo.exactType, + }; +} + +export async function extractLivePhotoMetadata( + worker: Remote, + parsedMetadataJSONMap: ParsedMetadataJSONMap, + collectionID: number, + fileTypeInfo: FileTypeInfo, + livePhotoAssets: LivePhotoAssets, +): Promise { + const imageFileTypeInfo: FileTypeInfo = { + fileType: FILE_TYPE.IMAGE, + exactType: fileTypeInfo.imageType, + }; + const { + metadata: imageMetadata, + publicMagicMetadata: imagePublicMagicMetadata, + } = await extractFileMetadata( + worker, + parsedMetadataJSONMap, + collectionID, + imageFileTypeInfo, + livePhotoAssets.image, + ); + const videoHash = await getFileHash(worker, livePhotoAssets.video); + return { + metadata: { + ...imageMetadata, + title: getLivePhotoName(livePhotoAssets), + fileType: FILE_TYPE.LIVE_PHOTO, + imageHash: imageMetadata.hash, + videoHash: videoHash, + hash: undefined, + }, + publicMagicMetadata: imagePublicMagicMetadata, + }; +} + +export function getLivePhotoSize(livePhotoAssets: LivePhotoAssets) { + return livePhotoAssets.image.size + livePhotoAssets.video.size; +} + +export function getLivePhotoName(livePhotoAssets: LivePhotoAssets) { + return livePhotoAssets.image.name; +} + +export async function readLivePhoto( + fileTypeInfo: FileTypeInfo, + livePhotoAssets: LivePhotoAssets, +) { + const { thumbnail, hasStaticThumbnail } = await generateThumbnail( + livePhotoAssets.image, + { + exactType: fileTypeInfo.imageType, + fileType: FILE_TYPE.IMAGE, + }, + ); + + const image = await getUint8ArrayView(livePhotoAssets.image); + + const video = await getUint8ArrayView(livePhotoAssets.video); + + return { + filedata: await encodeLivePhoto({ + image, + video, + imageNameTitle: livePhotoAssets.image.name, + videoNameTitle: livePhotoAssets.video.name, + }), + thumbnail, + hasStaticThumbnail, + }; +} + +export async function clusterLivePhotoFiles(mediaFiles: FileWithCollection[]) { + try { + const analysedMediaFiles: FileWithCollection[] = []; + mediaFiles + .sort((firstMediaFile, secondMediaFile) => + splitFilenameAndExtension( + firstMediaFile.file.name, + )[0].localeCompare( + splitFilenameAndExtension(secondMediaFile.file.name)[0], + ), + ) + .sort( + (firstMediaFile, secondMediaFile) => + firstMediaFile.collectionID - secondMediaFile.collectionID, + ); + let index = 0; + while (index < mediaFiles.length - 1) { + if (uploadCancelService.isUploadCancelationRequested()) { + throw Error(CustomError.UPLOAD_CANCELLED); + } + const firstMediaFile = mediaFiles[index]; + const secondMediaFile = mediaFiles[index + 1]; + const firstFileType = + getFileTypeFromExtensionForLivePhotoClustering( + firstMediaFile.file.name, + ); + const secondFileType = + getFileTypeFromExtensionForLivePhotoClustering( + secondMediaFile.file.name, + ); + const firstFileIdentifier: LivePhotoIdentifier = { + collectionID: firstMediaFile.collectionID, + fileType: firstFileType, + name: firstMediaFile.file.name, + size: firstMediaFile.file.size, + }; + const secondFileIdentifier: LivePhotoIdentifier = { + collectionID: secondMediaFile.collectionID, + fileType: secondFileType, + name: secondMediaFile.file.name, + size: secondMediaFile.file.size, + }; + if ( + areFilesLivePhotoAssets( + firstFileIdentifier, + secondFileIdentifier, + ) + ) { + let imageFile: File | ElectronFile; + let videoFile: File | ElectronFile; + if ( + firstFileType === FILE_TYPE.IMAGE && + secondFileType === FILE_TYPE.VIDEO + ) { + imageFile = firstMediaFile.file; + videoFile = secondMediaFile.file; + } else { + videoFile = firstMediaFile.file; + imageFile = secondMediaFile.file; + } + const livePhotoLocalID = firstMediaFile.localID; + analysedMediaFiles.push({ + localID: livePhotoLocalID, + collectionID: firstMediaFile.collectionID, + isLivePhoto: true, + livePhotoAssets: { + image: imageFile, + video: videoFile, + }, + }); + index += 2; + } else { + analysedMediaFiles.push({ + ...firstMediaFile, + isLivePhoto: false, + }); + index += 1; + } + } + if (index === mediaFiles.length - 1) { + analysedMediaFiles.push({ + ...mediaFiles[index], + isLivePhoto: false, + }); + } + return analysedMediaFiles; + } catch (e) { + if (e.message === CustomError.UPLOAD_CANCELLED) { + throw e; + } else { + logError(e, "failed to cluster live photo"); + throw e; + } + } +} + +function areFilesLivePhotoAssets( + firstFileIdentifier: LivePhotoIdentifier, + secondFileIdentifier: LivePhotoIdentifier, +) { + const haveSameCollectionID = + firstFileIdentifier.collectionID === secondFileIdentifier.collectionID; + const areNotSameFileType = + firstFileIdentifier.fileType !== secondFileIdentifier.fileType; + + let firstFileNameWithoutSuffix: string; + let secondFileNameWithoutSuffix: string; + if (firstFileIdentifier.fileType === FILE_TYPE.IMAGE) { + firstFileNameWithoutSuffix = removePotentialLivePhotoSuffix( + getFileNameWithoutExtension(firstFileIdentifier.name), + // Note: The Google Live Photo image file can have video extension appended as suffix, passing that to removePotentialLivePhotoSuffix to remove it + // Example: IMG_20210630_0001.mp4.jpg (Google Live Photo image file) + getFileExtensionWithDot(secondFileIdentifier.name), + ); + secondFileNameWithoutSuffix = removePotentialLivePhotoSuffix( + getFileNameWithoutExtension(secondFileIdentifier.name), + ); + } else { + firstFileNameWithoutSuffix = removePotentialLivePhotoSuffix( + getFileNameWithoutExtension(firstFileIdentifier.name), + ); + secondFileNameWithoutSuffix = removePotentialLivePhotoSuffix( + getFileNameWithoutExtension(secondFileIdentifier.name), + getFileExtensionWithDot(firstFileIdentifier.name), + ); + } + if ( + haveSameCollectionID && + isImageOrVideo(firstFileIdentifier.fileType) && + isImageOrVideo(secondFileIdentifier.fileType) && + areNotSameFileType && + firstFileNameWithoutSuffix === secondFileNameWithoutSuffix + ) { + // checks size of live Photo assets are less than allowed limit + // I did that based on the assumption that live photo assets ideally would not be larger than LIVE_PHOTO_ASSET_SIZE_LIMIT + // also zipping library doesn't support stream as a input + if ( + firstFileIdentifier.size <= LIVE_PHOTO_ASSET_SIZE_LIMIT && + secondFileIdentifier.size <= LIVE_PHOTO_ASSET_SIZE_LIMIT + ) { + return true; + } else { + logError( + new Error(CustomError.TOO_LARGE_LIVE_PHOTO_ASSETS), + CustomError.TOO_LARGE_LIVE_PHOTO_ASSETS, + { + fileSizes: [ + firstFileIdentifier.size, + secondFileIdentifier.size, + ], + }, + ); + } + } + return false; +} + +function removePotentialLivePhotoSuffix( + filenameWithoutExtension: string, + suffix?: string, +) { + let presentSuffix: string; + if (filenameWithoutExtension.endsWith(UNDERSCORE_THREE)) { + presentSuffix = UNDERSCORE_THREE; + } else if (filenameWithoutExtension.endsWith(UNDERSCORE_HEVC)) { + presentSuffix = UNDERSCORE_HEVC; + } else if ( + filenameWithoutExtension.endsWith(UNDERSCORE_HEVC.toLowerCase()) + ) { + presentSuffix = UNDERSCORE_HEVC.toLowerCase(); + } else if (suffix) { + if (filenameWithoutExtension.endsWith(suffix)) { + presentSuffix = suffix; + } else if (filenameWithoutExtension.endsWith(suffix.toLowerCase())) { + presentSuffix = suffix.toLowerCase(); + } + } + if (presentSuffix) { + return filenameWithoutExtension.slice(0, presentSuffix.length * -1); + } else { + return filenameWithoutExtension; + } +} diff --git a/web/apps/photos/src/services/upload/magicMetadataService.ts b/web/apps/photos/src/services/upload/magicMetadataService.ts new file mode 100644 index 000000000..f56b31c43 --- /dev/null +++ b/web/apps/photos/src/services/upload/magicMetadataService.ts @@ -0,0 +1,21 @@ +import { + FilePublicMagicMetadata, + FilePublicMagicMetadataProps, +} from "types/file"; +import { + getNonEmptyMagicMetadataProps, + updateMagicMetadata, +} from "utils/magicMetadata"; + +export async function constructPublicMagicMetadata( + publicMagicMetadataProps: FilePublicMagicMetadataProps, +): Promise { + const nonEmptyPublicMagicMetadataProps = getNonEmptyMagicMetadataProps( + publicMagicMetadataProps, + ); + + if (Object.values(nonEmptyPublicMagicMetadataProps)?.length === 0) { + return null; + } + return await updateMagicMetadata(publicMagicMetadataProps); +} diff --git a/web/apps/photos/src/services/upload/metadataService.ts b/web/apps/photos/src/services/upload/metadataService.ts new file mode 100644 index 000000000..f51ca15c2 --- /dev/null +++ b/web/apps/photos/src/services/upload/metadataService.ts @@ -0,0 +1,274 @@ +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { logError } from "@ente/shared/sentry"; +import { + parseDateFromFusedDateString, + tryToParseDateTime, + validateAndGetCreationUnixTimeInMicroSeconds, +} from "@ente/shared/time"; +import { Remote } from "comlink"; +import { FILE_TYPE } from "constants/file"; +import { NULL_EXTRACTED_METADATA, NULL_LOCATION } from "constants/upload"; +import { FilePublicMagicMetadataProps } from "types/file"; +import { + ElectronFile, + ExtractMetadataResult, + FileTypeInfo, + Location, + Metadata, + ParsedExtractedMetadata, + ParsedMetadataJSON, +} from "types/upload"; +import { splitFilenameAndExtension } from "utils/file"; +import { getEXIFLocation, getEXIFTime, getParsedExifData } from "./exifService"; +import { getFileHash } from "./hashService"; +import { getVideoMetadata } from "./videoMetadataService"; + +const NULL_PARSED_METADATA_JSON: ParsedMetadataJSON = { + creationTime: null, + modificationTime: null, + ...NULL_LOCATION, +}; + +const EXIF_TAGS_NEEDED = [ + "DateTimeOriginal", + "CreateDate", + "ModifyDate", + "GPSLatitude", + "GPSLongitude", + "GPSLatitudeRef", + "GPSLongitudeRef", + "DateCreated", + "ExifImageWidth", + "ExifImageHeight", + "ImageWidth", + "ImageHeight", + "PixelXDimension", + "PixelYDimension", + "MetadataDate", +]; + +export const MAX_FILE_NAME_LENGTH_GOOGLE_EXPORT = 46; + +export async function extractMetadata( + worker: Remote, + receivedFile: File | ElectronFile, + fileTypeInfo: FileTypeInfo, +): Promise { + let extractedMetadata: ParsedExtractedMetadata = NULL_EXTRACTED_METADATA; + if (fileTypeInfo.fileType === FILE_TYPE.IMAGE) { + extractedMetadata = await getImageMetadata(receivedFile, fileTypeInfo); + } else if (fileTypeInfo.fileType === FILE_TYPE.VIDEO) { + extractedMetadata = await getVideoMetadata(receivedFile); + } + const fileHash = await getFileHash(worker, receivedFile); + + const metadata: Metadata = { + title: receivedFile.name, + creationTime: + extractedMetadata.creationTime ?? + extractDateFromFileName(receivedFile.name) ?? + receivedFile.lastModified * 1000, + modificationTime: receivedFile.lastModified * 1000, + latitude: extractedMetadata.location.latitude, + longitude: extractedMetadata.location.longitude, + fileType: fileTypeInfo.fileType, + hash: fileHash, + }; + const publicMagicMetadata: FilePublicMagicMetadataProps = { + w: extractedMetadata.width, + h: extractedMetadata.height, + }; + return { metadata, publicMagicMetadata }; +} + +export async function getImageMetadata( + receivedFile: File | ElectronFile, + fileTypeInfo: FileTypeInfo, +): Promise { + let imageMetadata = NULL_EXTRACTED_METADATA; + try { + if (!(receivedFile instanceof File)) { + receivedFile = new File( + [await receivedFile.blob()], + receivedFile.name, + { + lastModified: receivedFile.lastModified, + }, + ); + } + const exifData = await getParsedExifData( + receivedFile, + fileTypeInfo, + EXIF_TAGS_NEEDED, + ); + + imageMetadata = { + location: getEXIFLocation(exifData), + creationTime: getEXIFTime(exifData), + width: exifData?.imageWidth ?? null, + height: exifData?.imageHeight ?? null, + }; + } catch (e) { + logError(e, "getExifData failed"); + } + return imageMetadata; +} + +export const getMetadataJSONMapKeyForJSON = ( + collectionID: number, + jsonFileName: string, +) => { + let title = jsonFileName.slice(0, -1 * ".json".length); + const endsWithNumberedSuffixWithBrackets = title.match(/\(\d+\)$/); + if (endsWithNumberedSuffixWithBrackets) { + title = title.slice( + 0, + -1 * endsWithNumberedSuffixWithBrackets[0].length, + ); + const [name, extension] = splitFilenameAndExtension(title); + return `${collectionID}-${name}${endsWithNumberedSuffixWithBrackets[0]}.${extension}`; + } + return `${collectionID}-${title}`; +}; + +// if the file name is greater than MAX_FILE_NAME_LENGTH_GOOGLE_EXPORT(46) , then google photos clips the file name +// so we need to use the clipped file name to get the metadataJSON file +export const getClippedMetadataJSONMapKeyForFile = ( + collectionID: number, + fileName: string, +) => { + return `${collectionID}-${fileName.slice( + 0, + MAX_FILE_NAME_LENGTH_GOOGLE_EXPORT, + )}`; +}; + +export const getMetadataJSONMapKeyForFile = ( + collectionID: number, + fileName: string, +) => { + return `${collectionID}-${getFileOriginalName(fileName)}`; +}; + +export async function parseMetadataJSON(receivedFile: File | ElectronFile) { + try { + if (!(receivedFile instanceof File)) { + receivedFile = new File( + [await receivedFile.blob()], + receivedFile.name, + ); + } + const metadataJSON: object = JSON.parse(await receivedFile.text()); + + const parsedMetadataJSON: ParsedMetadataJSON = + NULL_PARSED_METADATA_JSON; + if (!metadataJSON) { + return; + } + + if ( + metadataJSON["photoTakenTime"] && + metadataJSON["photoTakenTime"]["timestamp"] + ) { + parsedMetadataJSON.creationTime = + metadataJSON["photoTakenTime"]["timestamp"] * 1000000; + } else if ( + metadataJSON["creationTime"] && + metadataJSON["creationTime"]["timestamp"] + ) { + parsedMetadataJSON.creationTime = + metadataJSON["creationTime"]["timestamp"] * 1000000; + } + if ( + metadataJSON["modificationTime"] && + metadataJSON["modificationTime"]["timestamp"] + ) { + parsedMetadataJSON.modificationTime = + metadataJSON["modificationTime"]["timestamp"] * 1000000; + } + let locationData: Location = NULL_LOCATION; + if ( + metadataJSON["geoData"] && + (metadataJSON["geoData"]["latitude"] !== 0.0 || + metadataJSON["geoData"]["longitude"] !== 0.0) + ) { + locationData = metadataJSON["geoData"]; + } else if ( + metadataJSON["geoDataExif"] && + (metadataJSON["geoDataExif"]["latitude"] !== 0.0 || + metadataJSON["geoDataExif"]["longitude"] !== 0.0) + ) { + locationData = metadataJSON["geoDataExif"]; + } + if (locationData !== null) { + parsedMetadataJSON.latitude = locationData.latitude; + parsedMetadataJSON.longitude = locationData.longitude; + } + return parsedMetadataJSON; + } catch (e) { + logError(e, "parseMetadataJSON failed"); + // ignore + } +} + +// tries to extract date from file name if available else returns null +export function extractDateFromFileName(filename: string): number { + try { + filename = filename.trim(); + let parsedDate: Date; + if (filename.startsWith("IMG-") || filename.startsWith("VID-")) { + // Whatsapp media files + // sample name IMG-20171218-WA0028.jpg + parsedDate = parseDateFromFusedDateString(filename.split("-")[1]); + } else if (filename.startsWith("Screenshot_")) { + // Screenshots on droid + // sample name Screenshot_20181227-152914.jpg + parsedDate = parseDateFromFusedDateString( + filename.replaceAll("Screenshot_", ""), + ); + } else if (filename.startsWith("signal-")) { + // signal images + // sample name :signal-2018-08-21-100217.jpg + const dateString = convertSignalNameToFusedDateString(filename); + parsedDate = parseDateFromFusedDateString(dateString); + } + if (!parsedDate) { + parsedDate = tryToParseDateTime(filename); + } + return validateAndGetCreationUnixTimeInMicroSeconds(parsedDate); + } catch (e) { + logError(e, "failed to extract date From FileName "); + return null; + } +} + +function convertSignalNameToFusedDateString(filename: string) { + const dateStringParts = filename.split("-"); + return `${dateStringParts[1]}${dateStringParts[2]}${dateStringParts[3]}-${dateStringParts[4]}`; +} + +const EDITED_FILE_SUFFIX = "-edited"; + +/* + Get the original file name for edited file to associate it to original file's metadataJSON file + as edited file doesn't have their own metadata file +*/ +function getFileOriginalName(fileName: string) { + let originalName: string = null; + const [nameWithoutExtension, extension] = + splitFilenameAndExtension(fileName); + + const isEditedFile = nameWithoutExtension.endsWith(EDITED_FILE_SUFFIX); + if (isEditedFile) { + originalName = nameWithoutExtension.slice( + 0, + -1 * EDITED_FILE_SUFFIX.length, + ); + } else { + originalName = nameWithoutExtension; + } + if (extension) { + originalName += "." + extension; + } + return originalName; +} diff --git a/web/apps/photos/src/services/upload/multiPartUploadService.ts b/web/apps/photos/src/services/upload/multiPartUploadService.ts new file mode 100644 index 000000000..1b4442710 --- /dev/null +++ b/web/apps/photos/src/services/upload/multiPartUploadService.ts @@ -0,0 +1,132 @@ +import { CustomError } from "@ente/shared/error"; +import { + FILE_CHUNKS_COMBINED_FOR_A_UPLOAD_PART, + RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, +} from "constants/upload"; +import { DataStream, Logger, MultipartUploadURLs } from "types/upload"; +import * as convert from "xml-js"; +import UIService from "./uiService"; +import uploadCancelService from "./uploadCancelService"; +import UploadHttpClient from "./uploadHttpClient"; +import uploadService from "./uploadService"; + +interface PartEtag { + PartNumber: number; + ETag: string; +} + +function calculatePartCount(chunkCount: number) { + const partCount = Math.ceil( + chunkCount / FILE_CHUNKS_COMBINED_FOR_A_UPLOAD_PART, + ); + return partCount; +} +export async function uploadStreamUsingMultipart( + logger: Logger, + fileLocalID: number, + dataStream: DataStream, +) { + const uploadPartCount = calculatePartCount(dataStream.chunkCount); + logger(`fetching ${uploadPartCount} urls for multipart upload`); + const multipartUploadURLs = + await uploadService.fetchMultipartUploadURLs(uploadPartCount); + logger(`fetched ${uploadPartCount} urls for multipart upload`); + + const fileObjectKey = await uploadStreamInParts( + logger, + multipartUploadURLs, + dataStream.stream, + fileLocalID, + uploadPartCount, + ); + return fileObjectKey; +} + +export async function uploadStreamInParts( + logger: Logger, + multipartUploadURLs: MultipartUploadURLs, + dataStream: ReadableStream, + fileLocalID: number, + uploadPartCount: number, +) { + const streamReader = dataStream.getReader(); + const percentPerPart = getRandomProgressPerPartUpload(uploadPartCount); + const partEtags: PartEtag[] = []; + logger(`uploading file in chunks`); + for (const [ + index, + fileUploadURL, + ] of multipartUploadURLs.partURLs.entries()) { + if (uploadCancelService.isUploadCancelationRequested()) { + throw Error(CustomError.UPLOAD_CANCELLED); + } + const uploadChunk = await combineChunksToFormUploadPart(streamReader); + const progressTracker = UIService.trackUploadProgress( + fileLocalID, + percentPerPart, + index, + ); + let eTag = null; + if (!uploadService.getIsCFUploadProxyDisabled()) { + eTag = await UploadHttpClient.putFilePartV2( + fileUploadURL, + uploadChunk, + progressTracker, + ); + } else { + eTag = await UploadHttpClient.putFilePart( + fileUploadURL, + uploadChunk, + progressTracker, + ); + } + partEtags.push({ PartNumber: index + 1, ETag: eTag }); + } + const { done } = await streamReader.read(); + if (!done) { + throw Error(CustomError.CHUNK_MORE_THAN_EXPECTED); + } + logger(`uploading file in chunks done`); + logger(`completing multipart upload`); + await completeMultipartUpload(partEtags, multipartUploadURLs.completeURL); + logger(`completing multipart upload done`); + return multipartUploadURLs.objectKey; +} + +function getRandomProgressPerPartUpload(uploadPartCount: number) { + const percentPerPart = + RANDOM_PERCENTAGE_PROGRESS_FOR_PUT() / uploadPartCount; + return percentPerPart; +} + +async function combineChunksToFormUploadPart( + streamReader: ReadableStreamDefaultReader, +) { + const combinedChunks = []; + for (let i = 0; i < FILE_CHUNKS_COMBINED_FOR_A_UPLOAD_PART; i++) { + const { done, value: chunk } = await streamReader.read(); + if (done) { + break; + } + for (let index = 0; index < chunk.length; index++) { + combinedChunks.push(chunk[index]); + } + } + return Uint8Array.from(combinedChunks); +} + +async function completeMultipartUpload( + partEtags: PartEtag[], + completeURL: string, +) { + const options = { compact: true, ignoreComment: true, spaces: 4 }; + const body = convert.js2xml( + { CompleteMultipartUpload: { Part: partEtags } }, + options, + ); + if (!uploadService.getIsCFUploadProxyDisabled()) { + await UploadHttpClient.completeMultipartUploadV2(completeURL, body); + } else { + await UploadHttpClient.completeMultipartUpload(completeURL, body); + } +} diff --git a/web/apps/photos/src/services/upload/publicUploadHttpClient.ts b/web/apps/photos/src/services/upload/publicUploadHttpClient.ts new file mode 100644 index 000000000..3144d7893 --- /dev/null +++ b/web/apps/photos/src/services/upload/publicUploadHttpClient.ts @@ -0,0 +1,116 @@ +import { CustomError, handleUploadError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { EnteFile } from "types/file"; +import { MultipartUploadURLs, UploadFile, UploadURL } from "types/upload"; +import { retryHTTPCall } from "utils/upload/uploadRetrier"; + +const ENDPOINT = getEndpoint(); + +const MAX_URL_REQUESTS = 50; + +class PublicUploadHttpClient { + private uploadURLFetchInProgress = null; + + async uploadFile( + uploadFile: UploadFile, + token: string, + passwordToken: string, + ): Promise { + try { + if (!token) { + throw Error(CustomError.TOKEN_MISSING); + } + const response = await retryHTTPCall( + () => + HTTPService.post( + `${ENDPOINT}/public-collection/file`, + uploadFile, + null, + { + "X-Auth-Access-Token": token, + ...(passwordToken && { + "X-Auth-Access-Token-JWT": passwordToken, + }), + }, + ), + handleUploadError, + ); + return response.data; + } catch (e) { + logError(e, "upload public File Failed"); + throw e; + } + } + + async fetchUploadURLs( + count: number, + urlStore: UploadURL[], + token: string, + passwordToken: string, + ): Promise { + try { + if (!this.uploadURLFetchInProgress) { + try { + if (!token) { + throw Error(CustomError.TOKEN_MISSING); + } + this.uploadURLFetchInProgress = HTTPService.get( + `${ENDPOINT}/public-collection/upload-urls`, + { + count: Math.min(MAX_URL_REQUESTS, count * 2), + }, + { + "X-Auth-Access-Token": token, + ...(passwordToken && { + "X-Auth-Access-Token-JWT": passwordToken, + }), + }, + ); + const response = await this.uploadURLFetchInProgress; + for (const url of response.data["urls"]) { + urlStore.push(url); + } + } finally { + this.uploadURLFetchInProgress = null; + } + } + return this.uploadURLFetchInProgress; + } catch (e) { + logError(e, "fetch public upload-url failed "); + throw e; + } + } + + async fetchMultipartUploadURLs( + count: number, + token: string, + passwordToken: string, + ): Promise { + try { + if (!token) { + throw Error(CustomError.TOKEN_MISSING); + } + const response = await HTTPService.get( + `${ENDPOINT}/public-collection/multipart-upload-urls`, + { + count, + }, + { + "X-Auth-Access-Token": token, + ...(passwordToken && { + "X-Auth-Access-Token-JWT": passwordToken, + }), + }, + ); + + return response.data["urls"]; + } catch (e) { + logError(e, "fetch public multipart-upload-url failed"); + throw e; + } + } +} + +export default new PublicUploadHttpClient(); diff --git a/web/apps/photos/src/services/upload/thumbnailService.ts b/web/apps/photos/src/services/upload/thumbnailService.ts new file mode 100644 index 000000000..8b1cf7a61 --- /dev/null +++ b/web/apps/photos/src/services/upload/thumbnailService.ts @@ -0,0 +1,307 @@ +import { CustomError, errorWithContext } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { getFileNameSize } from "@ente/shared/logging/web"; +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { FILE_TYPE } from "constants/file"; +import { BLACK_THUMBNAIL_BASE64 } from "constants/upload"; +import isElectron from "is-electron"; +import * as FFmpegService from "services/ffmpeg/ffmpegService"; +import HeicConversionService from "services/heicConversionService"; +import imageProcessor from "services/imageProcessor"; +import { ElectronFile, FileTypeInfo } from "types/upload"; +import { isFileHEIC } from "utils/file"; +import { getUint8ArrayView } from "../readerService"; + +const MAX_THUMBNAIL_DIMENSION = 720; +const MIN_COMPRESSION_PERCENTAGE_SIZE_DIFF = 10; +const MAX_THUMBNAIL_SIZE = 100 * 1024; +const MIN_QUALITY = 0.5; +const MAX_QUALITY = 0.7; + +const WAIT_TIME_THUMBNAIL_GENERATION = 30 * 1000; + +interface Dimension { + width: number; + height: number; +} + +export async function generateThumbnail( + file: File | ElectronFile, + fileTypeInfo: FileTypeInfo, +): Promise<{ thumbnail: Uint8Array; hasStaticThumbnail: boolean }> { + try { + addLogLine(`generating thumbnail for ${getFileNameSize(file)}`); + let hasStaticThumbnail = false; + let thumbnail: Uint8Array; + try { + if (fileTypeInfo.fileType === FILE_TYPE.IMAGE) { + thumbnail = await generateImageThumbnail(file, fileTypeInfo); + } else { + thumbnail = await generateVideoThumbnail(file, fileTypeInfo); + } + if (thumbnail.length > 1.5 * MAX_THUMBNAIL_SIZE) { + logError( + Error("thumbnail_too_large"), + "thumbnail greater than max limit", + { + thumbnailSize: convertBytesToHumanReadable( + thumbnail.length, + ), + fileSize: convertBytesToHumanReadable(file.size), + fileType: fileTypeInfo.exactType, + }, + ); + } + if (thumbnail.length === 0) { + throw Error("EMPTY THUMBNAIL"); + } + addLogLine( + `thumbnail successfully generated ${getFileNameSize(file)}`, + ); + } catch (e) { + logError(e, "uploading static thumbnail", { + fileFormat: fileTypeInfo.exactType, + }); + addLogLine( + `thumbnail generation failed ${getFileNameSize(file)} error: ${ + e.message + }`, + ); + thumbnail = Uint8Array.from(atob(BLACK_THUMBNAIL_BASE64), (c) => + c.charCodeAt(0), + ); + hasStaticThumbnail = true; + } + return { thumbnail, hasStaticThumbnail }; + } catch (e) { + logError(e, "Error generating static thumbnail"); + throw e; + } +} + +async function generateImageThumbnail( + file: File | ElectronFile, + fileTypeInfo: FileTypeInfo, +) { + if (isElectron()) { + try { + return await imageProcessor.generateImageThumbnail( + file, + MAX_THUMBNAIL_DIMENSION, + MAX_THUMBNAIL_SIZE, + ); + } catch (e) { + return await generateImageThumbnailUsingCanvas(file, fileTypeInfo); + } + } else { + return await generateImageThumbnailUsingCanvas(file, fileTypeInfo); + } +} + +export async function generateImageThumbnailUsingCanvas( + file: File | ElectronFile, + fileTypeInfo: FileTypeInfo, +) { + const canvas = document.createElement("canvas"); + const canvasCTX = canvas.getContext("2d"); + + let imageURL = null; + let timeout = null; + const isHEIC = isFileHEIC(fileTypeInfo.exactType); + if (isHEIC) { + addLogLine(`HEICConverter called for ${getFileNameSize(file)}`); + const convertedBlob = await HeicConversionService.convert( + new Blob([await file.arrayBuffer()]), + ); + file = new File([convertedBlob], file.name); + addLogLine(`${getFileNameSize(file)} successfully converted`); + } + let image = new Image(); + imageURL = URL.createObjectURL(new Blob([await file.arrayBuffer()])); + await new Promise((resolve, reject) => { + image.setAttribute("src", imageURL); + image.onload = () => { + try { + URL.revokeObjectURL(imageURL); + const imageDimension = { + width: image.width, + height: image.height, + }; + const thumbnailDimension = calculateThumbnailDimension( + imageDimension, + MAX_THUMBNAIL_DIMENSION, + ); + canvas.width = thumbnailDimension.width; + canvas.height = thumbnailDimension.height; + canvasCTX.drawImage( + image, + 0, + 0, + thumbnailDimension.width, + thumbnailDimension.height, + ); + image = null; + clearTimeout(timeout); + resolve(null); + } catch (e) { + const err = errorWithContext( + e, + `${CustomError.THUMBNAIL_GENERATION_FAILED} err: ${e}`, + ); + reject(err); + } + }; + timeout = setTimeout( + () => reject(Error(CustomError.WAIT_TIME_EXCEEDED)), + WAIT_TIME_THUMBNAIL_GENERATION, + ); + }); + const thumbnailBlob = await getCompressedThumbnailBlobFromCanvas(canvas); + return await getUint8ArrayView(thumbnailBlob); +} + +async function generateVideoThumbnail( + file: File | ElectronFile, + fileTypeInfo: FileTypeInfo, +) { + let thumbnail: Uint8Array; + try { + addLogLine( + `ffmpeg generateThumbnail called for ${getFileNameSize(file)}`, + ); + + const thumbnail = await FFmpegService.generateVideoThumbnail(file); + addLogLine( + `ffmpeg thumbnail successfully generated ${getFileNameSize(file)}`, + ); + return await getUint8ArrayView(thumbnail); + } catch (e) { + addLogLine( + `ffmpeg thumbnail generated failed ${getFileNameSize( + file, + )} error: ${e.message}`, + ); + logError(e, "failed to generate thumbnail using ffmpeg", { + fileFormat: fileTypeInfo.exactType, + }); + thumbnail = await generateVideoThumbnailUsingCanvas(file); + } + return thumbnail; +} + +export async function generateVideoThumbnailUsingCanvas( + file: File | ElectronFile, +) { + const canvas = document.createElement("canvas"); + const canvasCTX = canvas.getContext("2d"); + + let timeout = null; + let videoURL = null; + + let video = document.createElement("video"); + videoURL = URL.createObjectURL(new Blob([await file.arrayBuffer()])); + await new Promise((resolve, reject) => { + video.preload = "metadata"; + video.src = videoURL; + video.addEventListener("loadeddata", function () { + try { + URL.revokeObjectURL(videoURL); + if (!video) { + throw Error("video load failed"); + } + const videoDimension = { + width: video.videoWidth, + height: video.videoHeight, + }; + const thumbnailDimension = calculateThumbnailDimension( + videoDimension, + MAX_THUMBNAIL_DIMENSION, + ); + canvas.width = thumbnailDimension.width; + canvas.height = thumbnailDimension.height; + canvasCTX.drawImage( + video, + 0, + 0, + thumbnailDimension.width, + thumbnailDimension.height, + ); + video = null; + clearTimeout(timeout); + resolve(null); + } catch (e) { + const err = Error( + `${CustomError.THUMBNAIL_GENERATION_FAILED} err: ${e}`, + ); + logError(e, CustomError.THUMBNAIL_GENERATION_FAILED); + reject(err); + } + }); + timeout = setTimeout( + () => reject(Error(CustomError.WAIT_TIME_EXCEEDED)), + WAIT_TIME_THUMBNAIL_GENERATION, + ); + }); + const thumbnailBlob = await getCompressedThumbnailBlobFromCanvas(canvas); + return await getUint8ArrayView(thumbnailBlob); +} + +async function getCompressedThumbnailBlobFromCanvas(canvas: HTMLCanvasElement) { + let thumbnailBlob: Blob = null; + let prevSize = Number.MAX_SAFE_INTEGER; + let quality = MAX_QUALITY; + + do { + if (thumbnailBlob) { + prevSize = thumbnailBlob.size; + } + thumbnailBlob = await new Promise((resolve) => { + canvas.toBlob( + function (blob) { + resolve(blob); + }, + "image/jpeg", + quality, + ); + }); + thumbnailBlob = thumbnailBlob ?? new Blob([]); + quality -= 0.1; + } while ( + quality >= MIN_QUALITY && + thumbnailBlob.size > MAX_THUMBNAIL_SIZE && + percentageSizeDiff(thumbnailBlob.size, prevSize) >= + MIN_COMPRESSION_PERCENTAGE_SIZE_DIFF + ); + + return thumbnailBlob; +} + +function percentageSizeDiff( + newThumbnailSize: number, + oldThumbnailSize: number, +) { + return ((oldThumbnailSize - newThumbnailSize) * 100) / oldThumbnailSize; +} + +// method to calculate new size of image for limiting it to maximum width and height, maintaining aspect ratio +// returns {0,0} for invalid inputs +function calculateThumbnailDimension( + originalDimension: Dimension, + maxDimension: number, +): Dimension { + if (originalDimension.height === 0 || originalDimension.width === 0) { + return { width: 0, height: 0 }; + } + const widthScaleFactor = maxDimension / originalDimension.width; + const heightScaleFactor = maxDimension / originalDimension.height; + const scaleFactor = Math.min(widthScaleFactor, heightScaleFactor); + const thumbnailDimension = { + width: Math.round(originalDimension.width * scaleFactor), + height: Math.round(originalDimension.height * scaleFactor), + }; + if (thumbnailDimension.width === 0 || thumbnailDimension.height === 0) { + return { width: 0, height: 0 }; + } + return thumbnailDimension; +} diff --git a/web/apps/photos/src/services/upload/uiService.ts b/web/apps/photos/src/services/upload/uiService.ts new file mode 100644 index 000000000..13dd78001 --- /dev/null +++ b/web/apps/photos/src/services/upload/uiService.ts @@ -0,0 +1,218 @@ +import { CustomError } from "@ente/shared/error"; +import { Canceler } from "axios"; +import { + RANDOM_PERCENTAGE_PROGRESS_FOR_PUT, + UPLOAD_RESULT, + UPLOAD_STAGES, +} from "constants/upload"; +import { + FinishedUploads, + InProgressUpload, + InProgressUploads, + ProgressUpdater, + SegregatedFinishedUploads, +} from "types/upload/ui"; +import uploadCancelService from "./uploadCancelService"; + +const REQUEST_TIMEOUT_TIME = 30 * 1000; // 30 sec; +class UIService { + private progressUpdater: ProgressUpdater; + + // UPLOAD LEVEL STATES + private uploadStage: UPLOAD_STAGES = UPLOAD_STAGES.START; + private filenames: Map = new Map(); + private hasLivePhoto: boolean = false; + private uploadProgressView: boolean = false; + + // STAGE LEVEL STATES + private perFileProgress: number; + private filesUploadedCount: number; + private totalFilesCount: number; + private inProgressUploads: InProgressUploads = new Map(); + private finishedUploads: FinishedUploads = new Map(); + + init(progressUpdater: ProgressUpdater) { + this.progressUpdater = progressUpdater; + this.progressUpdater.setUploadStage(this.uploadStage); + this.progressUpdater.setUploadFilenames(this.filenames); + this.progressUpdater.setHasLivePhotos(this.hasLivePhoto); + this.progressUpdater.setUploadProgressView(this.uploadProgressView); + this.progressUpdater.setUploadCounter({ + finished: this.filesUploadedCount, + total: this.totalFilesCount, + }); + this.progressUpdater.setInProgressUploads( + convertInProgressUploadsToList(this.inProgressUploads), + ); + this.progressUpdater.setFinishedUploads( + segregatedFinishedUploadsToList(this.finishedUploads), + ); + } + + reset(count = 0) { + this.setTotalFileCount(count); + this.filesUploadedCount = 0; + this.inProgressUploads = new Map(); + this.finishedUploads = new Map(); + this.updateProgressBarUI(); + } + + setTotalFileCount(count: number) { + this.totalFilesCount = count; + if (count > 0) { + this.perFileProgress = 100 / this.totalFilesCount; + } else { + this.perFileProgress = 0; + } + } + + setFileProgress(key: number, progress: number) { + this.inProgressUploads.set(key, progress); + this.updateProgressBarUI(); + } + + setUploadStage(stage: UPLOAD_STAGES) { + this.uploadStage = stage; + this.progressUpdater.setUploadStage(stage); + } + + setFilenames(filenames: Map) { + this.filenames = filenames; + this.progressUpdater.setUploadFilenames(filenames); + } + + setHasLivePhoto(hasLivePhoto: boolean) { + this.hasLivePhoto = hasLivePhoto; + this.progressUpdater.setHasLivePhotos(hasLivePhoto); + } + + setUploadProgressView(uploadProgressView: boolean) { + this.uploadProgressView = uploadProgressView; + this.progressUpdater.setUploadProgressView(uploadProgressView); + } + + increaseFileUploaded() { + this.filesUploadedCount++; + this.updateProgressBarUI(); + } + + moveFileToResultList(key: number, uploadResult: UPLOAD_RESULT) { + this.finishedUploads.set(key, uploadResult); + this.inProgressUploads.delete(key); + this.updateProgressBarUI(); + } + + hasFilesInResultList() { + const finishedUploadsList = segregatedFinishedUploadsToList( + this.finishedUploads, + ); + for (const x of finishedUploadsList.values()) { + if (x.length > 0) { + return true; + } + } + return false; + } + + private updateProgressBarUI() { + const { + setPercentComplete, + setUploadCounter, + setInProgressUploads, + setFinishedUploads, + } = this.progressUpdater; + setUploadCounter({ + finished: this.filesUploadedCount, + total: this.totalFilesCount, + }); + let percentComplete = + this.perFileProgress * + (this.finishedUploads.size || this.filesUploadedCount); + if (this.inProgressUploads) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const [_, progress] of this.inProgressUploads) { + // filter negative indicator values during percentComplete calculation + if (progress < 0) { + continue; + } + percentComplete += (this.perFileProgress * progress) / 100; + } + } + + setPercentComplete(percentComplete); + setInProgressUploads( + convertInProgressUploadsToList(this.inProgressUploads), + ); + setFinishedUploads( + segregatedFinishedUploadsToList(this.finishedUploads), + ); + } + + trackUploadProgress( + fileLocalID: number, + percentPerPart = RANDOM_PERCENTAGE_PROGRESS_FOR_PUT(), + index = 0, + ) { + const cancel: { exec: Canceler } = { exec: () => {} }; + const cancelTimedOutRequest = () => + cancel.exec(CustomError.REQUEST_TIMEOUT); + + const cancelCancelledUploadRequest = () => + cancel.exec(CustomError.UPLOAD_CANCELLED); + + let timeout = null; + const resetTimeout = () => { + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(cancelTimedOutRequest, REQUEST_TIMEOUT_TIME); + }; + return { + cancel, + onUploadProgress: (event) => { + this.inProgressUploads.set( + fileLocalID, + Math.min( + Math.round( + percentPerPart * index + + (percentPerPart * event.loaded) / event.total, + ), + 98, + ), + ); + this.updateProgressBarUI(); + if (event.loaded === event.total) { + clearTimeout(timeout); + } else { + resetTimeout(); + } + if (uploadCancelService.isUploadCancelationRequested()) { + cancelCancelledUploadRequest(); + } + }, + }; + } +} + +export default new UIService(); + +function convertInProgressUploadsToList(inProgressUploads) { + return [...inProgressUploads.entries()].map( + ([localFileID, progress]) => + ({ + localFileID, + progress, + }) as InProgressUpload, + ); +} + +function segregatedFinishedUploadsToList(finishedUploads: FinishedUploads) { + const segregatedFinishedUploads = new Map() as SegregatedFinishedUploads; + for (const [localID, result] of finishedUploads) { + if (!segregatedFinishedUploads.has(result)) { + segregatedFinishedUploads.set(result, []); + } + segregatedFinishedUploads.get(result).push(localID); + } + return segregatedFinishedUploads; +} diff --git a/web/apps/photos/src/services/upload/uploadCancelService.ts b/web/apps/photos/src/services/upload/uploadCancelService.ts new file mode 100644 index 000000000..790245784 --- /dev/null +++ b/web/apps/photos/src/services/upload/uploadCancelService.ts @@ -0,0 +1,23 @@ +interface UploadCancelStatus { + value: boolean; +} + +class UploadCancelService { + private shouldUploadBeCancelled: UploadCancelStatus = { + value: false, + }; + + reset() { + this.shouldUploadBeCancelled.value = false; + } + + requestUploadCancelation() { + this.shouldUploadBeCancelled.value = true; + } + + isUploadCancelationRequested(): boolean { + return this.shouldUploadBeCancelled.value; + } +} + +export default new UploadCancelService(); diff --git a/web/apps/photos/src/services/upload/uploadHttpClient.ts b/web/apps/photos/src/services/upload/uploadHttpClient.ts new file mode 100644 index 000000000..3855562dd --- /dev/null +++ b/web/apps/photos/src/services/upload/uploadHttpClient.ts @@ -0,0 +1,238 @@ +import { CustomError, handleUploadError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint, getUploadEndpoint } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { EnteFile } from "types/file"; +import { MultipartUploadURLs, UploadFile, UploadURL } from "types/upload"; +import { retryHTTPCall } from "utils/upload/uploadRetrier"; + +const ENDPOINT = getEndpoint(); +const UPLOAD_ENDPOINT = getUploadEndpoint(); + +const MAX_URL_REQUESTS = 50; + +class UploadHttpClient { + private uploadURLFetchInProgress = null; + + async uploadFile(uploadFile: UploadFile): Promise { + try { + const token = getToken(); + if (!token) { + return; + } + const response = await retryHTTPCall( + () => + HTTPService.post(`${ENDPOINT}/files`, uploadFile, null, { + "X-Auth-Token": token, + }), + handleUploadError, + ); + return response.data; + } catch (e) { + logError(e, "upload Files Failed"); + throw e; + } + } + + async fetchUploadURLs(count: number, urlStore: UploadURL[]): Promise { + try { + if (!this.uploadURLFetchInProgress) { + try { + const token = getToken(); + if (!token) { + return; + } + this.uploadURLFetchInProgress = HTTPService.get( + `${ENDPOINT}/files/upload-urls`, + { + count: Math.min(MAX_URL_REQUESTS, count * 2), + }, + { "X-Auth-Token": token }, + ); + const response = await this.uploadURLFetchInProgress; + for (const url of response.data["urls"]) { + urlStore.push(url); + } + } finally { + this.uploadURLFetchInProgress = null; + } + } + return this.uploadURLFetchInProgress; + } catch (e) { + logError(e, "fetch upload-url failed "); + throw e; + } + } + + async fetchMultipartUploadURLs( + count: number, + ): Promise { + try { + const token = getToken(); + if (!token) { + return; + } + const response = await HTTPService.get( + `${ENDPOINT}/files/multipart-upload-urls`, + { + count, + }, + { "X-Auth-Token": token }, + ); + + return response.data["urls"]; + } catch (e) { + logError(e, "fetch multipart-upload-url failed"); + throw e; + } + } + + async putFile( + fileUploadURL: UploadURL, + file: Uint8Array, + progressTracker, + ): Promise { + try { + await retryHTTPCall( + () => + HTTPService.put( + fileUploadURL.url, + file, + null, + null, + progressTracker, + ), + handleUploadError, + ); + return fileUploadURL.objectKey; + } catch (e) { + if (e.message !== CustomError.UPLOAD_CANCELLED) { + logError(e, "putFile to dataStore failed "); + } + throw e; + } + } + + async putFileV2( + fileUploadURL: UploadURL, + file: Uint8Array, + progressTracker, + ): Promise { + try { + await retryHTTPCall(() => + HTTPService.put( + `${UPLOAD_ENDPOINT}/file-upload`, + file, + null, + { + "UPLOAD-URL": fileUploadURL.url, + }, + progressTracker, + ), + ); + return fileUploadURL.objectKey; + } catch (e) { + if (e.message !== CustomError.UPLOAD_CANCELLED) { + logError(e, "putFile to dataStore failed "); + } + throw e; + } + } + + async putFilePart( + partUploadURL: string, + filePart: Uint8Array, + progressTracker, + ) { + try { + const response = await retryHTTPCall(async () => { + const resp = await HTTPService.put( + partUploadURL, + filePart, + null, + null, + progressTracker, + ); + if (!resp?.headers?.etag) { + const err = Error(CustomError.ETAG_MISSING); + logError(err, "putFile in parts failed"); + throw err; + } + return resp; + }, handleUploadError); + return response.headers.etag as string; + } catch (e) { + if (e.message !== CustomError.UPLOAD_CANCELLED) { + logError(e, "put filePart failed"); + } + throw e; + } + } + + async putFilePartV2( + partUploadURL: string, + filePart: Uint8Array, + progressTracker, + ) { + try { + const response = await retryHTTPCall(async () => { + const resp = await HTTPService.put( + `${UPLOAD_ENDPOINT}/multipart-upload`, + filePart, + null, + { + "UPLOAD-URL": partUploadURL, + }, + progressTracker, + ); + if (!resp?.data?.etag) { + const err = Error(CustomError.ETAG_MISSING); + logError(err, "putFile in parts failed"); + throw err; + } + return resp; + }); + return response.data.etag as string; + } catch (e) { + if (e.message !== CustomError.UPLOAD_CANCELLED) { + logError(e, "put filePart failed"); + } + throw e; + } + } + + async completeMultipartUpload(completeURL: string, reqBody: any) { + try { + await retryHTTPCall(() => + HTTPService.post(completeURL, reqBody, null, { + "content-type": "text/xml", + }), + ); + } catch (e) { + logError(e, "put file in parts failed"); + throw e; + } + } + + async completeMultipartUploadV2(completeURL: string, reqBody: any) { + try { + await retryHTTPCall(() => + HTTPService.post( + `${UPLOAD_ENDPOINT}/multipart-complete`, + reqBody, + null, + { + "content-type": "text/xml", + "UPLOAD-URL": completeURL, + }, + ), + ); + } catch (e) { + logError(e, "put file in parts failed"); + throw e; + } + } +} + +export default new UploadHttpClient(); diff --git a/web/apps/photos/src/services/upload/uploadManager.ts b/web/apps/photos/src/services/upload/uploadManager.ts new file mode 100644 index 000000000..734ae7bcb --- /dev/null +++ b/web/apps/photos/src/services/upload/uploadManager.ts @@ -0,0 +1,446 @@ +import { CustomError } from "@ente/shared/error"; +import { Events, eventBus } from "@ente/shared/events"; +import { logError } from "@ente/shared/sentry"; +import { Collection } from "types/collection"; +import { EncryptedEnteFile, EnteFile } from "types/file"; +import { SetFiles } from "types/gallery"; +import { + FileWithCollection, + ParsedMetadataJSON, + ParsedMetadataJSONMap, + PublicUploadProps, +} from "types/upload"; +import { decryptFile, getUserOwnedFiles, sortFiles } from "utils/file"; +import { + areFileWithCollectionsSame, + segregateMetadataAndMediaFiles, +} from "utils/upload"; +import { getLocalFiles } from "../fileService"; +import { + getMetadataJSONMapKeyForJSON, + parseMetadataJSON, +} from "./metadataService"; +import UIService from "./uiService"; +import UploadService from "./uploadService"; +import uploader from "./uploader"; + +import { getDedicatedCryptoWorker } from "@ente/shared/crypto"; +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { addLogLine } from "@ente/shared/logging"; +import { getFileNameSize } from "@ente/shared/logging/web"; +import { ComlinkWorker } from "@ente/shared/worker/comlinkWorker"; +import { Remote } from "comlink"; +import { UPLOAD_RESULT, UPLOAD_STAGES } from "constants/upload"; +import isElectron from "is-electron"; +import ImportService from "services/importService"; +import { + getLocalPublicFiles, + getPublicCollectionUID, +} from "services/publicCollectionService"; +import { getDisableCFUploadProxyFlag } from "services/userService"; +import watchFolderService from "services/watchFolder/watchFolderService"; +import { ProgressUpdater } from "types/upload/ui"; +import uiService from "./uiService"; +import uploadCancelService from "./uploadCancelService"; + +const MAX_CONCURRENT_UPLOADS = 4; + +class UploadManager { + private cryptoWorkers = new Array< + ComlinkWorker + >(MAX_CONCURRENT_UPLOADS); + private parsedMetadataJSONMap: ParsedMetadataJSONMap; + private filesToBeUploaded: FileWithCollection[]; + private remainingFiles: FileWithCollection[] = []; + private failedFiles: FileWithCollection[]; + private existingFiles: EnteFile[]; + private setFiles: SetFiles; + private collections: Map; + private uploadInProgress: boolean; + private publicUploadProps: PublicUploadProps; + private uploaderName: string; + + public async init( + progressUpdater: ProgressUpdater, + setFiles: SetFiles, + publicCollectProps: PublicUploadProps, + isCFUploadProxyDisabled: boolean, + ) { + UIService.init(progressUpdater); + const remoteIsCFUploadProxyDisabled = + await getDisableCFUploadProxyFlag(); + if (remoteIsCFUploadProxyDisabled) { + isCFUploadProxyDisabled = remoteIsCFUploadProxyDisabled; + } + UploadService.init(publicCollectProps, isCFUploadProxyDisabled); + this.setFiles = setFiles; + this.publicUploadProps = publicCollectProps; + } + + public isUploadRunning() { + return this.uploadInProgress; + } + + private resetState() { + this.filesToBeUploaded = []; + this.remainingFiles = []; + this.failedFiles = []; + this.parsedMetadataJSONMap = new Map(); + + this.uploaderName = null; + } + + prepareForNewUpload() { + this.resetState(); + UIService.reset(); + uploadCancelService.reset(); + UIService.setUploadStage(UPLOAD_STAGES.START); + } + + showUploadProgressDialog() { + UIService.setUploadProgressView(true); + } + + async updateExistingFilesAndCollections(collections: Collection[]) { + if (this.publicUploadProps.accessedThroughSharedURL) { + this.existingFiles = await getLocalPublicFiles( + getPublicCollectionUID(this.publicUploadProps.token), + ); + } else { + this.existingFiles = getUserOwnedFiles(await getLocalFiles()); + } + this.collections = new Map( + collections.map((collection) => [collection.id, collection]), + ); + } + + public async queueFilesForUpload( + filesWithCollectionToUploadIn: FileWithCollection[], + collections: Collection[], + uploaderName?: string, + ) { + try { + if (this.uploadInProgress) { + throw Error("can't run multiple uploads at once"); + } + this.uploadInProgress = true; + await this.updateExistingFilesAndCollections(collections); + this.uploaderName = uploaderName; + addLogLine( + `received ${filesWithCollectionToUploadIn.length} files to upload`, + ); + uiService.setFilenames( + new Map( + filesWithCollectionToUploadIn.map((mediaFile) => [ + mediaFile.localID, + UploadService.getAssetName(mediaFile), + ]), + ), + ); + const { metadataJSONFiles, mediaFiles } = + segregateMetadataAndMediaFiles(filesWithCollectionToUploadIn); + addLogLine(`has ${metadataJSONFiles.length} metadata json files`); + addLogLine(`has ${mediaFiles.length} media files`); + if (metadataJSONFiles.length) { + UIService.setUploadStage( + UPLOAD_STAGES.READING_GOOGLE_METADATA_FILES, + ); + await this.parseMetadataJSONFiles(metadataJSONFiles); + + UploadService.setParsedMetadataJSONMap( + this.parsedMetadataJSONMap, + ); + } + if (mediaFiles.length) { + addLogLine(`clusterLivePhotoFiles started`); + const analysedMediaFiles = + await UploadService.clusterLivePhotoFiles(mediaFiles); + addLogLine(`clusterLivePhotoFiles ended`); + addLogLine( + `got live photos: ${ + mediaFiles.length !== analysedMediaFiles.length + }`, + ); + uiService.setFilenames( + new Map( + analysedMediaFiles.map((mediaFile) => [ + mediaFile.localID, + UploadService.getAssetName(mediaFile), + ]), + ), + ); + + UIService.setHasLivePhoto( + mediaFiles.length !== analysedMediaFiles.length, + ); + + await this.uploadMediaFiles(analysedMediaFiles); + } + } catch (e) { + if (e.message === CustomError.UPLOAD_CANCELLED) { + if (isElectron()) { + this.remainingFiles = []; + ImportService.cancelRemainingUploads(); + } + } else { + logError(e, "uploading failed with error"); + throw e; + } + } finally { + UIService.setUploadStage(UPLOAD_STAGES.FINISH); + for (let i = 0; i < MAX_CONCURRENT_UPLOADS; i++) { + this.cryptoWorkers[i]?.terminate(); + } + this.uploadInProgress = false; + } + try { + if (!UIService.hasFilesInResultList()) { + return true; + } else { + return false; + } + } catch (e) { + logError(e, " failed to return shouldCloseProgressBar"); + return false; + } + } + + private async parseMetadataJSONFiles(metadataFiles: FileWithCollection[]) { + try { + addLogLine(`parseMetadataJSONFiles function executed `); + + UIService.reset(metadataFiles.length); + + for (const { file, collectionID } of metadataFiles) { + try { + if (uploadCancelService.isUploadCancelationRequested()) { + throw Error(CustomError.UPLOAD_CANCELLED); + } + addLogLine( + `parsing metadata json file ${getFileNameSize(file)}`, + ); + + const parsedMetadataJSON = await parseMetadataJSON(file); + if (parsedMetadataJSON) { + this.parsedMetadataJSONMap.set( + getMetadataJSONMapKeyForJSON( + collectionID, + file.name, + ), + parsedMetadataJSON && { ...parsedMetadataJSON }, + ); + UIService.increaseFileUploaded(); + } + addLogLine( + `successfully parsed metadata json file ${getFileNameSize( + file, + )}`, + ); + } catch (e) { + if (e.message === CustomError.UPLOAD_CANCELLED) { + throw e; + } else { + // and don't break for subsequent files just log and move on + logError(e, "parsing failed for a file"); + addLogLine( + `failed to parse metadata json file ${getFileNameSize( + file, + )} error: ${e.message}`, + ); + } + } + } + } catch (e) { + if (e.message !== CustomError.UPLOAD_CANCELLED) { + logError(e, "error seeding MetadataMap"); + } + throw e; + } + } + + private async uploadMediaFiles(mediaFiles: FileWithCollection[]) { + addLogLine(`uploadMediaFiles called`); + this.filesToBeUploaded = [...this.filesToBeUploaded, ...mediaFiles]; + + if (isElectron()) { + this.remainingFiles = [...this.remainingFiles, ...mediaFiles]; + } + + UIService.reset(mediaFiles.length); + + await UploadService.setFileCount(mediaFiles.length); + + UIService.setUploadStage(UPLOAD_STAGES.UPLOADING); + + const uploadProcesses = []; + for ( + let i = 0; + i < MAX_CONCURRENT_UPLOADS && this.filesToBeUploaded.length > 0; + i++ + ) { + this.cryptoWorkers[i] = getDedicatedCryptoWorker(); + const worker = await this.cryptoWorkers[i].remote; + uploadProcesses.push(this.uploadNextFileInQueue(worker)); + } + await Promise.all(uploadProcesses); + } + + private async uploadNextFileInQueue(worker: Remote) { + while (this.filesToBeUploaded.length > 0) { + if (uploadCancelService.isUploadCancelationRequested()) { + throw Error(CustomError.UPLOAD_CANCELLED); + } + let fileWithCollection = this.filesToBeUploaded.pop(); + const { collectionID } = fileWithCollection; + const collection = this.collections.get(collectionID); + fileWithCollection = { ...fileWithCollection, collection }; + const { fileUploadResult, uploadedFile } = await uploader( + worker, + this.existingFiles, + fileWithCollection, + this.uploaderName, + ); + + const finalUploadResult = await this.postUploadTask( + fileUploadResult, + uploadedFile, + fileWithCollection, + ); + + UIService.moveFileToResultList( + fileWithCollection.localID, + finalUploadResult, + ); + UIService.increaseFileUploaded(); + UploadService.reducePendingUploadCount(); + } + } + + async postUploadTask( + fileUploadResult: UPLOAD_RESULT, + uploadedFile: EncryptedEnteFile | EnteFile | null, + fileWithCollection: FileWithCollection, + ) { + try { + let decryptedFile: EnteFile; + addLogLine( + `post upload action -> fileUploadResult: ${fileUploadResult} uploadedFile present ${!!uploadedFile}`, + ); + this.updateElectronRemainingFiles(fileWithCollection); + switch (fileUploadResult) { + case UPLOAD_RESULT.FAILED: + case UPLOAD_RESULT.BLOCKED: + this.failedFiles.push(fileWithCollection); + break; + case UPLOAD_RESULT.ALREADY_UPLOADED: + decryptedFile = uploadedFile as EnteFile; + break; + case UPLOAD_RESULT.ADDED_SYMLINK: + decryptedFile = uploadedFile as EnteFile; + fileUploadResult = UPLOAD_RESULT.UPLOADED; + break; + case UPLOAD_RESULT.UPLOADED: + case UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL: + decryptedFile = await decryptFile( + uploadedFile as EncryptedEnteFile, + fileWithCollection.collection.key, + ); + break; + case UPLOAD_RESULT.UNSUPPORTED: + case UPLOAD_RESULT.TOO_LARGE: + // no-op + break; + default: + throw Error("Invalid Upload Result" + fileUploadResult); + } + if ( + [ + UPLOAD_RESULT.ADDED_SYMLINK, + UPLOAD_RESULT.UPLOADED, + UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL, + ].includes(fileUploadResult) + ) { + try { + eventBus.emit(Events.FILE_UPLOADED, { + enteFile: decryptedFile, + localFile: + fileWithCollection.file ?? + fileWithCollection.livePhotoAssets.image, + }); + } catch (e) { + logError(e, "Error in fileUploaded handlers"); + } + this.updateExistingFiles(decryptedFile); + } + await this.watchFolderCallback( + fileUploadResult, + fileWithCollection, + uploadedFile as EncryptedEnteFile, + ); + return fileUploadResult; + } catch (e) { + logError(e, "failed to do post file upload action"); + return UPLOAD_RESULT.FAILED; + } + } + + private async watchFolderCallback( + fileUploadResult: UPLOAD_RESULT, + fileWithCollection: FileWithCollection, + uploadedFile: EncryptedEnteFile, + ) { + if (isElectron()) { + await watchFolderService.onFileUpload( + fileUploadResult, + fileWithCollection, + uploadedFile, + ); + } + } + + public cancelRunningUpload() { + addLogLine("user cancelled running upload"); + UIService.setUploadStage(UPLOAD_STAGES.CANCELLING); + uploadCancelService.requestUploadCancelation(); + } + + getFailedFilesWithCollections() { + return { + files: this.failedFiles, + collections: [...this.collections.values()], + }; + } + + getUploaderName() { + return this.uploaderName; + } + + private updateExistingFiles(decryptedFile: EnteFile) { + if (!decryptedFile) { + throw Error("decrypted file can't be undefined"); + } + this.existingFiles.push(decryptedFile); + this.updateUIFiles(decryptedFile); + } + + private updateUIFiles(decryptedFile: EnteFile) { + this.setFiles((files) => sortFiles([...files, decryptedFile])); + } + + private updateElectronRemainingFiles( + fileWithCollection: FileWithCollection, + ) { + if (isElectron()) { + this.remainingFiles = this.remainingFiles.filter( + (file) => !areFileWithCollectionsSame(file, fileWithCollection), + ); + ImportService.updatePendingUploads(this.remainingFiles); + } + } + + public shouldAllowNewUpload = () => { + return !this.uploadInProgress || watchFolderService.isUploadRunning(); + }; +} + +export default new UploadManager(); diff --git a/web/apps/photos/src/services/upload/uploadService.ts b/web/apps/photos/src/services/upload/uploadService.ts new file mode 100644 index 000000000..0228bc541 --- /dev/null +++ b/web/apps/photos/src/services/upload/uploadService.ts @@ -0,0 +1,313 @@ +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { B64EncryptionResult } from "@ente/shared/crypto/types"; +import { CustomError, handleUploadError } from "@ente/shared/error"; +import { logError } from "@ente/shared/sentry"; +import { Remote } from "comlink"; +import { Collection } from "types/collection"; +import { FilePublicMagicMetadataProps } from "types/file"; +import { + BackupedFile, + EncryptedFile, + ExtractMetadataResult, + FileTypeInfo, + FileWithCollection, + FileWithMetadata, + Logger, + ParsedMetadataJSON, + ParsedMetadataJSONMap, + ProcessedFile, + PublicUploadProps, + UploadAsset, + UploadFile, + UploadURL, + isDataStream, +} from "types/upload"; +import { getFileType } from "../typeDetectionService"; +import { + encryptFile, + extractFileMetadata, + getFileSize, + getFilename, + readFile, +} from "./fileService"; +import { + clusterLivePhotoFiles, + extractLivePhotoMetadata, + getLivePhotoFileType, + getLivePhotoName, + getLivePhotoSize, + readLivePhoto, +} from "./livePhotoService"; +import { constructPublicMagicMetadata } from "./magicMetadataService"; +import { uploadStreamUsingMultipart } from "./multiPartUploadService"; +import publicUploadHttpClient from "./publicUploadHttpClient"; +import UIService from "./uiService"; +import UploadHttpClient from "./uploadHttpClient"; + +class UploadService { + private uploadURLs: UploadURL[] = []; + private parsedMetadataJSONMap: ParsedMetadataJSONMap = new Map< + string, + ParsedMetadataJSON + >(); + + private uploaderName: string; + + private pendingUploadCount: number = 0; + + private publicUploadProps: PublicUploadProps = undefined; + + private isCFUploadProxyDisabled: boolean = false; + + init( + publicUploadProps: PublicUploadProps, + isCFUploadProxyDisabled: boolean, + ) { + this.publicUploadProps = publicUploadProps; + this.isCFUploadProxyDisabled = isCFUploadProxyDisabled; + } + + async setFileCount(fileCount: number) { + this.pendingUploadCount = fileCount; + await this.preFetchUploadURLs(); + } + + setParsedMetadataJSONMap(parsedMetadataJSONMap: ParsedMetadataJSONMap) { + this.parsedMetadataJSONMap = parsedMetadataJSONMap; + } + + setUploaderName(uploaderName: string) { + this.uploaderName = uploaderName; + } + + getUploaderName() { + return this.uploaderName; + } + + getIsCFUploadProxyDisabled() { + return this.isCFUploadProxyDisabled; + } + + reducePendingUploadCount() { + this.pendingUploadCount--; + } + + getAssetSize({ isLivePhoto, file, livePhotoAssets }: UploadAsset) { + return isLivePhoto + ? getLivePhotoSize(livePhotoAssets) + : getFileSize(file); + } + + getAssetName({ isLivePhoto, file, livePhotoAssets }: UploadAsset) { + return isLivePhoto + ? getLivePhotoName(livePhotoAssets) + : getFilename(file); + } + + getAssetFileType({ isLivePhoto, file, livePhotoAssets }: UploadAsset) { + return isLivePhoto + ? getLivePhotoFileType(livePhotoAssets) + : getFileType(file); + } + + async readAsset( + fileTypeInfo: FileTypeInfo, + { isLivePhoto, file, livePhotoAssets }: UploadAsset, + ) { + return isLivePhoto + ? await readLivePhoto(fileTypeInfo, livePhotoAssets) + : await readFile(fileTypeInfo, file); + } + + async extractAssetMetadata( + worker: Remote, + { isLivePhoto, file, livePhotoAssets }: UploadAsset, + collectionID: number, + fileTypeInfo: FileTypeInfo, + ): Promise { + return isLivePhoto + ? extractLivePhotoMetadata( + worker, + this.parsedMetadataJSONMap, + collectionID, + fileTypeInfo, + livePhotoAssets, + ) + : await extractFileMetadata( + worker, + this.parsedMetadataJSONMap, + collectionID, + fileTypeInfo, + file, + ); + } + + clusterLivePhotoFiles(mediaFiles: FileWithCollection[]) { + return clusterLivePhotoFiles(mediaFiles); + } + + constructPublicMagicMetadata( + publicMagicMetadataProps: FilePublicMagicMetadataProps, + ) { + return constructPublicMagicMetadata(publicMagicMetadataProps); + } + + async encryptAsset( + worker: Remote, + file: FileWithMetadata, + encryptionKey: string, + ): Promise { + return encryptFile(worker, file, encryptionKey); + } + + async uploadToBucket( + logger: Logger, + file: ProcessedFile, + ): Promise { + try { + let fileObjectKey: string = null; + logger("uploading file to bucket"); + if (isDataStream(file.file.encryptedData)) { + logger("uploading using multipart"); + fileObjectKey = await uploadStreamUsingMultipart( + logger, + file.localID, + file.file.encryptedData, + ); + logger("uploading using multipart done"); + } else { + logger("uploading using single part"); + const progressTracker = UIService.trackUploadProgress( + file.localID, + ); + const fileUploadURL = await this.getUploadURL(); + if (!this.isCFUploadProxyDisabled) { + logger("uploading using cf proxy"); + fileObjectKey = await UploadHttpClient.putFileV2( + fileUploadURL, + file.file.encryptedData as Uint8Array, + progressTracker, + ); + } else { + logger("uploading directly to s3"); + fileObjectKey = await UploadHttpClient.putFile( + fileUploadURL, + file.file.encryptedData as Uint8Array, + progressTracker, + ); + } + logger("uploading using single part done"); + } + logger("uploading thumbnail to bucket"); + const thumbnailUploadURL = await this.getUploadURL(); + let thumbnailObjectKey: string = null; + if (!this.isCFUploadProxyDisabled) { + thumbnailObjectKey = await UploadHttpClient.putFileV2( + thumbnailUploadURL, + file.thumbnail.encryptedData, + null, + ); + } else { + thumbnailObjectKey = await UploadHttpClient.putFile( + thumbnailUploadURL, + file.thumbnail.encryptedData, + null, + ); + } + logger("uploading thumbnail to bucket done"); + + const backupedFile: BackupedFile = { + file: { + decryptionHeader: file.file.decryptionHeader, + objectKey: fileObjectKey, + }, + thumbnail: { + decryptionHeader: file.thumbnail.decryptionHeader, + objectKey: thumbnailObjectKey, + }, + metadata: file.metadata, + pubMagicMetadata: file.pubMagicMetadata, + }; + return backupedFile; + } catch (e) { + if (e.message !== CustomError.UPLOAD_CANCELLED) { + logError(e, "error uploading to bucket"); + } + throw e; + } + } + + getUploadFile( + collection: Collection, + backupedFile: BackupedFile, + fileKey: B64EncryptionResult, + ): UploadFile { + const uploadFile: UploadFile = { + collectionID: collection.id, + encryptedKey: fileKey.encryptedData, + keyDecryptionNonce: fileKey.nonce, + ...backupedFile, + }; + uploadFile; + return uploadFile; + } + + private async getUploadURL() { + if (this.uploadURLs.length === 0 && this.pendingUploadCount) { + await this.fetchUploadURLs(); + } + return this.uploadURLs.pop(); + } + + public async preFetchUploadURLs() { + try { + await this.fetchUploadURLs(); + // checking for any subscription related errors + } catch (e) { + logError(e, "prefetch uploadURL failed"); + handleUploadError(e); + } + } + + async uploadFile(uploadFile: UploadFile) { + if (this.publicUploadProps.accessedThroughSharedURL) { + return publicUploadHttpClient.uploadFile( + uploadFile, + this.publicUploadProps.token, + this.publicUploadProps.passwordToken, + ); + } else { + return UploadHttpClient.uploadFile(uploadFile); + } + } + + private async fetchUploadURLs() { + if (this.publicUploadProps.accessedThroughSharedURL) { + await publicUploadHttpClient.fetchUploadURLs( + this.pendingUploadCount, + this.uploadURLs, + this.publicUploadProps.token, + this.publicUploadProps.passwordToken, + ); + } else { + await UploadHttpClient.fetchUploadURLs( + this.pendingUploadCount, + this.uploadURLs, + ); + } + } + + async fetchMultipartUploadURLs(count: number) { + if (this.publicUploadProps.accessedThroughSharedURL) { + return await publicUploadHttpClient.fetchMultipartUploadURLs( + count, + this.publicUploadProps.token, + this.publicUploadProps.passwordToken, + ); + } else { + return await UploadHttpClient.fetchMultipartUploadURLs(count); + } + } +} + +export default new UploadService(); diff --git a/web/apps/photos/src/services/upload/uploader.ts b/web/apps/photos/src/services/upload/uploader.ts new file mode 100644 index 000000000..2e073e242 --- /dev/null +++ b/web/apps/photos/src/services/upload/uploader.ts @@ -0,0 +1,202 @@ +import { DedicatedCryptoWorker } from "@ente/shared/crypto/internal/crypto.worker"; +import { CustomError, handleUploadError } from "@ente/shared/error"; +import { addLocalLog, addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { Remote } from "comlink"; +import { MAX_FILE_SIZE_SUPPORTED, UPLOAD_RESULT } from "constants/upload"; +import { addToCollection } from "services/collectionService"; +import { EnteFile } from "types/file"; +import { + BackupedFile, + FileTypeInfo, + FileWithCollection, + FileWithMetadata, + Logger, + UploadFile, +} from "types/upload"; +import { sleep } from "utils/common"; +import { findMatchingExistingFiles } from "utils/upload"; +import UIService from "./uiService"; +import uploadCancelService from "./uploadCancelService"; +import { + default as UploadService, + default as uploadService, +} from "./uploadService"; + +interface UploadResponse { + fileUploadResult: UPLOAD_RESULT; + uploadedFile?: EnteFile; +} + +export default async function uploader( + worker: Remote, + existingFiles: EnteFile[], + fileWithCollection: FileWithCollection, + uploaderName: string, +): Promise { + const { collection, localID, ...uploadAsset } = fileWithCollection; + const fileNameSize = `${UploadService.getAssetName( + fileWithCollection, + )}_${convertBytesToHumanReadable(UploadService.getAssetSize(uploadAsset))}`; + + addLogLine(`uploader called for ${fileNameSize}`); + UIService.setFileProgress(localID, 0); + await sleep(0); + let fileTypeInfo: FileTypeInfo; + let fileSize: number; + try { + fileSize = UploadService.getAssetSize(uploadAsset); + if (fileSize >= MAX_FILE_SIZE_SUPPORTED) { + return { fileUploadResult: UPLOAD_RESULT.TOO_LARGE }; + } + addLogLine(`getting filetype for ${fileNameSize}`); + fileTypeInfo = await UploadService.getAssetFileType(uploadAsset); + addLogLine( + `got filetype for ${fileNameSize} - ${JSON.stringify(fileTypeInfo)}`, + ); + + addLogLine(`extracting metadata ${fileNameSize}`); + const { metadata, publicMagicMetadata } = + await UploadService.extractAssetMetadata( + worker, + uploadAsset, + collection.id, + fileTypeInfo, + ); + + const matchingExistingFiles = findMatchingExistingFiles( + existingFiles, + metadata, + ); + addLocalLog( + () => + `matchedFileList: ${matchingExistingFiles + .map((f) => `${f.id}-${f.metadata.title}`) + .join(",")}`, + ); + if (matchingExistingFiles?.length) { + const matchingExistingFilesCollectionIDs = + matchingExistingFiles.map((e) => e.collectionID); + addLocalLog( + () => + `matched file collectionIDs:${matchingExistingFilesCollectionIDs} + and collectionID:${collection.id}`, + ); + if (matchingExistingFilesCollectionIDs.includes(collection.id)) { + addLogLine( + `file already present in the collection , skipped upload for ${fileNameSize}`, + ); + const sameCollectionMatchingExistingFile = + matchingExistingFiles.find( + (f) => f.collectionID === collection.id, + ); + return { + fileUploadResult: UPLOAD_RESULT.ALREADY_UPLOADED, + uploadedFile: sameCollectionMatchingExistingFile, + }; + } else { + addLogLine( + `same file in ${matchingExistingFilesCollectionIDs.length} collection found for ${fileNameSize} ,adding symlink`, + ); + // any of the matching file can used to add a symlink + const resultFile = Object.assign({}, matchingExistingFiles[0]); + resultFile.collectionID = collection.id; + await addToCollection(collection, [resultFile]); + return { + fileUploadResult: UPLOAD_RESULT.ADDED_SYMLINK, + uploadedFile: resultFile, + }; + } + } + if (uploadCancelService.isUploadCancelationRequested()) { + throw Error(CustomError.UPLOAD_CANCELLED); + } + addLogLine(`reading asset ${fileNameSize}`); + + const file = await UploadService.readAsset(fileTypeInfo, uploadAsset); + + if (file.hasStaticThumbnail) { + metadata.hasStaticThumbnail = true; + } + + const pubMagicMetadata = + await uploadService.constructPublicMagicMetadata({ + ...publicMagicMetadata, + uploaderName, + }); + + const fileWithMetadata: FileWithMetadata = { + localID, + filedata: file.filedata, + thumbnail: file.thumbnail, + metadata, + pubMagicMetadata, + }; + + if (uploadCancelService.isUploadCancelationRequested()) { + throw Error(CustomError.UPLOAD_CANCELLED); + } + addLogLine(`encryptAsset ${fileNameSize}`); + const encryptedFile = await UploadService.encryptAsset( + worker, + fileWithMetadata, + collection.key, + ); + + if (uploadCancelService.isUploadCancelationRequested()) { + throw Error(CustomError.UPLOAD_CANCELLED); + } + addLogLine(`uploadToBucket ${fileNameSize}`); + const logger: Logger = (message: string) => { + addLogLine(message, `fileNameSize: ${fileNameSize}`); + }; + const backupedFile: BackupedFile = await UploadService.uploadToBucket( + logger, + encryptedFile.file, + ); + + const uploadFile: UploadFile = UploadService.getUploadFile( + collection, + backupedFile, + encryptedFile.fileKey, + ); + addLogLine(`uploading file to server ${fileNameSize}`); + + const uploadedFile = await UploadService.uploadFile(uploadFile); + + addLogLine(`${fileNameSize} successfully uploaded`); + + return { + fileUploadResult: metadata.hasStaticThumbnail + ? UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL + : UPLOAD_RESULT.UPLOADED, + uploadedFile: uploadedFile, + }; + } catch (e) { + addLogLine(`upload failed for ${fileNameSize} ,error: ${e.message}`); + if ( + e.message !== CustomError.UPLOAD_CANCELLED && + e.message !== CustomError.UNSUPPORTED_FILE_FORMAT + ) { + logError(e, "file upload failed", { + fileFormat: fileTypeInfo?.exactType, + fileSize: convertBytesToHumanReadable(fileSize), + }); + } + const error = handleUploadError(e); + switch (error.message) { + case CustomError.ETAG_MISSING: + return { fileUploadResult: UPLOAD_RESULT.BLOCKED }; + case CustomError.UNSUPPORTED_FILE_FORMAT: + return { fileUploadResult: UPLOAD_RESULT.UNSUPPORTED }; + case CustomError.FILE_TOO_LARGE: + return { + fileUploadResult: + UPLOAD_RESULT.LARGER_THAN_AVAILABLE_STORAGE, + }; + default: + return { fileUploadResult: UPLOAD_RESULT.FAILED }; + } + } +} diff --git a/web/apps/photos/src/services/upload/videoMetadataService.ts b/web/apps/photos/src/services/upload/videoMetadataService.ts new file mode 100644 index 000000000..f23ab21fd --- /dev/null +++ b/web/apps/photos/src/services/upload/videoMetadataService.ts @@ -0,0 +1,26 @@ +import { addLogLine } from "@ente/shared/logging"; +import { getFileNameSize } from "@ente/shared/logging/web"; +import { logError } from "@ente/shared/sentry"; +import { NULL_EXTRACTED_METADATA } from "constants/upload"; +import * as ffmpegService from "services/ffmpeg/ffmpegService"; +import { ElectronFile } from "types/upload"; + +export async function getVideoMetadata(file: File | ElectronFile) { + let videoMetadata = NULL_EXTRACTED_METADATA; + try { + addLogLine(`getVideoMetadata called for ${getFileNameSize(file)}`); + videoMetadata = await ffmpegService.extractVideoMetadata(file); + addLogLine( + `videoMetadata successfully extracted ${getFileNameSize(file)}`, + ); + } catch (e) { + logError(e, "failed to get video metadata"); + addLogLine( + `videoMetadata extracted failed ${getFileNameSize(file)} ,${ + e.message + } `, + ); + } + + return videoMetadata; +} diff --git a/web/apps/photos/src/services/userService.ts b/web/apps/photos/src/services/userService.ts new file mode 100644 index 000000000..4a2c6a9d4 --- /dev/null +++ b/web/apps/photos/src/services/userService.ts @@ -0,0 +1,353 @@ +import { putAttributes } from "@ente/accounts/api/user"; +import { logoutUser } from "@ente/accounts/services/user"; +import { getRecoveryKey } from "@ente/shared/crypto/helpers"; +import { ApiError } from "@ente/shared/error"; +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint, getFamilyPortalURL } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import localForage from "@ente/shared/storage/localForage"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { + getToken, + setLocalMapEnabled, +} from "@ente/shared/storage/localStorage/helpers"; +import { AxiosResponse, HttpStatusCode } from "axios"; +import { + DeleteChallengeResponse, + GetFeatureFlagResponse, + GetRemoteStoreValueResponse, + UserDetails, +} from "types/user"; +import { getLocalFamilyData, isPartOfFamily } from "utils/user/family"; + +const ENDPOINT = getEndpoint(); + +const HAS_SET_KEYS = "hasSetKeys"; + +export const getPublicKey = async (email: string) => { + const token = getToken(); + + const resp = await HTTPService.get( + `${ENDPOINT}/users/public-key`, + { email }, + { + "X-Auth-Token": token, + }, + ); + return resp.data.publicKey; +}; + +export const getPaymentToken = async () => { + const token = getToken(); + + const resp = await HTTPService.get( + `${ENDPOINT}/users/payment-token`, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data["paymentToken"]; +}; + +export const getFamiliesToken = async () => { + try { + const token = getToken(); + + const resp = await HTTPService.get( + `${ENDPOINT}/users/families-token`, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data["familiesToken"]; + } catch (e) { + logError(e, "failed to get family token"); + throw e; + } +}; + +export const getAccountsToken = async () => { + try { + const token = getToken(); + + const resp = await HTTPService.get( + `${ENDPOINT}/users/accounts-token`, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data["accountsToken"]; + } catch (e) { + logError(e, "failed to get accounts token"); + throw e; + } +}; + +export const getRoadmapRedirectURL = async () => { + try { + const token = getToken(); + + const resp = await HTTPService.get( + `${ENDPOINT}/users/roadmap/v2`, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data["url"]; + } catch (e) { + logError(e, "failed to get roadmap url"); + throw e; + } +}; + +export const clearFiles = async () => { + await localForage.clear(); +}; + +export const isTokenValid = async (token: string) => { + try { + const resp = await HTTPService.get( + `${ENDPOINT}/users/session-validity/v2`, + null, + { + "X-Auth-Token": token, + }, + ); + try { + if (resp.data[HAS_SET_KEYS] === undefined) { + throw Error("resp.data.hasSetKey undefined"); + } + if (!resp.data["hasSetKeys"]) { + try { + await putAttributes( + token, + getData(LS_KEYS.ORIGINAL_KEY_ATTRIBUTES), + ); + } catch (e) { + logError(e, "put attribute failed"); + } + } + } catch (e) { + logError(e, "hasSetKeys not set in session validity response"); + } + return true; + } catch (e) { + logError(e, "session-validity api call failed"); + if ( + e instanceof ApiError && + e.httpStatusCode === HttpStatusCode.Unauthorized + ) { + return false; + } else { + return true; + } + } +}; + +export const getTwoFactorStatus = async () => { + const resp = await HTTPService.get( + `${ENDPOINT}/users/two-factor/status`, + null, + { + "X-Auth-Token": getToken(), + }, + ); + return resp.data["status"]; +}; + +export const getUserDetailsV2 = async (): Promise => { + try { + const token = getToken(); + + const resp = await HTTPService.get( + `${ENDPOINT}/users/details/v2`, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data; + } catch (e) { + logError(e, "failed to get user details v2"); + throw e; + } +}; + +export const getFamilyPortalRedirectURL = async () => { + try { + const jwtToken = await getFamiliesToken(); + const isFamilyCreated = isPartOfFamily(getLocalFamilyData()); + return `${getFamilyPortalURL()}?token=${jwtToken}&isFamilyCreated=${isFamilyCreated}&redirectURL=${ + window.location.origin + }/gallery`; + } catch (e) { + logError(e, "unable to generate to family portal URL"); + throw e; + } +}; + +export const getAccountDeleteChallenge = async () => { + try { + const token = getToken(); + + const resp = await HTTPService.get( + `${ENDPOINT}/users/delete-challenge`, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data as DeleteChallengeResponse; + } catch (e) { + logError(e, "failed to get account delete challenge"); + throw e; + } +}; + +export const deleteAccount = async ( + challenge: string, + reason: string, + feedback: string, +) => { + try { + const token = getToken(); + if (!token) { + return; + } + + await HTTPService.delete( + `${ENDPOINT}/users/delete`, + { challenge, reason, feedback }, + null, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "deleteAccount api call failed"); + throw e; + } +}; + +// Ensure that the keys in local storage are not malformed by verifying that the +// recoveryKey can be decrypted with the masterKey. +// Note: This is not bullet-proof. +export const validateKey = async () => { + try { + await getRecoveryKey(); + return true; + } catch (e) { + await logoutUser(); + return false; + } +}; + +export const getFaceSearchEnabledStatus = async () => { + try { + const token = getToken(); + const resp: AxiosResponse = + await HTTPService.get( + `${ENDPOINT}/remote-store`, + { + key: "faceSearchEnabled", + defaultValue: false, + }, + { + "X-Auth-Token": token, + }, + ); + return resp.data.value === "true"; + } catch (e) { + logError(e, "failed to get face search enabled status"); + throw e; + } +}; + +export const updateFaceSearchEnabledStatus = async (newStatus: boolean) => { + try { + const token = getToken(); + await HTTPService.post( + `${ENDPOINT}/remote-store/update`, + { + key: "faceSearchEnabled", + value: newStatus.toString(), + }, + null, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "failed to update face search enabled status"); + throw e; + } +}; + +export const syncMapEnabled = async () => { + try { + const status = await getMapEnabledStatus(); + setLocalMapEnabled(status); + } catch (e) { + logError(e, "failed to sync map enabled status"); + throw e; + } +}; + +export const getMapEnabledStatus = async () => { + try { + const token = getToken(); + const resp: AxiosResponse = + await HTTPService.get( + `${ENDPOINT}/remote-store`, + { + key: "mapEnabled", + defaultValue: false, + }, + { + "X-Auth-Token": token, + }, + ); + return resp.data.value === "true"; + } catch (e) { + logError(e, "failed to get map enabled status"); + throw e; + } +}; + +export const updateMapEnabledStatus = async (newStatus: boolean) => { + try { + const token = getToken(); + await HTTPService.post( + `${ENDPOINT}/remote-store/update`, + { + key: "mapEnabled", + value: newStatus.toString(), + }, + null, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "failed to update map enabled status"); + throw e; + } +}; + +export async function getDisableCFUploadProxyFlag(): Promise { + if (process.env.NEXT_PUBLIC_ENTE_DIRECT_UPLOAD === "true") return true; + + try { + const featureFlags = ( + await fetch("https://static.ente.io/feature_flags.json") + ).json() as GetFeatureFlagResponse; + return featureFlags.disableCFUploadProxy; + } catch (e) { + logError(e, "failed to get feature flags"); + return false; + } +} diff --git a/web/apps/photos/src/services/wasm/ffmpeg.ts b/web/apps/photos/src/services/wasm/ffmpeg.ts new file mode 100644 index 000000000..93413e581 --- /dev/null +++ b/web/apps/photos/src/services/wasm/ffmpeg.ts @@ -0,0 +1,116 @@ +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { createFFmpeg, FFmpeg } from "ffmpeg-wasm"; +import QueueProcessor from "services/queueProcessor"; +import { getUint8ArrayView } from "services/readerService"; +import { promiseWithTimeout } from "utils/common"; +import { generateTempName } from "utils/temp"; + +const INPUT_PATH_PLACEHOLDER = "INPUT"; +const FFMPEG_PLACEHOLDER = "FFMPEG"; +const OUTPUT_PATH_PLACEHOLDER = "OUTPUT"; + +const FFMPEG_EXECUTION_WAIT_TIME = 30 * 1000; + +export class WasmFFmpeg { + private ffmpeg: FFmpeg; + private ready: Promise = null; + private ffmpegTaskQueue = new QueueProcessor(1); + + constructor() { + this.ffmpeg = createFFmpeg({ + corePath: "/js/ffmpeg/ffmpeg-core.js", + mt: false, + }); + + this.ready = this.init(); + } + + private async init() { + if (!this.ffmpeg.isLoaded()) { + await this.ffmpeg.load(); + } + } + + async run( + cmd: string[], + inputFile: File, + outputFileName: string, + dontTimeout = false, + ) { + const response = this.ffmpegTaskQueue.queueUpRequest(() => { + if (dontTimeout) { + return this.execute(cmd, inputFile, outputFileName); + } else { + return promiseWithTimeout( + this.execute(cmd, inputFile, outputFileName), + FFMPEG_EXECUTION_WAIT_TIME, + ); + } + }); + try { + return await response.promise; + } catch (e) { + logError(e, "ffmpeg run failed"); + throw e; + } + } + + private async execute( + cmd: string[], + inputFile: File, + outputFileName: string, + ) { + let tempInputFilePath: string; + let tempOutputFilePath: string; + try { + await this.ready; + const extension = getFileExtension(inputFile.name); + const tempNameSuffix = extension ? `input.${extension}` : "input"; + tempInputFilePath = `${generateTempName(10, tempNameSuffix)}`; + this.ffmpeg.FS( + "writeFile", + tempInputFilePath, + await getUint8ArrayView(inputFile), + ); + tempOutputFilePath = `${generateTempName(10, outputFileName)}`; + + cmd = cmd.map((cmdPart) => { + if (cmdPart === FFMPEG_PLACEHOLDER) { + return ""; + } else if (cmdPart === INPUT_PATH_PLACEHOLDER) { + return tempInputFilePath; + } else if (cmdPart === OUTPUT_PATH_PLACEHOLDER) { + return tempOutputFilePath; + } else { + return cmdPart; + } + }); + addLogLine(`${cmd}`); + await this.ffmpeg.run(...cmd); + return new File( + [this.ffmpeg.FS("readFile", tempOutputFilePath)], + outputFileName, + ); + } finally { + try { + this.ffmpeg.FS("unlink", tempInputFilePath); + } catch (e) { + logError(e, "unlink input file failed"); + } + try { + this.ffmpeg.FS("unlink", tempOutputFilePath); + } catch (e) { + logError(e, "unlink output file failed"); + } + } + } +} + +function getFileExtension(filename: string) { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return null; + else { + return filename.slice(lastDotPosition + 1); + } +} diff --git a/web/apps/photos/src/services/wasmHeicConverter/wasmHEICConverterClient.ts b/web/apps/photos/src/services/wasmHeicConverter/wasmHEICConverterClient.ts new file mode 100644 index 000000000..03b390fb9 --- /dev/null +++ b/web/apps/photos/src/services/wasmHeicConverter/wasmHEICConverterClient.ts @@ -0,0 +1,13 @@ +import * as HeicConvert from "heic-convert"; +import { getUint8ArrayView } from "services/readerService"; + +export async function convertHEIC( + fileBlob: Blob, + format: string, +): Promise { + const filedata = await getUint8ArrayView(fileBlob); + const result = await HeicConvert({ buffer: filedata, format }); + const convertedFileData = new Uint8Array(result); + const convertedFileBlob = new Blob([convertedFileData]); + return convertedFileBlob; +} diff --git a/web/apps/photos/src/services/wasmHeicConverter/wasmHEICConverterService.ts b/web/apps/photos/src/services/wasmHeicConverter/wasmHEICConverterService.ts new file mode 100644 index 000000000..4ace3064a --- /dev/null +++ b/web/apps/photos/src/services/wasmHeicConverter/wasmHEICConverterService.ts @@ -0,0 +1,114 @@ +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import { ComlinkWorker } from "@ente/shared/worker/comlinkWorker"; +import QueueProcessor from "services/queueProcessor"; +import { getDedicatedConvertWorker } from "utils/comlink/ComlinkConvertWorker"; +import { retryAsyncFunction } from "utils/network"; +import { DedicatedConvertWorker } from "worker/convert.worker"; + +const WORKER_POOL_SIZE = 2; +const MAX_CONVERSION_IN_PARALLEL = 1; +const WAIT_TIME_BEFORE_NEXT_ATTEMPT_IN_MICROSECONDS = [100, 100]; +const WAIT_TIME_IN_MICROSECONDS = 30 * 1000; +const BREATH_TIME_IN_MICROSECONDS = 1000; +const CONVERT_FORMAT = "JPEG"; + +class HEICConverter { + private convertProcessor = new QueueProcessor( + MAX_CONVERSION_IN_PARALLEL, + ); + private workerPool: ComlinkWorker[] = []; + private ready: Promise; + + constructor() { + this.ready = this.init(); + } + private async init() { + this.workerPool = []; + for (let i = 0; i < WORKER_POOL_SIZE; i++) { + this.workerPool.push(getDedicatedConvertWorker()); + } + } + async convert(fileBlob: Blob): Promise { + await this.ready; + const response = this.convertProcessor.queueUpRequest(() => + retryAsyncFunction(async () => { + const convertWorker = this.workerPool.shift(); + const worker = await convertWorker.remote; + try { + const convertedHEIC = await new Promise( + (resolve, reject) => { + const main = async () => { + try { + const timeout = setTimeout(() => { + reject(Error("wait time exceeded")); + }, WAIT_TIME_IN_MICROSECONDS); + const startTime = Date.now(); + const convertedHEIC = + await worker.convertHEIC( + fileBlob, + CONVERT_FORMAT, + ); + addLogLine( + `originalFileSize:${convertBytesToHumanReadable( + fileBlob?.size, + )},convertedFileSize:${convertBytesToHumanReadable( + convertedHEIC?.size, + )}, heic conversion time: ${ + Date.now() - startTime + }ms `, + ); + clearTimeout(timeout); + resolve(convertedHEIC); + } catch (e) { + reject(e); + } + }; + main(); + }, + ); + if (!convertedHEIC || convertedHEIC?.size === 0) { + logError( + Error(`converted heic fileSize is Zero`), + "converted heic fileSize is Zero", + { + originalFileSize: convertBytesToHumanReadable( + fileBlob?.size ?? 0, + ), + convertedFileSize: convertBytesToHumanReadable( + convertedHEIC?.size ?? 0, + ), + }, + ); + } + await new Promise((resolve) => { + setTimeout( + () => resolve(null), + BREATH_TIME_IN_MICROSECONDS, + ); + }); + this.workerPool.push(convertWorker); + return convertedHEIC; + } catch (e) { + logError(e, "heic conversion failed"); + convertWorker.terminate(); + this.workerPool.push(getDedicatedConvertWorker()); + throw e; + } + }, WAIT_TIME_BEFORE_NEXT_ATTEMPT_IN_MICROSECONDS), + ); + try { + return await response.promise; + } catch (e) { + if (e.message === CustomError.REQUEST_CANCELLED) { + // ignore + return null; + } + throw e; + } + } +} + +export default new HEICConverter(); diff --git a/web/apps/photos/src/services/watchFolder/utils.ts b/web/apps/photos/src/services/watchFolder/utils.ts new file mode 100644 index 000000000..bd6ceb853 --- /dev/null +++ b/web/apps/photos/src/services/watchFolder/utils.ts @@ -0,0 +1,5 @@ +export const getParentFolderName = (filePath: string) => { + const folderPath = filePath.substring(0, filePath.lastIndexOf("/")); + const folderName = folderPath.substring(folderPath.lastIndexOf("/") + 1); + return folderName; +}; diff --git a/web/apps/photos/src/services/watchFolder/watchFolderEventHandlers.ts b/web/apps/photos/src/services/watchFolder/watchFolderEventHandlers.ts new file mode 100644 index 000000000..d1d8faa72 --- /dev/null +++ b/web/apps/photos/src/services/watchFolder/watchFolderEventHandlers.ts @@ -0,0 +1,74 @@ +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { ElectronFile } from "types/upload"; +import { EventQueueItem } from "types/watchFolder"; +import watchFolderService from "./watchFolderService"; + +export async function diskFileAddedCallback(file: ElectronFile) { + try { + const collectionNameAndFolderPath = + await watchFolderService.getCollectionNameAndFolderPath(file.path); + + if (!collectionNameAndFolderPath) { + return; + } + + const { collectionName, folderPath } = collectionNameAndFolderPath; + + const event: EventQueueItem = { + type: "upload", + collectionName, + folderPath, + files: [file], + }; + watchFolderService.pushEvent(event); + addLogLine( + `added (upload) to event queue, collectionName:${event.collectionName} folderPath:${event.folderPath}, filesCount: ${event.files.length}`, + ); + } catch (e) { + logError(e, "error while calling diskFileAddedCallback"); + } +} + +export async function diskFileRemovedCallback(filePath: string) { + try { + const collectionNameAndFolderPath = + await watchFolderService.getCollectionNameAndFolderPath(filePath); + + if (!collectionNameAndFolderPath) { + return; + } + + const { collectionName, folderPath } = collectionNameAndFolderPath; + + const event: EventQueueItem = { + type: "trash", + collectionName, + folderPath, + paths: [filePath], + }; + watchFolderService.pushEvent(event); + addLogLine( + `added (trash) to event queue collectionName:${event.collectionName} folderPath:${event.folderPath} , pathsCount: ${event.paths.length}`, + ); + } catch (e) { + logError(e, "error while calling diskFileRemovedCallback"); + } +} + +export async function diskFolderRemovedCallback(folderPath: string) { + try { + const mappings = watchFolderService.getWatchMappings(); + const mapping = mappings.find( + (mapping) => mapping.folderPath === folderPath, + ); + if (!mapping) { + addLogLine(`folder not found in mappings, ${folderPath}`); + throw Error(`Watch mapping not found`); + } + watchFolderService.pushTrashedDir(folderPath); + addLogLine(`added trashedDir, ${folderPath}`); + } catch (e) { + logError(e, "error while calling diskFolderRemovedCallback"); + } +} diff --git a/web/apps/photos/src/services/watchFolder/watchFolderService.ts b/web/apps/photos/src/services/watchFolder/watchFolderService.ts new file mode 100644 index 000000000..ea298c7f5 --- /dev/null +++ b/web/apps/photos/src/services/watchFolder/watchFolderService.ts @@ -0,0 +1,646 @@ +import ElectronAPIs from "@ente/shared/electron"; +import { addLocalLog, addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { UPLOAD_RESULT, UPLOAD_STRATEGY } from "constants/upload"; +import debounce from "debounce"; +import uploadManager from "services/upload/uploadManager"; +import { Collection } from "types/collection"; +import { EncryptedEnteFile } from "types/file"; +import { ElectronFile, FileWithCollection } from "types/upload"; +import { + EventQueueItem, + WatchMapping, + WatchMappingSyncedFile, +} from "types/watchFolder"; +import { groupFilesBasedOnCollectionID } from "utils/file"; +import { getValidFilesToUpload } from "utils/watch"; +import { removeFromCollection } from "../collectionService"; +import { getLocalFiles } from "../fileService"; +import { getParentFolderName } from "./utils"; +import { + diskFileAddedCallback, + diskFileRemovedCallback, + diskFolderRemovedCallback, +} from "./watchFolderEventHandlers"; + +class watchFolderService { + private eventQueue: EventQueueItem[] = []; + private currentEvent: EventQueueItem; + private currentlySyncedMapping: WatchMapping; + private trashingDirQueue: string[] = []; + private isEventRunning: boolean = false; + private uploadRunning: boolean = false; + private filePathToUploadedFileIDMap = new Map(); + private unUploadableFilePaths = new Set(); + private isPaused = false; + private setElectronFiles: (files: ElectronFile[]) => void; + private setCollectionName: (collectionName: string) => void; + private syncWithRemote: () => void; + private setWatchFolderServiceIsRunning: (isRunning: boolean) => void; + private debouncedRunNextEvent: () => void; + + constructor() { + this.debouncedRunNextEvent = debounce(() => this.runNextEvent(), 1000); + } + + isUploadRunning() { + return this.uploadRunning; + } + + isSyncPaused() { + return this.isPaused; + } + + async init( + setElectronFiles: (files: ElectronFile[]) => void, + setCollectionName: (collectionName: string) => void, + syncWithRemote: () => void, + setWatchFolderServiceIsRunning: (isRunning: boolean) => void, + ) { + try { + this.setElectronFiles = setElectronFiles; + this.setCollectionName = setCollectionName; + this.syncWithRemote = syncWithRemote; + this.setWatchFolderServiceIsRunning = + setWatchFolderServiceIsRunning; + this.setupWatcherFunctions(); + await this.getAndSyncDiffOfFiles(); + } catch (e) { + logError(e, "error while initializing watch service"); + } + } + + async getAndSyncDiffOfFiles() { + try { + let mappings = this.getWatchMappings(); + + if (!mappings?.length) { + return; + } + + mappings = await this.filterOutDeletedMappings(mappings); + + this.eventQueue = []; + + for (const mapping of mappings) { + const filesOnDisk: ElectronFile[] = + await ElectronAPIs.getDirFiles(mapping.folderPath); + + this.uploadDiffOfFiles(mapping, filesOnDisk); + this.trashDiffOfFiles(mapping, filesOnDisk); + } + } catch (e) { + logError(e, "error while getting and syncing diff of files"); + } + } + + isMappingSyncInProgress(mapping: WatchMapping) { + return this.currentEvent?.folderPath === mapping.folderPath; + } + + private uploadDiffOfFiles( + mapping: WatchMapping, + filesOnDisk: ElectronFile[], + ) { + const filesToUpload = getValidFilesToUpload(filesOnDisk, mapping); + + if (filesToUpload.length > 0) { + for (const file of filesToUpload) { + const event: EventQueueItem = { + type: "upload", + collectionName: this.getCollectionNameForMapping( + mapping, + file.path, + ), + folderPath: mapping.folderPath, + files: [file], + }; + this.pushEvent(event); + } + } + } + + private trashDiffOfFiles( + mapping: WatchMapping, + filesOnDisk: ElectronFile[], + ) { + const filesToRemove = mapping.syncedFiles.filter((file) => { + return !filesOnDisk.find( + (electronFile) => electronFile.path === file.path, + ); + }); + + if (filesToRemove.length > 0) { + for (const file of filesToRemove) { + const event: EventQueueItem = { + type: "trash", + collectionName: this.getCollectionNameForMapping( + mapping, + file.path, + ), + folderPath: mapping.folderPath, + paths: [file.path], + }; + this.pushEvent(event); + } + } + } + + private async filterOutDeletedMappings( + mappings: WatchMapping[], + ): Promise { + const notDeletedMappings = []; + for (const mapping of mappings) { + const mappingExists = await ElectronAPIs.isFolder( + mapping.folderPath, + ); + if (!mappingExists) { + ElectronAPIs.removeWatchMapping(mapping.folderPath); + } else { + notDeletedMappings.push(mapping); + } + } + return notDeletedMappings; + } + + pushEvent(event: EventQueueItem) { + this.eventQueue.push(event); + this.debouncedRunNextEvent(); + } + + async pushTrashedDir(path: string) { + this.trashingDirQueue.push(path); + } + + private setupWatcherFunctions() { + ElectronAPIs.registerWatcherFunctions( + diskFileAddedCallback, + diskFileRemovedCallback, + diskFolderRemovedCallback, + ); + } + + async addWatchMapping( + rootFolderName: string, + folderPath: string, + uploadStrategy: UPLOAD_STRATEGY, + ) { + try { + await ElectronAPIs.addWatchMapping( + rootFolderName, + folderPath, + uploadStrategy, + ); + this.getAndSyncDiffOfFiles(); + } catch (e) { + logError(e, "error while adding watch mapping"); + } + } + + async removeWatchMapping(folderPath: string) { + try { + await ElectronAPIs.removeWatchMapping(folderPath); + } catch (e) { + logError(e, "error while removing watch mapping"); + } + } + + getWatchMappings(): WatchMapping[] { + try { + return ElectronAPIs.getWatchMappings() ?? []; + } catch (e) { + logError(e, "error while getting watch mappings"); + return []; + } + return []; + } + + private setIsEventRunning(isEventRunning: boolean) { + this.isEventRunning = isEventRunning; + this.setWatchFolderServiceIsRunning(isEventRunning); + } + + private async runNextEvent() { + try { + if ( + this.eventQueue.length === 0 || + this.isEventRunning || + this.isPaused + ) { + return; + } + + const event = this.clubSameCollectionEvents(); + addLogLine( + `running event type:${event.type} collectionName:${event.collectionName} folderPath:${event.folderPath} , fileCount:${event.files?.length} pathsCount: ${event.paths?.length}`, + ); + const mappings = this.getWatchMappings(); + const mapping = mappings.find( + (mapping) => mapping.folderPath === event.folderPath, + ); + if (!mapping) { + throw Error("no Mapping found for event"); + } + addLogLine( + `mapping for event rootFolder: ${mapping.rootFolderName} folderPath: ${mapping.folderPath} uploadStrategy: ${mapping.uploadStrategy} syncedFilesCount: ${mapping.syncedFiles.length} ignoredFilesCount ${mapping.ignoredFiles.length}`, + ); + if (event.type === "upload") { + event.files = getValidFilesToUpload(event.files, mapping); + addLogLine(`valid files count: ${event.files?.length}`); + if (event.files.length === 0) { + return; + } + } + this.currentEvent = event; + this.currentlySyncedMapping = mapping; + + this.setIsEventRunning(true); + if (event.type === "upload") { + this.processUploadEvent(); + } else { + await this.processTrashEvent(); + this.setIsEventRunning(false); + setTimeout(() => this.runNextEvent(), 0); + } + } catch (e) { + logError(e, "runNextEvent failed"); + } + } + + private async processUploadEvent() { + try { + this.uploadRunning = true; + + this.setCollectionName(this.currentEvent.collectionName); + this.setElectronFiles(this.currentEvent.files); + } catch (e) { + logError(e, "error while running next upload"); + } + } + + async onFileUpload( + fileUploadResult: UPLOAD_RESULT, + fileWithCollection: FileWithCollection, + file: EncryptedEnteFile, + ) { + addLocalLog(() => `onFileUpload called`); + if (!this.isUploadRunning()) { + return; + } + if ( + [ + UPLOAD_RESULT.ADDED_SYMLINK, + UPLOAD_RESULT.UPLOADED, + UPLOAD_RESULT.UPLOADED_WITH_STATIC_THUMBNAIL, + UPLOAD_RESULT.ALREADY_UPLOADED, + ].includes(fileUploadResult) + ) { + if (fileWithCollection.isLivePhoto) { + this.filePathToUploadedFileIDMap.set( + (fileWithCollection.livePhotoAssets.image as ElectronFile) + .path, + file, + ); + this.filePathToUploadedFileIDMap.set( + (fileWithCollection.livePhotoAssets.video as ElectronFile) + .path, + file, + ); + } else { + this.filePathToUploadedFileIDMap.set( + (fileWithCollection.file as ElectronFile).path, + file, + ); + } + } else if ( + [UPLOAD_RESULT.UNSUPPORTED, UPLOAD_RESULT.TOO_LARGE].includes( + fileUploadResult, + ) + ) { + if (fileWithCollection.isLivePhoto) { + this.unUploadableFilePaths.add( + (fileWithCollection.livePhotoAssets.image as ElectronFile) + .path, + ); + this.unUploadableFilePaths.add( + (fileWithCollection.livePhotoAssets.video as ElectronFile) + .path, + ); + } else { + this.unUploadableFilePaths.add( + (fileWithCollection.file as ElectronFile).path, + ); + } + } + } + + async allFileUploadsDone( + filesWithCollection: FileWithCollection[], + collections: Collection[], + ) { + try { + addLocalLog( + () => + `allFileUploadsDone,${JSON.stringify( + filesWithCollection, + )} ${JSON.stringify(collections)}`, + ); + const collection = collections.find( + (collection) => + collection.id === filesWithCollection[0].collectionID, + ); + addLocalLog(() => `got collection ${!!collection}`); + addLocalLog( + () => + `${this.isEventRunning} ${this.currentEvent.collectionName} ${collection?.name}`, + ); + if ( + !this.isEventRunning || + this.currentEvent.collectionName !== collection?.name + ) { + return; + } + + const syncedFiles: WatchMapping["syncedFiles"] = []; + const ignoredFiles: WatchMapping["ignoredFiles"] = []; + + for (const fileWithCollection of filesWithCollection) { + this.handleUploadedFile( + fileWithCollection, + syncedFiles, + ignoredFiles, + ); + } + + addLocalLog(() => `syncedFiles ${JSON.stringify(syncedFiles)}`); + addLocalLog(() => `ignoredFiles ${JSON.stringify(ignoredFiles)}`); + + if (syncedFiles.length > 0) { + this.currentlySyncedMapping.syncedFiles = [ + ...this.currentlySyncedMapping.syncedFiles, + ...syncedFiles, + ]; + ElectronAPIs.updateWatchMappingSyncedFiles( + this.currentlySyncedMapping.folderPath, + this.currentlySyncedMapping.syncedFiles, + ); + } + if (ignoredFiles.length > 0) { + this.currentlySyncedMapping.ignoredFiles = [ + ...this.currentlySyncedMapping.ignoredFiles, + ...ignoredFiles, + ]; + ElectronAPIs.updateWatchMappingIgnoredFiles( + this.currentlySyncedMapping.folderPath, + this.currentlySyncedMapping.ignoredFiles, + ); + } + + this.runPostUploadsAction(); + } catch (e) { + logError(e, "error while running all file uploads done"); + } + } + + private runPostUploadsAction() { + this.setIsEventRunning(false); + this.uploadRunning = false; + this.runNextEvent(); + } + + private handleUploadedFile( + fileWithCollection: FileWithCollection, + syncedFiles: WatchMapping["syncedFiles"], + ignoredFiles: WatchMapping["ignoredFiles"], + ) { + if (fileWithCollection.isLivePhoto) { + const imagePath = ( + fileWithCollection.livePhotoAssets.image as ElectronFile + ).path; + const videoPath = ( + fileWithCollection.livePhotoAssets.video as ElectronFile + ).path; + + if ( + this.filePathToUploadedFileIDMap.has(imagePath) && + this.filePathToUploadedFileIDMap.has(videoPath) + ) { + const imageFile = { + path: imagePath, + uploadedFileID: + this.filePathToUploadedFileIDMap.get(imagePath).id, + collectionID: + this.filePathToUploadedFileIDMap.get(imagePath) + .collectionID, + }; + const videoFile = { + path: videoPath, + uploadedFileID: + this.filePathToUploadedFileIDMap.get(videoPath).id, + collectionID: + this.filePathToUploadedFileIDMap.get(videoPath) + .collectionID, + }; + syncedFiles.push(imageFile); + syncedFiles.push(videoFile); + addLocalLog( + () => + `added image ${JSON.stringify( + imageFile, + )} and video file ${JSON.stringify( + videoFile, + )} to uploadedFiles`, + ); + } else if ( + this.unUploadableFilePaths.has(imagePath) && + this.unUploadableFilePaths.has(videoPath) + ) { + ignoredFiles.push(imagePath); + ignoredFiles.push(videoPath); + addLocalLog( + () => + `added image ${imagePath} and video file ${videoPath} to rejectedFiles`, + ); + } + this.filePathToUploadedFileIDMap.delete(imagePath); + this.filePathToUploadedFileIDMap.delete(videoPath); + } else { + const filePath = (fileWithCollection.file as ElectronFile).path; + + if (this.filePathToUploadedFileIDMap.has(filePath)) { + const file = { + path: filePath, + uploadedFileID: + this.filePathToUploadedFileIDMap.get(filePath).id, + collectionID: + this.filePathToUploadedFileIDMap.get(filePath) + .collectionID, + }; + syncedFiles.push(file); + addLocalLog(() => `added file ${JSON.stringify(file)} `); + } else if (this.unUploadableFilePaths.has(filePath)) { + ignoredFiles.push(filePath); + addLocalLog(() => `added file ${filePath} to rejectedFiles`); + } + this.filePathToUploadedFileIDMap.delete(filePath); + } + } + + private async processTrashEvent() { + try { + if (this.checkAndIgnoreIfFileEventsFromTrashedDir()) { + return; + } + + const { paths } = this.currentEvent; + const filePathsToRemove = new Set(paths); + + const files = this.currentlySyncedMapping.syncedFiles.filter( + (file) => filePathsToRemove.has(file.path), + ); + + await this.trashByIDs(files); + + this.currentlySyncedMapping.syncedFiles = + this.currentlySyncedMapping.syncedFiles.filter( + (file) => !filePathsToRemove.has(file.path), + ); + ElectronAPIs.updateWatchMappingSyncedFiles( + this.currentlySyncedMapping.folderPath, + this.currentlySyncedMapping.syncedFiles, + ); + } catch (e) { + logError(e, "error while running next trash"); + } + } + + private async trashByIDs(toTrashFiles: WatchMapping["syncedFiles"]) { + try { + const files = await getLocalFiles(); + const toTrashFilesMap = new Map(); + for (const file of toTrashFiles) { + toTrashFilesMap.set(file.uploadedFileID, file); + } + const filesToTrash = files.filter((file) => { + if (toTrashFilesMap.has(file.id)) { + const fileToTrash = toTrashFilesMap.get(file.id); + if (fileToTrash.collectionID === file.collectionID) { + return true; + } + } + }); + const groupFilesByCollectionId = + groupFilesBasedOnCollectionID(filesToTrash); + + for (const [ + collectionID, + filesToTrash, + ] of groupFilesByCollectionId.entries()) { + await removeFromCollection(collectionID, filesToTrash); + } + this.syncWithRemote(); + } catch (e) { + logError(e, "error while trashing by IDs"); + } + } + + private checkAndIgnoreIfFileEventsFromTrashedDir() { + if (this.trashingDirQueue.length !== 0) { + this.ignoreFileEventsFromTrashedDir(this.trashingDirQueue[0]); + this.trashingDirQueue.shift(); + return true; + } + return false; + } + + private ignoreFileEventsFromTrashedDir(trashingDir: string) { + this.eventQueue = this.eventQueue.filter((event) => + event.paths.every((path) => !path.startsWith(trashingDir)), + ); + } + + async getCollectionNameAndFolderPath(filePath: string) { + try { + const mappings = this.getWatchMappings(); + + const mapping = mappings.find( + (mapping) => + filePath.length > mapping.folderPath.length && + filePath.startsWith(mapping.folderPath) && + filePath[mapping.folderPath.length] === "/", + ); + + if (!mapping) { + throw Error(`no mapping found`); + } + + return { + collectionName: this.getCollectionNameForMapping( + mapping, + filePath, + ), + folderPath: mapping.folderPath, + }; + } catch (e) { + logError(e, "error while getting collection name"); + } + } + + private getCollectionNameForMapping( + mapping: WatchMapping, + filePath: string, + ) { + return mapping.uploadStrategy === UPLOAD_STRATEGY.COLLECTION_PER_FOLDER + ? getParentFolderName(filePath) + : mapping.rootFolderName; + } + + async selectFolder(): Promise { + try { + const folderPath = await ElectronAPIs.selectDirectory(); + return folderPath; + } catch (e) { + logError(e, "error while selecting folder"); + } + } + + // Batches all the files to be uploaded (or trashed) from the + // event queue of same collection as the next event + private clubSameCollectionEvents(): EventQueueItem { + const event = this.eventQueue.shift(); + while ( + this.eventQueue.length > 0 && + event.collectionName === this.eventQueue[0].collectionName && + event.type === this.eventQueue[0].type + ) { + if (event.type === "trash") { + event.paths = [...event.paths, ...this.eventQueue[0].paths]; + } else { + event.files = [...event.files, ...this.eventQueue[0].files]; + } + this.eventQueue.shift(); + } + return event; + } + + async isFolder(folderPath: string) { + try { + const isFolder = await ElectronAPIs.isFolder(folderPath); + return isFolder; + } catch (e) { + logError(e, "error while checking if folder exists"); + } + } + + pauseRunningSync() { + this.isPaused = true; + uploadManager.cancelRunningUpload(); + } + + resumePausedSync() { + this.isPaused = false; + this.getAndSyncDiffOfFiles(); + } +} + +export default new watchFolderService(); diff --git a/web/apps/photos/src/styles/dropdown.ts b/web/apps/photos/src/styles/dropdown.ts new file mode 100644 index 000000000..9feb9f94b --- /dev/null +++ b/web/apps/photos/src/styles/dropdown.ts @@ -0,0 +1,20 @@ +import { SelectStyles } from "./search"; + +export const DropdownStyle = { + ...SelectStyles, + dropdownIndicator: (style) => ({ + ...style, + margin: "0px", + }), + singleValue: (style) => ({ + ...style, + color: "#d1d1d1", + width: "240px", + }), + control: (style, { isFocused }) => ({ + ...style, + ...SelectStyles.control(style, { isFocused }), + minWidth: "240px", + paddingLeft: "8px", + }), +}; diff --git a/web/apps/photos/src/styles/global.css b/web/apps/photos/src/styles/global.css new file mode 100644 index 000000000..91c08ddcf --- /dev/null +++ b/web/apps/photos/src/styles/global.css @@ -0,0 +1,197 @@ +/* inter-regular - latin */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + src: + local(""), + url("/fonts/inter-v11-latin-500.woff2") format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("/fonts/inter-v11-latin-500.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; /*https://web.dev/font-display/?utm_source=lighthouse&utm_medium=devtools#how-to-avoid-showing-invisible-text*/ +} + +/* inter-600 - latin */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 700; + src: + local(""), + url("/fonts/inter-v11-latin-600.woff2") format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("/fonts/inter-v11-latin-600.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; +} + +/* inter-800 - latin */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: + local(""), + url("/fonts/inter-v11-latin-800.woff2") format("woff2"), + /* Chrome 26+, Opera 23+, Firefox 39+ */ + url("/fonts/inter-v11-latin-800.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + font-display: swap; +} + +html, +body { + height: 100%; + flex: 1; + display: flex; + flex-direction: column; +} + +#__next { + flex: 1; + display: flex; + flex-direction: column; +} + +.pswp__button--custom { + width: 48px; + height: 48px; + background: none !important; + background-image: none !important; + color: #fff; +} + +.pswp__item video { + width: 100%; + height: 100%; +} + +.pswp-item-container { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + object-fit: contain; +} + +.pswp-item-container > * { + position: absolute; + transition: opacity 1s ease; + max-width: 100%; + max-height: 100%; +} + +.pswp-item-container > img { + opacity: 1; +} + +.pswp-item-container > video { + opacity: 0; +} + +.pswp-item-container > div.download-banner { + width: 100%; + height: 16vh; + padding: 2vh 0; + background-color: #151414; + color: #ddd; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; + opacity: 0.8; + font-size: 20px; +} + +.download-banner > a { + width: 130px; +} + +.pswp__img { + object-fit: contain; +} + +.pswp__button--arrow--left, +.pswp__button--arrow--right { + color: #fff; + background-color: #333333 !important; + border-radius: 50%; + width: 56px; + height: 56px; +} +.pswp__button--arrow--left::before, +.pswp__button--arrow--right::before { + background: none !important; +} + +.pswp__button--arrow--left { + margin-left: 20px; +} + +.pswp__button--arrow--right { + margin-right: 20px; +} + +.pswp-custom-caption-container { + width: 100%; + display: flex; + justify-content: flex-end; + bottom: 56px; + background-color: transparent !important; +} + +.pswp__caption--empty { + display: none; +} + +.bg-upload-progress-bar { + background-color: #51cd7c; +} + +.carousel-inner { + padding-bottom: 50px !important; +} + +.carousel-indicators li { + width: 10px; + height: 10px; + border-radius: 50%; + margin-right: 12px; +} + +.carousel-indicators .active { + background-color: #51cd7c; +} + +div.otp-input input { + width: 36px !important; + height: 36px; + margin: 0 10px; +} + +div.otp-input input::placeholder { + opacity: 0; +} + +div.otp-input input:not(:placeholder-shown), +div.otp-input input:focus { + border: 2px solid #51cd7c; + border-radius: 1px; + -webkit-transition: 0.5s; + transition: 0.5s; + outline: none; +} + +.flash-message { + padding: 16px; + display: flex; + align-items: center; +} + +@-webkit-keyframes rotation { + from { + -webkit-transform: rotate(0deg); + } + to { + -webkit-transform: rotate(359deg); + } +} diff --git a/web/apps/photos/src/styles/linkExpiry.tsx b/web/apps/photos/src/styles/linkExpiry.tsx new file mode 100644 index 000000000..852569ae1 --- /dev/null +++ b/web/apps/photos/src/styles/linkExpiry.tsx @@ -0,0 +1,11 @@ +import { DropdownStyle } from "./dropdown"; + +export const linkExpiryStyle = { + ...DropdownStyle, + placeholder: (style) => ({ + ...style, + color: "#d1d1d1", + width: "100%", + textAlign: "center", + }), +}; diff --git a/web/apps/photos/src/styles/search.ts b/web/apps/photos/src/styles/search.ts new file mode 100644 index 000000000..1127595fb --- /dev/null +++ b/web/apps/photos/src/styles/search.ts @@ -0,0 +1,65 @@ +export const SelectStyles = { + container: (style) => ({ + ...style, + flex: 1, + }), + control: (style, { isFocused }) => ({ + ...style, + backgroundColor: "rgba(255, 255, 255, 0.1)", + + borderColor: isFocused ? "#1dba54" : "transparent", + boxShadow: "none", + ":hover": { + borderColor: "#1dba54", + cursor: "text", + }, + }), + input: (style) => ({ + ...style, + color: "#fff", + }), + menu: (style) => ({ + ...style, + marginTop: "1px", + backgroundColor: "#1b1b1b", + }), + option: (style, { isFocused }) => ({ + ...style, + padding: 0, + backgroundColor: "transparent !important", + "& :hover": { + cursor: "pointer", + }, + "& .main": { + backgroundColor: isFocused && "#202020", + }, + "&:last-child .MuiDivider-root": { + display: "none", + }, + }), + dropdownIndicator: (style) => ({ + ...style, + display: "none", + }), + indicatorSeparator: (style) => ({ + ...style, + display: "none", + }), + clearIndicator: (style) => ({ + ...style, + display: "none", + }), + singleValue: (style) => ({ + ...style, + backgroundColor: "transparent", + color: "#d1d1d1", + marginLeft: "36px", + }), + placeholder: (style) => ({ + ...style, + color: "rgba(255, 255, 255, 0.7)", + wordSpacing: "2px", + whiteSpace: "nowrap", + marginLeft: "40px", + }), +}; diff --git a/web/apps/photos/src/types/Notification/index.tsx b/web/apps/photos/src/types/Notification/index.tsx new file mode 100644 index 000000000..b38fff953 --- /dev/null +++ b/web/apps/photos/src/types/Notification/index.tsx @@ -0,0 +1,32 @@ +import { ButtonProps } from "@mui/material/Button"; +import { ReactNode } from "react"; + +export type NotificationAttributes = + | MessageSubTextNotificationAttributes + | TitleCaptionNotificationAttributes; + +interface MessageSubTextNotificationAttributes { + startIcon?: ReactNode; + variant: ButtonProps["color"]; + message?: JSX.Element | string; + subtext?: JSX.Element | string; + title?: never; + caption?: never; + onClick: () => void; + endIcon?: ReactNode; +} + +interface TitleCaptionNotificationAttributes { + startIcon?: ReactNode; + variant: ButtonProps["color"]; + title?: JSX.Element | string; + caption?: JSX.Element | string; + message?: never; + subtext?: never; + onClick: () => void; + endIcon?: ReactNode; +} + +export type SetNotificationAttributes = React.Dispatch< + React.SetStateAction +>; diff --git a/web/apps/photos/src/types/billing/index.ts b/web/apps/photos/src/types/billing/index.ts new file mode 100644 index 000000000..b2058948b --- /dev/null +++ b/web/apps/photos/src/types/billing/index.ts @@ -0,0 +1,25 @@ +import { PLAN_PERIOD } from "constants/gallery"; + +export interface Subscription { + id: number; + userID: number; + productID: string; + storage: number; + originalTransactionID: string; + expiryTime: number; + paymentProvider: string; + attributes: { + isCancelled: boolean; + }; + price: string; + period: PLAN_PERIOD; +} +export interface Plan { + id: string; + androidID: string; + iosID: string; + storage: number; + price: string; + period: PLAN_PERIOD; + stripeID: string; +} diff --git a/web/apps/photos/src/types/collection/index.ts b/web/apps/photos/src/types/collection/index.ts new file mode 100644 index 000000000..91b96281c --- /dev/null +++ b/web/apps/photos/src/types/collection/index.ts @@ -0,0 +1,156 @@ +import { CollectionSummaryType, CollectionType } from "constants/collection"; +import { EnteFile } from "types/file"; +import { + EncryptedMagicMetadata, + MagicMetadataCore, + SUB_TYPE, + VISIBILITY_STATE, +} from "types/magicMetadata"; + +export enum COLLECTION_ROLE { + VIEWER = "VIEWER", + OWNER = "OWNER", + COLLABORATOR = "COLLABORATOR", + UNKNOWN = "UNKNOWN", +} + +export interface CollectionUser { + id: number; + email: string; + role: COLLECTION_ROLE; +} + +export interface EncryptedCollection { + id: number; + owner: CollectionUser; + // collection name was unencrypted in the past, so we need to keep it as optional + name?: string; + encryptedKey: string; + keyDecryptionNonce: string; + encryptedName: string; + nameDecryptionNonce: string; + type: CollectionType; + attributes: collectionAttributes; + sharees: CollectionUser[]; + publicURLs?: PublicURL[]; + updationTime: number; + isDeleted: boolean; + magicMetadata: EncryptedMagicMetadata; + pubMagicMetadata: EncryptedMagicMetadata; + sharedMagicMetadata: EncryptedMagicMetadata; +} + +export interface Collection + extends Omit< + EncryptedCollection, + | "encryptedKey" + | "keyDecryptionNonce" + | "encryptedName" + | "nameDecryptionNonce" + | "magicMetadata" + | "pubMagicMetadata" + | "sharedMagicMetadata" + > { + key: string; + name: string; + magicMetadata: CollectionMagicMetadata; + pubMagicMetadata: CollectionPublicMagicMetadata; + sharedMagicMetadata: CollectionShareeMagicMetadata; +} + +export interface PublicURL { + url: string; + deviceLimit: number; + validTill: number; + enableDownload: boolean; + enableCollect: boolean; + passwordEnabled: boolean; + nonce?: string; + opsLimit?: number; + memLimit?: number; +} + +export interface UpdatePublicURL { + collectionID: number; + disablePassword?: boolean; + enableDownload?: boolean; + enableCollect?: boolean; + validTill?: number; + deviceLimit?: number; + passHash?: string; + nonce?: string; + opsLimit?: number; + memLimit?: number; +} + +export interface CreatePublicAccessTokenRequest { + collectionID: number; + validTill?: number; + deviceLimit?: number; +} + +export interface EncryptedFileKey { + id: number; + encryptedKey: string; + keyDecryptionNonce: string; +} + +export interface AddToCollectionRequest { + collectionID: number; + files: EncryptedFileKey[]; +} + +export interface MoveToCollectionRequest { + fromCollectionID: number; + toCollectionID: number; + files: EncryptedFileKey[]; +} + +export interface collectionAttributes { + encryptedPath?: string; + pathDecryptionNonce?: string; +} + +export type CollectionToFileMap = Map; + +export interface RemoveFromCollectionRequest { + collectionID: number; + fileIDs: number[]; +} + +export interface CollectionMagicMetadataProps { + visibility?: VISIBILITY_STATE; + subType?: SUB_TYPE; + order?: number; +} + +export type CollectionMagicMetadata = + MagicMetadataCore; + +export interface CollectionShareeMetadataProps { + visibility?: VISIBILITY_STATE; +} +export type CollectionShareeMagicMetadata = + MagicMetadataCore; + +export interface CollectionPublicMagicMetadataProps { + asc?: boolean; + coverID?: number; +} + +export type CollectionPublicMagicMetadata = + MagicMetadataCore; + +export interface CollectionSummary { + id: number; + name: string; + type: CollectionSummaryType; + coverFile: EnteFile; + latestFile: EnteFile; + fileCount: number; + updationTime: number; + order?: number; +} + +export type CollectionSummaries = Map; +export type CollectionFilesCount = Map; diff --git a/web/apps/photos/src/types/common/job.ts b/web/apps/photos/src/types/common/job.ts new file mode 100644 index 000000000..fe42e4aaf --- /dev/null +++ b/web/apps/photos/src/types/common/job.ts @@ -0,0 +1,11 @@ +export type JobState = "Scheduled" | "Running" | "NotScheduled"; + +export interface JobConfig { + intervalSec: number; + maxItervalSec: number; + backoffMultiplier: number; +} + +export interface JobResult { + shouldBackoff: boolean; +} diff --git a/web/apps/photos/src/types/deduplicate/index.ts b/web/apps/photos/src/types/deduplicate/index.ts new file mode 100644 index 000000000..6a4007b62 --- /dev/null +++ b/web/apps/photos/src/types/deduplicate/index.ts @@ -0,0 +1,12 @@ +export type DeduplicateContextType = { + isOnDeduplicatePage: boolean; + collectionNameMap: Map; +}; + +export const DefaultDeduplicateContext = { + clubSameTimeFilesOnly: false, + setClubSameTimeFilesOnly: () => null, + fileSizeMap: new Map(), + isOnDeduplicatePage: false, + collectionNameMap: new Map(), +}; diff --git a/web/apps/photos/src/types/embedding.tsx b/web/apps/photos/src/types/embedding.tsx new file mode 100644 index 000000000..3626e0fad --- /dev/null +++ b/web/apps/photos/src/types/embedding.tsx @@ -0,0 +1,31 @@ +export enum Model { + GGML_CLIP = "ggml-clip", + ONNX_CLIP = "onnx-clip", +} + +export interface EncryptedEmbedding { + fileID: number; + model: Model; + encryptedEmbedding: string; + decryptionHeader: string; + updatedAt: number; +} + +export interface Embedding + extends Omit< + EncryptedEmbedding, + "encryptedEmbedding" | "decryptionHeader" + > { + embedding: Float32Array; +} + +export interface GetEmbeddingDiffResponse { + diff: EncryptedEmbedding[]; +} + +export interface PutEmbeddingRequest { + fileID: number; + model: Model; + encryptedEmbedding: string; + decryptionHeader: string; +} diff --git a/web/apps/photos/src/types/entity.ts b/web/apps/photos/src/types/entity.ts new file mode 100644 index 000000000..9580bf333 --- /dev/null +++ b/web/apps/photos/src/types/entity.ts @@ -0,0 +1,47 @@ +import { Location } from "types/upload"; + +export enum EntityType { + LOCATION_TAG = "location", +} + +export interface EncryptedEntityKey { + userID: number; + encryptedKey: string; + type: EntityType; + header: string; + createdAt: number; +} + +export interface EntityKey + extends Omit { + data: string; +} + +export interface EncryptedEntity { + id: string; + encryptedData: string; + header: string; + isDeleted: boolean; + createdAt: number; + updatedAt: number; + userID: number; +} + +export interface LocationTagData { + name: string; + radius: number; + aSquare: number; + bSquare: number; + centerPoint: Location; +} + +export type LocationTag = Entity; + +export interface Entity + extends Omit { + data: T; +} + +export interface EntitySyncDiffResponse { + diff: EncryptedEntity[]; +} diff --git a/web/apps/photos/src/types/export/index.ts b/web/apps/photos/src/types/export/index.ts new file mode 100644 index 000000000..ce85f32fd --- /dev/null +++ b/web/apps/photos/src/types/export/index.ts @@ -0,0 +1,67 @@ +import { ExportStage } from "constants/export"; +import { EnteFile } from "types/file"; + +export interface ExportProgress { + success: number; + failed: number; + total: number; +} +export interface ExportedCollectionPaths { + [collectionID: number]: string; +} + +export interface CollectionExportNames { + [ID: number]: string; +} + +export interface FileExportNames { + [ID: string]: string; +} + +export interface ExportRecordV0 { + stage: ExportStage; + lastAttemptTimestamp: number; + progress: ExportProgress; + queuedFiles: string[]; + exportedFiles: string[]; + failedFiles: string[]; +} + +export interface ExportRecordV1 { + version: number; + stage: ExportStage; + lastAttemptTimestamp: number; + progress: ExportProgress; + queuedFiles: string[]; + exportedFiles: string[]; + failedFiles: string[]; + exportedCollectionPaths: ExportedCollectionPaths; +} + +export interface ExportRecordV2 { + version: number; + stage: ExportStage; + lastAttemptTimestamp: number; + exportedFiles: string[]; + exportedCollectionPaths: ExportedCollectionPaths; +} + +export interface ExportRecord { + version: number; + stage: ExportStage; + lastAttemptTimestamp: number; + collectionExportNames: CollectionExportNames; + fileExportNames: FileExportNames; +} + +export interface ExportSettings { + folder: string; + continuousExport: boolean; +} + +export interface ExportUIUpdaters { + setExportStage: (stage: ExportStage) => void; + setExportProgress: (progress: ExportProgress) => void; + setLastExportTime: (exportTime: number) => void; + setPendingExports: (pendingExports: EnteFile[]) => void; +} diff --git a/web/apps/photos/src/types/file/index.ts b/web/apps/photos/src/types/file/index.ts new file mode 100644 index 000000000..2991e1f8b --- /dev/null +++ b/web/apps/photos/src/types/file/index.ts @@ -0,0 +1,102 @@ +import { SourceURLs } from "services/download"; +import { + EncryptedMagicMetadata, + MagicMetadataCore, + VISIBILITY_STATE, +} from "types/magicMetadata"; +import { Metadata } from "types/upload"; + +export interface MetadataFileAttributes { + encryptedData: string; + decryptionHeader: string; +} +export interface S3FileAttributes { + objectKey: string; + decryptionHeader: string; +} + +export interface FileInfo { + fileSize: number; + thumbSize: number; +} + +export interface EncryptedEnteFile { + id: number; + collectionID: number; + ownerID: number; + file: S3FileAttributes; + thumbnail: S3FileAttributes; + metadata: MetadataFileAttributes; + info: FileInfo; + magicMetadata: EncryptedMagicMetadata; + pubMagicMetadata: EncryptedMagicMetadata; + encryptedKey: string; + keyDecryptionNonce: string; + isDeleted: boolean; + updationTime: number; +} + +export interface EnteFile + extends Omit< + EncryptedEnteFile, + | "metadata" + | "pubMagicMetadata" + | "magicMetadata" + | "encryptedKey" + | "keyDecryptionNonce" + > { + metadata: Metadata; + magicMetadata: FileMagicMetadata; + pubMagicMetadata: FilePublicMagicMetadata; + isTrashed?: boolean; + key: string; + src?: string; + srcURLs?: SourceURLs; + msrc?: string; + html?: string; + w?: number; + h?: number; + title?: string; + deleteBy?: number; + isSourceLoaded?: boolean; + conversionFailed?: boolean; + isConverted?: boolean; +} + +export interface TrashRequest { + items: TrashRequestItems[]; +} + +export interface TrashRequestItems { + fileID: number; + collectionID: number; +} + +export interface FileWithUpdatedMagicMetadata { + file: EnteFile; + updatedMagicMetadata: FileMagicMetadata; +} + +export interface FileWithUpdatedPublicMagicMetadata { + file: EnteFile; + updatedPublicMagicMetadata: FilePublicMagicMetadata; +} + +export interface FileMagicMetadataProps { + visibility?: VISIBILITY_STATE; + filePaths?: string[]; +} + +export type FileMagicMetadata = MagicMetadataCore; + +export interface FilePublicMagicMetadataProps { + editedTime?: number; + editedName?: string; + caption?: string; + uploaderName?: string; + w?: number; + h?: number; +} + +export type FilePublicMagicMetadata = + MagicMetadataCore; diff --git a/web/apps/photos/src/types/gallery/index.ts b/web/apps/photos/src/types/gallery/index.ts new file mode 100644 index 000000000..a2e77f0b6 --- /dev/null +++ b/web/apps/photos/src/types/gallery/index.ts @@ -0,0 +1,65 @@ +import { User } from "@ente/shared/user/types"; +import { CollectionSelectorAttributes } from "components/Collections/CollectionSelector"; +import { FilesDownloadProgressAttributes } from "components/FilesDownloadProgress"; +import { TimeStampListItem } from "components/PhotoList"; +import { Collection } from "types/collection"; +import { EnteFile } from "types/file"; + +export type SelectedState = { + [k: number]: boolean; + ownCount: number; + count: number; + collectionID: number; +}; +export type SetFiles = React.Dispatch>; +export type SetCollections = React.Dispatch>; +export type SetLoading = React.Dispatch>; +export type SetCollectionSelectorAttributes = React.Dispatch< + React.SetStateAction +>; +export type SetFilesDownloadProgressAttributes = ( + value: + | Partial + | (( + prev: FilesDownloadProgressAttributes, + ) => FilesDownloadProgressAttributes), +) => void; + +export type SetFilesDownloadProgressAttributesCreator = ( + folderName: string, + collectionID?: number, + isHidden?: boolean, +) => SetFilesDownloadProgressAttributes; + +export type MergedSourceURL = { + original: string; + converted: string; +}; +export enum UploadTypeSelectorIntent { + normalUpload, + import, + collectPhotos, +} +export type GalleryContextType = { + showPlanSelectorModal: () => void; + setActiveCollectionID: (collectionID: number) => void; + syncWithRemote: (force?: boolean, silent?: boolean) => Promise; + setBlockingLoad: (value: boolean) => void; + setIsInSearchMode: (value: boolean) => void; + photoListHeader: TimeStampListItem; + openExportModal: () => void; + authenticateUser: (callback: () => void) => void; + user: User; + userIDToEmailMap: Map; + emailList: string[]; + openHiddenSection: (callback?: () => void) => void; + isClipSearchResult: boolean; +}; + +export enum CollectionSelectorIntent { + upload, + add, + move, + restore, + unhide, +} diff --git a/web/apps/photos/src/types/image/index.ts b/web/apps/photos/src/types/image/index.ts new file mode 100644 index 000000000..8c9619e2e --- /dev/null +++ b/web/apps/photos/src/types/image/index.ts @@ -0,0 +1,9 @@ +export interface Dimensions { + width: number; + height: number; +} + +export interface BlobOptions { + type?: string; + quality?: number; +} diff --git a/web/apps/photos/src/types/machineLearning/archface.ts b/web/apps/photos/src/types/machineLearning/archface.ts new file mode 100644 index 000000000..9c44ecd73 --- /dev/null +++ b/web/apps/photos/src/types/machineLearning/archface.ts @@ -0,0 +1,8 @@ +export const ARCFACE_LANDMARKS = [ + [38.2946, 51.6963], + [73.5318, 51.5014], + [56.0252, 71.7366], + [56.1396, 92.2848], +] as Array<[number, number]>; + +export const ARCFACE_LANDMARKS_FACE_SIZE = 112; diff --git a/web/apps/photos/src/types/machineLearning/index.ts b/web/apps/photos/src/types/machineLearning/index.ts new file mode 100644 index 000000000..64cf8f2f4 --- /dev/null +++ b/web/apps/photos/src/types/machineLearning/index.ts @@ -0,0 +1,452 @@ +import * as tf from "@tensorflow/tfjs-core"; + +// import { +// FaceDetection, +// FaceLandmarks68, +// WithFaceDescriptor, +// WithFaceLandmarks, +// } from 'face-api.js'; +import { DebugInfo } from "hdbscan"; +import PQueue from "p-queue"; + +// import { Point as D3Point, RawNodeDatum } from 'react-d3-tree/lib/types/common'; +import { EnteFile } from "types/file"; +import { Dimensions } from "types/image"; +import { Box, Point } from "../../../thirdparty/face-api/classes"; + +export interface MLSyncResult { + nOutOfSyncFiles: number; + nSyncedFiles: number; + nSyncedFaces: number; + nFaceClusters: number; + nFaceNoise: number; + tsne?: any; + error?: Error; +} + +export interface DebugFace { + fileId: string; + // face: FaceApiResult; + face: AlignedFace; + embedding: FaceEmbedding; + faceImage: FaceImage; +} + +// export interface MLDebugResult { +// allFaces: DebugFace[]; +// clustersWithNoise: FacesClustersWithNoise; +// tree: RawNodeDatum; +// tsne: TSNEData; +// } + +export declare type FaceImage = Array>>; +export declare type FaceImageBlob = Blob; + +// export declare type FaceApiResult = WithFaceDescriptor< +// WithFaceLandmarks< +// { +// detection: FaceDetection; +// }, +// FaceLandmarks68 +// > +// >; + +export declare type FaceDescriptor = Float32Array; + +export declare type Cluster = Array; + +export interface ClusteringResults { + clusters: Array; + noise: Cluster; +} + +export interface HdbscanResults extends ClusteringResults { + debugInfo?: DebugInfo; +} + +export interface FacesCluster { + faces: Cluster; + summary?: FaceDescriptor; +} + +export interface FacesClustersWithNoise { + clusters: Array; + noise: Cluster; +} + +export interface NearestCluster { + cluster: FacesCluster; + distance: number; +} + +// export interface TSNEData { +// width: number; +// height: number; +// dataset: D3Point[]; +// } + +export declare type Landmark = Point; + +export declare type ImageType = "Original" | "Preview"; + +export declare type FaceDetectionMethod = "BlazeFace" | "FaceApiSSD"; + +export declare type ObjectDetectionMethod = "SSDMobileNetV2"; + +export declare type SceneDetectionMethod = "ImageScene"; + +export declare type FaceCropMethod = "ArcFace"; + +export declare type FaceAlignmentMethod = + | "ArcFace" + | "FaceApiDlib" + | "RotatedFaceApiDlib"; + +export declare type FaceEmbeddingMethod = "MobileFaceNet" | "FaceApiDlib"; + +export declare type ClusteringMethod = "Hdbscan" | "Dbscan"; + +export class AlignedBox { + box: Box; + rotation: number; +} + +export interface Versioned { + value: T; + version: number; +} + +export interface FaceDetection { + // box and landmarks is relative to image dimentions stored at mlFileData + box: Box; + landmarks?: Array; + probability?: number; +} + +export interface DetectedFace { + fileId: number; + detection: FaceDetection; +} + +export interface DetectedFaceWithId extends DetectedFace { + id: string; +} + +export interface FaceCrop { + image: ImageBitmap; + // imageBox is relative to image dimentions stored at mlFileData + imageBox: Box; +} + +export interface StoredFaceCrop { + imageUrl: string; + imageBox: Box; +} + +export interface CroppedFace extends DetectedFaceWithId { + crop?: StoredFaceCrop; +} + +export interface FaceAlignment { + // TODO: remove affine matrix as rotation, size and center + // are simple to store and use, affine matrix adds complexity while getting crop + affineMatrix: Array>; + rotation: number; + // size and center is relative to image dimentions stored at mlFileData + size: number; + center: Point; +} + +export interface AlignedFace extends CroppedFace { + alignment?: FaceAlignment; +} + +export declare type FaceEmbedding = Float32Array; + +export interface FaceWithEmbedding extends AlignedFace { + embedding?: FaceEmbedding; +} + +export interface Face extends FaceWithEmbedding { + personId?: number; +} + +export interface Person { + id: number; + name?: string; + files: Array; + displayFaceId?: string; + displayImageUrl?: string; +} + +export interface ObjectDetection { + bbox: [number, number, number, number]; + class: string; + score: number; +} + +export interface DetectedObject { + fileID: number; + detection: ObjectDetection; +} + +export interface RealWorldObject extends DetectedObject { + id: string; + className: string; +} + +export interface Thing { + id: number; + name: string; + files: Array; +} + +export interface WordGroup { + word: string; + files: Array; +} + +export interface MlFileData { + fileId: number; + faces?: Face[]; + objects?: RealWorldObject[]; + imageSource?: ImageType; + imageDimensions?: Dimensions; + faceDetectionMethod?: Versioned; + faceCropMethod?: Versioned; + faceAlignmentMethod?: Versioned; + faceEmbeddingMethod?: Versioned; + objectDetectionMethod?: Versioned; + sceneDetectionMethod?: Versioned; + mlVersion: number; + errorCount: number; + lastErrorMessage?: string; +} + +export interface FaceDetectionConfig { + method: FaceDetectionMethod; + minFaceSize: number; +} + +export interface ObjectDetectionConfig { + method: ObjectDetectionMethod; + maxNumBoxes: number; + minScore: number; +} + +export interface SceneDetectionConfig { + method: SceneDetectionMethod; + minScore: number; +} + +export interface FaceCropConfig { + enabled: boolean; + method: FaceCropMethod; + padding: number; + maxSize: number; + blobOptions: { + type: string; + quality: number; + }; +} + +export interface FaceAlignmentConfig { + method: FaceAlignmentMethod; +} + +export interface FaceEmbeddingConfig { + method: FaceEmbeddingMethod; + faceSize: number; + generateTsne?: boolean; +} + +export interface FaceClusteringConfig extends ClusteringConfig {} + +export declare type TSNEMetric = "euclidean" | "manhattan"; + +export interface TSNEConfig { + samples: number; + dim: number; + perplexity?: number; + earlyExaggeration?: number; + learningRate?: number; + nIter?: number; + metric?: TSNEMetric; +} + +export interface MLSyncConfig { + batchSize: number; + imageSource: ImageType; + faceDetection: FaceDetectionConfig; + faceCrop: FaceCropConfig; + faceAlignment: FaceAlignmentConfig; + faceEmbedding: FaceEmbeddingConfig; + faceClustering: FaceClusteringConfig; + objectDetection: ObjectDetectionConfig; + sceneDetection: SceneDetectionConfig; + tsne?: TSNEConfig; + mlVersion: number; +} + +export interface MLSearchConfig { + enabled: boolean; +} + +export interface MLSyncContext { + token: string; + userID: number; + config: MLSyncConfig; + shouldUpdateMLVersion: boolean; + + faceDetectionService: FaceDetectionService; + faceCropService: FaceCropService; + faceAlignmentService: FaceAlignmentService; + faceEmbeddingService: FaceEmbeddingService; + faceClusteringService: ClusteringService; + objectDetectionService: ObjectDetectionService; + sceneDetectionService: SceneDetectionService; + + localFilesMap: Map; + outOfSyncFiles: EnteFile[]; + nSyncedFiles: number; + nSyncedFaces: number; + allSyncedFacesMap?: Map>; + allSyncedObjectsMap?: Map>; + tsne?: any; + + error?: Error; + + // oldMLLibraryData: MLLibraryData; + mlLibraryData: MLLibraryData; + + syncQueue: PQueue; + + getEnteWorker(id: number): Promise; + dispose(): Promise; +} + +export interface MLSyncFileContext { + enteFile: EnteFile; + localFile?: globalThis.File; + + oldMlFile?: MlFileData; + newMlFile?: MlFileData; + + tfImage?: tf.Tensor3D; + imageBitmap?: ImageBitmap; + + newDetection?: boolean; + newAlignment?: boolean; +} + +export interface MLLibraryData { + faceClusteringMethod?: Versioned; + faceClusteringResults?: ClusteringResults; + faceClustersWithNoise?: FacesClustersWithNoise; +} + +export declare type MLIndex = "files" | "people"; + +export interface FaceDetectionService { + method: Versioned; + // init(): Promise; + detectFaces(image: ImageBitmap): Promise>; + dispose(): Promise; +} + +export interface ObjectDetectionService { + method: Versioned; + // init(): Promise; + detectObjects( + image: ImageBitmap, + maxNumBoxes: number, + minScore: number, + ): Promise; + dispose(): Promise; +} + +export interface SceneDetectionService { + method: Versioned; + // init(): Promise; + detectScenes( + image: ImageBitmap, + minScore: number, + ): Promise; +} + +export interface FaceCropService { + method: Versioned; + + getFaceCrop( + imageBitmap: ImageBitmap, + face: FaceDetection, + config: FaceCropConfig, + ): Promise; +} + +export interface FaceAlignmentService { + method: Versioned; + getFaceAlignment(faceDetection: FaceDetection): FaceAlignment; +} + +export interface FaceEmbeddingService { + method: Versioned; + faceSize: number; + // init(): Promise; + getFaceEmbeddings( + faceImages: Array, + ): Promise>; + dispose(): Promise; +} + +export interface ClusteringService { + method: Versioned; + + cluster( + input: ClusteringInput, + config: ClusteringConfig, + ): Promise; +} + +export interface ClusteringConfig { + method: ClusteringMethod; + minClusterSize: number; + minSamples?: number; + clusterSelectionEpsilon?: number; + clusterSelectionMethod?: "eom" | "leaf"; + maxDistanceInsideCluster?: number; + minInputSize?: number; + generateDebugInfo?: boolean; +} + +export declare type ClusteringInput = Array>; + +export interface MachineLearningWorker { + closeLocalSyncContext(): Promise; + + syncLocalFile( + token: string, + userID: number, + enteFile: EnteFile, + localFile: globalThis.File, + ): Promise; + + sync(token: string, userID: number): Promise; + + close(): void; +} + +// export class TFImageBitmap { +// imageBitmap: ImageBitmap; +// tfImage: tf.Tensor3D; + +// constructor(imageBitmap: ImageBitmap, tfImage: tf.Tensor3D) { +// this.imageBitmap = imageBitmap; +// this.tfImage = tfImage; +// } + +// async dispose() { +// this.tfImage && (await tf.dispose(this.tfImage)); +// this.imageBitmap && this.imageBitmap.close(); +// } +// } diff --git a/web/apps/photos/src/types/machineLearning/ui.ts b/web/apps/photos/src/types/machineLearning/ui.ts new file mode 100644 index 000000000..cd9f63f18 --- /dev/null +++ b/web/apps/photos/src/types/machineLearning/ui.ts @@ -0,0 +1,7 @@ +export interface IndexStatus { + outOfSyncFilesExists: boolean; + nSyncedFiles: number; + nTotalFiles: number; + localFilesSynced: boolean; + peopleIndexSynced: boolean; +} diff --git a/web/apps/photos/src/types/magicMetadata/index.ts b/web/apps/photos/src/types/magicMetadata/index.ts new file mode 100644 index 000000000..cc01eea84 --- /dev/null +++ b/web/apps/photos/src/types/magicMetadata/index.ts @@ -0,0 +1,29 @@ +export interface MagicMetadataCore { + version: number; + count: number; + header: string; + data: T; +} + +export type EncryptedMagicMetadata = MagicMetadataCore; + +export enum VISIBILITY_STATE { + VISIBLE = 0, + ARCHIVED = 1, + HIDDEN = 2, +} + +export enum SUB_TYPE { + DEFAULT = 0, + DEFAULT_HIDDEN = 1, + QUICK_LINK_COLLECTION = 2, +} + +export interface BulkUpdateMagicMetadataRequest { + metadataList: UpdateMagicMetadataRequest[]; +} + +export interface UpdateMagicMetadataRequest { + id: number; + magicMetadata: EncryptedMagicMetadata; +} diff --git a/web/apps/photos/src/types/publicCollection/index.ts b/web/apps/photos/src/types/publicCollection/index.ts new file mode 100644 index 000000000..7e3203e77 --- /dev/null +++ b/web/apps/photos/src/types/publicCollection/index.ts @@ -0,0 +1,47 @@ +import { TimeStampListItem } from "components/PhotoList"; +import { REPORT_REASON } from "constants/publicCollection"; +import { PublicURL } from "types/collection"; +import { EnteFile } from "types/file"; + +export interface PublicCollectionGalleryContextType { + token: string; + passwordToken: string; + referralCode: string | null; + accessedThroughSharedURL: boolean; + photoListHeader: TimeStampListItem; + photoListFooter: TimeStampListItem; +} + +export interface LocalSavedPublicCollectionFiles { + collectionUID: string; + files: EnteFile[]; +} + +export interface AbuseReportRequest { + url: string; + reason: REPORT_REASON; + details: AbuseReportDetails; +} + +export interface AbuseReportDetails { + fullName: string; + email: string; + comment: string; + signature: string; + onBehalfOf: string; + jobTitle: string; + address: Address; +} + +export interface Address { + street: string; + city: string; + state: string; + country: string; + postalCode: string; + phone: string; +} + +export type SetPublicShareProp = React.Dispatch< + React.SetStateAction +>; diff --git a/web/apps/photos/src/types/search/index.ts b/web/apps/photos/src/types/search/index.ts new file mode 100644 index 000000000..5976db2a3 --- /dev/null +++ b/web/apps/photos/src/types/search/index.ts @@ -0,0 +1,74 @@ +import { FILE_TYPE } from "constants/file"; +import { City } from "services/locationSearchService"; +import { LocationTagData } from "types/entity"; +import { EnteFile } from "types/file"; +import { Person, Thing, WordGroup } from "types/machineLearning"; +import { IndexStatus } from "types/machineLearning/ui"; + +export enum SuggestionType { + DATE = "DATE", + LOCATION = "LOCATION", + COLLECTION = "COLLECTION", + FILE_NAME = "FILE_NAME", + PERSON = "PERSON", + INDEX_STATUS = "INDEX_STATUS", + THING = "THING", + TEXT = "TEXT", + FILE_CAPTION = "FILE_CAPTION", + FILE_TYPE = "FILE_TYPE", + CLIP = "CLIP", + CITY = "CITY", +} + +export interface DateValue { + date?: number; + month?: number; + year?: number; +} + +export interface Suggestion { + type: SuggestionType; + label: string; + value: + | DateValue + | number[] + | Person + | IndexStatus + | Thing + | WordGroup + | LocationTagData + | City + | FILE_TYPE + | ClipSearchScores; + hide?: boolean; +} + +export type Search = { + date?: DateValue; + location?: LocationTagData; + city?: City; + collection?: number; + files?: number[]; + person?: Person; + thing?: Thing; + text?: WordGroup; + fileType?: FILE_TYPE; + clip?: ClipSearchScores; +}; + +export type SearchResultSummary = { + optionName: string; + fileCount: number; +}; + +export interface SearchOption extends Suggestion { + fileCount: number; + previewFiles: EnteFile[]; +} + +export type UpdateSearch = ( + search: Search, + summary: SearchResultSummary, +) => void; + +export type ClipSearchScores = Map; diff --git a/web/apps/photos/src/types/trash/index.ts b/web/apps/photos/src/types/trash/index.ts new file mode 100644 index 000000000..d7e231c1a --- /dev/null +++ b/web/apps/photos/src/types/trash/index.ts @@ -0,0 +1,16 @@ +import { EncryptedEnteFile, EnteFile } from "types/file"; + +export interface TrashItem extends Omit { + file: EnteFile; +} + +export interface EncryptedTrashItem { + file: EncryptedEnteFile; + isDeleted: boolean; + isRestored: boolean; + deleteBy: number; + createdAt: number; + updatedAt: number; +} + +export type Trash = TrashItem[]; diff --git a/web/apps/photos/src/types/upload/index.ts b/web/apps/photos/src/types/upload/index.ts new file mode 100644 index 000000000..0d38f6190 --- /dev/null +++ b/web/apps/photos/src/types/upload/index.ts @@ -0,0 +1,170 @@ +import { + B64EncryptionResult, + LocalFileAttributes, +} from "@ente/shared/crypto/types"; +import { FILE_TYPE } from "constants/file"; +import { Collection } from "types/collection"; +import { + FilePublicMagicMetadata, + FilePublicMagicMetadataProps, + MetadataFileAttributes, + S3FileAttributes, +} from "types/file"; +import { EncryptedMagicMetadata } from "types/magicMetadata"; + +export interface DataStream { + stream: ReadableStream; + chunkCount: number; +} + +export function isDataStream(object: any): object is DataStream { + return "stream" in object; +} + +export type Logger = (message: string) => void; + +export interface Metadata { + title: string; + creationTime: number; + modificationTime: number; + latitude: number; + longitude: number; + fileType: FILE_TYPE; + hasStaticThumbnail?: boolean; + hash?: string; + imageHash?: string; + videoHash?: string; + localID?: number; + version?: number; + deviceFolder?: string; +} + +export interface Location { + latitude: number; + longitude: number; +} + +export interface ParsedMetadataJSON { + creationTime: number; + modificationTime: number; + latitude: number; + longitude: number; +} + +export interface MultipartUploadURLs { + objectKey: string; + partURLs: string[]; + completeURL: string; +} + +export interface FileTypeInfo { + fileType: FILE_TYPE; + exactType: string; + mimeType?: string; + imageType?: string; + videoType?: string; +} + +/* + * ElectronFile is a custom interface that is used to represent + * any file on disk as a File-like object in the Electron desktop app. + * + * This was added to support the auto-resuming of failed uploads + * which needed absolute paths to the files which the + * normal File interface does not provide. + */ +export interface ElectronFile { + name: string; + path: string; + size: number; + lastModified: number; + stream: () => Promise>; + blob: () => Promise; + arrayBuffer: () => Promise; +} + +export interface UploadAsset { + isLivePhoto?: boolean; + file?: File | ElectronFile; + livePhotoAssets?: LivePhotoAssets; + isElectron?: boolean; +} +export interface LivePhotoAssets { + image: globalThis.File | ElectronFile; + video: globalThis.File | ElectronFile; +} + +export interface FileWithCollection extends UploadAsset { + localID: number; + collection?: Collection; + collectionID?: number; +} + +export type ParsedMetadataJSONMap = Map; + +export interface UploadURL { + url: string; + objectKey: string; +} + +export interface FileInMemory { + filedata: Uint8Array | DataStream; + thumbnail: Uint8Array; + hasStaticThumbnail: boolean; +} + +export interface FileWithMetadata + extends Omit { + metadata: Metadata; + localID: number; + pubMagicMetadata: FilePublicMagicMetadata; +} + +export interface EncryptedFile { + file: ProcessedFile; + fileKey: B64EncryptionResult; +} +export interface ProcessedFile { + file: LocalFileAttributes; + thumbnail: LocalFileAttributes; + metadata: LocalFileAttributes; + pubMagicMetadata: EncryptedMagicMetadata; + localID: number; +} +export interface BackupedFile { + file: S3FileAttributes; + thumbnail: S3FileAttributes; + metadata: MetadataFileAttributes; + pubMagicMetadata: EncryptedMagicMetadata; +} + +export interface UploadFile extends BackupedFile { + collectionID: number; + encryptedKey: string; + keyDecryptionNonce: string; +} + +export interface ParsedExtractedMetadata { + location: Location; + creationTime: number; + width: number; + height: number; +} + +// This is used to prompt the user the make upload strategy choice +export interface ImportSuggestion { + rootFolderName: string; + hasNestedFolders: boolean; + hasRootLevelFileWithFolder: boolean; +} + +export interface PublicUploadProps { + token: string; + passwordToken: string; + accessedThroughSharedURL: boolean; +} + +export interface ExtractMetadataResult { + metadata: Metadata; + publicMagicMetadata: FilePublicMagicMetadataProps; +} diff --git a/web/apps/photos/src/types/upload/ui.ts b/web/apps/photos/src/types/upload/ui.ts new file mode 100644 index 000000000..bce381213 --- /dev/null +++ b/web/apps/photos/src/types/upload/ui.ts @@ -0,0 +1,43 @@ +import { UPLOAD_RESULT, UPLOAD_STAGES } from "constants/upload"; + +export type FileID = number; +export type FileName = string; + +export type PercentageUploaded = number; +export type UploadFileNames = Map; + +export interface UploadCounter { + finished: number; + total: number; +} + +export interface InProgressUpload { + localFileID: FileID; + progress: PercentageUploaded; +} + +export interface FinishedUpload { + localFileID: FileID; + result: UPLOAD_RESULT; +} + +export type InProgressUploads = Map; + +export type FinishedUploads = Map; + +export type SegregatedFinishedUploads = Map; + +export interface ProgressUpdater { + setPercentComplete: React.Dispatch>; + setUploadCounter: React.Dispatch>; + setUploadStage: React.Dispatch>; + setInProgressUploads: React.Dispatch< + React.SetStateAction + >; + setFinishedUploads: React.Dispatch< + React.SetStateAction + >; + setUploadFilenames: React.Dispatch>; + setHasLivePhotos: React.Dispatch>; + setUploadProgressView: React.Dispatch>; +} diff --git a/web/apps/photos/src/types/user/index.ts b/web/apps/photos/src/types/user/index.ts new file mode 100644 index 000000000..2b6c4ff45 --- /dev/null +++ b/web/apps/photos/src/types/user/index.ts @@ -0,0 +1,101 @@ +import { Subscription } from "types/billing"; + +export interface FamilyMember { + email: string; + usage: number; + id: string; + isAdmin: boolean; +} + +export interface FamilyData { + storage: number; + expiry: number; + members: FamilyMember[]; +} + +export interface Bonus { + storage: number; + type: string; + validTill: number; + isRevoked: boolean; +} + +export interface BonusData { + storageBonuses: Bonus[]; +} + +export interface UserDetails { + email: string; + usage: number; + fileCount: number; + sharedCollectionCount: number; + subscription: Subscription; + familyData?: FamilyData; + storageBonus?: number; + bonusData?: BonusData; +} + +export interface DeleteChallengeResponse { + allowDelete: boolean; + encryptedChallenge: string; +} + +export interface GetRemoteStoreValueResponse { + value: string; +} + +export interface UpdateRemoteStoreValueRequest { + key: string; + value: string; +} + +export interface SRPAttributes { + srpUserID: string; + srpSalt: string; + memLimit: number; + opsLimit: number; + kekSalt: string; + isEmailMFAEnabled: boolean; +} + +export interface GetSRPAttributesResponse { + attributes: SRPAttributes; +} + +export interface SRPSetupAttributes { + srpSalt: string; + srpVerifier: string; + srpUserID: string; + loginSubKey: string; +} + +export interface SetupSRPRequest { + srpUserID: string; + srpSalt: string; + srpVerifier: string; + srpA: string; +} + +export interface SetupSRPResponse { + setupID: string; + srpB: string; +} + +export interface CompleteSRPSetupRequest { + setupID: string; + srpM1: string; +} + +export interface CompleteSRPSetupResponse { + setupID: string; + srpM2: string; +} + +export interface CreateSRPSessionResponse { + sessionID: string; + srpB: string; +} + +export interface GetFeatureFlagResponse { + disableCFUploadProxy?: boolean; +} diff --git a/web/apps/photos/src/types/watchFolder/index.ts b/web/apps/photos/src/types/watchFolder/index.ts new file mode 100644 index 000000000..bd55704de --- /dev/null +++ b/web/apps/photos/src/types/watchFolder/index.ts @@ -0,0 +1,24 @@ +import { UPLOAD_STRATEGY } from "constants/upload"; +import { ElectronFile } from "types/upload"; + +export interface WatchMappingSyncedFile { + path: string; + uploadedFileID: number; + collectionID: number; +} + +export interface WatchMapping { + rootFolderName: string; + folderPath: string; + uploadStrategy: UPLOAD_STRATEGY; + syncedFiles: WatchMappingSyncedFile[]; + ignoredFiles: string[]; +} + +export interface EventQueueItem { + type: "upload" | "trash"; + folderPath: string; + collectionName?: string; + paths?: string[]; + files?: ElectronFile[]; +} diff --git a/web/apps/photos/src/utils/billing/index.ts b/web/apps/photos/src/utils/billing/index.ts new file mode 100644 index 000000000..5b8ee5dd0 --- /dev/null +++ b/web/apps/photos/src/utils/billing/index.ts @@ -0,0 +1,367 @@ +import { t } from "i18next"; + +import { SetDialogBoxAttributes } from "@ente/shared/components/DialogBox/types"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { REDIRECTS, getRedirectURL } from "constants/redirects"; +import { NextRouter } from "next/router"; +import billingService from "services/billingService"; +import { Plan, Subscription } from "types/billing"; +import { SetLoading } from "types/gallery"; +import { BonusData, UserDetails } from "types/user"; +import { openLink } from "utils/common"; +import { getSubscriptionPurchaseSuccessMessage } from "utils/ui"; +import { getTotalFamilyUsage, isPartOfFamily } from "utils/user/family"; + +const PAYMENT_PROVIDER_STRIPE = "stripe"; +const PAYMENT_PROVIDER_APPSTORE = "appstore"; +const PAYMENT_PROVIDER_PLAYSTORE = "playstore"; +const FREE_PLAN = "free"; + +enum FAILURE_REASON { + AUTHENTICATION_FAILED = "authentication_failed", + REQUIRE_PAYMENT_METHOD = "requires_payment_method", + STRIPE_ERROR = "stripe_error", + CANCELED = "canceled", + SERVER_ERROR = "server_error", +} + +enum RESPONSE_STATUS { + success = "success", + fail = "fail", +} + +const StorageUnits = ["B", "KB", "MB", "GB", "TB"]; + +const ONE_GB = 1024 * 1024 * 1024; + +export function convertBytesToGBs(bytes: number, precision = 0): string { + return (bytes / (1024 * 1024 * 1024)).toFixed(precision); +} + +export function makeHumanReadableStorage( + bytes: number, + { roundUp } = { roundUp: false }, +): string { + if (bytes <= 0) { + return `0 ${t("STORAGE_UNITS.MB")}`; + } + const i = Math.floor(Math.log(bytes) / Math.log(1024)); + + let quantity = bytes / Math.pow(1024, i); + let unit = StorageUnits[i]; + + if (quantity > 100 && unit !== "GB") { + quantity /= 1024; + unit = StorageUnits[i + 1]; + } + + quantity = Number(quantity.toFixed(1)); + + if (bytes >= 10 * ONE_GB) { + if (roundUp) { + quantity = Math.ceil(quantity); + } else { + quantity = Math.round(quantity); + } + } + + return `${quantity} ${t(`STORAGE_UNITS.${unit}`)}`; +} + +export function hasPaidSubscription(subscription: Subscription) { + return ( + subscription && + isSubscriptionActive(subscription) && + subscription.productID !== FREE_PLAN + ); +} + +export function isSubscribed(subscription: Subscription) { + return ( + hasPaidSubscription(subscription) && + !isSubscriptionCancelled(subscription) + ); +} +export function isSubscriptionActive(subscription: Subscription): boolean { + return subscription && subscription.expiryTime > Date.now() * 1000; +} + +export function isOnFreePlan(subscription: Subscription) { + return ( + subscription && + isSubscriptionActive(subscription) && + subscription.productID === FREE_PLAN + ); +} + +// Checks if the bonus data contain any bonus whose type starts with 'ADD_ON' +export function hasAddOnBonus(bonusData?: BonusData) { + return ( + bonusData && + bonusData.storageBonuses && + bonusData.storageBonuses.length > 0 && + bonusData.storageBonuses.some((bonus) => + bonus.type.startsWith("ADD_ON"), + ) + ); +} + +export function isSubscriptionCancelled(subscription: Subscription) { + return subscription && subscription.attributes.isCancelled; +} + +export function getLocalUserSubscription(): Subscription { + return getData(LS_KEYS.SUBSCRIPTION); +} + +export function isUserSubscribedPlan(plan: Plan, subscription: Subscription) { + return ( + isSubscriptionActive(subscription) && + (plan.stripeID === subscription.productID || + plan.iosID === subscription.productID || + plan.androidID === subscription.productID) + ); +} +export function hasStripeSubscription(subscription: Subscription) { + return ( + subscription.paymentProvider.length > 0 && + subscription.paymentProvider === PAYMENT_PROVIDER_STRIPE + ); +} + +export function hasMobileSubscription(subscription: Subscription) { + return ( + hasPaidSubscription(subscription) && + subscription.paymentProvider.length > 0 && + (subscription.paymentProvider === PAYMENT_PROVIDER_APPSTORE || + subscription.paymentProvider === PAYMENT_PROVIDER_PLAYSTORE) + ); +} + +export function hasExceededStorageQuota(userDetails: UserDetails) { + const bonusStorage = userDetails.storageBonus ?? 0; + if (isPartOfFamily(userDetails.familyData)) { + const usage = getTotalFamilyUsage(userDetails.familyData); + return usage > userDetails.familyData.storage + bonusStorage; + } else { + return ( + userDetails.usage > userDetails.subscription.storage + bonusStorage + ); + } +} + +export function isPopularPlan(plan: Plan) { + return plan.storage === 100 * ONE_GB; +} + +export async function updateSubscription( + plan: Plan, + setDialogMessage: SetDialogBoxAttributes, + setLoading: SetLoading, + closePlanSelectorModal: () => null, +) { + try { + setLoading(true); + await billingService.updateSubscription(plan.stripeID); + } catch (err) { + setDialogMessage({ + title: t("ERROR"), + content: t("SUBSCRIPTION_UPDATE_FAILED"), + close: { variant: "critical" }, + }); + } finally { + setLoading(false); + closePlanSelectorModal(); + } +} + +export async function cancelSubscription( + setDialogMessage: SetDialogBoxAttributes, + closePlanSelectorModal: () => void, + setLoading: SetLoading, +) { + try { + setLoading(true); + await billingService.cancelSubscription(); + setDialogMessage({ + title: t("SUCCESS"), + content: t("SUBSCRIPTION_CANCEL_SUCCESS"), + close: { variant: "accent" }, + }); + } catch (e) { + setDialogMessage({ + title: t("ERROR"), + content: t("SUBSCRIPTION_CANCEL_FAILED"), + close: { variant: "critical" }, + }); + } finally { + closePlanSelectorModal(); + setLoading(false); + } +} + +export async function activateSubscription( + setDialogMessage: SetDialogBoxAttributes, + closePlanSelectorModal: () => void, + setLoading: SetLoading, +) { + try { + setLoading(true); + await billingService.activateSubscription(); + setDialogMessage({ + title: t("SUCCESS"), + content: t("SUBSCRIPTION_ACTIVATE_SUCCESS"), + close: { variant: "accent" }, + }); + } catch (e) { + setDialogMessage({ + title: t("ERROR"), + content: t("SUBSCRIPTION_ACTIVATE_FAILED"), + close: { variant: "critical" }, + }); + } finally { + closePlanSelectorModal(); + setLoading(false); + } +} + +export async function updatePaymentMethod( + setDialogMessage: SetDialogBoxAttributes, + setLoading: SetLoading, +) { + try { + setLoading(true); + await billingService.redirectToCustomerPortal(); + } catch (error) { + setLoading(false); + setDialogMessage({ + title: t("ERROR"), + content: t("UNKNOWN_ERROR"), + close: { variant: "critical" }, + }); + } +} + +export async function manageFamilyMethod( + setDialogMessage: SetDialogBoxAttributes, + setLoading: SetLoading, +) { + try { + setLoading(true); + const familyPortalRedirectURL = getRedirectURL(REDIRECTS.FAMILIES); + openLink(familyPortalRedirectURL, true); + } catch (error) { + logError(error, "failed to redirect to family portal"); + setDialogMessage({ + title: t("ERROR"), + content: t("UNKNOWN_ERROR"), + close: { variant: "critical" }, + }); + } finally { + setLoading(false); + } +} + +export async function checkSubscriptionPurchase( + setDialogMessage: SetDialogBoxAttributes, + router: NextRouter, + setLoading: SetLoading, +) { + const { session_id: sessionId, status, reason } = router.query ?? {}; + try { + if (status === RESPONSE_STATUS.fail) { + handleFailureReason(reason as string, setDialogMessage, setLoading); + } else if (status === RESPONSE_STATUS.success) { + try { + const subscription = await billingService.verifySubscription( + sessionId as string, + ); + setDialogMessage( + getSubscriptionPurchaseSuccessMessage(subscription), + ); + } catch (e) { + setDialogMessage({ + title: t("ERROR"), + content: t("SUBSCRIPTION_VERIFICATION_ERROR"), + close: {}, + }); + } + } + } catch (e) { + // ignore + } +} + +function handleFailureReason( + reason: string, + setDialogMessage: SetDialogBoxAttributes, + setLoading: SetLoading, +): void { + logError(Error(reason), "subscription purchase failed"); + switch (reason) { + case FAILURE_REASON.CANCELED: + setDialogMessage({ + title: t("MESSAGE"), + content: t("SUBSCRIPTION_PURCHASE_CANCELLED"), + close: { variant: "critical" }, + }); + break; + case FAILURE_REASON.REQUIRE_PAYMENT_METHOD: + setDialogMessage({ + title: t("UPDATE_PAYMENT_METHOD"), + content: t("UPDATE_PAYMENT_METHOD_MESSAGE"), + + proceed: { + text: t("UPDATE_PAYMENT_METHOD"), + variant: "accent", + action: updatePaymentMethod.bind( + null, + + setDialogMessage, + setLoading, + ), + }, + close: { text: t("CANCEL") }, + }); + break; + + case FAILURE_REASON.AUTHENTICATION_FAILED: + setDialogMessage({ + title: t("UPDATE_PAYMENT_METHOD"), + content: t("STRIPE_AUTHENTICATION_FAILED"), + + proceed: { + text: t("UPDATE_PAYMENT_METHOD"), + variant: "accent", + action: updatePaymentMethod.bind( + null, + + setDialogMessage, + setLoading, + ), + }, + close: { text: t("CANCEL") }, + }); + break; + + default: + setDialogMessage({ + title: t("ERROR"), + content: t("SUBSCRIPTION_PURCHASE_FAILED"), + close: { variant: "critical" }, + }); + } +} + +export function planForSubscription(subscription: Subscription): Plan { + return { + id: subscription.productID, + storage: subscription.storage, + price: subscription.price, + period: subscription.period, + stripeID: subscription.productID, + iosID: subscription.productID, + androidID: subscription.productID, + }; +} diff --git a/web/apps/photos/src/utils/collection/index.ts b/web/apps/photos/src/utils/collection/index.ts new file mode 100644 index 000000000..4b4b347fe --- /dev/null +++ b/web/apps/photos/src/utils/collection/index.ts @@ -0,0 +1,580 @@ +import ElectronAPIs from "@ente/shared/electron"; +import { CustomError } from "@ente/shared/error"; +import { addLogLine } from "@ente/shared/logging"; +import { getAlbumsURL } from "@ente/shared/network/api"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { getUnixTimeInMicroSecondsWithDelta } from "@ente/shared/time"; +import { User } from "@ente/shared/user/types"; +import bs58 from "bs58"; +import { + ADD_TO_NOT_ALLOWED_COLLECTION, + CollectionSummaryType, + CollectionType, + DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME, + HIDE_FROM_COLLECTION_BAR_TYPES, + MOVE_TO_NOT_ALLOWED_COLLECTION, + OPTIONS_NOT_HAVING_COLLECTION_TYPES, + SYSTEM_COLLECTION_TYPES, +} from "constants/collection"; +import { t } from "i18next"; +import isElectron from "is-electron"; +import { + addToCollection, + createAlbum, + getAllLocalCollections, + getLocalCollections, + getNonEmptyCollections, + moveToCollection, + removeFromCollection, + restoreToCollection, + unhideToCollection, + updateCollectionMagicMetadata, + updatePublicCollectionMagicMetadata, + updateSharedCollectionMagicMetadata, +} from "services/collectionService"; +import exportService from "services/export"; +import { getAllLocalFiles, getLocalFiles } from "services/fileService"; +import { + COLLECTION_ROLE, + Collection, + CollectionMagicMetadataProps, + CollectionPublicMagicMetadataProps, + CollectionSummaries, +} from "types/collection"; +import { EnteFile } from "types/file"; +import { SetFilesDownloadProgressAttributes } from "types/gallery"; +import { SUB_TYPE, VISIBILITY_STATE } from "types/magicMetadata"; +import { + getCollectionExportPath, + getUniqueCollectionExportName, +} from "utils/export"; +import { downloadFilesWithProgress } from "utils/file"; +import { isArchivedCollection, updateMagicMetadata } from "utils/magicMetadata"; + +export enum COLLECTION_OPS_TYPE { + ADD, + MOVE, + REMOVE, + RESTORE, + UNHIDE, +} +export async function handleCollectionOps( + type: COLLECTION_OPS_TYPE, + collection: Collection, + selectedFiles: EnteFile[], + selectedCollectionID: number, +) { + switch (type) { + case COLLECTION_OPS_TYPE.ADD: + await addToCollection(collection, selectedFiles); + break; + case COLLECTION_OPS_TYPE.MOVE: + await moveToCollection( + selectedCollectionID, + collection, + selectedFiles, + ); + break; + case COLLECTION_OPS_TYPE.REMOVE: + await removeFromCollection(collection.id, selectedFiles); + break; + case COLLECTION_OPS_TYPE.RESTORE: + await restoreToCollection(collection, selectedFiles); + break; + case COLLECTION_OPS_TYPE.UNHIDE: + await unhideToCollection(collection, selectedFiles); + break; + default: + throw Error(CustomError.INVALID_COLLECTION_OPERATION); + } +} + +export function getSelectedCollection( + collectionID: number, + collections: Collection[], +) { + return collections.find((collection) => collection.id === collectionID); +} + +export async function downloadCollectionHelper( + collectionID: number, + setFilesDownloadProgressAttributes: SetFilesDownloadProgressAttributes, +) { + try { + const allFiles = await getAllLocalFiles(); + const collectionFiles = allFiles.filter( + (file) => file.collectionID === collectionID, + ); + const allCollections = await getAllLocalCollections(); + const collection = allCollections.find( + (collection) => collection.id === collectionID, + ); + if (!collection) { + throw Error("collection not found"); + } + await downloadCollectionFiles( + collection.name, + collectionFiles, + setFilesDownloadProgressAttributes, + ); + } catch (e) { + logError(e, "download collection failed "); + } +} + +export async function downloadDefaultHiddenCollectionHelper( + setFilesDownloadProgressAttributes: SetFilesDownloadProgressAttributes, +) { + try { + const hiddenCollections = await getLocalCollections("hidden"); + const defaultHiddenCollectionsIds = + getDefaultHiddenCollectionIDs(hiddenCollections); + const hiddenFiles = await getLocalFiles("hidden"); + const defaultHiddenCollectionFiles = hiddenFiles.filter((file) => + defaultHiddenCollectionsIds.has(file.collectionID), + ); + await downloadCollectionFiles( + DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME, + defaultHiddenCollectionFiles, + setFilesDownloadProgressAttributes, + ); + } catch (e) { + logError(e, "download hidden files failed "); + } +} + +export async function downloadCollectionFiles( + collectionName: string, + collectionFiles: EnteFile[], + setFilesDownloadProgressAttributes: SetFilesDownloadProgressAttributes, +) { + if (!collectionFiles.length) { + return; + } + let downloadDirPath: string; + if (isElectron()) { + const selectedDir = await ElectronAPIs.selectDirectory(); + if (!selectedDir) { + return; + } + downloadDirPath = await createCollectionDownloadFolder( + selectedDir, + collectionName, + ); + } + await downloadFilesWithProgress( + collectionFiles, + downloadDirPath, + setFilesDownloadProgressAttributes, + ); +} + +async function createCollectionDownloadFolder( + downloadDirPath: string, + collectionName: string, +) { + const collectionDownloadName = getUniqueCollectionExportName( + downloadDirPath, + collectionName, + ); + const collectionDownloadPath = getCollectionExportPath( + downloadDirPath, + collectionDownloadName, + ); + await exportService.checkExistsAndCreateDir(collectionDownloadPath); + return collectionDownloadPath; +} + +export function appendCollectionKeyToShareURL( + url: string, + collectionKey: string, +) { + if (!url) { + return null; + } + + const sharableURL = new URL(url); + const albumsURL = new URL(getAlbumsURL()); + + sharableURL.protocol = albumsURL.protocol; + sharableURL.host = albumsURL.host; + sharableURL.pathname = albumsURL.pathname; + + const bytes = Buffer.from(collectionKey, "base64"); + sharableURL.hash = bs58.encode(bytes); + return sharableURL.href; +} + +const _intSelectOption = (i: number) => { + const label = i === 0 ? t("NO_DEVICE_LIMIT") : i.toString(); + return { label, value: i }; +}; + +export function getDeviceLimitOptions() { + return [0, 2, 5, 10, 25, 50].map((i) => _intSelectOption(i)); +} + +export const shareExpiryOptions = () => [ + { label: t("NEVER"), value: () => 0 }, + { + label: t("AFTER_TIME.HOUR"), + value: () => getUnixTimeInMicroSecondsWithDelta({ hours: 1 }), + }, + { + label: t("AFTER_TIME.DAY"), + value: () => getUnixTimeInMicroSecondsWithDelta({ days: 1 }), + }, + { + label: t("AFTER_TIME.WEEK"), + value: () => getUnixTimeInMicroSecondsWithDelta({ days: 7 }), + }, + { + label: t("AFTER_TIME.MONTH"), + value: () => getUnixTimeInMicroSecondsWithDelta({ months: 1 }), + }, + { + label: t("AFTER_TIME.YEAR"), + value: () => getUnixTimeInMicroSecondsWithDelta({ years: 1 }), + }, +]; + +export const changeCollectionVisibility = async ( + collection: Collection, + visibility: VISIBILITY_STATE, +) => { + try { + const updatedMagicMetadataProps: CollectionMagicMetadataProps = { + visibility, + }; + + const user: User = getData(LS_KEYS.USER); + if (collection.owner.id === user.id) { + const updatedMagicMetadata = await updateMagicMetadata( + updatedMagicMetadataProps, + collection.magicMetadata, + collection.key, + ); + + await updateCollectionMagicMetadata( + collection, + updatedMagicMetadata, + ); + } else { + const updatedMagicMetadata = await updateMagicMetadata( + updatedMagicMetadataProps, + collection.sharedMagicMetadata, + collection.key, + ); + await updateSharedCollectionMagicMetadata( + collection, + updatedMagicMetadata, + ); + } + } catch (e) { + logError(e, "change collection visibility failed"); + throw e; + } +}; + +export const changeCollectionSortOrder = async ( + collection: Collection, + asc: boolean, +) => { + try { + const updatedPublicMagicMetadataProps: CollectionPublicMagicMetadataProps = + { + asc, + }; + + const updatedPubMagicMetadata = await updateMagicMetadata( + updatedPublicMagicMetadataProps, + collection.pubMagicMetadata, + collection.key, + ); + + await updatePublicCollectionMagicMetadata( + collection, + updatedPubMagicMetadata, + ); + } catch (e) { + logError(e, "change collection sort order failed"); + } +}; + +export const changeCollectionOrder = async ( + collection: Collection, + order: number, +) => { + try { + const updatedMagicMetadataProps: CollectionMagicMetadataProps = { + order, + }; + + const updatedMagicMetadata = await updateMagicMetadata( + updatedMagicMetadataProps, + collection.magicMetadata, + collection.key, + ); + + await updateCollectionMagicMetadata(collection, updatedMagicMetadata); + } catch (e) { + logError(e, "change collection order failed"); + } +}; + +export const changeCollectionSubType = async ( + collection: Collection, + subType: SUB_TYPE, +) => { + try { + const updatedMagicMetadataProps: CollectionMagicMetadataProps = { + subType: subType, + }; + + const updatedMagicMetadata = await updateMagicMetadata( + updatedMagicMetadataProps, + collection.magicMetadata, + collection.key, + ); + await updateCollectionMagicMetadata(collection, updatedMagicMetadata); + } catch (e) { + logError(e, "change collection subType failed"); + throw e; + } +}; + +export const getArchivedCollections = (collections: Collection[]) => { + return new Set( + collections + .filter(isArchivedCollection) + .map((collection) => collection.id), + ); +}; + +export const getDefaultHiddenCollectionIDs = (collections: Collection[]) => { + return new Set( + collections + .filter(isDefaultHiddenCollection) + .map((collection) => collection.id), + ); +}; + +export const hasNonSystemCollections = ( + collectionSummaries: CollectionSummaries, +) => { + for (const collectionSummary of collectionSummaries.values()) { + if (!isSystemCollection(collectionSummary.type)) return true; + } + return false; +}; + +export const isMoveToAllowedCollection = (type: CollectionSummaryType) => { + return !MOVE_TO_NOT_ALLOWED_COLLECTION.has(type); +}; + +export const isAddToAllowedCollection = (type: CollectionSummaryType) => { + return !ADD_TO_NOT_ALLOWED_COLLECTION.has(type); +}; + +export const isSystemCollection = (type: CollectionSummaryType) => { + return SYSTEM_COLLECTION_TYPES.has(type); +}; + +export const shouldShowOptions = (type: CollectionSummaryType) => { + return !OPTIONS_NOT_HAVING_COLLECTION_TYPES.has(type); +}; +export const showEmptyTrashQuickOption = (type: CollectionSummaryType) => { + return type === CollectionSummaryType.trash; +}; +export const showDownloadQuickOption = (type: CollectionSummaryType) => { + return ( + type === CollectionSummaryType.folder || + type === CollectionSummaryType.favorites || + type === CollectionSummaryType.album || + type === CollectionSummaryType.uncategorized || + type === CollectionSummaryType.hiddenItems || + type === CollectionSummaryType.incomingShareViewer || + type === CollectionSummaryType.incomingShareCollaborator || + type === CollectionSummaryType.outgoingShare || + type === CollectionSummaryType.sharedOnlyViaLink || + type === CollectionSummaryType.archived || + type === CollectionSummaryType.pinned + ); +}; +export const showShareQuickOption = (type: CollectionSummaryType) => { + return ( + type === CollectionSummaryType.folder || + type === CollectionSummaryType.album || + type === CollectionSummaryType.outgoingShare || + type === CollectionSummaryType.sharedOnlyViaLink || + type === CollectionSummaryType.archived || + type === CollectionSummaryType.incomingShareViewer || + type === CollectionSummaryType.incomingShareCollaborator || + type === CollectionSummaryType.pinned + ); +}; +export const shouldBeShownOnCollectionBar = (type: CollectionSummaryType) => { + return !HIDE_FROM_COLLECTION_BAR_TYPES.has(type); +}; + +export const getUserOwnedCollections = (collections: Collection[]) => { + const user: User = getData(LS_KEYS.USER); + if (!user?.id) { + throw Error("user missing"); + } + return collections.filter((collection) => collection.owner.id === user.id); +}; + +export const isDefaultHiddenCollection = (collection: Collection) => + collection.magicMetadata?.data.subType === SUB_TYPE.DEFAULT_HIDDEN; + +export const isHiddenCollection = (collection: Collection) => + collection.magicMetadata?.data.visibility === VISIBILITY_STATE.HIDDEN; + +export const isQuickLinkCollection = (collection: Collection) => + collection.magicMetadata?.data.subType === SUB_TYPE.QUICK_LINK_COLLECTION; + +export function isOutgoingShare(collection: Collection, user: User): boolean { + return collection.owner.id === user.id && collection.sharees?.length > 0; +} + +export function isIncomingShare(collection: Collection, user: User) { + return collection.owner.id !== user.id; +} + +export function isIncomingViewerShare(collection: Collection, user: User) { + const sharee = collection.sharees?.find((sharee) => sharee.id === user.id); + return sharee?.role === COLLECTION_ROLE.VIEWER; +} + +export function isIncomingCollabShare(collection: Collection, user: User) { + const sharee = collection.sharees?.find((sharee) => sharee.id === user.id); + return sharee?.role === COLLECTION_ROLE.COLLABORATOR; +} + +export function isSharedOnlyViaLink(collection: Collection) { + return collection.publicURLs?.length && !collection.sharees?.length; +} + +export function isValidMoveTarget( + sourceCollectionID: number, + targetCollection: Collection, + user: User, +) { + return ( + sourceCollectionID !== targetCollection.id && + !isHiddenCollection(targetCollection) && + !isQuickLinkCollection(targetCollection) && + !isIncomingShare(targetCollection, user) + ); +} + +export function isValidReplacementAlbum( + collection: Collection, + user: User, + wantedCollectionName: string, +) { + return ( + collection.name === wantedCollectionName && + (collection.type === CollectionType.album || + collection.type === CollectionType.folder || + collection.type === CollectionType.uncategorized) && + !isHiddenCollection(collection) && + !isQuickLinkCollection(collection) && + !isIncomingShare(collection, user) + ); +} + +export function getCollectionNameMap( + collections: Collection[], +): Map { + return new Map( + collections.map((collection) => [collection.id, collection.name]), + ); +} + +export function getNonEmptyPersonalCollections( + collections: Collection[], + personalFiles: EnteFile[], + user: User, +): Collection[] { + if (!user?.id) { + throw Error("user missing"); + } + const nonEmptyCollections = getNonEmptyCollections( + collections, + personalFiles, + ); + const personalCollections = nonEmptyCollections.filter( + (collection) => collection.owner.id === user?.id, + ); + return personalCollections; +} + +export function getNonHiddenCollections( + collections: Collection[], +): Collection[] { + return collections.filter((collection) => !isHiddenCollection(collection)); +} + +export function getHiddenCollections(collections: Collection[]): Collection[] { + return collections.filter((collection) => isHiddenCollection(collection)); +} + +export async function splitNormalAndHiddenCollections( + collections: Collection[], +): Promise<{ + normalCollections: Collection[]; + hiddenCollections: Collection[]; +}> { + const normalCollections = []; + const hiddenCollections = []; + for (const collection of collections) { + if (isHiddenCollection(collection)) { + hiddenCollections.push(collection); + } else { + normalCollections.push(collection); + } + } + return { normalCollections, hiddenCollections }; +} + +export function constructCollectionNameMap( + collections: Collection[], +): Map { + return new Map( + (collections ?? []).map((collection) => [ + collection.id, + getCollectionUserFacingName(collection), + ]), + ); +} + +export const getCollectionUserFacingName = (collection: Collection) => { + if (isDefaultHiddenCollection(collection)) { + return DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME; + } + return collection.name; +}; + +export const getOrCreateAlbum = async ( + albumName: string, + existingCollections: Collection[], +) => { + const user: User = getData(LS_KEYS.USER); + if (!user?.id) { + throw Error("user missing"); + } + for (const collection of existingCollections) { + if (isValidReplacementAlbum(collection, user, albumName)) { + addLogLine( + `Found existing album ${albumName} with id ${collection.id}`, + ); + return collection; + } + } + const album = await createAlbum(albumName); + addLogLine(`Created new album ${albumName} with id ${album.id}`); + return album; +}; diff --git a/web/apps/photos/src/utils/comlink/ComlinkConvertWorker.ts b/web/apps/photos/src/utils/comlink/ComlinkConvertWorker.ts new file mode 100644 index 000000000..3dc034160 --- /dev/null +++ b/web/apps/photos/src/utils/comlink/ComlinkConvertWorker.ts @@ -0,0 +1,30 @@ +import { ComlinkWorker } from "@ente/shared/worker/comlinkWorker"; +import { Remote } from "comlink"; +import { runningInBrowser } from "utils/common"; +import { DedicatedConvertWorker } from "worker/convert.worker"; + +class ComlinkConvertWorker { + private comlinkWorkerInstance: Remote; + + async getInstance() { + if (!this.comlinkWorkerInstance) { + this.comlinkWorkerInstance = + await getDedicatedConvertWorker().remote; + } + return this.comlinkWorkerInstance; + } +} + +export const getDedicatedConvertWorker = () => { + if (runningInBrowser()) { + const cryptoComlinkWorker = new ComlinkWorker< + typeof DedicatedConvertWorker + >( + "ente-convert-worker", + new Worker(new URL("worker/convert.worker.ts", import.meta.url)), + ); + return cryptoComlinkWorker; + } +}; + +export default new ComlinkConvertWorker(); diff --git a/web/apps/photos/src/utils/comlink/ComlinkFFmpegWorker.ts b/web/apps/photos/src/utils/comlink/ComlinkFFmpegWorker.ts new file mode 100644 index 000000000..48e638d7f --- /dev/null +++ b/web/apps/photos/src/utils/comlink/ComlinkFFmpegWorker.ts @@ -0,0 +1,25 @@ +import { ComlinkWorker } from "@ente/shared/worker/comlinkWorker"; +import { Remote } from "comlink"; +import { DedicatedFFmpegWorker } from "worker/ffmpeg.worker"; + +class ComlinkFFmpegWorker { + private comlinkWorkerInstance: Promise>; + + async getInstance() { + if (!this.comlinkWorkerInstance) { + const comlinkWorker = getDedicatedFFmpegWorker(); + this.comlinkWorkerInstance = comlinkWorker.remote; + } + return this.comlinkWorkerInstance; + } +} + +const getDedicatedFFmpegWorker = () => { + const cryptoComlinkWorker = new ComlinkWorker( + "ente-ffmpeg-worker", + new Worker(new URL("worker/ffmpeg.worker.ts", import.meta.url)), + ); + return cryptoComlinkWorker; +}; + +export default new ComlinkFFmpegWorker(); diff --git a/web/apps/photos/src/utils/comlink/ComlinkMLWorker.ts b/web/apps/photos/src/utils/comlink/ComlinkMLWorker.ts new file mode 100644 index 000000000..f61754c6b --- /dev/null +++ b/web/apps/photos/src/utils/comlink/ComlinkMLWorker.ts @@ -0,0 +1,13 @@ +import { ComlinkWorker } from "@ente/shared/worker/comlinkWorker"; +import { runningInBrowser } from "utils/common"; +import { DedicatedMLWorker } from "worker/ml.worker"; + +export const getDedicatedMLWorker = (name: string) => { + if (runningInBrowser()) { + const cryptoComlinkWorker = new ComlinkWorker( + name ?? "ente-ml-worker", + new Worker(new URL("worker/ml.worker.ts", import.meta.url)), + ); + return cryptoComlinkWorker; + } +}; diff --git a/web/apps/photos/src/utils/comlink/ComlinkSearchWorker.ts b/web/apps/photos/src/utils/comlink/ComlinkSearchWorker.ts new file mode 100644 index 000000000..971f12338 --- /dev/null +++ b/web/apps/photos/src/utils/comlink/ComlinkSearchWorker.ts @@ -0,0 +1,30 @@ +import { ComlinkWorker } from "@ente/shared/worker/comlinkWorker"; +import { Remote } from "comlink"; +import { runningInBrowser } from "utils/common"; +import { DedicatedSearchWorker } from "worker/search.worker"; + +class ComlinkSearchWorker { + private comlinkWorkerInstance: Remote; + + async getInstance() { + if (!this.comlinkWorkerInstance) { + this.comlinkWorkerInstance = + await getDedicatedSearchWorker().remote; + } + return this.comlinkWorkerInstance; + } +} + +export const getDedicatedSearchWorker = () => { + if (runningInBrowser()) { + const cryptoComlinkWorker = new ComlinkWorker< + typeof DedicatedSearchWorker + >( + "ente-search-worker", + new Worker(new URL("worker/search.worker.ts", import.meta.url)), + ); + return cryptoComlinkWorker; + } +}; + +export default new ComlinkSearchWorker(); diff --git a/web/apps/photos/src/utils/common/concurrency.ts b/web/apps/photos/src/utils/common/concurrency.ts new file mode 100644 index 000000000..bba75f009 --- /dev/null +++ b/web/apps/photos/src/utils/common/concurrency.ts @@ -0,0 +1,5 @@ +import { runningInBrowser } from "."; + +export const getConcurrency = () => + runningInBrowser() && + Math.max(2, Math.ceil(navigator.hardwareConcurrency / 2)); diff --git a/web/apps/photos/src/utils/common/deviceDetection.ts b/web/apps/photos/src/utils/common/deviceDetection.ts new file mode 100644 index 000000000..7ce55bba7 --- /dev/null +++ b/web/apps/photos/src/utils/common/deviceDetection.ts @@ -0,0 +1,69 @@ +export enum OS { + WP = "wp", + ANDROID = "android", + IOS = "ios", + UNKNOWN = "unknown", + WINDOWS = "windows", + MAC = "mac", + LINUX = "linux", +} + +declare global { + interface Window { + opera: any; + MSStream: any; + } +} + +export const getDeviceOS = () => { + let userAgent = ""; + if ( + typeof window !== "undefined" && + typeof window.navigator !== "undefined" + ) { + userAgent = navigator.userAgent || navigator.vendor || window.opera; + } + // Windows Phone must come first because its UA also contains "Android" + if (/windows phone/i.test(userAgent)) { + return OS.WP; + } + + if (/android/i.test(userAgent)) { + return OS.ANDROID; + } + + // iOS detection from: http://stackoverflow.com/a/9039885/177710 + if (/(iPad|iPhone|iPod)/g.test(userAgent) && !window.MSStream) { + return OS.IOS; + } + + // credit: https://github.com/MikeKovarik/platform-detect/blob/master/os.mjs + if (userAgent.includes("Windows")) { + return OS.WINDOWS; + } + if (userAgent.includes("Macintosh")) { + return OS.MAC; + } + // Linux must be last + if (userAgent.includes("Linux")) { + return OS.LINUX; + } + + return OS.UNKNOWN; +}; + +export const isMobileOrTable = () => { + let check = false; + (function (a) { + if ( + /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test( + a, + ) || + /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test( + a.substr(0, 4), + ) + ) + check = true; + })(navigator.userAgent || navigator.vendor || window.opera); + return check; +}; diff --git a/web/apps/photos/src/utils/common/index.ts b/web/apps/photos/src/utils/common/index.ts new file mode 100644 index 000000000..efc9a3553 --- /dev/null +++ b/web/apps/photos/src/utils/common/index.ts @@ -0,0 +1,149 @@ +import { APP_DOWNLOAD_URL } from "@ente/shared/constants/urls"; +import { CustomError } from "@ente/shared/error"; +import isElectron from "is-electron"; + +export function checkConnectivity() { + if (navigator.onLine) { + return true; + } + throw new Error(CustomError.NO_INTERNET_CONNECTION); +} + +export function runningInBrowser() { + return typeof window !== "undefined"; +} + +export function runningInWorker() { + return typeof importScripts === "function"; +} + +export function runningInElectron() { + return isElectron(); +} + +export function runningInChrome(includeMobile: boolean) { + try { + const userAgentData = navigator["userAgentData"]; + const chromeBrand = userAgentData?.brands?.filter( + (b) => b.brand === "Google Chrome" || b.brand === "Chromium", + )?.[0]; + return chromeBrand && (includeMobile || userAgentData.mobile === false); + } catch (error) { + console.error("Error in runningInChrome: ", error); + return false; + } +} + +export function offscreenCanvasSupported() { + return !(typeof OffscreenCanvas === "undefined"); +} + +export function webglSupported() { + try { + const canvas = document.createElement("canvas"); + const gl = canvas.getContext("webgl"); + return gl && gl instanceof WebGLRenderingContext; + } catch (error) { + console.error("Error in webglSupported: ", error); + return false; + } +} + +export async function sleep(time: number) { + await new Promise((resolve) => { + setTimeout(() => resolve(null), time); + }); +} + +export function downloadApp() { + openLink(APP_DOWNLOAD_URL, true); +} + +export function reverseString(title: string) { + return title + ?.split(" ") + .reduce((reversedString, currWord) => `${currWord} ${reversedString}`); +} + +export function initiateEmail(email: string) { + const a = document.createElement("a"); + a.href = "mailto:" + email; + a.rel = "noreferrer noopener"; + a.click(); +} +export const promiseWithTimeout = async ( + request: Promise, + timeout: number, +): Promise => { + const timeoutRef = { current: null }; + const rejectOnTimeout = new Promise((_, reject) => { + timeoutRef.current = setTimeout( + () => reject(Error(CustomError.WAIT_TIME_EXCEEDED)), + timeout, + ); + }); + const requestWithTimeOutCancellation = async () => { + const resp = await request; + clearTimeout(timeoutRef.current); + return resp; + }; + return await Promise.race([ + requestWithTimeOutCancellation(), + rejectOnTimeout, + ]); +}; + +export const preloadImage = (imgBasePath: string) => { + const srcSet = []; + for (let i = 1; i <= 3; i++) { + srcSet.push(`${imgBasePath}/${i}x.png ${i}x`); + } + new Image().srcset = srcSet.join(","); +}; +export function openLink(href: string, newTab?: boolean) { + const a = document.createElement("a"); + a.href = href; + if (newTab) { + a.target = "_blank"; + } + a.rel = "noreferrer noopener"; + a.click(); +} + +export async function waitAndRun( + waitPromise: Promise, + task: () => Promise, +) { + if (waitPromise && isPromise(waitPromise)) { + await waitPromise; + } + await task(); +} + +function isPromise(p: any) { + if (typeof p === "object" && typeof p.then === "function") { + return true; + } + + return false; +} + +export function isClipboardItemPresent() { + return typeof ClipboardItem !== "undefined"; +} + +export function batch(arr: T[], batchSize: number): T[][] { + const batches: T[][] = []; + for (let i = 0; i < arr.length; i += batchSize) { + batches.push(arr.slice(i, i + batchSize)); + } + return batches; +} + +export const mergeMaps = (map1: Map, map2: Map) => { + const mergedMap = new Map(map1); + map2.forEach((value, key) => { + mergedMap.set(key, value); + }); + return mergedMap; +}; diff --git a/web/apps/photos/src/utils/common/job.ts b/web/apps/photos/src/utils/common/job.ts new file mode 100644 index 000000000..7bc37afb4 --- /dev/null +++ b/web/apps/photos/src/utils/common/job.ts @@ -0,0 +1,82 @@ +import { addLogLine } from "@ente/shared/logging"; +import { JobConfig, JobResult, JobState } from "types/common/job"; + +export class SimpleJob { + private config: JobConfig; + private runCallback: () => Promise; + private state: JobState; + private stopped: boolean; + private intervalSec: number; + private nextTimeoutId: ReturnType; + + constructor(config: JobConfig, runCallback: () => Promise) { + this.config = config; + this.runCallback = runCallback; + this.state = "NotScheduled"; + this.stopped = true; + this.intervalSec = this.config.intervalSec; + } + + public resetInterval() { + this.intervalSec = this.config.intervalSec; + } + + public start() { + this.stopped = false; + this.resetInterval(); + if (this.state !== "Running") { + this.scheduleNext(); + } else { + addLogLine("Job already running, not scheduling"); + } + } + + private scheduleNext() { + if (this.state === "Scheduled" || this.nextTimeoutId) { + this.clearScheduled(); + } + + this.nextTimeoutId = setTimeout( + () => this.run(), + this.intervalSec * 1000, + ); + this.state = "Scheduled"; + addLogLine("Scheduled next job after: ", this.intervalSec); + } + + async run() { + this.nextTimeoutId = undefined; + this.state = "Running"; + + try { + const jobResult = await this.runCallback(); + if (jobResult.shouldBackoff) { + this.intervalSec = Math.min( + this.config.maxItervalSec, + this.intervalSec * this.config.backoffMultiplier, + ); + } else { + this.resetInterval(); + } + addLogLine("Job completed"); + } catch (e) { + console.error("Error while running Job: ", e); + } finally { + this.state = "NotScheduled"; + !this.stopped && this.scheduleNext(); + } + } + + // currently client is responsible to terminate running job + public stop() { + this.stopped = true; + this.clearScheduled(); + } + + private clearScheduled() { + clearTimeout(this.nextTimeoutId); + this.nextTimeoutId = undefined; + this.state = "NotScheduled"; + addLogLine("Cleared next job"); + } +} diff --git a/web/apps/photos/src/utils/common/promiseTimeout.ts b/web/apps/photos/src/utils/common/promiseTimeout.ts new file mode 100644 index 000000000..bf5a79e2a --- /dev/null +++ b/web/apps/photos/src/utils/common/promiseTimeout.ts @@ -0,0 +1,22 @@ +import { CustomError } from "@ente/shared/error"; + +export const promiseWithTimeout = async ( + request: Promise, + timeout: number, +) => { + const timeoutRef = { current: null }; + const rejectOnTimeout = new Promise((_, reject) => { + timeoutRef.current = setTimeout( + () => reject(Error(CustomError.WAIT_TIME_EXCEEDED)), + timeout, + ); + }); + return await Promise.race([ + (async () => { + const resp = await request; + clearTimeout(timeoutRef.current); + return resp; + })(), + rejectOnTimeout, + ]); +}; diff --git a/web/apps/photos/src/utils/crypto/index.ts b/web/apps/photos/src/utils/crypto/index.ts new file mode 100644 index 000000000..21a296110 --- /dev/null +++ b/web/apps/photos/src/utils/crypto/index.ts @@ -0,0 +1,23 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { getData, LS_KEYS } from "@ente/shared/storage/localStorage"; +import { getActualKey } from "@ente/shared/user"; + +export async function decryptDeleteAccountChallenge( + encryptedChallenge: string, +) { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const masterKey = await getActualKey(); + const keyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); + const secretKey = await cryptoWorker.decryptB64( + keyAttributes.encryptedSecretKey, + keyAttributes.secretKeyDecryptionNonce, + masterKey, + ); + const b64DecryptedChallenge = await cryptoWorker.boxSealOpen( + encryptedChallenge, + keyAttributes.publicKey, + secretKey, + ); + const utf8DecryptedChallenge = atob(b64DecryptedChallenge); + return utf8DecryptedChallenge; +} diff --git a/web/apps/photos/src/utils/embedding.ts b/web/apps/photos/src/utils/embedding.ts new file mode 100644 index 000000000..dde04fd8b --- /dev/null +++ b/web/apps/photos/src/utils/embedding.ts @@ -0,0 +1,18 @@ +import { Embedding } from "types/embedding"; + +export const getLatestVersionEmbeddings = (embeddings: Embedding[]) => { + const latestVersionEntities = new Map(); + embeddings.forEach((embedding) => { + if (!embedding?.fileID) { + return; + } + const existingEmbeddings = latestVersionEntities.get(embedding.fileID); + if ( + !existingEmbeddings || + existingEmbeddings.updatedAt < embedding.updatedAt + ) { + latestVersionEntities.set(embedding.fileID, embedding); + } + }); + return Array.from(latestVersionEntities.values()); +}; diff --git a/web/apps/photos/src/utils/entity.ts b/web/apps/photos/src/utils/entity.ts new file mode 100644 index 000000000..7d8ad28b3 --- /dev/null +++ b/web/apps/photos/src/utils/entity.ts @@ -0,0 +1,12 @@ +import { Entity } from "types/entity"; + +export const getLatestVersionEntities = (entities: Entity[]) => { + const latestVersionEntities = new Map>(); + entities.forEach((entity) => { + const existingEntity = latestVersionEntities.get(entity.id); + if (!existingEntity || existingEntity.updatedAt < entity.updatedAt) { + latestVersionEntities.set(entity.id, entity); + } + }); + return Array.from(latestVersionEntities.values()); +}; diff --git a/web/apps/photos/src/utils/error/ui.ts b/web/apps/photos/src/utils/error/ui.ts new file mode 100644 index 000000000..fd7f09c0e --- /dev/null +++ b/web/apps/photos/src/utils/error/ui.ts @@ -0,0 +1,22 @@ +import { t } from "i18next"; + +import { CustomError, parseSharingErrorCodes } from "@ente/shared/error"; + +export const handleSharingErrors = (error) => { + const parsedError = parseSharingErrorCodes(error); + let errorMessage = ""; + switch (parsedError.message) { + case CustomError.BAD_REQUEST: + errorMessage = t("SHARING_BAD_REQUEST_ERROR"); + break; + case CustomError.SUBSCRIPTION_NEEDED: + errorMessage = t("SHARING_DISABLED_FOR_FREE_ACCOUNTS"); + break; + case CustomError.NOT_FOUND: + errorMessage = t("USER_DOES_NOT_EXIST"); + break; + default: + errorMessage = `${t("UNKNOWN_ERROR")} ${parsedError.message}`; + } + return errorMessage; +}; diff --git a/web/apps/photos/src/utils/export/index.ts b/web/apps/photos/src/utils/export/index.ts new file mode 100644 index 000000000..35dfcf4cc --- /dev/null +++ b/web/apps/photos/src/utils/export/index.ts @@ -0,0 +1,309 @@ +import exportService from "services/export"; +import { Collection } from "types/collection"; +import { + CollectionExportNames, + ExportRecord, + FileExportNames, +} from "types/export"; + +import { EnteFile } from "types/file"; + +import { formatDateTimeShort } from "@ente/shared/time/format"; +import { + ENTE_METADATA_FOLDER, + ENTE_TRASH_FOLDER, + ExportStage, +} from "constants/export"; +import sanitize from "sanitize-filename"; +import { Metadata } from "types/upload"; +import { getCollectionUserFacingName } from "utils/collection"; +import { splitFilenameAndExtension } from "utils/file"; + +export const getExportRecordFileUID = (file: EnteFile) => + `${file.id}_${file.collectionID}_${file.updationTime}`; + +export const getCollectionIDFromFileUID = (fileUID: string) => + Number(fileUID.split("_")[1]); + +export const convertCollectionIDExportNameObjectToMap = ( + collectionExportNames: CollectionExportNames, +): Map => { + return new Map( + Object.entries(collectionExportNames ?? {}).map((e) => { + return [Number(e[0]), String(e[1])]; + }), + ); +}; + +export const convertFileIDExportNameObjectToMap = ( + fileExportNames: FileExportNames, +): Map => { + return new Map( + Object.entries(fileExportNames ?? {}).map((e) => { + return [String(e[0]), String(e[1])]; + }), + ); +}; + +export const getRenamedExportedCollections = ( + collections: Collection[], + exportRecord: ExportRecord, +) => { + if (!exportRecord?.collectionExportNames) { + return []; + } + const collectionIDExportNameMap = convertCollectionIDExportNameObjectToMap( + exportRecord.collectionExportNames, + ); + const renamedCollections = collections.filter((collection) => { + if (collectionIDExportNameMap.has(collection.id)) { + const currentExportName = collectionIDExportNameMap.get( + collection.id, + ); + + const collectionExportName = + getCollectionUserFacingName(collection); + + if (currentExportName === collectionExportName) { + return false; + } + const hasNumberedSuffix = currentExportName.match(/\(\d+\)$/); + const currentExportNameWithoutNumberedSuffix = hasNumberedSuffix + ? currentExportName.replace(/\(\d+\)$/, "") + : currentExportName; + + return ( + collectionExportName !== currentExportNameWithoutNumberedSuffix + ); + } + return false; + }); + return renamedCollections; +}; + +export const getDeletedExportedCollections = ( + collections: Collection[], + exportRecord: ExportRecord, +) => { + if (!exportRecord?.collectionExportNames) { + return []; + } + const presentCollections = new Set( + collections.map((collection) => collection.id), + ); + const deletedExportedCollections = Object.keys( + exportRecord?.collectionExportNames, + ) + .map(Number) + .filter((collectionID) => { + if (!presentCollections.has(collectionID)) { + return true; + } + return false; + }); + return deletedExportedCollections; +}; + +export const getUnExportedFiles = ( + allFiles: EnteFile[], + exportRecord: ExportRecord, +) => { + if (!exportRecord?.fileExportNames) { + return allFiles; + } + const exportedFiles = new Set(Object.keys(exportRecord?.fileExportNames)); + const unExportedFiles = allFiles.filter((file) => { + if (!exportedFiles.has(getExportRecordFileUID(file))) { + return true; + } + return false; + }); + return unExportedFiles; +}; + +export const getDeletedExportedFiles = ( + allFiles: EnteFile[], + exportRecord: ExportRecord, +): string[] => { + if (!exportRecord?.fileExportNames) { + return []; + } + const presentFileUIDs = new Set( + allFiles?.map((file) => getExportRecordFileUID(file)), + ); + const deletedExportedFiles = Object.keys( + exportRecord?.fileExportNames, + ).filter((fileUID) => { + if (!presentFileUIDs.has(fileUID)) { + return true; + } + return false; + }); + return deletedExportedFiles; +}; + +export const getCollectionExportedFiles = ( + exportRecord: ExportRecord, + collectionID: number, +): string[] => { + if (!exportRecord?.fileExportNames) { + return []; + } + const collectionExportedFiles = Object.keys( + exportRecord?.fileExportNames, + ).filter((fileUID) => { + const fileCollectionID = Number(fileUID.split("_")[1]); + if (fileCollectionID === collectionID) { + return true; + } else { + return false; + } + }); + return collectionExportedFiles; +}; + +export const getGoogleLikeMetadataFile = ( + fileExportName: string, + file: EnteFile, +) => { + const metadata: Metadata = file.metadata; + const creationTime = Math.floor(metadata.creationTime / 1000000); + const modificationTime = Math.floor( + (metadata.modificationTime ?? metadata.creationTime) / 1000000, + ); + const captionValue: string = file?.pubMagicMetadata?.data?.caption; + return JSON.stringify( + { + title: fileExportName, + caption: captionValue, + creationTime: { + timestamp: creationTime, + formatted: formatDateTimeShort(creationTime * 1000), + }, + modificationTime: { + timestamp: modificationTime, + formatted: formatDateTimeShort(modificationTime * 1000), + }, + geoData: { + latitude: metadata.latitude, + longitude: metadata.longitude, + }, + }, + null, + 2, + ); +}; + +export const sanitizeName = (name: string) => + sanitize(name, { replacement: "_" }); + +export const getUniqueCollectionExportName = ( + dir: string, + collectionName: string, +): string => { + let collectionExportName = sanitizeName(collectionName); + let count = 1; + while ( + exportService.exists( + getCollectionExportPath(dir, collectionExportName), + ) || + collectionExportName === ENTE_TRASH_FOLDER + ) { + collectionExportName = `${sanitizeName(collectionName)}(${count})`; + count++; + } + return collectionExportName; +}; + +export const getMetadataFolderExportPath = (collectionExportPath: string) => + `${collectionExportPath}/${ENTE_METADATA_FOLDER}`; + +export const getUniqueFileExportName = ( + collectionExportPath: string, + filename: string, +) => { + let fileExportName = sanitizeName(filename); + let count = 1; + while ( + exportService.exists( + getFileExportPath(collectionExportPath, fileExportName), + ) + ) { + const filenameParts = splitFilenameAndExtension(sanitizeName(filename)); + if (filenameParts[1]) { + fileExportName = `${filenameParts[0]}(${count}).${filenameParts[1]}`; + } else { + fileExportName = `${filenameParts[0]}(${count})`; + } + count++; + } + return fileExportName; +}; + +export const getFileMetadataExportPath = ( + collectionExportPath: string, + fileExportName: string, +) => `${collectionExportPath}/${ENTE_METADATA_FOLDER}/${fileExportName}.json`; + +export const getCollectionExportPath = ( + exportFolder: string, + collectionExportName: string, +) => `${exportFolder}/${collectionExportName}`; + +export const getFileExportPath = ( + collectionExportPath: string, + fileExportName: string, +) => `${collectionExportPath}/${fileExportName}`; + +export const getTrashedFileExportPath = (exportDir: string, path: string) => { + const fileRelativePath = path.replace(`${exportDir}/`, ""); + let trashedFilePath = `${exportDir}/${ENTE_TRASH_FOLDER}/${fileRelativePath}`; + let count = 1; + while (exportService.exists(trashedFilePath)) { + const trashedFilePathParts = splitFilenameAndExtension(trashedFilePath); + if (trashedFilePathParts[1]) { + trashedFilePath = `${trashedFilePathParts[0]}(${count}).${trashedFilePathParts[1]}`; + } else { + trashedFilePath = `${trashedFilePathParts[0]}(${count})`; + } + count++; + } + return trashedFilePath; +}; + +// if filepath is /home/user/Ente/Export/Collection1/1.jpg +// then metadata path is /home/user/Ente/Export/Collection1/ENTE_METADATA_FOLDER/1.jpg.json +export const getMetadataFileExportPath = (filePath: string) => { + // extract filename and collection folder path + const filename = filePath.split("/").pop(); + const collectionExportPath = filePath.replace(`/${filename}`, ""); + return `${collectionExportPath}/${ENTE_METADATA_FOLDER}/${filename}.json`; +}; + +export const getLivePhotoExportName = ( + imageExportName: string, + videoExportName: string, +) => + JSON.stringify({ + image: imageExportName, + video: videoExportName, + }); + +export const isLivePhotoExportName = (exportName: string) => { + try { + JSON.parse(exportName); + return true; + } catch (e) { + return false; + } +}; + +export const parseLivePhotoExportName = ( + livePhotoExportName: string, +): { image: string; video: string } => { + const { image, video } = JSON.parse(livePhotoExportName); + return { image, video }; +}; + +export const isExportInProgress = (exportStage: ExportStage) => + exportStage > ExportStage.INIT && exportStage < ExportStage.FINISHED; diff --git a/web/apps/photos/src/utils/export/migration.ts b/web/apps/photos/src/utils/export/migration.ts new file mode 100644 index 000000000..254b016da --- /dev/null +++ b/web/apps/photos/src/utils/export/migration.ts @@ -0,0 +1,144 @@ +import { ENTE_METADATA_FOLDER } from "constants/export"; +import exportService from "services/export"; +import { + ExportedCollectionPaths, + ExportRecordV0, + ExportRecordV1, + ExportRecordV2, +} from "types/export"; +import { EnteFile } from "types/file"; +import { splitFilenameAndExtension } from "utils/ffmpeg"; +import { getExportRecordFileUID, sanitizeName } from "."; + +export const convertCollectionIDFolderPathObjectToMap = ( + exportedCollectionPaths: ExportedCollectionPaths, +): Map => { + return new Map( + Object.entries(exportedCollectionPaths ?? {}).map((e) => { + return [Number(e[0]), String(e[1])]; + }), + ); +}; + +export const getExportedFiles = ( + allFiles: EnteFile[], + exportRecord: ExportRecordV0 | ExportRecordV1 | ExportRecordV2, +) => { + if (!exportRecord?.exportedFiles) { + return []; + } + const exportedFileIds = new Set(exportRecord?.exportedFiles); + const exportedFiles = allFiles.filter((file) => { + if (exportedFileIds.has(getExportRecordFileUID(file))) { + return true; + } else { + return false; + } + }); + return exportedFiles; +}; + +export const oldSanitizeName = (name: string) => + name.replaceAll("/", "_").replaceAll(" ", "_"); + +export const getUniqueCollectionFolderPath = ( + dir: string, + collectionName: string, +): string => { + let collectionFolderPath = `${dir}/${sanitizeName(collectionName)}`; + let count = 1; + while (exportService.exists(collectionFolderPath)) { + collectionFolderPath = `${dir}/${sanitizeName( + collectionName, + )}(${count})`; + count++; + } + return collectionFolderPath; +}; + +export const getMetadataFolderPath = (collectionFolderPath: string) => + `${collectionFolderPath}/${ENTE_METADATA_FOLDER}`; + +export const getUniqueFileSaveName = ( + collectionPath: string, + filename: string, +) => { + let fileSaveName = sanitizeName(filename); + let count = 1; + while ( + exportService.exists(getFileSavePath(collectionPath, fileSaveName)) + ) { + const filenameParts = splitFilenameAndExtension(sanitizeName(filename)); + if (filenameParts[1]) { + fileSaveName = `${filenameParts[0]}(${count}).${filenameParts[1]}`; + } else { + fileSaveName = `${filenameParts[0]}(${count})`; + } + count++; + } + return fileSaveName; +}; + +export const getOldFileSaveName = (filename: string, fileID: number) => + `${fileID}_${oldSanitizeName(filename)}`; + +export const getFileMetadataSavePath = ( + collectionFolderPath: string, + fileSaveName: string, +) => `${collectionFolderPath}/${ENTE_METADATA_FOLDER}/${fileSaveName}.json`; + +export const getFileSavePath = ( + collectionFolderPath: string, + fileSaveName: string, +) => `${collectionFolderPath}/${fileSaveName}`; + +export const getOldCollectionFolderPath = ( + dir: string, + collectionID: number, + collectionName: string, +) => `${dir}/${collectionID}_${oldSanitizeName(collectionName)}`; + +export const getOldFileSavePath = ( + collectionFolderPath: string, + file: EnteFile, +) => + `${collectionFolderPath}/${file.id}_${oldSanitizeName( + file.metadata.title, + )}`; + +export const getOldFileMetadataSavePath = ( + collectionFolderPath: string, + file: EnteFile, +) => + `${collectionFolderPath}/${ENTE_METADATA_FOLDER}/${ + file.id + }_${oldSanitizeName(file.metadata.title)}.json`; + +export const getUniqueFileExportNameForMigration = ( + collectionPath: string, + filename: string, + usedFilePaths: Map>, +) => { + let fileExportName = sanitizeName(filename); + let count = 1; + while ( + usedFilePaths + .get(collectionPath) + ?.has(getFileSavePath(collectionPath, fileExportName)) + ) { + const filenameParts = splitFilenameAndExtension(sanitizeName(filename)); + if (filenameParts[1]) { + fileExportName = `${filenameParts[0]}(${count}).${filenameParts[1]}`; + } else { + fileExportName = `${filenameParts[0]}(${count})`; + } + count++; + } + if (!usedFilePaths.has(collectionPath)) { + usedFilePaths.set(collectionPath, new Set()); + } + usedFilePaths + .get(collectionPath) + .add(getFileSavePath(collectionPath, fileExportName)); + return fileExportName; +}; diff --git a/web/apps/photos/src/utils/ffmpeg/index.ts b/web/apps/photos/src/utils/ffmpeg/index.ts new file mode 100644 index 000000000..1b3445976 --- /dev/null +++ b/web/apps/photos/src/utils/ffmpeg/index.ts @@ -0,0 +1,77 @@ +import { validateAndGetCreationUnixTimeInMicroSeconds } from "@ente/shared/time"; +import { NULL_LOCATION } from "constants/upload"; +import { ParsedExtractedMetadata } from "types/upload"; + +enum MetadataTags { + CREATION_TIME = "creation_time", + APPLE_CONTENT_IDENTIFIER = "com.apple.quicktime.content.identifier", + APPLE_LIVE_PHOTO_IDENTIFIER = "com.apple.quicktime.live-photo.auto", + APPLE_CREATION_DATE = "com.apple.quicktime.creationdate", + APPLE_LOCATION_ISO = "com.apple.quicktime.location.ISO6709", + LOCATION = "location", +} + +export function parseFFmpegExtractedMetadata(encodedMetadata: Uint8Array) { + const metadataString = new TextDecoder().decode(encodedMetadata); + const metadataPropertyArray = metadataString.split("\n"); + const metadataKeyValueArray = metadataPropertyArray.map((property) => + property.split("="), + ); + const validKeyValuePairs = metadataKeyValueArray.filter( + (keyValueArray) => keyValueArray.length === 2, + ) as Array<[string, string]>; + + const metadataMap = Object.fromEntries(validKeyValuePairs); + + const location = parseAppleISOLocation( + metadataMap[MetadataTags.APPLE_LOCATION_ISO] ?? + metadataMap[MetadataTags.LOCATION], + ); + + const creationTime = parseCreationTime( + metadataMap[MetadataTags.APPLE_CREATION_DATE] ?? + metadataMap[MetadataTags.CREATION_TIME], + ); + const parsedMetadata: ParsedExtractedMetadata = { + creationTime, + location: { + latitude: location.latitude, + longitude: location.longitude, + }, + width: null, + height: null, + }; + return parsedMetadata; +} + +function parseAppleISOLocation(isoLocation: string) { + let location = NULL_LOCATION; + if (isoLocation) { + const [latitude, longitude] = isoLocation + .match(/(\+|-)\d+\.*\d+/g) + .map((x) => parseFloat(x)); + + location = { latitude, longitude }; + } + return location; +} + +function parseCreationTime(creationTime: string) { + let dateTime = null; + if (creationTime) { + dateTime = validateAndGetCreationUnixTimeInMicroSeconds( + new Date(creationTime), + ); + } + return dateTime; +} + +export function splitFilenameAndExtension(filename: string): [string, string] { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return [filename, null]; + else + return [ + filename.slice(0, lastDotPosition), + filename.slice(lastDotPosition + 1), + ]; +} diff --git a/web/apps/photos/src/utils/file/blob.ts b/web/apps/photos/src/utils/file/blob.ts new file mode 100644 index 000000000..cb2e8c7a2 --- /dev/null +++ b/web/apps/photos/src/utils/file/blob.ts @@ -0,0 +1,15 @@ +export const readAsDataURL = (blob) => + new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.onload = () => resolve(fileReader.result as string); + fileReader.onerror = () => reject(fileReader.error); + fileReader.readAsDataURL(blob); + }); + +export const readAsText = (blob) => + new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.onload = () => resolve(fileReader.result as string); + fileReader.onerror = () => reject(fileReader.error); + fileReader.readAsText(blob); + }); diff --git a/web/apps/photos/src/utils/file/index.ts b/web/apps/photos/src/utils/file/index.ts new file mode 100644 index 000000000..576ccd336 --- /dev/null +++ b/web/apps/photos/src/utils/file/index.ts @@ -0,0 +1,1062 @@ +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { User } from "@ente/shared/user/types"; +import { + FILE_TYPE, + RAW_FORMATS, + SUPPORTED_RAW_FORMATS, + TYPE_HEIC, + TYPE_HEIF, + TYPE_JPEG, + TYPE_JPG, +} from "constants/file"; +import DownloadManager, { + LivePhotoSourceURL, + SourceURLs, +} from "services/download"; +import * as ffmpegService from "services/ffmpeg/ffmpegService"; +import heicConversionService from "services/heicConversionService"; +import { decodeLivePhoto } from "services/livePhotoService"; +import { getFileType } from "services/typeDetectionService"; +import { updateFileCreationDateInEXIF } from "services/upload/exifService"; +import { + EncryptedEnteFile, + EnteFile, + FileMagicMetadata, + FileMagicMetadataProps, + FilePublicMagicMetadata, + FilePublicMagicMetadataProps, + FileWithUpdatedMagicMetadata, +} from "types/file"; +import { + SelectedState, + SetFilesDownloadProgressAttributes, + SetFilesDownloadProgressAttributesCreator, +} from "types/gallery"; +import { VISIBILITY_STATE } from "types/magicMetadata"; +import { isArchivedFile, updateMagicMetadata } from "utils/magicMetadata"; + +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { CustomError } from "@ente/shared/error"; +import { addLocalLog, addLogLine } from "@ente/shared/logging"; +import { convertBytesToHumanReadable } from "@ente/shared/utils/size"; +import isElectron from "is-electron"; +import { moveToHiddenCollection } from "services/collectionService"; +import { + deleteFromTrash, + trashFiles, + updateFileMagicMetadata, + updateFilePublicMagicMetadata, +} from "services/fileService"; +import { FileTypeInfo } from "types/upload"; +import { isPlaybackPossible } from "utils/photoFrame"; + +import { + default as ElectronAPIs, + default as ElectronFSService, +} from "@ente/shared/electron"; +import { downloadUsingAnchor } from "@ente/shared/utils"; +import { t } from "i18next"; +import imageProcessor from "services/imageProcessor"; +import { getFileExportPath, getUniqueFileExportName } from "utils/export"; + +const WAIT_TIME_IMAGE_CONVERSION = 30 * 1000; + +export enum FILE_OPS_TYPE { + DOWNLOAD, + FIX_TIME, + ARCHIVE, + UNARCHIVE, + HIDE, + TRASH, + DELETE_PERMANENTLY, +} + +export async function getUpdatedEXIFFileForDownload( + fileReader: FileReader, + file: EnteFile, + fileStream: ReadableStream, +): Promise> { + const extension = getFileExtension(file.metadata.title); + if ( + file.metadata.fileType === FILE_TYPE.IMAGE && + file.pubMagicMetadata?.data.editedTime && + (extension === TYPE_JPEG || extension === TYPE_JPG) + ) { + const fileBlob = await new Response(fileStream).blob(); + const updatedFileBlob = await updateFileCreationDateInEXIF( + fileReader, + fileBlob, + new Date(file.pubMagicMetadata.data.editedTime / 1000), + ); + return updatedFileBlob.stream(); + } else { + return fileStream; + } +} + +export async function downloadFile(file: EnteFile) { + try { + const fileReader = new FileReader(); + let fileBlob = await new Response( + await DownloadManager.getFile(file), + ).blob(); + if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + const livePhoto = await decodeLivePhoto(file, fileBlob); + const image = new File([livePhoto.image], livePhoto.imageNameTitle); + const imageType = await getFileType(image); + const tempImageURL = URL.createObjectURL( + new Blob([livePhoto.image], { type: imageType.mimeType }), + ); + const video = new File([livePhoto.video], livePhoto.videoNameTitle); + const videoType = await getFileType(video); + const tempVideoURL = URL.createObjectURL( + new Blob([livePhoto.video], { type: videoType.mimeType }), + ); + downloadUsingAnchor(tempImageURL, livePhoto.imageNameTitle); + downloadUsingAnchor(tempVideoURL, livePhoto.videoNameTitle); + } else { + const fileType = await getFileType( + new File([fileBlob], file.metadata.title), + ); + fileBlob = await new Response( + await getUpdatedEXIFFileForDownload( + fileReader, + file, + fileBlob.stream(), + ), + ).blob(); + fileBlob = new Blob([fileBlob], { type: fileType.mimeType }); + const tempURL = URL.createObjectURL(fileBlob); + downloadUsingAnchor(tempURL, file.metadata.title); + } + } catch (e) { + logError(e, "failed to download file"); + throw e; + } +} + +export function groupFilesBasedOnCollectionID(files: EnteFile[]) { + const collectionWiseFiles = new Map(); + for (const file of files) { + if (!collectionWiseFiles.has(file.collectionID)) { + collectionWiseFiles.set(file.collectionID, []); + } + collectionWiseFiles.get(file.collectionID).push(file); + } + return collectionWiseFiles; +} + +function getSelectedFileIds(selectedFiles: SelectedState) { + const filesIDs: number[] = []; + for (const [key, val] of Object.entries(selectedFiles)) { + if (typeof val === "boolean" && val) { + filesIDs.push(Number(key)); + } + } + return new Set(filesIDs); +} +export function getSelectedFiles( + selected: SelectedState, + files: EnteFile[], +): EnteFile[] { + const selectedFilesIDs = getSelectedFileIds(selected); + return files.filter((file) => selectedFilesIDs.has(file.id)); +} + +export function sortFiles(files: EnteFile[], sortAsc = false) { + // sort based on the time of creation time of the file, + // for files with same creation time, sort based on the time of last modification + const factor = sortAsc ? -1 : 1; + return files.sort((a, b) => { + if (a.metadata.creationTime === b.metadata.creationTime) { + return ( + factor * + (b.metadata.modificationTime - a.metadata.modificationTime) + ); + } + return factor * (b.metadata.creationTime - a.metadata.creationTime); + }); +} + +export function sortTrashFiles(files: EnteFile[]) { + return files.sort((a, b) => { + if (a.deleteBy === b.deleteBy) { + if (a.metadata.creationTime === b.metadata.creationTime) { + return ( + b.metadata.modificationTime - a.metadata.modificationTime + ); + } + return b.metadata.creationTime - a.metadata.creationTime; + } + return a.deleteBy - b.deleteBy; + }); +} + +export async function decryptFile( + file: EncryptedEnteFile, + collectionKey: string, +): Promise { + try { + const worker = await ComlinkCryptoWorker.getInstance(); + const { + encryptedKey, + keyDecryptionNonce, + metadata, + magicMetadata, + pubMagicMetadata, + ...restFileProps + } = file; + const fileKey = await worker.decryptB64( + encryptedKey, + keyDecryptionNonce, + collectionKey, + ); + const fileMetadata = await worker.decryptMetadata( + metadata.encryptedData, + metadata.decryptionHeader, + fileKey, + ); + let fileMagicMetadata: FileMagicMetadata; + let filePubMagicMetadata: FilePublicMagicMetadata; + if (magicMetadata?.data) { + fileMagicMetadata = { + ...file.magicMetadata, + data: await worker.decryptMetadata( + magicMetadata.data, + magicMetadata.header, + fileKey, + ), + }; + } + if (pubMagicMetadata?.data) { + filePubMagicMetadata = { + ...pubMagicMetadata, + data: await worker.decryptMetadata( + pubMagicMetadata.data, + pubMagicMetadata.header, + fileKey, + ), + }; + } + return { + ...restFileProps, + key: fileKey, + metadata: fileMetadata, + magicMetadata: fileMagicMetadata, + pubMagicMetadata: filePubMagicMetadata, + }; + } catch (e) { + logError(e, "file decryption failed"); + throw e; + } +} + +export function getFileNameWithoutExtension(filename: string) { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return filename; + else return filename.slice(0, lastDotPosition); +} + +export function getFileExtensionWithDot(filename: string) { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return ""; + else return filename.slice(lastDotPosition); +} + +export function splitFilenameAndExtension(filename: string): [string, string] { + const lastDotPosition = filename.lastIndexOf("."); + if (lastDotPosition === -1) return [filename, null]; + else + return [ + filename.slice(0, lastDotPosition), + filename.slice(lastDotPosition + 1), + ]; +} + +export function getFileExtension(filename: string) { + return splitFilenameAndExtension(filename)[1]?.toLocaleLowerCase(); +} + +export function generateStreamFromArrayBuffer(data: Uint8Array) { + return new ReadableStream({ + async start(controller: ReadableStreamDefaultController) { + controller.enqueue(data); + controller.close(); + }, + }); +} + +export async function getRenderableFileURL( + file: EnteFile, + fileBlob: Blob, + originalFileURL: string, + forceConvert: boolean, +): Promise { + let srcURLs: SourceURLs["url"]; + switch (file.metadata.fileType) { + case FILE_TYPE.IMAGE: { + const convertedBlob = await getRenderableImage( + file.metadata.title, + fileBlob, + ); + const convertedURL = getFileObjectURL( + originalFileURL, + fileBlob, + convertedBlob, + ); + srcURLs = convertedURL; + break; + } + case FILE_TYPE.LIVE_PHOTO: { + srcURLs = await getRenderableLivePhotoURL( + file, + fileBlob, + forceConvert, + ); + break; + } + case FILE_TYPE.VIDEO: { + const convertedBlob = await getPlayableVideo( + file.metadata.title, + fileBlob, + forceConvert, + ); + const convertedURL = getFileObjectURL( + originalFileURL, + fileBlob, + convertedBlob, + ); + srcURLs = convertedURL; + break; + } + default: { + srcURLs = originalFileURL; + break; + } + } + + let isOriginal: boolean; + if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + isOriginal = false; + } else { + isOriginal = (srcURLs as string) === (originalFileURL as string); + } + + return { + url: srcURLs, + isOriginal, + isRenderable: + file.metadata.fileType !== FILE_TYPE.LIVE_PHOTO && !!srcURLs, + type: + file.metadata.fileType === FILE_TYPE.LIVE_PHOTO + ? "livePhoto" + : "normal", + }; +} + +async function getRenderableLivePhotoURL( + file: EnteFile, + fileBlob: Blob, + forceConvert: boolean, +): Promise { + const livePhoto = await decodeLivePhoto(file, fileBlob); + + const getRenderableLivePhotoImageURL = async () => { + try { + const imageBlob = new Blob([livePhoto.image]); + const convertedImageBlob = await getRenderableImage( + livePhoto.imageNameTitle, + imageBlob, + ); + + return URL.createObjectURL(convertedImageBlob); + } catch (e) { + //ignore and return null + return null; + } + }; + + const getRenderableLivePhotoVideoURL = async () => { + try { + const videoBlob = new Blob([livePhoto.video]); + + const convertedVideoBlob = await getPlayableVideo( + livePhoto.videoNameTitle, + videoBlob, + forceConvert, + true, + ); + return URL.createObjectURL(convertedVideoBlob); + } catch (e) { + //ignore and return null + return null; + } + }; + + return { + image: getRenderableLivePhotoImageURL, + video: getRenderableLivePhotoVideoURL, + }; +} + +export async function getPlayableVideo( + videoNameTitle: string, + videoBlob: Blob, + forceConvert = false, + runOnWeb = false, +) { + try { + const isPlayable = await isPlaybackPossible( + URL.createObjectURL(videoBlob), + ); + if (isPlayable && !forceConvert) { + return videoBlob; + } else { + if (!forceConvert && !runOnWeb && !isElectron()) { + return null; + } + addLogLine( + "video format not supported, converting it name:", + videoNameTitle, + ); + const mp4ConvertedVideo = await ffmpegService.convertToMP4( + new File([videoBlob], videoNameTitle), + ); + addLogLine("video successfully converted", videoNameTitle); + return new Blob([await mp4ConvertedVideo.arrayBuffer()]); + } + } catch (e) { + addLogLine("video conversion failed", videoNameTitle); + logError(e, "video conversion failed"); + return null; + } +} + +export async function getRenderableImage(fileName: string, imageBlob: Blob) { + let fileTypeInfo: FileTypeInfo; + try { + const tempFile = new File([imageBlob], fileName); + fileTypeInfo = await getFileType(tempFile); + addLocalLog(() => `file type info: ${JSON.stringify(fileTypeInfo)}`); + const { exactType } = fileTypeInfo; + let convertedImageBlob: Blob; + if (isRawFile(exactType)) { + try { + if (!isSupportedRawFormat(exactType)) { + throw Error(CustomError.UNSUPPORTED_RAW_FORMAT); + } + + if (!isElectron()) { + throw Error(CustomError.NOT_AVAILABLE_ON_WEB); + } + addLogLine( + `RawConverter called for ${fileName}-${convertBytesToHumanReadable( + imageBlob.size, + )}`, + ); + convertedImageBlob = await imageProcessor.convertToJPEG( + imageBlob, + fileName, + ); + addLogLine(`${fileName} successfully converted`); + } catch (e) { + try { + if (!isFileHEIC(exactType)) { + throw e; + } + addLogLine( + `HEICConverter called for ${fileName}-${convertBytesToHumanReadable( + imageBlob.size, + )}`, + ); + convertedImageBlob = + await heicConversionService.convert(imageBlob); + addLogLine(`${fileName} successfully converted`); + } catch (e) { + throw Error(CustomError.NON_PREVIEWABLE_FILE); + } + } + return convertedImageBlob; + } else { + return imageBlob; + } + } catch (e) { + logError(e, "get Renderable Image failed", { fileTypeInfo }); + return null; + } +} + +export function isFileHEIC(exactType: string) { + return ( + exactType.toLowerCase().endsWith(TYPE_HEIC) || + exactType.toLowerCase().endsWith(TYPE_HEIF) + ); +} + +export function isRawFile(exactType: string) { + return RAW_FORMATS.includes(exactType.toLowerCase()); +} + +export function isSupportedRawFormat(exactType: string) { + return SUPPORTED_RAW_FORMATS.includes(exactType.toLowerCase()); +} + +export async function changeFilesVisibility( + files: EnteFile[], + visibility: VISIBILITY_STATE, +): Promise { + const fileWithUpdatedMagicMetadataList: FileWithUpdatedMagicMetadata[] = []; + for (const file of files) { + const updatedMagicMetadataProps: FileMagicMetadataProps = { + visibility, + }; + + fileWithUpdatedMagicMetadataList.push({ + file, + updatedMagicMetadata: await updateMagicMetadata( + updatedMagicMetadataProps, + file.magicMetadata, + file.key, + ), + }); + } + return await updateFileMagicMetadata(fileWithUpdatedMagicMetadataList); +} + +export async function changeFileCreationTime( + file: EnteFile, + editedTime: number, +): Promise { + const updatedPublicMagicMetadataProps: FilePublicMagicMetadataProps = { + editedTime, + }; + const updatedPublicMagicMetadata: FilePublicMagicMetadata = + await updateMagicMetadata( + updatedPublicMagicMetadataProps, + file.pubMagicMetadata, + file.key, + ); + const updateResult = await updateFilePublicMagicMetadata([ + { file, updatedPublicMagicMetadata }, + ]); + return updateResult[0]; +} + +export async function changeFileName( + file: EnteFile, + editedName: string, +): Promise { + const updatedPublicMagicMetadataProps: FilePublicMagicMetadataProps = { + editedName, + }; + + const updatedPublicMagicMetadata: FilePublicMagicMetadata = + await updateMagicMetadata( + updatedPublicMagicMetadataProps, + file.pubMagicMetadata, + file.key, + ); + const updateResult = await updateFilePublicMagicMetadata([ + { file, updatedPublicMagicMetadata }, + ]); + return updateResult[0]; +} + +export async function changeCaption( + file: EnteFile, + caption: string, +): Promise { + const updatedPublicMagicMetadataProps: FilePublicMagicMetadataProps = { + caption, + }; + + const updatedPublicMagicMetadata: FilePublicMagicMetadata = + await updateMagicMetadata( + updatedPublicMagicMetadataProps, + file.pubMagicMetadata, + file.key, + ); + const updateResult = await updateFilePublicMagicMetadata([ + { file, updatedPublicMagicMetadata }, + ]); + return updateResult[0]; +} + +export function isSharedFile(user: User, file: EnteFile) { + if (!user?.id || !file?.ownerID) { + return false; + } + return file.ownerID !== user.id; +} + +export function mergeMetadata(files: EnteFile[]): EnteFile[] { + return files.map((file) => { + if (file.pubMagicMetadata?.data.editedTime) { + file.metadata.creationTime = file.pubMagicMetadata.data.editedTime; + } + if (file.pubMagicMetadata?.data.editedName) { + file.metadata.title = file.pubMagicMetadata.data.editedName; + } + + return file; + }); +} + +export function updateExistingFilePubMetadata( + existingFile: EnteFile, + updatedFile: EnteFile, +) { + existingFile.pubMagicMetadata = updatedFile.pubMagicMetadata; + existingFile.metadata = mergeMetadata([existingFile])[0].metadata; +} + +export async function getFileFromURL(fileURL: string, name: string) { + const fileBlob = await (await fetch(fileURL)).blob(); + const fileFile = new File([fileBlob], name); + return fileFile; +} + +export function getUniqueFiles(files: EnteFile[]) { + const idSet = new Set(); + const uniqueFiles = files.filter((file) => { + if (!idSet.has(file.id)) { + idSet.add(file.id); + return true; + } else { + return false; + } + }); + + return uniqueFiles; +} + +export async function downloadFilesWithProgress( + files: EnteFile[], + downloadDirPath: string, + setFilesDownloadProgressAttributes: SetFilesDownloadProgressAttributes, +) { + if (!files.length) { + return; + } + const canceller = new AbortController(); + const increaseSuccess = () => { + if (canceller.signal.aborted) return; + setFilesDownloadProgressAttributes((prev) => ({ + ...prev, + success: prev.success + 1, + })); + }; + const increaseFailed = () => { + if (canceller.signal.aborted) return; + setFilesDownloadProgressAttributes((prev) => ({ + ...prev, + failed: prev.failed + 1, + })); + }; + const isCancelled = () => canceller.signal.aborted; + + setFilesDownloadProgressAttributes({ + downloadDirPath, + success: 0, + failed: 0, + total: files.length, + canceller, + }); + + if (isElectron()) { + await downloadFilesDesktop( + files, + { increaseSuccess, increaseFailed, isCancelled }, + downloadDirPath, + ); + } else { + await downloadFiles(files, { + increaseSuccess, + increaseFailed, + isCancelled, + }); + } +} + +export async function downloadSelectedFiles( + files: EnteFile[], + setFilesDownloadProgressAttributes: SetFilesDownloadProgressAttributes, +) { + if (!files.length) { + return; + } + let downloadDirPath: string; + if (isElectron()) { + downloadDirPath = await ElectronAPIs.selectDirectory(); + if (!downloadDirPath) { + return; + } + } + await downloadFilesWithProgress( + files, + downloadDirPath, + setFilesDownloadProgressAttributes, + ); +} + +export async function downloadSingleFile( + file: EnteFile, + setFilesDownloadProgressAttributes: SetFilesDownloadProgressAttributes, +) { + let downloadDirPath: string; + if (isElectron()) { + downloadDirPath = await ElectronAPIs.selectDirectory(); + if (!downloadDirPath) { + return; + } + } + await downloadFilesWithProgress( + [file], + downloadDirPath, + setFilesDownloadProgressAttributes, + ); +} + +export async function downloadFiles( + files: EnteFile[], + progressBarUpdater: { + increaseSuccess: () => void; + increaseFailed: () => void; + isCancelled: () => boolean; + }, +) { + for (const file of files) { + try { + if (progressBarUpdater?.isCancelled()) { + return; + } + await downloadFile(file); + progressBarUpdater?.increaseSuccess(); + } catch (e) { + logError(e, "download fail for file"); + progressBarUpdater?.increaseFailed(); + } + } +} + +export async function downloadFilesDesktop( + files: EnteFile[], + progressBarUpdater: { + increaseSuccess: () => void; + increaseFailed: () => void; + isCancelled: () => boolean; + }, + downloadPath: string, +) { + const fileReader = new FileReader(); + for (const file of files) { + try { + if (progressBarUpdater?.isCancelled()) { + return; + } + await downloadFileDesktop(fileReader, file, downloadPath); + progressBarUpdater?.increaseSuccess(); + } catch (e) { + logError(e, "download fail for file"); + progressBarUpdater?.increaseFailed(); + } + } +} + +export async function downloadFileDesktop( + fileReader: FileReader, + file: EnteFile, + downloadPath: string, +) { + const fileStream = (await DownloadManager.getFile( + file, + )) as ReadableStream; + const updatedFileStream = await getUpdatedEXIFFileForDownload( + fileReader, + file, + fileStream, + ); + + if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + const fileBlob = await new Response(updatedFileStream).blob(); + const livePhoto = await decodeLivePhoto(file, fileBlob); + const imageExportName = getUniqueFileExportName( + downloadPath, + livePhoto.imageNameTitle, + ); + const imageStream = generateStreamFromArrayBuffer(livePhoto.image); + await ElectronAPIs.saveStreamToDisk( + getFileExportPath(downloadPath, imageExportName), + imageStream, + ); + try { + const videoExportName = getUniqueFileExportName( + downloadPath, + livePhoto.videoNameTitle, + ); + const videoStream = generateStreamFromArrayBuffer(livePhoto.video); + await ElectronAPIs.saveStreamToDisk( + getFileExportPath(downloadPath, videoExportName), + videoStream, + ); + } catch (e) { + ElectronFSService.deleteFile( + getFileExportPath(downloadPath, imageExportName), + ); + throw e; + } + } else { + const fileExportName = getUniqueFileExportName( + downloadPath, + file.metadata.title, + ); + await ElectronAPIs.saveStreamToDisk( + getFileExportPath(downloadPath, fileExportName), + updatedFileStream, + ); + } +} + +export const isImageOrVideo = (fileType: FILE_TYPE) => + [FILE_TYPE.IMAGE, FILE_TYPE.VIDEO].includes(fileType); + +export const getArchivedFiles = (files: EnteFile[]) => { + return files.filter(isArchivedFile).map((file) => file.id); +}; + +export const createTypedObjectURL = async (blob: Blob, fileName: string) => { + const type = await getFileType(new File([blob], fileName)); + return URL.createObjectURL(new Blob([blob], { type: type.mimeType })); +}; + +export const getUserOwnedFiles = (files: EnteFile[]) => { + const user: User = getData(LS_KEYS.USER); + if (!user?.id) { + throw Error("user missing"); + } + return files.filter((file) => file.ownerID === user.id); +}; + +// doesn't work on firefox +export const copyFileToClipboard = async (fileUrl: string) => { + const canvas = document.createElement("canvas"); + const canvasCTX = canvas.getContext("2d"); + const image = new Image(); + + const blobPromise = new Promise((resolve, reject) => { + let timeout: NodeJS.Timeout = null; + try { + image.setAttribute("src", fileUrl); + image.onload = () => { + canvas.width = image.width; + canvas.height = image.height; + canvasCTX.drawImage(image, 0, 0, image.width, image.height); + canvas.toBlob( + (blob) => { + resolve(blob); + }, + "image/png", + 1, + ); + + clearTimeout(timeout); + }; + } catch (e) { + void logError(e, "failed to copy to clipboard"); + reject(e); + } finally { + clearTimeout(timeout); + } + timeout = setTimeout( + () => reject(Error(CustomError.WAIT_TIME_EXCEEDED)), + WAIT_TIME_IMAGE_CONVERSION, + ); + }); + + const { ClipboardItem } = window; + + await navigator.clipboard + .write([new ClipboardItem({ "image/png": blobPromise })]) + .catch((e) => logError(e, "failed to copy to clipboard")); +}; + +export function getLatestVersionFiles(files: EnteFile[]) { + const latestVersionFiles = new Map(); + files.forEach((file) => { + const uid = `${file.collectionID}-${file.id}`; + if ( + !latestVersionFiles.has(uid) || + latestVersionFiles.get(uid).updationTime < file.updationTime + ) { + latestVersionFiles.set(uid, file); + } + }); + return Array.from(latestVersionFiles.values()).filter( + (file) => !file.isDeleted, + ); +} + +export function getPersonalFiles( + files: EnteFile[], + user: User, + collectionIdToOwnerIDMap?: Map, +) { + if (!user?.id) { + throw Error("user missing"); + } + return files.filter( + (file) => + file.ownerID === user.id && + (!collectionIdToOwnerIDMap || + collectionIdToOwnerIDMap.get(file.collectionID) === user.id), + ); +} + +export function getIDBasedSortedFiles(files: EnteFile[]) { + return files.sort((a, b) => a.id - b.id); +} + +export function constructFileToCollectionMap(files: EnteFile[]) { + const fileToCollectionsMap = new Map(); + (files ?? []).forEach((file) => { + if (!fileToCollectionsMap.get(file.id)) { + fileToCollectionsMap.set(file.id, []); + } + fileToCollectionsMap.get(file.id).push(file.collectionID); + }); + return fileToCollectionsMap; +} + +export const shouldShowAvatar = (file: EnteFile, user: User) => { + if (!file || !user) { + return false; + } + // is Shared file + else if (file.ownerID !== user.id) { + return true; + } + // is public collected file + else if ( + file.ownerID === user.id && + file.pubMagicMetadata?.data?.uploaderName + ) { + return true; + } else { + return false; + } +}; + +export const handleFileOps = async ( + ops: FILE_OPS_TYPE, + files: EnteFile[], + setTempDeletedFileIds: ( + tempDeletedFileIds: Set | ((prev: Set) => Set), + ) => void, + setTempHiddenFileIds: ( + tempHiddenFileIds: Set | ((prev: Set) => Set), + ) => void, + setFixCreationTimeAttributes: ( + fixCreationTimeAttributes: + | { + files: EnteFile[]; + } + | ((prev: { files: EnteFile[] }) => { files: EnteFile[] }), + ) => void, + setFilesDownloadProgressAttributesCreator: SetFilesDownloadProgressAttributesCreator, +) => { + switch (ops) { + case FILE_OPS_TYPE.TRASH: + await deleteFileHelper(files, false, setTempDeletedFileIds); + break; + case FILE_OPS_TYPE.DELETE_PERMANENTLY: + await deleteFileHelper(files, true, setTempDeletedFileIds); + break; + case FILE_OPS_TYPE.HIDE: + await hideFilesHelper(files, setTempHiddenFileIds); + break; + case FILE_OPS_TYPE.DOWNLOAD: { + const setSelectedFileDownloadProgressAttributes = + setFilesDownloadProgressAttributesCreator( + `${files.length} ${t("FILES")}`, + ); + await downloadSelectedFiles( + files, + setSelectedFileDownloadProgressAttributes, + ); + break; + } + case FILE_OPS_TYPE.FIX_TIME: + fixTimeHelper(files, setFixCreationTimeAttributes); + break; + case FILE_OPS_TYPE.ARCHIVE: + await changeFilesVisibility(files, VISIBILITY_STATE.ARCHIVED); + break; + case FILE_OPS_TYPE.UNARCHIVE: + await changeFilesVisibility(files, VISIBILITY_STATE.VISIBLE); + break; + } +}; + +const deleteFileHelper = async ( + selectedFiles: EnteFile[], + permanent: boolean, + setTempDeletedFileIds: ( + tempDeletedFileIds: Set | ((prev: Set) => Set), + ) => void, +) => { + try { + setTempDeletedFileIds((deletedFileIds) => { + selectedFiles.forEach((file) => deletedFileIds.add(file.id)); + return new Set(deletedFileIds); + }); + if (permanent) { + await deleteFromTrash(selectedFiles.map((file) => file.id)); + } else { + await trashFiles(selectedFiles); + } + } catch (e) { + setTempDeletedFileIds(new Set()); + throw e; + } +}; + +const hideFilesHelper = async ( + selectedFiles: EnteFile[], + setTempHiddenFileIds: ( + tempHiddenFileIds: Set | ((prev: Set) => Set), + ) => void, +) => { + try { + setTempHiddenFileIds((hiddenFileIds) => { + selectedFiles.forEach((file) => hiddenFileIds.add(file.id)); + return new Set(hiddenFileIds); + }); + await moveToHiddenCollection(selectedFiles); + } catch (e) { + setTempHiddenFileIds(new Set()); + throw e; + } +}; + +const fixTimeHelper = async ( + selectedFiles: EnteFile[], + setFixCreationTimeAttributes: (fixCreationTimeAttributes: { + files: EnteFile[]; + }) => void, +) => { + setFixCreationTimeAttributes({ files: selectedFiles }); +}; + +const getFileObjectURL = ( + originalFileURL: string, + originalBlob: Blob, + convertedBlob: Blob, +) => { + const convertedURL = convertedBlob + ? convertedBlob === originalBlob + ? originalFileURL + : URL.createObjectURL(convertedBlob) + : null; + return convertedURL; +}; diff --git a/web/apps/photos/src/utils/file/livePhoto.ts b/web/apps/photos/src/utils/file/livePhoto.ts new file mode 100644 index 000000000..7d687217c --- /dev/null +++ b/web/apps/photos/src/utils/file/livePhoto.ts @@ -0,0 +1,42 @@ +import { FILE_TYPE } from "constants/file"; +import { getFileExtension } from "utils/file"; + +const IMAGE_EXTENSIONS = [ + "heic", + "heif", + "jpeg", + "jpg", + "png", + "gif", + "bmp", + "tiff", + "webp", +]; + +const VIDEO_EXTENSIONS = [ + "mov", + "mp4", + "m4v", + "avi", + "wmv", + "flv", + "mkv", + "webm", + "3gp", + "3g2", + "avi", + "ogv", + "mpg", + "mp", +]; + +export function getFileTypeFromExtensionForLivePhotoClustering( + filename: string, +) { + const extension = getFileExtension(filename)?.toLowerCase(); + if (IMAGE_EXTENSIONS.includes(extension)) { + return FILE_TYPE.IMAGE; + } else if (VIDEO_EXTENSIONS.includes(extension)) { + return FILE_TYPE.VIDEO; + } +} diff --git a/web/apps/photos/src/utils/image/index.ts b/web/apps/photos/src/utils/image/index.ts new file mode 100644 index 000000000..1062b828f --- /dev/null +++ b/web/apps/photos/src/utils/image/index.ts @@ -0,0 +1,150 @@ +// these utils only work in env where OffscreenCanvas is available + +import { BlobOptions, Dimensions } from "types/image"; +import { enlargeBox } from "utils/machineLearning"; +import { Box } from "../../../thirdparty/face-api/classes"; + +export function resizeToSquare(img: ImageBitmap, size: number) { + const scale = size / Math.max(img.height, img.width); + const width = scale * img.width; + const height = scale * img.height; + const offscreen = new OffscreenCanvas(size, size); + const ctx = offscreen.getContext("2d"); + ctx.imageSmoothingQuality = "high"; + ctx.drawImage(img, 0, 0, width, height); + const resizedImage = offscreen.transferToImageBitmap(); + return { image: resizedImage, width, height }; +} + +export function transform( + imageBitmap: ImageBitmap, + affineMat: number[][], + outputWidth: number, + outputHeight: number, +) { + const offscreen = new OffscreenCanvas(outputWidth, outputHeight); + const context = offscreen.getContext("2d"); + context.imageSmoothingQuality = "high"; + + context.transform( + affineMat[0][0], + affineMat[1][0], + affineMat[0][1], + affineMat[1][1], + affineMat[0][2], + affineMat[1][2], + ); + + context.drawImage(imageBitmap, 0, 0); + return offscreen.transferToImageBitmap(); +} + +export function crop(imageBitmap: ImageBitmap, cropBox: Box, size: number) { + const dimensions: Dimensions = { + width: size, + height: size, + }; + + return cropWithRotation(imageBitmap, cropBox, 0, dimensions, dimensions); +} + +export function cropWithRotation( + imageBitmap: ImageBitmap, + cropBox: Box, + rotation?: number, + maxSize?: Dimensions, + minSize?: Dimensions, +) { + const box = cropBox.round(); + + const outputSize = { width: box.width, height: box.height }; + if (maxSize) { + const minScale = Math.min( + maxSize.width / box.width, + maxSize.height / box.height, + ); + if (minScale < 1) { + outputSize.width = Math.round(minScale * box.width); + outputSize.height = Math.round(minScale * box.height); + } + } + + if (minSize) { + const maxScale = Math.max( + minSize.width / box.width, + minSize.height / box.height, + ); + if (maxScale > 1) { + outputSize.width = Math.round(maxScale * box.width); + outputSize.height = Math.round(maxScale * box.height); + } + } + + // addLogLine({ imageBitmap, box, outputSize }); + + const offscreen = new OffscreenCanvas(outputSize.width, outputSize.height); + const offscreenCtx = offscreen.getContext("2d"); + offscreenCtx.imageSmoothingQuality = "high"; + + offscreenCtx.translate(outputSize.width / 2, outputSize.height / 2); + rotation && offscreenCtx.rotate(rotation); + + const outputBox = new Box({ + x: -outputSize.width / 2, + y: -outputSize.height / 2, + width: outputSize.width, + height: outputSize.height, + }); + + const enlargedBox = enlargeBox(box, 1.5); + const enlargedOutputBox = enlargeBox(outputBox, 1.5); + + offscreenCtx.drawImage( + imageBitmap, + enlargedBox.x, + enlargedBox.y, + enlargedBox.width, + enlargedBox.height, + enlargedOutputBox.x, + enlargedOutputBox.y, + enlargedOutputBox.width, + enlargedOutputBox.height, + ); + + return offscreen.transferToImageBitmap(); +} + +export function addPadding(image: ImageBitmap, padding: number) { + const scale = 1 + padding * 2; + const width = scale * image.width; + const height = scale * image.height; + const offscreen = new OffscreenCanvas(width, height); + const ctx = offscreen.getContext("2d"); + ctx.imageSmoothingEnabled = false; + ctx.drawImage( + image, + width / 2 - image.width / 2, + height / 2 - image.height / 2, + image.width, + image.height, + ); + + return offscreen.transferToImageBitmap(); +} + +export async function imageBitmapToBlob( + imageBitmap: ImageBitmap, + options?: BlobOptions, +) { + const offscreen = new OffscreenCanvas( + imageBitmap.width, + imageBitmap.height, + ); + offscreen.getContext("2d").drawImage(imageBitmap, 0, 0); + + return offscreen.convertToBlob(options); +} + +export async function imageBitmapFromBlob(blob: Blob) { + return createImageBitmap(blob); +} diff --git a/web/apps/photos/src/utils/machineLearning/clustering.ts b/web/apps/photos/src/utils/machineLearning/clustering.ts new file mode 100644 index 000000000..26d8f803d --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/clustering.ts @@ -0,0 +1,116 @@ +import { euclidean } from "hdbscan"; +// import { RawNodeDatum } from 'react-d3-tree/lib/types/common'; +// import { f32Average, getAllFacesFromMap } from '.'; +import { addLogLine } from "@ente/shared/logging"; +import { + FacesCluster, + // Cluster, + // FaceDescriptor, + FaceWithEmbedding, + MLSyncContext, + NearestCluster, +} from "types/machineLearning"; +// import { getAllFacesMap } from 'utils/storage/mlStorage'; + +// export function getClusterSummary(cluster: Cluster): FaceDescriptor { +// const faceScore = (f) => f.detection.score; // f.alignedRect.box.width * +// return cluster +// .map((f) => this.allFaces[f].face) +// .sort((f1, f2) => faceScore(f2) - faceScore(f1))[0].descriptor; +// const descriptors = cluster.map((f) => this.allFaces[f].embedding); +// return f32Average(descriptors); +// } + +export function updateClusterSummaries(syncContext: MLSyncContext) { + if ( + !syncContext.mlLibraryData?.faceClusteringResults?.clusters || + syncContext.mlLibraryData?.faceClusteringResults?.clusters.length < 1 + ) { + return; + } + + const resultClusters = + syncContext.mlLibraryData.faceClusteringResults.clusters; + + resultClusters.forEach((resultCluster) => { + syncContext.mlLibraryData.faceClustersWithNoise.clusters.push({ + faces: resultCluster, + // summary: this.getClusterSummary(resultCluster), + }); + }); +} + +export function getNearestCluster( + syncContext: MLSyncContext, + noise: FaceWithEmbedding, +): NearestCluster { + let nearest: FacesCluster = null; + let nearestDist = 100000; + syncContext.mlLibraryData.faceClustersWithNoise.clusters.forEach((c) => { + const dist = euclidean( + Array.from(noise.embedding), + Array.from(c.summary), + ); + if (dist < nearestDist) { + nearestDist = dist; + nearest = c; + } + }); + + addLogLine("nearestDist: ", nearestDist); + return { cluster: nearest, distance: nearestDist }; +} + +// export async function assignNoiseWithinLimit(syncContext: MLSyncContext) { +// if ( +// !syncContext.mlLibraryData?.faceClusteringResults?.noise || +// syncContext.mlLibraryData?.faceClusteringResults.noise.length < 1 +// ) { +// return; +// } + +// const noise = syncContext.mlLibraryData.faceClusteringResults.noise; +// const allFacesMap = await getAllFacesMap(); +// const allFaces = getAllFacesFromMap(allFacesMap); + +// noise.forEach((n) => { +// const noiseFace = allFaces[n]; +// const nearest = this.getNearestCluster(syncContext, noiseFace); + +// if (nearest.cluster && nearest.distance < this.maxFaceDistance) { +// addLogLine('Adding noise to cluser: ', n, nearest.distance); +// nearest.cluster.faces.push(n); +// } else { +// addLogLine( +// 'No cluster for noise: ', +// n, +// 'within distance: ', +// this.maxFaceDistance +// ); +// this.clustersWithNoise.noise.push(n); +// } +// }); +// } + +// TODO: remove recursion to avoid stack size limits +// export function toD3Tree( +// treeNode: TreeNode, +// allObjects: Array +// ): RawNodeDatum { +// if (!treeNode.left && !treeNode.right) { +// return { +// name: treeNode.data.toString(), +// attributes: { +// face: allObjects[treeNode.data], +// }, +// }; +// } +// const children = []; +// treeNode.left && children.push(toD3Tree(treeNode.left, allObjects)); +// treeNode.right && children.push(toD3Tree(treeNode.right, allObjects)); + +// return { +// name: treeNode.data.toString(), +// children: children, +// }; +// } diff --git a/web/apps/photos/src/utils/machineLearning/compatibility.ts b/web/apps/photos/src/utils/machineLearning/compatibility.ts new file mode 100644 index 000000000..47916707d --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/compatibility.ts @@ -0,0 +1,28 @@ +import { + offscreenCanvasSupported, + runningInChrome, + webglSupported, +} from "utils/common"; + +import { addLogLine } from "@ente/shared/logging"; +import isElectron from "is-electron"; + +export function canEnableMlSearch(): boolean { + // check if is chrome or ente desktop + if (!runningInChrome(false) && !isElectron()) { + addLogLine("Not running in Chrome Desktop or Ente Desktop App"); + return false; + } + + if (!offscreenCanvasSupported()) { + addLogLine("OffscreenCanvas is NOT supported"); + return false; + } + + if (!webglSupported()) { + addLogLine("webgl is NOT supported"); + return false; + } + + return true; +} diff --git a/web/apps/photos/src/utils/machineLearning/config.ts b/web/apps/photos/src/utils/machineLearning/config.ts new file mode 100644 index 000000000..4d2030ca3 --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/config.ts @@ -0,0 +1,42 @@ +import { + DEFAULT_ML_SEARCH_CONFIG, + DEFAULT_ML_SYNC_CONFIG, + DEFAULT_ML_SYNC_JOB_CONFIG, +} from "constants/mlConfig"; +import { JobConfig } from "types/common/job"; +import { MLSearchConfig, MLSyncConfig } from "types/machineLearning"; +import mlIDbStorage, { + ML_SEARCH_CONFIG_NAME, + ML_SYNC_CONFIG_NAME, + ML_SYNC_JOB_CONFIG_NAME, +} from "utils/storage/mlIDbStorage"; + +export async function getMLSyncJobConfig() { + return mlIDbStorage.getConfig( + ML_SYNC_JOB_CONFIG_NAME, + DEFAULT_ML_SYNC_JOB_CONFIG, + ); +} + +export async function getMLSyncConfig() { + return mlIDbStorage.getConfig(ML_SYNC_CONFIG_NAME, DEFAULT_ML_SYNC_CONFIG); +} + +export async function getMLSearchConfig() { + return mlIDbStorage.getConfig( + ML_SEARCH_CONFIG_NAME, + DEFAULT_ML_SEARCH_CONFIG, + ); +} + +export async function updateMLSyncJobConfig(newConfig: JobConfig) { + return mlIDbStorage.putConfig(ML_SYNC_JOB_CONFIG_NAME, newConfig); +} + +export async function updateMLSyncConfig(newConfig: MLSyncConfig) { + return mlIDbStorage.putConfig(ML_SYNC_CONFIG_NAME, newConfig); +} + +export async function updateMLSearchConfig(newConfig: MLSearchConfig) { + return mlIDbStorage.putConfig(ML_SEARCH_CONFIG_NAME, newConfig); +} diff --git a/web/apps/photos/src/utils/machineLearning/faceAlign.ts b/web/apps/photos/src/utils/machineLearning/faceAlign.ts new file mode 100644 index 000000000..392b6b278 --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/faceAlign.ts @@ -0,0 +1,276 @@ +import * as tf from "@tensorflow/tfjs-core"; +import { Matrix, inverse } from "ml-matrix"; +import { getSimilarityTransformation } from "similarity-transformation"; +import { Dimensions } from "types/image"; +import { FaceAlignment, FaceDetection } from "types/machineLearning"; +import { + ARCFACE_LANDMARKS, + ARCFACE_LANDMARKS_FACE_SIZE, +} from "types/machineLearning/archface"; +import { cropWithRotation, transform } from "utils/image"; +import { + computeRotation, + enlargeBox, + extractFaces, + getBoxCenter, + getBoxCenterPt, + toTensor4D, +} from "."; +import { Box, Point } from "../../../thirdparty/face-api/classes"; + +export function normalizeLandmarks( + landmarks: Array<[number, number]>, + faceSize: number, +) { + return landmarks.map((landmark) => + landmark.map((p) => p / faceSize), + ) as Array<[number, number]>; +} + +export function getFaceAlignmentUsingSimilarityTransform( + faceDetection: FaceDetection, + alignedLandmarks: Array<[number, number]>, + // alignmentMethod: Versioned +): FaceAlignment { + const landmarksMat = new Matrix( + faceDetection.landmarks + .map((p) => [p.x, p.y]) + .slice(0, alignedLandmarks.length), + ).transpose(); + const alignedLandmarksMat = new Matrix(alignedLandmarks).transpose(); + + const simTransform = getSimilarityTransformation( + landmarksMat, + alignedLandmarksMat, + ); + + const RS = Matrix.mul(simTransform.rotation, simTransform.scale); + const TR = simTransform.translation; + + const affineMatrix = [ + [RS.get(0, 0), RS.get(0, 1), TR.get(0, 0)], + [RS.get(1, 0), RS.get(1, 1), TR.get(1, 0)], + [0, 0, 1], + ]; + + const size = 1 / simTransform.scale; + const meanTranslation = simTransform.toMean.sub(0.5).mul(size); + const centerMat = simTransform.fromMean.sub(meanTranslation); + const center = new Point(centerMat.get(0, 0), centerMat.get(1, 0)); + const rotation = -Math.atan2( + simTransform.rotation.get(0, 1), + simTransform.rotation.get(0, 0), + ); + // addLogLine({ affineMatrix, meanTranslation, centerMat, center, toMean: simTransform.toMean, fromMean: simTransform.fromMean, size }); + + return { + affineMatrix, + center, + size, + rotation, + }; +} + +export function getArcfaceAlignment( + faceDetection: FaceDetection, +): FaceAlignment { + return getFaceAlignmentUsingSimilarityTransform( + faceDetection, + normalizeLandmarks(ARCFACE_LANDMARKS, ARCFACE_LANDMARKS_FACE_SIZE), + ); +} + +export function extractFaceImage( + image: tf.Tensor4D, + alignment: FaceAlignment, + faceSize: number, +) { + const affineMat = new Matrix(alignment.affineMatrix); + + const I = inverse(affineMat); + + return tf.tidy(() => { + const projection = tf.tensor2d([ + [ + I.get(0, 0), + I.get(0, 1), + I.get(0, 2), + I.get(1, 0), + I.get(1, 1), + I.get(1, 2), + 0, + 0, + ], + ]); + const faceImage = tf.image.transform( + image, + projection, + "bilinear", + "constant", + 0, + [faceSize, faceSize], + ); + return faceImage; + }); +} + +export function tfExtractFaceImages( + image: tf.Tensor3D | tf.Tensor4D, + alignments: Array, + faceSize: number, +): tf.Tensor4D { + return tf.tidy(() => { + const tf4dFloat32Image = toTensor4D(image, "float32"); + const faceImages = new Array(alignments.length); + for (let i = 0; i < alignments.length; i++) { + faceImages[i] = tf.squeeze( + extractFaceImage(tf4dFloat32Image, alignments[i], faceSize), + [0], + ); + } + + return tf.stack(faceImages) as tf.Tensor4D; + }); +} + +export function getAlignedFaceBox(alignment: FaceAlignment) { + return new Box({ + x: alignment.center.x - alignment.size / 2, + y: alignment.center.y - alignment.size / 2, + width: alignment.size, + height: alignment.size, + }).round(); +} + +export function ibExtractFaceImage( + image: ImageBitmap, + alignment: FaceAlignment, + faceSize: number, +): ImageBitmap { + const box = getAlignedFaceBox(alignment); + const faceSizeDimentions: Dimensions = { + width: faceSize, + height: faceSize, + }; + return cropWithRotation( + image, + box, + alignment.rotation, + faceSizeDimentions, + faceSizeDimentions, + ); +} + +export function ibExtractFaceImageUsingTransform( + image: ImageBitmap, + alignment: FaceAlignment, + faceSize: number, +): ImageBitmap { + const scaledMatrix = new Matrix(alignment.affineMatrix) + .mul(faceSize) + .to2DArray(); + // addLogLine("scaledMatrix: ", scaledMatrix); + return transform(image, scaledMatrix, faceSize, faceSize); +} + +export function ibExtractFaceImages( + image: ImageBitmap, + alignments: Array, + faceSize: number, +): Array { + return alignments.map((alignment) => + ibExtractFaceImage(image, alignment, faceSize), + ); +} + +export function extractArcfaceAlignedFaceImage( + image: tf.Tensor4D, + faceDetection: FaceDetection, + faceSize: number, +): tf.Tensor4D { + const alignment = getFaceAlignmentUsingSimilarityTransform( + faceDetection, + ARCFACE_LANDMARKS, + ); + + return extractFaceImage(image, alignment, faceSize); +} + +export function extractArcfaceAlignedFaceImages( + image: tf.Tensor3D | tf.Tensor4D, + faceDetections: Array, + faceSize: number, +): tf.Tensor4D { + return tf.tidy(() => { + const tf4dFloat32Image = toTensor4D(image, "float32"); + const faceImages = new Array(faceDetections.length); + for (let i = 0; i < faceDetections.length; i++) { + faceImages[i] = tf.squeeze( + extractArcfaceAlignedFaceImage( + tf4dFloat32Image, + faceDetections[i], + faceSize, + ), + [0], + ); + } + + return tf.stack(faceImages) as tf.Tensor4D; + }); +} + +const BLAZEFACE_LEFT_EYE_INDEX = 0; +const BLAZEFACE_RIGHT_EYE_INDEX = 1; +// const BLAZEFACE_NOSE_INDEX = 2; +const BLAZEFACE_MOUTH_INDEX = 3; + +export function getRotatedFaceImage( + image: tf.Tensor3D | tf.Tensor4D, + faceDetection: FaceDetection, + padding: number = 1.5, +): tf.Tensor4D { + const paddedBox = enlargeBox(faceDetection.box, padding); + // addLogLine("paddedBox", paddedBox); + const landmarkPoints = faceDetection.landmarks; + + return tf.tidy(() => { + const tf4dFloat32Image = toTensor4D(image, "float32"); + let angle = 0; + const leftEye = landmarkPoints[BLAZEFACE_LEFT_EYE_INDEX]; + const rightEye = landmarkPoints[BLAZEFACE_RIGHT_EYE_INDEX]; + const foreheadCenter = getBoxCenterPt(leftEye, rightEye); + + angle = computeRotation( + landmarkPoints[BLAZEFACE_MOUTH_INDEX], + foreheadCenter, + ); // landmarkPoints[BLAZEFACE_NOSE_INDEX] + // angle = computeRotation(leftEye, rightEye); + // addLogLine('angle: ', angle); + + const faceCenter = getBoxCenter(faceDetection.box); + // addLogLine('faceCenter: ', faceCenter); + const faceCenterNormalized: [number, number] = [ + faceCenter.x / tf4dFloat32Image.shape[2], + faceCenter.y / tf4dFloat32Image.shape[1], + ]; + // addLogLine('faceCenterNormalized: ', faceCenterNormalized); + + let rotatedImage = tf4dFloat32Image; + if (angle !== 0) { + rotatedImage = tf.image.rotateWithOffset( + tf4dFloat32Image, + angle, + 0, + faceCenterNormalized, + ); + } + + const faceImageTensor = extractFaces( + rotatedImage, + [paddedBox], + paddedBox.width > 224 ? 448 : 224, + ); + return faceImageTensor; + // return tf.gather(faceImageTensor, 0); + }); +} diff --git a/web/apps/photos/src/utils/machineLearning/faceCrop.ts b/web/apps/photos/src/utils/machineLearning/faceCrop.ts new file mode 100644 index 000000000..e96f1d262 --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/faceCrop.ts @@ -0,0 +1,217 @@ +import { addLogLine } from "@ente/shared/logging"; +import { CacheStorageService } from "@ente/shared/storage/cacheStorage"; +import { CACHES } from "@ente/shared/storage/cacheStorage/constants"; +import { getBlobFromCache } from "@ente/shared/storage/cacheStorage/helpers"; +import { compose, Matrix, scale, translate } from "transformation-matrix"; +import { BlobOptions, Dimensions } from "types/image"; +import { + AlignedFace, + FaceAlignment, + FaceCrop, + FaceCropConfig, + FaceDetection, + MlFileData, + StoredFaceCrop, +} from "types/machineLearning"; +import { cropWithRotation, imageBitmapToBlob } from "utils/image"; +import { enlargeBox } from "."; +import { Box } from "../../../thirdparty/face-api/classes"; +import { getAlignedFaceBox } from "./faceAlign"; +import { transformBox, transformPoints } from "./transform"; + +export function getFaceCrop( + imageBitmap: ImageBitmap, + alignment: FaceAlignment, + config: FaceCropConfig, +): FaceCrop { + const box = getAlignedFaceBox(alignment); + const scaleForPadding = 1 + config.padding * 2; + const paddedBox = enlargeBox(box, scaleForPadding).round(); + const faceImageBitmap = cropWithRotation(imageBitmap, paddedBox, 0, { + width: config.maxSize, + height: config.maxSize, + }); + + return { + image: faceImageBitmap, + imageBox: paddedBox, + }; +} + +export async function storeFaceCropForBlob( + faceId: string, + imageBox: Box, + faceCropBlob: Blob, +) { + const faceCropUrl = `/${faceId}`; + const faceCropResponse = new Response(faceCropBlob); + const faceCropCache = await CacheStorageService.open(CACHES.FACE_CROPS); + await faceCropCache.put(faceCropUrl, faceCropResponse); + return { + imageUrl: faceCropUrl, + imageBox: imageBox, + }; +} + +export async function storeFaceCrop( + faceId: string, + faceCrop: FaceCrop, + blobOptions: BlobOptions, +): Promise { + const faceCropBlob = await imageBitmapToBlob(faceCrop.image, blobOptions); + return storeFaceCropForBlob(faceId, faceCrop.imageBox, faceCropBlob); +} + +export async function getFaceCropBlobFromStorage( + storedFaceCrop: StoredFaceCrop, +): Promise { + return getBlobFromCache(CACHES.FACE_CROPS, storedFaceCrop.imageUrl); +} + +export async function getFaceCropFromStorage( + storedFaceCrop: StoredFaceCrop, +): Promise { + const faceCropBlob = await getFaceCropBlobFromStorage(storedFaceCrop); + const faceCropImage = await createImageBitmap(faceCropBlob); + + return { + image: faceCropImage, + imageBox: storedFaceCrop.imageBox, + }; +} + +export async function removeOldFaceCrops( + oldMLFileData: MlFileData, + newMLFileData: MlFileData, +) { + const newFaceCropUrls = + newMLFileData?.faces + ?.map((f) => f.crop?.imageUrl) + ?.filter((fc) => fc !== null && fc !== undefined) || []; + + const oldFaceCropUrls = + oldMLFileData?.faces + ?.map((f) => f.crop?.imageUrl) + ?.filter((fc) => fc !== null && fc !== undefined) || []; + + const unusedFaceCropUrls = oldFaceCropUrls.filter( + (oldUrl) => !newFaceCropUrls.includes(oldUrl), + ); + if (!unusedFaceCropUrls || unusedFaceCropUrls.length < 1) { + return; + } + + return removeFaceCropUrls(unusedFaceCropUrls); +} + +export async function removeFaceCropUrls(faceCropUrls: Array) { + addLogLine("Removing face crop urls: ", JSON.stringify(faceCropUrls)); + const faceCropCache = await CacheStorageService.open(CACHES.FACE_CROPS); + const urlRemovalPromises = faceCropUrls?.map((url) => + faceCropCache.delete(url), + ); + return urlRemovalPromises && Promise.all(urlRemovalPromises); +} + +export function extractFaceImageFromCrop( + faceCrop: FaceCrop, + box: Box, + rotation: number, + faceSize: number, +): ImageBitmap { + const faceCropImage = faceCrop?.image; + let imageBox = faceCrop?.imageBox; + if (!faceCropImage || !imageBox) { + throw Error("Face crop not present"); + } + + // TODO: Have better serialization to avoid creating new object manually when calling class methods + imageBox = new Box(imageBox); + const scale = faceCropImage.width / imageBox.width; + const transformedBox = box + .shift(-imageBox.x, -imageBox.y) + .rescale(scale) + .round(); + // addLogLine({ box, imageBox, faceCropImage, scale, scaledBox, scaledImageBox, shiftedBox }); + + const faceSizeDimentions: Dimensions = { + width: faceSize, + height: faceSize, + }; + const faceImage = cropWithRotation( + faceCropImage, + transformedBox, + rotation, + faceSizeDimentions, + faceSizeDimentions, + ); + + return faceImage; +} + +export async function ibExtractFaceImageFromCrop( + faceCrop: FaceCrop, + alignment: FaceAlignment, + faceSize: number, +): Promise { + const box = getAlignedFaceBox(alignment); + + return extractFaceImageFromCrop( + faceCrop, + box, + alignment.rotation, + faceSize, + ); +} + +export async function ibExtractFaceImagesFromCrops( + faces: Array, + faceSize: number, +): Promise> { + const faceImagePromises = faces.map(async (alignedFace) => { + const faceCrop = await getFaceCropFromStorage(alignedFace.crop); + return ibExtractFaceImageFromCrop( + faceCrop, + alignedFace.alignment, + faceSize, + ); + }); + return Promise.all(faceImagePromises); +} + +export function transformFace(faceDetection: FaceDetection, transform: Matrix) { + return { + ...faceDetection, + + box: transformBox(faceDetection.box, transform), + landmarks: transformPoints(faceDetection.landmarks, transform), + }; +} + +export function transformToFaceCropDims( + faceCrop: FaceCrop, + faceDetection: FaceDetection, +) { + const imageBox = new Box(faceCrop.imageBox); + + const transform = compose( + scale(faceCrop.image.width / imageBox.width), + translate(-imageBox.x, -imageBox.y), + ); + + return transformFace(faceDetection, transform); +} + +export function transformToImageDims( + faceCrop: FaceCrop, + faceDetection: FaceDetection, +) { + const imageBox = new Box(faceCrop.imageBox); + + const transform = compose( + translate(imageBox.x, imageBox.y), + scale(imageBox.width / faceCrop.image.width), + ); + + return transformFace(faceDetection, transform); +} diff --git a/web/apps/photos/src/utils/machineLearning/faceDetection.ts b/web/apps/photos/src/utils/machineLearning/faceDetection.ts new file mode 100644 index 000000000..a9300539f --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/faceDetection.ts @@ -0,0 +1,85 @@ +import { euclidean } from "hdbscan"; +import { FaceDetection } from "types/machineLearning"; +import { getNearestPointIndex, newBox } from "."; +import { Box, Point } from "../../../thirdparty/face-api/classes"; +import { + computeTransformToBox, + transformBox, + transformPoints, +} from "./transform"; + +export function transformPaddedToImage( + detection: FaceDetection, + faceImage: ImageBitmap, + imageBox: Box, + paddedBox: Box, +) { + const inBox = newBox(0, 0, faceImage.width, faceImage.height); + imageBox.x = paddedBox.x; + imageBox.y = paddedBox.y; + const transform = computeTransformToBox(inBox, imageBox); + + detection.box = transformBox(detection.box, transform); + detection.landmarks = transformPoints(detection.landmarks, transform); +} + +export function getDetectionCenter(detection: FaceDetection) { + const center = new Point(0, 0); + // TODO: first 4 landmarks is applicable to blazeface only + // this needs to consider eyes, nose and mouth landmarks to take center + detection.landmarks?.slice(0, 4).forEach((p) => { + center.x += p.x; + center.y += p.y; + }); + + return center.div({ x: 4, y: 4 }); +} + +export function getNearestDetection( + toDetection: FaceDetection, + fromDetections: Array, + maxDistance?: number, +) { + const toCenter = getDetectionCenter(toDetection); + const centers = fromDetections.map((d) => getDetectionCenter(d)); + const nearestIndex = getNearestPointIndex(toCenter, centers, maxDistance); + + return nearestIndex >= 0 && fromDetections[nearestIndex]; +} + +// TODO: can also be done through tf.image.nonMaxSuppression +export function removeDuplicateDetections( + detections: Array, + withinDistance: number, +) { + // console.time('removeDuplicates'); + detections.sort((a, b) => b.probability - a.probability); + const isSelected = new Map(); + for (let i = 0; i < detections.length; i++) { + if (isSelected.get(i) === false) { + continue; + } + isSelected.set(i, true); + for (let j = i + 1; j < detections.length; j++) { + if (isSelected.get(j) === false) { + continue; + } + const centeri = getDetectionCenter(detections[i]); + const centerj = getDetectionCenter(detections[j]); + const dist = euclidean( + [centeri.x, centeri.y], + [centerj.x, centerj.y], + ); + if (dist <= withinDistance) { + isSelected.set(j, false); + } + } + } + + const uniques: Array = []; + for (let i = 0; i < detections.length; i++) { + isSelected.get(i) && uniques.push(detections[i]); + } + // console.timeEnd('removeDuplicates'); + return uniques; +} diff --git a/web/apps/photos/src/utils/machineLearning/index.ts b/web/apps/photos/src/utils/machineLearning/index.ts new file mode 100644 index 000000000..d6be9e63f --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/index.ts @@ -0,0 +1,534 @@ +import * as tf from "@tensorflow/tfjs-core"; +import { NormalizedFace } from "blazeface-back"; +import { BLAZEFACE_FACE_SIZE } from "constants/mlConfig"; +import { euclidean } from "hdbscan"; +import PQueue from "p-queue"; +import DownloadManager from "services/download"; +import { getLocalFiles } from "services/fileService"; +import { EnteFile } from "types/file"; +import { Dimensions } from "types/image"; +import { + AlignedFace, + DetectedFace, + DetectedObject, + Face, + FaceImageBlob, + MlFileData, + Person, + RealWorldObject, + Versioned, +} from "types/machineLearning"; +// import { mlFilesStore, mlPeopleStore } from 'utils/storage/mlStorage'; +import { addLogLine } from "@ente/shared/logging"; +import { CACHES } from "@ente/shared/storage/cacheStorage/constants"; +import { cached } from "@ente/shared/storage/cacheStorage/helpers"; +import { FILE_TYPE } from "constants/file"; +import { decodeLivePhoto } from "services/livePhotoService"; +import { getRenderableImage } from "utils/file"; +import { imageBitmapToBlob } from "utils/image"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; +import { Box, Point } from "../../../thirdparty/face-api/classes"; +import { + getArcfaceAlignment, + ibExtractFaceImage, + ibExtractFaceImages, +} from "./faceAlign"; +import { + getFaceCropBlobFromStorage, + ibExtractFaceImagesFromCrops, +} from "./faceCrop"; + +export function f32Average(descriptors: Float32Array[]) { + if (descriptors.length < 1) { + throw Error("f32Average: input size 0"); + } + + if (descriptors.length === 1) { + return descriptors[0]; + } + + const f32Size = descriptors[0].length; + const avg = new Float32Array(f32Size); + + for (let index = 0; index < f32Size; index++) { + avg[index] = descriptors[0][index]; + for (let desc = 1; desc < descriptors.length; desc++) { + avg[index] = avg[index] + descriptors[desc][index]; + } + avg[index] = avg[index] / descriptors.length; + } + + return avg; +} + +export function isTensor(tensor: any, dim: number) { + return tensor instanceof tf.Tensor && tensor.shape.length === dim; +} + +export function isTensor1D(tensor: any): tensor is tf.Tensor1D { + return isTensor(tensor, 1); +} + +export function isTensor2D(tensor: any): tensor is tf.Tensor2D { + return isTensor(tensor, 2); +} + +export function isTensor3D(tensor: any): tensor is tf.Tensor3D { + return isTensor(tensor, 3); +} + +export function isTensor4D(tensor: any): tensor is tf.Tensor4D { + return isTensor(tensor, 4); +} + +export function toTensor4D( + image: tf.Tensor3D | tf.Tensor4D, + dtype?: tf.DataType, +) { + return tf.tidy(() => { + let reshapedImage: tf.Tensor4D; + if (isTensor3D(image)) { + reshapedImage = tf.expandDims(image, 0); + } else if (isTensor4D(image)) { + reshapedImage = image; + } else { + throw Error("toTensor4D only supports Tensor3D and Tensor4D input"); + } + if (dtype) { + reshapedImage = tf.cast(reshapedImage, dtype); + } + + return reshapedImage; + }); +} + +export function imageBitmapsToTensor4D(imageBitmaps: Array) { + return tf.tidy(() => { + const tfImages = imageBitmaps.map((ib) => tf.browser.fromPixels(ib)); + return tf.stack(tfImages) as tf.Tensor4D; + }); +} + +export function extractFaces( + image: tf.Tensor3D | tf.Tensor4D, + facebBoxes: Array, + faceSize: number, +) { + return tf.tidy(() => { + const reshapedImage = toTensor4D(image, "float32"); + + const boxes = facebBoxes.map((box) => { + const normalized = box.rescale({ + width: 1 / reshapedImage.shape[2], + height: 1 / reshapedImage.shape[1], + }); + + return [ + normalized.top, + normalized.left, + normalized.bottom, + normalized.right, + ]; + }); + + // addLogLine('boxes: ', boxes[0]); + + const faceImagesTensor = tf.image.cropAndResize( + reshapedImage, + boxes, + tf.fill([boxes.length], 0, "int32"), + [faceSize, faceSize], + ); + + return faceImagesTensor; + }); +} + +export function newBox(x: number, y: number, width: number, height: number) { + return new Box({ x, y, width, height }); +} + +export function newBoxFromPoints( + left: number, + top: number, + right: number, + bottom: number, +) { + return new Box({ left, top, right, bottom }); +} + +export function normFaceBox(face: NormalizedFace) { + return newBoxFromPoints( + face.topLeft[0], + face.topLeft[1], + face.bottomRight[0], + face.bottomRight[1], + ); +} + +export function getBoxCenterPt(topLeft: Point, bottomRight: Point): Point { + return topLeft.add(bottomRight.sub(topLeft).div(new Point(2, 2))); +} + +export function getBoxCenter(box: Box): Point { + return getBoxCenterPt(box.topLeft, box.bottomRight); +} + +export function enlargeBox(box: Box, factor: number = 1.5) { + const center = getBoxCenter(box); + const size = new Point(box.width, box.height); + const newHalfSize = new Point((factor * size.x) / 2, (factor * size.y) / 2); + + return new Box({ + left: center.x - newHalfSize.x, + top: center.y - newHalfSize.y, + right: center.x + newHalfSize.x, + bottom: center.y + newHalfSize.y, + }); +} + +export function normalizeRadians(angle: number) { + return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); +} + +export function computeRotation(point1: Point, point2: Point) { + const radians = + Math.PI / 2 - Math.atan2(-(point2.y - point1.y), point2.x - point1.x); + return normalizeRadians(radians); +} + +export function getAllFacesFromMap(allFacesMap: Map>) { + const allFaces = [...allFacesMap.values()].flat(); + + return allFaces; +} + +export function getAllObjectsFromMap( + allObjectsMap: Map>, +) { + return [...allObjectsMap.values()].flat(); +} + +export async function getLocalFile(fileId: number) { + const localFiles = await getLocalFiles(); + return localFiles.find((f) => f.id === fileId); +} + +export async function getFaceImage( + face: AlignedFace, + token: string, + faceSize: number = BLAZEFACE_FACE_SIZE, + file?: EnteFile, +): Promise { + if (!file) { + file = await getLocalFile(face.fileId); + } + + const imageBitmap = await getOriginalImageBitmap(file); + const faceImageBitmap = ibExtractFaceImage( + imageBitmap, + face.alignment, + faceSize, + ); + const faceImage = imageBitmapToBlob(faceImageBitmap); + faceImageBitmap.close(); + imageBitmap.close(); + + return faceImage; +} + +export async function extractFaceImages( + faces: Array, + faceSize: number, + image?: ImageBitmap, +) { + if (faces.length === faces.filter((f) => f.crop).length) { + return ibExtractFaceImagesFromCrops(faces, faceSize); + } else if (image) { + const faceAlignments = faces.map((f) => f.alignment); + return ibExtractFaceImages(image, faceAlignments, faceSize); + } else { + throw Error( + "Either face crops or image is required to extract face images", + ); + } +} + +export function leftFillNum(num: number, length: number, padding: number) { + return num.toString().padStart(length, padding.toString()); +} + +// TODO: same face can not be only based on this id, +// this gives same id to faces whose arcface center lies in same box of 1% image grid +// maximum distance for same id will be around √2% +// will give same id in most of the cases, except for face centers lying near grid edges +// faces with same id should be treated as same face, and diffrent id should be tested further +// further test can rely on nearest face within certain threshold in same image +// can also explore spatial index similar to Geohash for indexing, but overkill +// for mostly single digit faces in one image +// also check if this needs to be globally unique or unique for a user +export function getFaceId(detectedFace: DetectedFace, imageDims: Dimensions) { + const arcFaceAlignedFace = getArcfaceAlignment(detectedFace.detection); + const imgDimPoint = new Point(imageDims.width, imageDims.height); + const gridPt = arcFaceAlignedFace.center + .mul(new Point(100, 100)) + .div(imgDimPoint) + .floor() + .bound(0, 99); + const gridPaddedX = leftFillNum(gridPt.x, 2, 0); + const gridPaddedY = leftFillNum(gridPt.y, 2, 0); + + return `${detectedFace.fileId}-${gridPaddedX}-${gridPaddedY}`; +} + +export function getObjectId( + detectedObject: DetectedObject, + imageDims: Dimensions, +) { + const imgDimPoint = new Point(imageDims.width, imageDims.height); + const objectCenterPoint = new Point( + detectedObject.detection.bbox[2] / 2, + detectedObject.detection.bbox[3] / 2, + ); + const gridPt = objectCenterPoint + .mul(new Point(100, 100)) + .div(imgDimPoint) + .floor() + .bound(0, 99); + const gridPaddedX = leftFillNum(gridPt.x, 2, 0); + const gridPaddedY = leftFillNum(gridPt.y, 2, 0); + + return `${detectedObject.fileID}-${gridPaddedX}-${gridPaddedY}`; +} + +export async function getTFImage(blob): Promise { + const imageBitmap = await createImageBitmap(blob); + const tfImage = tf.browser.fromPixels(imageBitmap); + imageBitmap.close(); + + return tfImage; +} + +export async function getImageBlobBitmap(blob: Blob): Promise { + return await createImageBitmap(blob); +} + +// export async function getTFImageUsingJpegJS(blob: Blob): Promise { +// const imageData = jpegjs.decode(await blob.arrayBuffer()); +// const tfImage = tf.browser.fromPixels(imageData); + +// return new TFImageBitmap(undefined, tfImage); +// } + +async function getOriginalFile(file: EnteFile, queue?: PQueue) { + let fileStream; + if (queue) { + fileStream = await queue.add(() => DownloadManager.getFile(file)); + } else { + fileStream = await DownloadManager.getFile(file); + } + return new Response(fileStream).blob(); +} + +async function getOriginalConvertedFile(file: EnteFile, queue?: PQueue) { + const fileBlob = await getOriginalFile(file, queue); + if (file.metadata.fileType === FILE_TYPE.IMAGE) { + return await getRenderableImage(file.metadata.title, fileBlob); + } else { + const livePhoto = await decodeLivePhoto(file, fileBlob); + return await getRenderableImage( + livePhoto.imageNameTitle, + new Blob([livePhoto.image]), + ); + } +} + +export async function getOriginalImageBitmap( + file: EnteFile, + queue?: PQueue, + useCache: boolean = false, +) { + let fileBlob; + + if (useCache) { + fileBlob = await cached(CACHES.FILES, file.id.toString(), () => { + return getOriginalConvertedFile(file, queue); + }); + } else { + fileBlob = await getOriginalConvertedFile(file, queue); + } + addLogLine("[MLService] Got file: ", file.id.toString()); + + return getImageBlobBitmap(fileBlob); +} + +export async function getThumbnailImageBitmap(file: EnteFile) { + const thumb = await DownloadManager.getThumbnail(file); + addLogLine("[MLService] Got thumbnail: ", file.id.toString()); + + return getImageBlobBitmap(new Blob([thumb])); +} + +export async function getLocalFileImageBitmap( + enteFile: EnteFile, + localFile: globalThis.File, +) { + let fileBlob = localFile as Blob; + fileBlob = await getRenderableImage(enteFile.metadata.title, fileBlob); + return getImageBlobBitmap(fileBlob); +} + +export async function getPeopleList(file: EnteFile): Promise> { + let startTime = Date.now(); + const mlFileData: MlFileData = await mlIDbStorage.getFile(file.id); + addLogLine( + "getPeopleList:mlFilesStore:getItem", + Date.now() - startTime, + "ms", + ); + if (!mlFileData?.faces || mlFileData.faces.length < 1) { + return []; + } + + const peopleIds = mlFileData.faces + .filter((f) => f.personId !== null && f.personId !== undefined) + .map((f) => f.personId); + if (!peopleIds || peopleIds.length < 1) { + return []; + } + // addLogLine("peopleIds: ", peopleIds); + startTime = Date.now(); + const peoplePromises = peopleIds.map( + (p) => mlIDbStorage.getPerson(p) as Promise, + ); + const peopleList = await Promise.all(peoplePromises); + addLogLine( + "getPeopleList:mlPeopleStore:getItems", + Date.now() - startTime, + "ms", + ); + // addLogLine("peopleList: ", peopleList); + + return peopleList; +} + +export async function getUnidentifiedFaces( + file: EnteFile, +): Promise> { + const mlFileData: MlFileData = await mlIDbStorage.getFile(file.id); + + return mlFileData?.faces?.filter( + (f) => f.personId === null || f.personId === undefined, + ); +} + +export async function getFaceCropBlobs( + faces: Array, +): Promise> { + const faceCrops = faces + .map((f) => f.crop) + .filter((faceCrop) => faceCrop !== null && faceCrop !== undefined); + + return ( + faceCrops && + Promise.all( + faceCrops.map((faceCrop) => getFaceCropBlobFromStorage(faceCrop)), + ) + ); +} + +export async function getAllPeople(limit: number = undefined) { + let people: Array = await mlIDbStorage.getAllPeople(); + // await mlPeopleStore.iterate((person) => { + // people.push(person); + // }); + people = people ?? []; + return people + .sort((p1, p2) => p2.files.length - p1.files.length) + .slice(0, limit); +} + +export function findFirstIfSorted( + elements: Array, + comparator: (a: T, b: T) => number, +) { + if (!elements || elements.length < 1) { + return; + } + let first = elements[0]; + + for (let i = 1; i < elements.length; i++) { + const comp = comparator(elements[i], first); + if (comp < 0) { + first = elements[i]; + } + } + + return first; +} + +export function isDifferentOrOld( + method: Versioned, + thanMethod: Versioned, +) { + return ( + !method || + method.value !== thanMethod.value || + method.version < thanMethod.version + ); +} + +function primitiveArrayEquals(a, b) { + return ( + Array.isArray(a) && + Array.isArray(b) && + a.length === b.length && + a.every((val, index) => val === b[index]) + ); +} + +export function areFaceIdsSame(ofFaces: Array, toFaces: Array) { + if ( + (ofFaces === null || ofFaces === undefined) && + (toFaces === null || toFaces === undefined) + ) { + return true; + } + return primitiveArrayEquals( + ofFaces?.map((f) => f.id), + toFaces?.map((f) => f.id), + ); +} + +export function getNearestPointIndex( + toPoint: Point, + fromPoints: Array, + maxDistance?: number, +) { + const dists = fromPoints.map((point, i) => ({ + index: i, + point: point, + distance: euclidean([point.x, point.y], [toPoint.x, toPoint.y]), + })); + const nearest = findFirstIfSorted( + dists, + (a, b) => Math.abs(a.distance) - Math.abs(b.distance), + ); + + // addLogLine('Nearest dist: ', nearest.distance, maxDistance); + if (!maxDistance || nearest.distance <= maxDistance) { + return nearest.index; + } +} + +export function logQueueStats(queue: PQueue, name: string) { + queue.on("active", () => + addLogLine( + `queuestats: ${name}: Active, Size: ${queue.size} Pending: ${queue.pending}`, + ), + ); + queue.on("idle", () => addLogLine(`queuestats: ${name}: Idle`)); + queue.on("error", (error) => + console.error(`queuestats: ${name}: Error, `, error), + ); +} diff --git a/web/apps/photos/src/utils/machineLearning/migrations.ts b/web/apps/photos/src/utils/machineLearning/migrations.ts new file mode 100644 index 000000000..111fabfc9 --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/migrations.ts @@ -0,0 +1,136 @@ +import { addLogLine } from "@ente/shared/logging"; +import { Face, MlFileData } from "types/machineLearning"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; +import { mlFilesStore } from "utils/storage/mlStorage"; +import { getFaceId } from "."; +import { storeFaceCropForBlob } from "./faceCrop"; + +// TODO: for migrating existing data, to be removed +export async function migrateExistingFiles() { + const existingFiles: Array = []; + await mlFilesStore.iterate((mlFileData: MlFileData) => { + if (!mlFileData.errorCount) { + mlFileData.errorCount = 0; + existingFiles.push(mlFileData); + } + }); + addLogLine("existing files: ", existingFiles.length); + + try { + for (const file of existingFiles) { + await mlIDbStorage.putFile(file); + } + await mlIDbStorage.setIndexVersion("files", 1); + addLogLine("migrateExistingFiles done"); + } catch (e) { + console.error(e); + } +} + +export async function migrateFaceCropsToCache() { + const startTime = Date.now(); + addLogLine("migrateFaceCropsToCache started"); + const allFiles = await mlIDbStorage.getAllFiles(); + const allFilesWithFaces = allFiles.filter( + (f) => f.faces && f.faces.length > 0, + ); + const updatedFacesMap = new Map>(); + + for (const file of allFilesWithFaces) { + let updated = false; + for (const face of file.faces) { + if (!face["id"]) { + const faceCropBlob = face.crop["image"]; + const faceId = getFaceId(face, file.imageDimensions); + face.crop = await storeFaceCropForBlob( + faceId, + face.crop.imageBox, + faceCropBlob, + ); + face["id"] = faceId; + updated = true; + } + } + if (updated) { + updatedFacesMap.set(file.fileId, file.faces); + } + } + + if (updatedFacesMap.size > 0) { + addLogLine("updating face crops: ", updatedFacesMap.size); + await mlIDbStorage.updateFaces(updatedFacesMap); + } else { + addLogLine("not updating face crops: ", updatedFacesMap.size); + } + addLogLine("migrateFaceCropsToCache", Date.now() - startTime, "ms"); +} + +export async function migrateFaceInterfaceUpdate() { + const startTime = Date.now(); + addLogLine("migrateFaceInterfaceUpdate started"); + + const faceSchemaVersion = await mlIDbStorage.getIndexVersion("faceSchema"); + if (faceSchemaVersion) { + addLogLine("not running migrateFaceInterfaceUpdate"); + return; + } + + const allFiles = await mlIDbStorage.getAllFiles(); + + const updatedFiles = allFiles.map((file) => { + const updatedFaces = file.faces?.map((f) => { + const updatedFace = { + id: f["faceId"], + fileId: f.fileId, + + detection: { + box: f["box"], + landmarks: f["landmarks"], + probability: f["probability"], + }, + crop: f["faceCrop"], + alignment: { + affineMatrix: f["affineMatrix"], + center: f["center"], + rotation: f["rotation"], + size: f["size"], + }, + embedding: Float32Array.from(f.embedding), + + personId: f.personId, + } as Face; + if (!updatedFace.id) { + updatedFace.id = getFaceId(updatedFace, file.imageDimensions); + } + return updatedFace; + }); + const updated: MlFileData = { + fileId: file.fileId, + + faceDetectionMethod: file["detectionMethod"], + faceCropMethod: { + value: "ArcFace", + version: 1, + }, + faceAlignmentMethod: file["alignmentMethod"], + faceEmbeddingMethod: file["embeddingMethod"], + + faces: updatedFaces, + + imageDimensions: file.imageDimensions, + imageSource: file.imageSource, + errorCount: file.errorCount, + lastErrorMessage: file.lastErrorMessage, + mlVersion: file.mlVersion, + }; + + return updated; + }); + + addLogLine("migrateFaceInterfaceUpdate updating: ", updatedFiles.length); + await mlIDbStorage.putAllFilesInTx(updatedFiles); + + await mlIDbStorage.setIndexVersion("faceSchema", 1); + addLogLine("migrateFaceInterfaceUpdate done"); + addLogLine("migrateFaceInterfaceUpdate", Date.now() - startTime, "ms"); +} diff --git a/web/apps/photos/src/utils/machineLearning/mldataExport.ts b/web/apps/photos/src/utils/machineLearning/mldataExport.ts new file mode 100644 index 000000000..4cd115e12 --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/mldataExport.ts @@ -0,0 +1,161 @@ +import { addLogLine } from "@ente/shared/logging"; +import { CacheStorageService } from "@ente/shared/storage/cacheStorage"; +import { CACHES } from "@ente/shared/storage/cacheStorage/constants"; +import * as zip from "@zip.js/zip.js"; +import { MlFileData } from "types/machineLearning"; +import mlIDbStorage from "utils/storage/mlIDbStorage"; + +class FileSystemWriter extends zip.Writer { + writableStream: FileSystemWritableFileStream; + + constructor(writableStream: FileSystemWritableFileStream) { + super(); + this.writableStream = writableStream; + } + + async writeUint8Array(array: Uint8Array) { + // addLogLine('zipWriter needs to write data: ', array.byteLength); + return this.writableStream.write(array); + } + + async getData() { + return undefined; + } +} + +class FileReader extends zip.Reader { + file: File; + + constructor(file: File) { + super(); + this.file = file; + } + + public async init() { + this.size = this.file.size; + // addLogLine('zipReader init, size: ', this.size); + } + + public async readUint8Array( + index: number, + length: number, + ): Promise { + // addLogLine('zipReader needs data: ', index, length); + const slicedFile = this.file.slice(index, index + length); + const arrayBuffer = await slicedFile.arrayBuffer(); + + return new Uint8Array(arrayBuffer); + } +} + +export async function exportMlData( + mlDataZipWritable: FileSystemWritableFileStream, +) { + const zipWriter = new zip.ZipWriter( + new FileSystemWriter(mlDataZipWritable), + ); + + try { + try { + await exportMlDataToZipWriter(zipWriter); + } finally { + await zipWriter.close(); + } + } catch (e) { + await mlDataZipWritable.abort(); + throw e; + } + + await mlDataZipWritable.close(); + addLogLine("Ml Data Exported"); +} + +async function exportMlDataToZipWriter(zipWriter: zip.ZipWriter) { + const mlDbData = await mlIDbStorage.getAllMLData(); + const faceClusteringResults = + mlDbData?.library?.data?.faceClusteringResults; + faceClusteringResults && (faceClusteringResults.debugInfo = undefined); + addLogLine( + "Exporting ML DB data: ", + JSON.stringify(Object.keys(mlDbData)), + JSON.stringify( + Object.keys(mlDbData)?.map((k) => Object.keys(mlDbData[k])?.length), + ), + ); + await zipWriter.add( + "indexeddb/mldata.json", + new zip.TextReader(JSON.stringify(mlDbData)), + ); + + const faceCropCache = await CacheStorageService.open(CACHES.FACE_CROPS); + const files = + mlDbData["files"] && (Object.values(mlDbData["files"]) as MlFileData[]); + for (const fileData of files || []) { + for (const face of fileData.faces || []) { + const faceCropUrl = face.crop?.imageUrl; + if (!faceCropUrl) { + console.error("face crop not found for faceId: ", face.id); + continue; + } + const response = await faceCropCache.match(faceCropUrl); + if (response && response.ok) { + const blob = await response.blob(); + await zipWriter.add( + `caches/${CACHES.FACE_CROPS}${faceCropUrl}`, + new zip.BlobReader(blob), + { level: 0 }, + ); + } else { + console.error( + "face crop cache entry not found for faceCropUrl: ", + faceCropUrl, + ); + } + } + } +} +export async function importMlData(mlDataZipFile: File) { + const zipReader = new zip.ZipReader(new FileReader(mlDataZipFile)); + + try { + await importMlDataFromZipReader(zipReader); + } finally { + await zipReader.close(); + } + + addLogLine("ML Data Imported"); +} + +async function importMlDataFromZipReader(zipReader: zip.ZipReader) { + const zipEntries = await zipReader.getEntries(); + // addLogLine(zipEntries); + + const faceCropPath = `caches/${CACHES.FACE_CROPS}`; + const faceCropCache = await CacheStorageService.open(CACHES.FACE_CROPS); + let mldataEntry; + for (const entry of zipEntries) { + if (entry.filename === "indexeddb/mldata.json") { + mldataEntry = entry; + } else if (entry.filename.startsWith(faceCropPath)) { + const faceCropUrl = entry.filename.substring(faceCropPath.length); + // addLogLine('importing faceCropUrl: ', faceCropUrl); + const faceCropCacheBlob: Blob = await entry.getData( + new zip.BlobWriter("image/jpeg"), + ); + faceCropCache.put(faceCropUrl, new Response(faceCropCacheBlob)); + } + } + + const mlDataJsonStr: string = await mldataEntry.getData( + new zip.TextWriter(), + ); + const mlDbData = JSON.parse(mlDataJsonStr); + addLogLine( + "importing ML DB data: ", + JSON.stringify(Object.keys(mlDbData)), + JSON.stringify( + Object.keys(mlDbData)?.map((k) => Object.keys(mlDbData[k])?.length), + ), + ); + await mlIDbStorage.putAllMLData(mlDbData); +} diff --git a/web/apps/photos/src/utils/machineLearning/transform.ts b/web/apps/photos/src/utils/machineLearning/transform.ts new file mode 100644 index 000000000..9e900bbe0 --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/transform.ts @@ -0,0 +1,33 @@ +import { newBoxFromPoints } from "."; +import { Box, Point } from "../../../thirdparty/face-api/classes"; + +import { + Matrix, + applyToPoint, + compose, + scale, + translate, +} from "transformation-matrix"; + +export function computeTransformToBox(inBox: Box, toBox: Box): Matrix { + return compose( + translate(toBox.x, toBox.y), + scale(toBox.width / inBox.width, toBox.height / inBox.height), + ); +} + +export function transformPoint(point: Point, transform: Matrix) { + const txdPoint = applyToPoint(transform, point); + return new Point(txdPoint.x, txdPoint.y); +} + +export function transformPoints(points: Point[], transform: Matrix) { + return points?.map((p) => transformPoint(p, transform)); +} + +export function transformBox(box: Box, transform: Matrix) { + const topLeft = transformPoint(box.topLeft, transform); + const bottomRight = transformPoint(box.bottomRight, transform); + + return newBoxFromPoints(topLeft.x, topLeft.y, bottomRight.x, bottomRight.y); +} diff --git a/web/apps/photos/src/utils/machineLearning/visualization.ts b/web/apps/photos/src/utils/machineLearning/visualization.ts new file mode 100644 index 000000000..949dde6f2 --- /dev/null +++ b/web/apps/photos/src/utils/machineLearning/visualization.ts @@ -0,0 +1,40 @@ +// // import TSNE from 'tsne-js'; +// import { TSNEConfig, TSNEData } from 'types/machineLearning'; + +// export function toD3Tsne(tsne) { +// const data: TSNEData = { +// width: 800, +// height: 800, +// dataset: [], +// }; +// data.dataset = tsne.map((t) => { +// return { +// x: (data.width * (t[0] + 1.0)) / 2, +// y: (data.height * (t[1] + 1.0)) / 2, +// }; +// }); + +// return data; +// } + +// export function toTSNE(denseInput: Array>, config: TSNEConfig) { +// if (!denseInput || denseInput.length < 1) { +// return null; +// } + +// const model = new TSNE(config); + +// model.init({ +// data: denseInput, +// type: 'dense', +// }); + +// // `error`, `iter`: final error and iteration number +// // note: computation-heavy action happens here +// model.run(); + +// // `outputScaled` is `output` scaled to a range of [-1, 1] +// return model.getOutputScaled(); +// } + +export {}; diff --git a/web/apps/photos/src/utils/magicMetadata/index.ts b/web/apps/photos/src/utils/magicMetadata/index.ts new file mode 100644 index 000000000..cce41791e --- /dev/null +++ b/web/apps/photos/src/utils/magicMetadata/index.ts @@ -0,0 +1,97 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { Collection } from "types/collection"; +import { EnteFile } from "types/file"; +import { MagicMetadataCore, VISIBILITY_STATE } from "types/magicMetadata"; + +export function isArchivedFile(item: EnteFile): boolean { + if (!item || !item.magicMetadata || !item.magicMetadata.data) { + return false; + } + return item.magicMetadata.data.visibility === VISIBILITY_STATE.ARCHIVED; +} + +export function isArchivedCollection(item: Collection): boolean { + if (!item) { + return false; + } + + if (item.magicMetadata && item.magicMetadata.data) { + return item.magicMetadata.data.visibility === VISIBILITY_STATE.ARCHIVED; + } + + if (item.sharedMagicMetadata && item.sharedMagicMetadata.data) { + return ( + item.sharedMagicMetadata.data.visibility === + VISIBILITY_STATE.ARCHIVED + ); + } + return false; +} + +export function isPinnedCollection(item: Collection) { + if ( + !item || + !item.magicMetadata || + !item.magicMetadata.data || + typeof item.magicMetadata.data === "string" || + typeof item.magicMetadata.data.order === "undefined" + ) { + return false; + } + return item.magicMetadata.data.order !== 0; +} + +export async function updateMagicMetadata( + magicMetadataUpdates: T, + originalMagicMetadata?: MagicMetadataCore, + decryptionKey?: string, +): Promise> { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + if (!originalMagicMetadata) { + originalMagicMetadata = getNewMagicMetadata(); + } + + if (typeof originalMagicMetadata?.data === "string") { + originalMagicMetadata.data = await cryptoWorker.decryptMetadata( + originalMagicMetadata.data, + originalMagicMetadata.header, + decryptionKey, + ); + } + // copies the existing magic metadata properties of the files and updates the visibility value + // The expected behavior while updating magic metadata is to let the existing property as it is and update/add the property you want + const magicMetadataProps: T = { + ...originalMagicMetadata.data, + ...magicMetadataUpdates, + }; + + const nonEmptyMagicMetadataProps = + getNonEmptyMagicMetadataProps(magicMetadataProps); + + const magicMetadata = { + ...originalMagicMetadata, + data: nonEmptyMagicMetadataProps, + count: Object.keys(nonEmptyMagicMetadataProps).length, + }; + + return magicMetadata; +} + +export const getNewMagicMetadata = (): MagicMetadataCore => { + return { + version: 1, + data: null, + header: null, + count: 0, + }; +}; + +export const getNonEmptyMagicMetadataProps = (magicMetadataProps: T): T => { + return Object.fromEntries( + Object.entries(magicMetadataProps).filter( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + ([_, v]) => v !== null && v !== undefined, + ), + ) as T; +}; diff --git a/web/apps/photos/src/utils/network/index.ts b/web/apps/photos/src/utils/network/index.ts new file mode 100644 index 000000000..244924c49 --- /dev/null +++ b/web/apps/photos/src/utils/network/index.ts @@ -0,0 +1,28 @@ +import { sleep } from "utils/common"; + +const waitTimeBeforeNextAttemptInMilliSeconds = [2000, 5000, 10000]; + +export async function retryAsyncFunction( + request: (abort?: () => void) => Promise, + waitTimeBeforeNextTry?: number[], +): Promise { + if (!waitTimeBeforeNextTry) { + waitTimeBeforeNextTry = waitTimeBeforeNextAttemptInMilliSeconds; + } + + for ( + let attemptNumber = 0; + attemptNumber <= waitTimeBeforeNextTry.length; + attemptNumber++ + ) { + try { + const resp = await request(); + return resp; + } catch (e) { + if (attemptNumber === waitTimeBeforeNextTry.length) { + throw e; + } + await sleep(waitTimeBeforeNextTry[attemptNumber]); + } + } +} diff --git a/web/apps/photos/src/utils/number/format.ts b/web/apps/photos/src/utils/number/format.ts new file mode 100644 index 000000000..0b92ea977 --- /dev/null +++ b/web/apps/photos/src/utils/number/format.ts @@ -0,0 +1,7 @@ +import i18n from "i18next"; + +const numberFormatter = new Intl.NumberFormat(i18n.language); + +export function formatNumber(value: number): string { + return numberFormatter.format(value); +} diff --git a/web/apps/photos/src/utils/photoFrame/index.ts b/web/apps/photos/src/utils/photoFrame/index.ts new file mode 100644 index 000000000..6e59524c5 --- /dev/null +++ b/web/apps/photos/src/utils/photoFrame/index.ts @@ -0,0 +1,131 @@ +import { logError } from "@ente/shared/sentry"; +import { FILE_TYPE } from "constants/file"; +import { LivePhotoSourceURL, SourceURLs } from "services/download"; +import { EnteFile } from "types/file"; + +const WAIT_FOR_VIDEO_PLAYBACK = 1 * 1000; + +export async function isPlaybackPossible(url: string): Promise { + return await new Promise((resolve) => { + const t = setTimeout(() => { + resolve(false); + }, WAIT_FOR_VIDEO_PLAYBACK); + + const video = document.createElement("video"); + video.addEventListener("canplay", function () { + clearTimeout(t); + video.remove(); // Clean up the video element + // also check for duration > 0 to make sure it is not a broken video + if (video.duration > 0) { + resolve(true); + } else { + resolve(false); + } + }); + video.addEventListener("error", function () { + clearTimeout(t); + video.remove(); + resolve(false); + }); + + video.src = url; + }); +} + +export async function playVideo(livePhotoVideo, livePhotoImage) { + const videoPlaying = !livePhotoVideo.paused; + if (videoPlaying) return; + livePhotoVideo.style.opacity = 1; + livePhotoImage.style.opacity = 0; + livePhotoVideo.load(); + livePhotoVideo.play().catch(() => { + pauseVideo(livePhotoVideo, livePhotoImage); + }); +} + +export async function pauseVideo(livePhotoVideo, livePhotoImage) { + const videoPlaying = !livePhotoVideo.paused; + if (!videoPlaying) return; + livePhotoVideo.pause(); + livePhotoVideo.style.opacity = 0; + livePhotoImage.style.opacity = 1; +} + +export function updateFileMsrcProps(file: EnteFile, url: string) { + file.w = window.innerWidth; + file.h = window.innerHeight; + file.msrc = url; + file.isSourceLoaded = false; + file.conversionFailed = false; + file.isConverted = false; + if (file.metadata.fileType === FILE_TYPE.IMAGE) { + file.src = url; + } else { + file.html = ` +
+ +
+ `; + } +} + +export async function updateFileSrcProps( + file: EnteFile, + srcURLs: SourceURLs, + enableDownload: boolean, +) { + const { url, isRenderable, isOriginal } = srcURLs; + file.w = window.innerWidth; + file.h = window.innerHeight; + file.isSourceLoaded = + file.metadata.fileType === FILE_TYPE.LIVE_PHOTO + ? srcURLs.type === "livePhoto" + : true; + file.isConverted = !isOriginal; + file.conversionFailed = !isRenderable; + file.srcURLs = srcURLs; + if (!isRenderable) { + file.isSourceLoaded = true; + return; + } + + if (file.metadata.fileType === FILE_TYPE.VIDEO) { + file.html = ` + + `; + } else if (file.metadata.fileType === FILE_TYPE.LIVE_PHOTO) { + if (srcURLs.type === "normal") { + file.html = ` +
+ +
+ `; + } else { + const { image: imageURL, video: videoURL } = + url as LivePhotoSourceURL; + + file.html = ` +
+ + +
+ `; + } + } else if (file.metadata.fileType === FILE_TYPE.IMAGE) { + file.src = url as string; + } else { + logError( + Error(`unknown file type - ${file.metadata.fileType}`), + "Unknown file type", + ); + file.src = url as string; + } +} diff --git a/web/apps/photos/src/utils/publicCollectionGallery/index.ts b/web/apps/photos/src/utils/publicCollectionGallery/index.ts new file mode 100644 index 000000000..c038aabb7 --- /dev/null +++ b/web/apps/photos/src/utils/publicCollectionGallery/index.ts @@ -0,0 +1,17 @@ +import { createContext } from "react"; +import { PublicCollectionGalleryContextType } from "types/publicCollection"; + +const defaultPublicCollectionGalleryContext: PublicCollectionGalleryContextType = + { + token: null, + passwordToken: null, + referralCode: null, + accessedThroughSharedURL: false, + photoListHeader: null, + photoListFooter: null, + }; + +export const PublicCollectionGalleryContext = + createContext( + defaultPublicCollectionGalleryContext, + ); diff --git a/web/apps/photos/src/utils/search/index.ts b/web/apps/photos/src/utils/search/index.ts new file mode 100644 index 000000000..392211ca3 --- /dev/null +++ b/web/apps/photos/src/utils/search/index.ts @@ -0,0 +1,28 @@ +import { DateValue } from "types/search"; + +export const isSameDayAnyYear = + (baseDate: DateValue) => (compareDate: Date) => { + let same = true; + + if (baseDate.month || baseDate.month === 0) { + same = baseDate.month === compareDate.getMonth(); + } + if (same && baseDate.date) { + same = baseDate.date === compareDate.getDate(); + } + if (same && baseDate.year) { + same = baseDate.year === compareDate.getFullYear(); + } + + return same; + }; + +export function getFormattedDate(date: DateValue) { + const options = {}; + date.date && (options["day"] = "numeric"); + (date.month || date.month === 0) && (options["month"] = "long"); + date.year && (options["year"] = "numeric"); + return new Intl.DateTimeFormat("en-IN", options).format( + new Date(date.year ?? 1, date.month ?? 1, date.date ?? 1), + ); +} diff --git a/web/apps/photos/src/utils/storage/mlIDbStorage.ts b/web/apps/photos/src/utils/storage/mlIDbStorage.ts new file mode 100644 index 000000000..7ee4a5fcf --- /dev/null +++ b/web/apps/photos/src/utils/storage/mlIDbStorage.ts @@ -0,0 +1,513 @@ +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import { + DEFAULT_ML_SEARCH_CONFIG, + DEFAULT_ML_SYNC_CONFIG, + DEFAULT_ML_SYNC_JOB_CONFIG, + MAX_ML_SYNC_ERROR_COUNT, +} from "constants/mlConfig"; +import { + DBSchema, + IDBPDatabase, + IDBPTransaction, + StoreNames, + deleteDB, + openDB, +} from "idb"; +import { + Face, + MLLibraryData, + MlFileData, + Person, + RealWorldObject, + Thing, +} from "types/machineLearning"; +import { IndexStatus } from "types/machineLearning/ui"; +import { runningInBrowser, runningInElectron } from "utils/common"; + +interface Config {} + +export const ML_SYNC_JOB_CONFIG_NAME = "ml-sync-job"; +export const ML_SYNC_CONFIG_NAME = "ml-sync"; +export const ML_SEARCH_CONFIG_NAME = "ml-search"; + +const MLDATA_DB_NAME = "mldata"; +interface MLDb extends DBSchema { + files: { + key: number; + value: MlFileData; + indexes: { mlVersion: [number, number] }; + }; + people: { + key: number; + value: Person; + }; + things: { + key: number; + value: Thing; + }; + versions: { + key: string; + value: number; + }; + library: { + key: string; + value: MLLibraryData; + }; + configs: { + key: string; + value: Config; + }; +} + +class MLIDbStorage { + public _db: Promise>; + + constructor() { + if (!runningInBrowser() || !runningInElectron()) { + return; + } + + this.db; + } + + private openDB(): Promise> { + return openDB(MLDATA_DB_NAME, 3, { + terminated: async () => { + console.error("ML Indexed DB terminated"); + logError(new Error(), "ML Indexed DB terminated"); + this._db = undefined; + // TODO: remove if there is chance of this going into recursion in some case + await this.db; + }, + blocked() { + // TODO: make sure we dont allow multiple tabs of app + console.error("ML Indexed DB blocked"); + logError(new Error(), "ML Indexed DB blocked"); + }, + blocking() { + // TODO: make sure we dont allow multiple tabs of app + console.error("ML Indexed DB blocking"); + logError(new Error(), "ML Indexed DB blocking"); + }, + async upgrade(db, oldVersion, newVersion, tx) { + if (oldVersion < 1) { + const filesStore = db.createObjectStore("files", { + keyPath: "fileId", + }); + filesStore.createIndex("mlVersion", [ + "mlVersion", + "errorCount", + ]); + + db.createObjectStore("people", { + keyPath: "id", + }); + + db.createObjectStore("things", { + keyPath: "id", + }); + + db.createObjectStore("versions"); + + db.createObjectStore("library"); + } + if (oldVersion < 2) { + // TODO: update configs if version is updated in defaults + db.createObjectStore("configs"); + + await tx + .objectStore("configs") + .add( + DEFAULT_ML_SYNC_JOB_CONFIG, + ML_SYNC_JOB_CONFIG_NAME, + ); + await tx + .objectStore("configs") + .add(DEFAULT_ML_SYNC_CONFIG, ML_SYNC_CONFIG_NAME); + } + if (oldVersion < 3) { + await tx + .objectStore("configs") + .add(DEFAULT_ML_SEARCH_CONFIG, ML_SEARCH_CONFIG_NAME); + } + addLogLine( + `Ml DB upgraded to version: ${newVersion} from version: ${oldVersion}`, + ); + }, + }); + } + + public get db(): Promise> { + if (!this._db) { + this._db = this.openDB(); + addLogLine("Opening Ml DB"); + } + + return this._db; + } + + public async clearMLDB() { + const db = await this.db; + db.close(); + await deleteDB(MLDATA_DB_NAME); + addLogLine("Cleared Ml DB"); + this._db = undefined; + await this.db; + } + + public async getAllFileIds() { + const db = await this.db; + return db.getAllKeys("files"); + } + + public async putAllFilesInTx(mlFiles: Array) { + const db = await this.db; + const tx = db.transaction("files", "readwrite"); + await Promise.all(mlFiles.map((mlFile) => tx.store.put(mlFile))); + await tx.done; + } + + public async removeAllFilesInTx(fileIds: Array) { + const db = await this.db; + const tx = db.transaction("files", "readwrite"); + + await Promise.all(fileIds.map((fileId) => tx.store.delete(fileId))); + await tx.done; + } + + public async newTransaction< + Name extends StoreNames, + Mode extends IDBTransactionMode = "readonly", + >(storeNames: Name, mode?: Mode) { + const db = await this.db; + return db.transaction(storeNames, mode); + } + + public async commit(tx: IDBPTransaction) { + return tx.done; + } + + public async getAllFileIdsForUpdate( + tx: IDBPTransaction, + ) { + return tx.store.getAllKeys(); + } + + public async getFileIds( + count: number, + limitMlVersion: number, + maxErrorCount: number, + ) { + const db = await this.db; + const tx = db.transaction("files", "readonly"); + const index = tx.store.index("mlVersion"); + let cursor = await index.openKeyCursor( + IDBKeyRange.upperBound([limitMlVersion], true), + ); + + const fileIds: number[] = []; + while (cursor && fileIds.length < count) { + if ( + cursor.key[0] < limitMlVersion && + cursor.key[1] <= maxErrorCount + ) { + fileIds.push(cursor.primaryKey); + } + cursor = await cursor.continue(); + } + await tx.done; + + return fileIds; + } + + public async getFile(fileId: number) { + const db = await this.db; + return db.get("files", fileId); + } + + public async getAllFiles() { + const db = await this.db; + return db.getAll("files"); + } + + public async putFile(mlFile: MlFileData) { + const db = await this.db; + return db.put("files", mlFile); + } + + public async upsertFileInTx( + fileId: number, + upsert: (mlFile: MlFileData) => MlFileData, + ) { + const db = await this.db; + const tx = db.transaction("files", "readwrite"); + const existing = await tx.store.get(fileId); + const updated = upsert(existing); + await tx.store.put(updated); + await tx.done; + + return updated; + } + + public async putAllFiles( + mlFiles: Array, + tx: IDBPTransaction, + ) { + await Promise.all(mlFiles.map((mlFile) => tx.store.put(mlFile))); + } + + public async removeAllFiles( + fileIds: Array, + tx: IDBPTransaction, + ) { + await Promise.all(fileIds.map((fileId) => tx.store.delete(fileId))); + } + + public async getFace(fileID: number, faceId: string) { + const file = await this.getFile(fileID); + const face = file.faces.filter((f) => f.id === faceId); + return face[0]; + } + + public async getAllFacesMap() { + const startTime = Date.now(); + const db = await this.db; + const allFiles = await db.getAll("files"); + const allFacesMap = new Map>(); + allFiles.forEach( + (mlFileData) => + mlFileData.faces && + allFacesMap.set(mlFileData.fileId, mlFileData.faces), + ); + addLogLine("getAllFacesMap", Date.now() - startTime, "ms"); + + return allFacesMap; + } + + public async updateFaces(allFacesMap: Map) { + const startTime = Date.now(); + const db = await this.db; + const tx = db.transaction("files", "readwrite"); + let cursor = await tx.store.openCursor(); + while (cursor) { + if (allFacesMap.has(cursor.key)) { + const mlFileData = { ...cursor.value }; + mlFileData.faces = allFacesMap.get(cursor.key); + cursor.update(mlFileData); + } + cursor = await cursor.continue(); + } + await tx.done; + addLogLine("updateFaces", Date.now() - startTime, "ms"); + } + + public async getAllObjectsMap() { + const startTime = Date.now(); + const db = await this.db; + const allFiles = await db.getAll("files"); + const allObjectsMap = new Map>(); + allFiles.forEach( + (mlFileData) => + mlFileData.objects && + allObjectsMap.set(mlFileData.fileId, mlFileData.objects), + ); + addLogLine("allObjectsMap", Date.now() - startTime, "ms"); + + return allObjectsMap; + } + + public async getPerson(id: number) { + const db = await this.db; + return db.get("people", id); + } + + public async getAllPeople() { + const db = await this.db; + return db.getAll("people"); + } + + public async putPerson(person: Person) { + const db = await this.db; + return db.put("people", person); + } + + public async clearAllPeople() { + const db = await this.db; + return db.clear("people"); + } + + public async getAllThings() { + const db = await this.db; + return db.getAll("things"); + } + public async putThing(thing: Thing) { + const db = await this.db; + return db.put("things", thing); + } + + public async clearAllThings() { + const db = await this.db; + return db.clear("things"); + } + + public async getIndexVersion(index: string) { + const db = await this.db; + return db.get("versions", index); + } + + public async incrementIndexVersion(index: StoreNames) { + if (index === "versions") { + throw new Error("versions store can not be versioned"); + } + const db = await this.db; + const tx = db.transaction(["versions", index], "readwrite"); + let version = await tx.objectStore("versions").get(index); + version = (version || 0) + 1; + tx.objectStore("versions").put(version, index); + await tx.done; + + return version; + } + + public async setIndexVersion(index: string, version: number) { + const db = await this.db; + return db.put("versions", version, index); + } + + public async getLibraryData() { + const db = await this.db; + return db.get("library", "data"); + } + + public async putLibraryData(data: MLLibraryData) { + const db = await this.db; + return db.put("library", data, "data"); + } + + public async getConfig(name: string, def: T) { + const db = await this.db; + const tx = db.transaction("configs", "readwrite"); + let config = (await tx.store.get(name)) as T; + if (!config) { + config = def; + await tx.store.put(def, name); + } + await tx.done; + + return config; + } + + public async putConfig(name: string, data: Config) { + const db = await this.db; + return db.put("configs", data, name); + } + + public async getIndexStatus(latestMlVersion: number): Promise { + const db = await this.db; + const tx = db.transaction(["files", "versions"], "readonly"); + const mlVersionIdx = tx.objectStore("files").index("mlVersion"); + + let outOfSyncCursor = await mlVersionIdx.openKeyCursor( + IDBKeyRange.upperBound([latestMlVersion], true), + ); + let outOfSyncFilesExists = false; + while (outOfSyncCursor && !outOfSyncFilesExists) { + if ( + outOfSyncCursor.key[0] < latestMlVersion && + outOfSyncCursor.key[1] <= MAX_ML_SYNC_ERROR_COUNT + ) { + outOfSyncFilesExists = true; + } + outOfSyncCursor = await outOfSyncCursor.continue(); + } + + const nSyncedFiles = await mlVersionIdx.count( + IDBKeyRange.lowerBound([latestMlVersion]), + ); + const nTotalFiles = await mlVersionIdx.count(); + + const filesIndexVersion = await tx.objectStore("versions").get("files"); + const peopleIndexVersion = await tx + .objectStore("versions") + .get("people"); + const filesIndexVersionExists = + filesIndexVersion !== null && filesIndexVersion !== undefined; + const peopleIndexVersionExists = + peopleIndexVersion !== null && peopleIndexVersion !== undefined; + + await tx.done; + + return { + outOfSyncFilesExists, + nSyncedFiles, + nTotalFiles, + localFilesSynced: filesIndexVersionExists, + peopleIndexSynced: + peopleIndexVersionExists && + peopleIndexVersion === filesIndexVersion, + }; + } + + // for debug purpose + public async getAllMLData() { + const db = await this.db; + const tx = db.transaction(db.objectStoreNames, "readonly"); + const allMLData: any = {}; + for (const store of tx.objectStoreNames) { + const keys = await tx.objectStore(store).getAllKeys(); + const data = await tx.objectStore(store).getAll(); + + allMLData[store] = {}; + for (let i = 0; i < keys.length; i++) { + allMLData[store][keys[i]] = data[i]; + } + } + await tx.done; + + const files = allMLData["files"]; + for (const fileId of Object.keys(files)) { + const fileData = files[fileId]; + fileData.faces?.forEach( + (f) => (f.embedding = Array.from(f.embedding)), + ); + } + + return allMLData; + } + + // for debug purpose, this will overwrite all data + public async putAllMLData(allMLData: Map) { + const db = await this.db; + const tx = db.transaction(db.objectStoreNames, "readwrite"); + for (const store of tx.objectStoreNames) { + const records = allMLData[store]; + if (!records) { + continue; + } + const txStore = tx.objectStore(store); + + if (store === "files") { + const files = records; + for (const fileId of Object.keys(files)) { + const fileData = files[fileId]; + fileData.faces?.forEach( + (f) => (f.embedding = Float32Array.from(f.embedding)), + ); + } + } + + await txStore.clear(); + for (const key of Object.keys(records)) { + if (txStore.keyPath) { + txStore.put(records[key]); + } else { + txStore.put(records[key], key); + } + } + } + await tx.done; + } +} + +export default new MLIDbStorage(); diff --git a/web/apps/photos/src/utils/storage/mlStorage.ts b/web/apps/photos/src/utils/storage/mlStorage.ts new file mode 100644 index 000000000..31fc38fab --- /dev/null +++ b/web/apps/photos/src/utils/storage/mlStorage.ts @@ -0,0 +1,97 @@ +import localForage from "localforage"; +import { EnteFile } from "types/file"; +import { + Face, + MlFileData, + MLIndex, + MLSyncContext, +} from "types/machineLearning"; + +export const mlFilesStore = localForage.createInstance({ + driver: localForage.INDEXEDDB, + name: "ml-data", + version: 1.0, + storeName: "files", +}); + +export const mlPeopleStore = localForage.createInstance({ + driver: localForage.INDEXEDDB, + name: "ml-data", + version: 1.0, + storeName: "people", +}); + +export const mlLibraryStore = localForage.createInstance({ + driver: localForage.INDEXEDDB, + name: "ml-data", + version: 1.0, + storeName: "library", +}); + +export const mlVersionStore = localForage.createInstance({ + driver: localForage.INDEXEDDB, + name: "ml-data", + version: 1.0, + storeName: "versions", +}); + +export async function clearMLStorage() { + await mlFilesStore.clear(); + await mlPeopleStore.clear(); + await mlLibraryStore.clear(); + await mlVersionStore.clear(); +} + +export async function getIndexVersion(index: MLIndex): Promise { + return ((await mlVersionStore.getItem(`${index}`)) as number) || 0; +} + +export async function setIndexVersion( + index: MLIndex, + version: number, +): Promise { + await mlVersionStore.setItem(`${index}`, version); + + return version; +} + +export async function incrementIndexVersion(index: MLIndex): Promise { + let currentVersion = await getIndexVersion(index); + currentVersion = currentVersion + 1; + await setIndexVersion(index, currentVersion); + + return currentVersion; +} + +export async function isVersionOutdated(index: MLIndex, thanIndex: MLIndex) { + const indexVersion = await getIndexVersion(index); + const thanIndexVersion = await getIndexVersion(thanIndex); + + return indexVersion < thanIndexVersion; +} + +export function newMlData( + syncContext: MLSyncContext, + enteFile: EnteFile, +): MlFileData { + return { + fileId: enteFile.id, + imageSource: syncContext.config.imageSource, + faceDetectionMethod: syncContext.faceDetectionService.method, + faceCropMethod: syncContext.faceCropService.method, + faceAlignmentMethod: syncContext.faceAlignmentService.method, + faceEmbeddingMethod: syncContext.faceEmbeddingService.method, + errorCount: 0, + mlVersion: 0, + }; +} + +export async function getAllFacesMap() { + const allSyncedFacesMap = new Map>(); + await mlFilesStore.iterate((mlFileData: MlFileData) => { + mlFileData.faces && + allSyncedFacesMap.set(mlFileData.fileId, mlFileData.faces); + }); + + return allSyncedFacesMap; +} diff --git a/web/apps/photos/src/utils/temp/index.ts b/web/apps/photos/src/utils/temp/index.ts new file mode 100644 index 000000000..984f4abb0 --- /dev/null +++ b/web/apps/photos/src/utils/temp/index.ts @@ -0,0 +1,14 @@ +const CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + +export function generateTempName(length: number, suffix: string) { + let tempName = ""; + + const charactersLength = CHARACTERS.length; + for (let i = 0; i < length; i++) { + tempName += CHARACTERS.charAt( + Math.floor(Math.random() * charactersLength), + ); + } + return `${tempName}-${suffix}`; +} diff --git a/web/apps/photos/src/utils/ui/index.tsx b/web/apps/photos/src/utils/ui/index.tsx new file mode 100644 index 000000000..1b938fb03 --- /dev/null +++ b/web/apps/photos/src/utils/ui/index.tsx @@ -0,0 +1,178 @@ +import { DialogBoxAttributes } from "@ente/shared/components/DialogBox/types"; +import AutoAwesomeOutlinedIcon from "@mui/icons-material/AutoAwesomeOutlined"; +import { t } from "i18next"; +import { downloadApp } from "utils/common"; + +import { logoutUser } from "@ente/accounts/services/user"; +import ElectronAPIs from "@ente/shared/electron"; +import { AppUpdateInfo } from "@ente/shared/electron/types"; +import InfoOutlined from "@mui/icons-material/InfoRounded"; +import { Link } from "@mui/material"; +import { OPEN_STREET_MAP_LINK } from "components/Sidebar/EnableMap"; +import { Trans } from "react-i18next"; +import { Subscription } from "types/billing"; +export const getDownloadAppMessage = (): DialogBoxAttributes => { + return { + title: t("DOWNLOAD_APP"), + content: t("DOWNLOAD_APP_MESSAGE"), + + proceed: { + text: t("DOWNLOAD"), + action: downloadApp, + variant: "accent", + }, + close: { + text: t("CLOSE"), + }, + }; +}; + +export const getTrashFilesMessage = ( + deleteFileHelper, +): DialogBoxAttributes => ({ + title: t("TRASH_FILES_TITLE"), + content: t("TRASH_FILES_MESSAGE"), + proceed: { + action: deleteFileHelper, + text: t("MOVE_TO_TRASH"), + variant: "critical", + }, + close: { text: t("CANCEL") }, +}); + +export const getTrashFileMessage = (deleteFileHelper): DialogBoxAttributes => ({ + title: t("TRASH_FILE_TITLE"), + content: t("TRASH_FILE_MESSAGE"), + proceed: { + action: deleteFileHelper, + text: t("MOVE_TO_TRASH"), + variant: "critical", + }, + close: { text: t("CANCEL") }, +}); + +export const getUpdateReadyToInstallMessage = ( + updateInfo: AppUpdateInfo, +): DialogBoxAttributes => ({ + icon: , + title: t("UPDATE_AVAILABLE"), + content: t("UPDATE_INSTALLABLE_MESSAGE"), + proceed: { + action: () => ElectronAPIs.updateAndRestart(), + text: t("INSTALL_NOW"), + variant: "accent", + }, + close: { + text: t("INSTALL_ON_NEXT_LAUNCH"), + variant: "secondary", + action: () => ElectronAPIs.muteUpdateNotification(updateInfo.version), + }, +}); + +export const getUpdateAvailableForDownloadMessage = ( + updateInfo: AppUpdateInfo, +): DialogBoxAttributes => ({ + icon: , + title: t("UPDATE_AVAILABLE"), + content: t("UPDATE_AVAILABLE_MESSAGE"), + close: { + text: t("IGNORE_THIS_VERSION"), + variant: "secondary", + action: () => ElectronAPIs.skipAppUpdate(updateInfo.version), + }, + proceed: { + action: downloadApp, + text: t("DOWNLOAD_AND_INSTALL"), + variant: "accent", + }, +}); + +export const getRootLevelFileWithFolderNotAllowMessage = + (): DialogBoxAttributes => ({ + icon: , + title: t("ROOT_LEVEL_FILE_WITH_FOLDER_NOT_ALLOWED"), + content: ( + + ), + close: {}, + }); + +export const getExportDirectoryDoesNotExistMessage = + (): DialogBoxAttributes => ({ + title: t("EXPORT_DIRECTORY_DOES_NOT_EXIST"), + content: , + close: {}, + }); + +export const getSubscriptionPurchaseSuccessMessage = ( + subscription: Subscription, +): DialogBoxAttributes => ({ + title: t("SUBSCRIPTION_PURCHASE_SUCCESS_TITLE"), + close: { variant: "accent" }, + content: ( + + ), +}); + +export const getSessionExpiredMessage = (): DialogBoxAttributes => ({ + title: t("SESSION_EXPIRED"), + content: t("SESSION_EXPIRED_MESSAGE"), + + nonClosable: true, + proceed: { + text: t("LOGIN"), + action: logoutUser, + variant: "accent", + }, +}); + +export const getMapEnableConfirmationDialog = ( + enableMapHelper, +): DialogBoxAttributes => ({ + title: t("ENABLE_MAPS"), + content: ( + , + }} + /> + ), + proceed: { + action: enableMapHelper, + text: t("ENABLE"), + variant: "accent", + }, + close: { text: t("CANCEL") }, +}); + +export const getMapDisableConfirmationDialog = ( + disableMapHelper, +): DialogBoxAttributes => ({ + title: t("DISABLE_MAPS"), + content: , + proceed: { + action: disableMapHelper, + text: t("DISABLE"), + variant: "accent", + }, + close: { text: t("CANCEL") }, +}); + +export const getEditorCloseConfirmationMessage = ( + doClose: () => void, +): DialogBoxAttributes => ({ + title: t("CONFIRM_EDITOR_CLOSE_MESSAGE"), + content: t("CONFIRM_EDITOR_CLOSE_DESCRIPTION"), + proceed: { + action: doClose, + text: t("CLOSE"), + variant: "critical", + }, + close: { text: t("CANCEL") }, +}); diff --git a/web/apps/photos/src/utils/upload/index.ts b/web/apps/photos/src/utils/upload/index.ts new file mode 100644 index 000000000..6cce03aa9 --- /dev/null +++ b/web/apps/photos/src/utils/upload/index.ts @@ -0,0 +1,211 @@ +import { ENTE_METADATA_FOLDER } from "constants/export"; +import { FILE_TYPE } from "constants/file"; +import { + A_SEC_IN_MICROSECONDS, + DEFAULT_IMPORT_SUGGESTION, + PICKED_UPLOAD_TYPE, +} from "constants/upload"; +import isElectron from "is-electron"; +import { EnteFile } from "types/file"; +import { + ElectronFile, + FileWithCollection, + ImportSuggestion, + Metadata, +} from "types/upload"; + +const TYPE_JSON = "json"; +const DEDUPE_COLLECTION = new Set(["icloud library", "icloudlibrary"]); + +export function findMatchingExistingFiles( + existingFiles: EnteFile[], + newFileMetadata: Metadata, +): EnteFile[] { + const matchingFiles: EnteFile[] = []; + for (const existingFile of existingFiles) { + if (areFilesSame(existingFile.metadata, newFileMetadata)) { + matchingFiles.push(existingFile); + } + } + return matchingFiles; +} + +export function shouldDedupeAcrossCollection(collectionName: string): boolean { + // using set to avoid unnecessary regex for removing spaces for each upload + return DEDUPE_COLLECTION.has(collectionName.toLocaleLowerCase()); +} + +export function areFilesSame( + existingFile: Metadata, + newFile: Metadata, +): boolean { + if (hasFileHash(existingFile) && hasFileHash(newFile)) { + return areFilesWithFileHashSame(existingFile, newFile); + } else { + /* + * The maximum difference in the creation/modification times of two similar files is set to 1 second. + * This is because while uploading files in the web - browsers and users could have set reduced + * precision of file times to prevent timing attacks and fingerprinting. + * Context: https://developer.mozilla.org/en-US/docs/Web/API/File/lastModified#reduced_time_precision + */ + if ( + existingFile.fileType === newFile.fileType && + Math.abs(existingFile.creationTime - newFile.creationTime) < + A_SEC_IN_MICROSECONDS && + Math.abs(existingFile.modificationTime - newFile.modificationTime) < + A_SEC_IN_MICROSECONDS && + existingFile.title === newFile.title + ) { + return true; + } else { + return false; + } + } +} + +export function hasFileHash(file: Metadata) { + return file.hash || (file.imageHash && file.videoHash); +} + +export function areFilesWithFileHashSame( + existingFile: Metadata, + newFile: Metadata, +): boolean { + if ( + existingFile.fileType !== newFile.fileType || + existingFile.title !== newFile.title + ) { + return false; + } + if (existingFile.fileType === FILE_TYPE.LIVE_PHOTO) { + return ( + existingFile.imageHash === newFile.imageHash && + existingFile.videoHash === newFile.videoHash + ); + } else { + return existingFile.hash === newFile.hash; + } +} + +export function segregateMetadataAndMediaFiles( + filesWithCollectionToUpload: FileWithCollection[], +) { + const metadataJSONFiles: FileWithCollection[] = []; + const mediaFiles: FileWithCollection[] = []; + filesWithCollectionToUpload.forEach((fileWithCollection) => { + const file = fileWithCollection.file; + if (file.name.toLowerCase().endsWith(TYPE_JSON)) { + metadataJSONFiles.push(fileWithCollection); + } else { + mediaFiles.push(fileWithCollection); + } + }); + return { mediaFiles, metadataJSONFiles }; +} + +export function areFileWithCollectionsSame( + firstFile: FileWithCollection, + secondFile: FileWithCollection, +): boolean { + return firstFile.localID === secondFile.localID; +} + +export function getImportSuggestion( + uploadType: PICKED_UPLOAD_TYPE, + toUploadFiles: File[] | ElectronFile[], +): ImportSuggestion { + if (isElectron() && uploadType === PICKED_UPLOAD_TYPE.FILES) { + return DEFAULT_IMPORT_SUGGESTION; + } + + const paths: string[] = toUploadFiles.map((file) => file["path"]); + const getCharCount = (str: string) => (str.match(/\//g) ?? []).length; + paths.sort((path1, path2) => getCharCount(path1) - getCharCount(path2)); + const firstPath = paths[0]; + const lastPath = paths[paths.length - 1]; + + const L = firstPath.length; + let i = 0; + const firstFileFolder = firstPath.substring(0, firstPath.lastIndexOf("/")); + const lastFileFolder = lastPath.substring(0, lastPath.lastIndexOf("/")); + + while (i < L && firstPath.charAt(i) === lastPath.charAt(i)) i++; + let commonPathPrefix = firstPath.substring(0, i); + + if (commonPathPrefix) { + commonPathPrefix = commonPathPrefix.substring( + 0, + commonPathPrefix.lastIndexOf("/"), + ); + if (commonPathPrefix) { + commonPathPrefix = commonPathPrefix.substring( + commonPathPrefix.lastIndexOf("/") + 1, + ); + } + } + return { + rootFolderName: commonPathPrefix || null, + hasNestedFolders: firstFileFolder !== lastFileFolder, + hasRootLevelFileWithFolder: firstFileFolder === "", + }; +} + +// This function groups files that are that have the same parent folder into collections +// For Example, for user files have a directory structure like this +// a +// / | \ +// b j c +// /|\ / \ +// e f g h i +// +// The files will grouped into 3 collections. +// [a => [j], +// b => [e,f,g], +// c => [h, i]] +export function groupFilesBasedOnParentFolder( + toUploadFiles: File[] | ElectronFile[], +) { + const collectionNameToFilesMap = new Map(); + for (const file of toUploadFiles) { + const filePath = file["path"] as string; + + let folderPath = filePath.substring(0, filePath.lastIndexOf("/")); + // If the parent folder of a file is "metadata" + // we consider it to be part of the parent folder + // For Eg,For FileList -> [a/x.png, a/metadata/x.png.json] + // they will both we grouped into the collection "a" + // This is cluster the metadata json files in the same collection as the file it is for + if (folderPath.endsWith(ENTE_METADATA_FOLDER)) { + folderPath = folderPath.substring(0, folderPath.lastIndexOf("/")); + } + const folderName = folderPath.substring( + folderPath.lastIndexOf("/") + 1, + ); + if (!folderName?.length) { + throw Error("folderName can't be null"); + } + if (!collectionNameToFilesMap.has(folderName)) { + collectionNameToFilesMap.set(folderName, []); + } + collectionNameToFilesMap.get(folderName).push(file); + } + return collectionNameToFilesMap; +} + +export function filterOutSystemFiles(files: File[] | ElectronFile[]) { + if (files[0] instanceof File) { + const browserFiles = files as File[]; + return browserFiles.filter((file) => { + return !isSystemFile(file); + }); + } else { + const electronFiles = files as ElectronFile[]; + return electronFiles.filter((file) => { + return !isSystemFile(file); + }); + } +} + +export function isSystemFile(file: File | ElectronFile) { + return file.name.startsWith("."); +} diff --git a/web/apps/photos/src/utils/upload/isCanvasBlocked.ts b/web/apps/photos/src/utils/upload/isCanvasBlocked.ts new file mode 100644 index 000000000..e9f9b5abe --- /dev/null +++ b/web/apps/photos/src/utils/upload/isCanvasBlocked.ts @@ -0,0 +1,53 @@ +// +// Canvas Blocker & +// Firefox privacy.resistFingerprinting Detector. +// (c) 2018 // JOHN OZBAY // CRYPT.EE +// MIT License + +// Credits: https://github.com/johnozbay/canvas-block-detector/blob/master/isCanvasBlocked.js + +// +export function isCanvasBlocked() { + // create a 1px image data + let blocked = false; + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + + // some blockers just return an undefined ctx. So let's check that first. + if (ctx) { + const imageData = ctx.createImageData(1, 1); + const originalImageData = imageData.data; + + // set pixels to RGB 128 + originalImageData[0] = 128; + originalImageData[1] = 128; + originalImageData[2] = 128; + originalImageData[3] = 255; + + // set this to canvas + ctx.putImageData(imageData, 1, 1); + + try { + // now get the data back from canvas. + const checkData = ctx.getImageData(1, 1, 1, 1).data; + + // If this is firefox, and privacy.resistFingerprinting is enabled, + // OR a browser extension blocking the canvas, + // This will return RGB all white (255,255,255) instead of the (128,128,128) we put. + + // so let's check the R and G to see if they're 255 or 128 (matching what we've initially set) + if ( + originalImageData[0] !== checkData[0] && + originalImageData[1] !== checkData[1] + ) { + blocked = true; + } + } catch (error) { + // some extensions will return getImageData null. this is to account for that. + blocked = true; + } + } else { + blocked = true; + } + return blocked; +} diff --git a/web/apps/photos/src/utils/upload/uploadRetrier.ts b/web/apps/photos/src/utils/upload/uploadRetrier.ts new file mode 100644 index 000000000..2f42ed58f --- /dev/null +++ b/web/apps/photos/src/utils/upload/uploadRetrier.ts @@ -0,0 +1,29 @@ +import { sleep } from "utils/common"; + +const retrySleepTimeInMilliSeconds = [2000, 5000, 10000]; + +export async function retryHTTPCall( + func: () => Promise, + checkForBreakingError?: (error) => void, +): Promise { + const retrier = async ( + func: () => Promise, + attemptNumber: number = 0, + ) => { + try { + const resp = await func(); + return resp; + } catch (e) { + if (checkForBreakingError) { + checkForBreakingError(e); + } + if (attemptNumber < retrySleepTimeInMilliSeconds.length) { + await sleep(retrySleepTimeInMilliSeconds[attemptNumber]); + return await retrier(func, attemptNumber + 1); + } else { + throw e; + } + } + }; + return await retrier(func); +} diff --git a/web/apps/photos/src/utils/user/family.ts b/web/apps/photos/src/utils/user/family.ts new file mode 100644 index 000000000..4ccc1bcf1 --- /dev/null +++ b/web/apps/photos/src/utils/user/family.ts @@ -0,0 +1,46 @@ +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { User } from "@ente/shared/user/types"; +import { FamilyData, FamilyMember } from "types/user"; + +export function getLocalFamilyData(): FamilyData { + return getData(LS_KEYS.FAMILY_DATA); +} + +// isPartOfFamily return true if the current user is part of some family plan +export function isPartOfFamily(familyData: FamilyData): boolean { + return Boolean( + familyData && familyData.members && familyData.members.length > 0, + ); +} + +// hasNonAdminFamilyMembers return true if the admin user has members in his family +export function hasNonAdminFamilyMembers(familyData: FamilyData): boolean { + return Boolean(isPartOfFamily(familyData) && familyData.members.length > 1); +} + +export function isFamilyAdmin(familyData: FamilyData): boolean { + const familyAdmin: FamilyMember = getFamilyPlanAdmin(familyData); + const user: User = getData(LS_KEYS.USER); + return familyAdmin.email === user.email; +} + +export function getFamilyPlanAdmin(familyData: FamilyData): FamilyMember { + if (isPartOfFamily(familyData)) { + return familyData.members.find((x) => x.isAdmin); + } else { + logError( + Error( + "verify user is part of family plan before calling this method", + ), + "invalid getFamilyPlanAdmin call", + ); + } +} + +export function getTotalFamilyUsage(familyData: FamilyData): number { + return familyData.members.reduce( + (sum, currentMember) => sum + currentMember.usage, + 0, + ); +} diff --git a/web/apps/photos/src/utils/user/index.ts b/web/apps/photos/src/utils/user/index.ts new file mode 100644 index 000000000..17551014d --- /dev/null +++ b/web/apps/photos/src/utils/user/index.ts @@ -0,0 +1,15 @@ +import { getData, LS_KEYS } from "@ente/shared/storage/localStorage"; +import { UserDetails } from "types/user"; + +export function getLocalUserDetails(): UserDetails { + return getData(LS_KEYS.USER_DETAILS)?.value; +} + +export const isInternalUser = () => { + const userEmail = getData(LS_KEYS.USER)?.email; + if (!userEmail) return false; + + return ( + userEmail.endsWith("@ente.io") || userEmail === "kr.anand619@gmail.com" + ); +}; diff --git a/web/apps/photos/src/utils/watch/index.ts b/web/apps/photos/src/utils/watch/index.ts new file mode 100644 index 000000000..eb16780dd --- /dev/null +++ b/web/apps/photos/src/utils/watch/index.ts @@ -0,0 +1,26 @@ +import { ElectronFile } from "types/upload"; +import { WatchMapping } from "types/watchFolder"; +import { isSystemFile } from "utils/upload"; + +function isSyncedOrIgnoredFile(file: ElectronFile, mapping: WatchMapping) { + return ( + mapping.ignoredFiles.includes(file.path) || + mapping.syncedFiles.find((f) => f.path === file.path) + ); +} + +export function getValidFilesToUpload( + files: ElectronFile[], + mapping: WatchMapping, +) { + const uniqueFilePaths = new Set(); + return files.filter((file) => { + if (!isSystemFile(file) && !isSyncedOrIgnoredFile(file, mapping)) { + if (!uniqueFilePaths.has(file.path)) { + uniqueFilePaths.add(file.path); + return true; + } + } + return false; + }); +} diff --git a/web/apps/photos/src/worker/convert.worker.ts b/web/apps/photos/src/worker/convert.worker.ts new file mode 100644 index 000000000..a805752ac --- /dev/null +++ b/web/apps/photos/src/worker/convert.worker.ts @@ -0,0 +1,10 @@ +import * as Comlink from "comlink"; +import { convertHEIC } from "services/wasmHeicConverter/wasmHEICConverterClient"; + +export class DedicatedConvertWorker { + async convertHEIC(fileBlob: Blob, format: string) { + return convertHEIC(fileBlob, format); + } +} + +Comlink.expose(DedicatedConvertWorker, self); diff --git a/web/apps/photos/src/worker/ffmpeg.worker.ts b/web/apps/photos/src/worker/ffmpeg.worker.ts new file mode 100644 index 000000000..d3f503abb --- /dev/null +++ b/web/apps/photos/src/worker/ffmpeg.worker.ts @@ -0,0 +1,15 @@ +import * as Comlink from "comlink"; +import { WasmFFmpeg } from "services/wasm/ffmpeg"; + +export class DedicatedFFmpegWorker { + wasmFFmpeg: WasmFFmpeg; + constructor() { + this.wasmFFmpeg = new WasmFFmpeg(); + } + + run(cmd, inputFile, outputFileName, dontTimeout) { + return this.wasmFFmpeg.run(cmd, inputFile, outputFileName, dontTimeout); + } +} + +Comlink.expose(DedicatedFFmpegWorker, self); diff --git a/web/apps/photos/src/worker/ml.worker.ts b/web/apps/photos/src/worker/ml.worker.ts new file mode 100644 index 000000000..a66188d43 --- /dev/null +++ b/web/apps/photos/src/worker/ml.worker.ts @@ -0,0 +1,55 @@ +import { addLogLine } from "@ente/shared/logging"; +import { expose } from "comlink"; +import mlService from "services/machineLearning/machineLearningService"; +import { EnteFile } from "types/file"; +import { MachineLearningWorker } from "types/machineLearning"; +// import ReverseProxiedElectronCacheStorageProxy from './electronCacheStorageProxy.proxy'; +// import { setupResponseComlinkTransferHandler } from 'utils/comlink'; + +export class DedicatedMLWorker implements MachineLearningWorker { + constructor() { + addLogLine("DedicatedMLWorker constructor called"); + // this.init(); + } + + // public async init() { + // const recp = new ReverseProxiedElectronCacheStorageProxy(); + // const cacheProxy = await recp.open('thumbs'); + + // const thumb = await cacheProxy.match('13578875'); + // addLogLine('worker init cache.match', thumb); + // } + + public async closeLocalSyncContext() { + return mlService.closeLocalSyncContext(); + } + + public async syncLocalFile( + token: string, + userID: number, + enteFile: EnteFile, + localFile: globalThis.File, + ) { + return mlService.syncLocalFile(token, userID, enteFile, localFile); + } + + public async sync(token: string, userID: number) { + return mlService.sync(token, userID); + } + + public async regenerateFaceCrop( + token: string, + userID: number, + faceID: string, + ) { + return mlService.regenerateFaceCrop(token, userID, faceID); + } + + public close() { + self.close(); + } +} + +expose(DedicatedMLWorker, self); + +// setupResponseComlinkTransferHandler(); diff --git a/web/apps/photos/src/worker/search.worker.ts b/web/apps/photos/src/worker/search.worker.ts new file mode 100644 index 000000000..31852a416 --- /dev/null +++ b/web/apps/photos/src/worker/search.worker.ts @@ -0,0 +1,75 @@ +import * as Comlink from "comlink"; +import { + isInsideCity, + isInsideLocationTag, +} from "services/locationSearchService"; +import { EnteFile } from "types/file"; +import { Search } from "types/search"; +import { isSameDayAnyYear } from "utils/search"; + +export class DedicatedSearchWorker { + private files: EnteFile[] = []; + + setFiles(files: EnteFile[]) { + this.files = files; + } + + search(search: Search) { + return this.files.filter((file) => { + return isSearchedFile(file, search); + }); + } +} + +Comlink.expose(DedicatedSearchWorker, self); + +function isSearchedFile(file: EnteFile, search: Search) { + if (search?.collection) { + return search.collection === file.collectionID; + } + + if (search?.date) { + return isSameDayAnyYear(search.date)( + new Date(file.metadata.creationTime / 1000), + ); + } + if (search?.location) { + return isInsideLocationTag( + { + latitude: file.metadata.latitude, + longitude: file.metadata.longitude, + }, + search.location, + ); + } + if (search?.city) { + return isInsideCity( + { + latitude: file.metadata.latitude, + longitude: file.metadata.longitude, + }, + search.city, + ); + } + if (search?.files) { + return search.files.indexOf(file.id) !== -1; + } + if (search?.person) { + return search.person.files.indexOf(file.id) !== -1; + } + + if (search?.thing) { + return search.thing.files.indexOf(file.id) !== -1; + } + + if (search?.text) { + return search.text.files.indexOf(file.id) !== -1; + } + if (typeof search?.fileType !== "undefined") { + return search.fileType === file.metadata.fileType; + } + if (typeof search?.clip !== "undefined") { + return search.clip.has(file.id); + } + return false; +} diff --git a/web/apps/photos/tests/upload.test.ts b/web/apps/photos/tests/upload.test.ts new file mode 100644 index 000000000..dcd16db3c --- /dev/null +++ b/web/apps/photos/tests/upload.test.ts @@ -0,0 +1,451 @@ +import { tryToParseDateTime } from "@ente/shared/time"; +import { FILE_TYPE } from "constants/file"; +import { getLocalCollections } from "services/collectionService"; +import { getLocalFiles } from "services/fileService"; +import { + MAX_FILE_NAME_LENGTH_GOOGLE_EXPORT, + getClippedMetadataJSONMapKeyForFile, + getMetadataJSONMapKeyForFile, + getMetadataJSONMapKeyForJSON, +} from "services/upload/metadataService"; +import { getUserDetailsV2 } from "services/userService"; +import { groupFilesBasedOnCollectionID } from "utils/file"; + +const DATE_TIME_PARSING_TEST_FILE_NAMES = [ + { + fileName: "Screenshot_20220807-195908_Firefox", + expectedDateTime: "2022-08-07 19:59:08", + }, + { + fileName: "Screenshot_20220507-195908", + expectedDateTime: "2022-05-07 19:59:08", + }, + { + fileName: "2022-02-18 16.00.12-DCMX.png", + expectedDateTime: "2022-02-18 16:00:12", + }, + { + fileName: "20221107_231730", + expectedDateTime: "2022-11-07 23:17:30", + }, + { + fileName: "2020-11-01 02.31.02", + expectedDateTime: "2020-11-01 02:31:02", + }, + { + fileName: "IMG_20210921_144423", + expectedDateTime: "2021-09-21 14:44:23", + }, + { + // we don't parse the time from this format, will improve later + fileName: "2019-10-31 155703", + expectedDateTime: "2019-10-31 00:00:00", + correctExpectedDateTime: "2019-10-31 15:57:03", + }, + { + fileName: "IMG_20210921_144423_783", + expectedDateTime: "2021-09-21 14:44:23", + }, + { + fileName: "Screenshot_2022-06-21-16-51-29-164_newFormat.heic", + expectedDateTime: "2022-06-21 16:51:29", + }, + { + fileName: + "Screenshot 20221106 211633.com.google.android.apps.nbu.paisa.user.jpg", + expectedDateTime: "2022-11-06 21:16:33", + }, + { + fileName: "signal-2022-12-17-15-16-04-718.jpg", + expectedDateTime: "2022-12-17 15:16:04", + }, +]; + +const DATE_TIME_PARSING_TEST_FILE_NAMES_MUST_FAIL = [ + "Snapchat-431959199.mp4.", + "Snapchat-400000000.mp4", + "Snapchat-900000000.mp4", + "Snapchat-100-10-20-19-15-12", +]; + +const FILE_NAME_TO_JSON_NAME = [ + { + filename: "IMG20210211125718-edited.jpg", + jsonFilename: "IMG20210211125718.jpg.json", + }, + { + filename: "IMG20210211174722.jpg", + jsonFilename: "IMG20210211174722.jpg.json", + }, + { + filename: "21345678901234567890123456789012345678901234567.png", + jsonFilename: "2134567890123456789012345678901234567890123456.json", + }, + { + filename: "IMG20210211174722(1).jpg", + jsonFilename: "IMG20210211174722.jpg(1).json", + }, + { + filename: "IMG2021021(4455)74722(1).jpg", + jsonFilename: "IMG2021021(4455)74722.jpg(1).json", + }, + { + filename: "IMG2021021.json74722(1).jpg", + jsonFilename: "IMG2021021.json74722.jpg(1).json", + }, + { + filename: "IMG2021021(1)74722(1).jpg", + jsonFilename: "IMG2021021(1)74722.jpg(1).json", + }, +]; + +export async function testUpload() { + const jsonPath = process.env.NEXT_PUBLIC_ENTE_TEST_EXPECTED_JSON_PATH; + if (!jsonPath) { + throw Error( + "Please specify the NEXT_PUBLIC_ENTE_TEST_EXPECTED_JSON_PATH to run the upload tests", + ); + } + const expectedState = await import(jsonPath); + if (!expectedState) { + throw Error("upload test failed expectedState missing"); + } + + try { + await totalCollectionCountCheck(expectedState); + await collectionWiseFileCount(expectedState); + await thumbnailGenerationFailedFilesCheck(expectedState); + await livePhotoClubbingCheck(expectedState); + await exifDataParsingCheck(expectedState); + await fileDimensionExtractionCheck(expectedState); + await googleMetadataReadingCheck(expectedState); + await totalFileCountCheck(expectedState); + parseDateTimeFromFileNameTest(); + mappingFileAndJSONFileCheck(); + } catch (e) { + console.log(e); + } +} + +async function totalFileCountCheck(expectedState) { + const userDetails = await getUserDetailsV2(); + if (expectedState["total_file_count"] === userDetails.fileCount) { + console.log("file count check passed ✅"); + } else { + throw Error( + `total file count check failed ❌, expected: ${expectedState["total_file_count"]}, got: ${userDetails.fileCount}`, + ); + } +} + +async function totalCollectionCountCheck(expectedState) { + const collections = await getLocalCollections(); + const files = await getLocalFiles(); + const nonEmptyCollectionIds = new Set( + files.map((file) => file.collectionID), + ); + const nonEmptyCollections = collections.filter((collection) => + nonEmptyCollectionIds.has(collection.id), + ); + if (expectedState["collection_count"] === nonEmptyCollections.length) { + console.log("collection count check passed ✅"); + } else { + throw Error( + `total Collection count check failed ❌ + expected : ${expectedState["collection_count"]}, got: ${nonEmptyCollections.length}`, + ); + } +} + +async function collectionWiseFileCount(expectedState) { + const files = await getLocalFiles(); + const collections = await getLocalCollections(); + const collectionToFilesMap = groupFilesBasedOnCollectionID(files); + const collectionIDToNameMap = new Map( + collections.map((collection) => [collection.id, collection.name]), + ); + const collectionNameToFileCount = new Map( + [...collectionToFilesMap.entries()].map(([collectionID, files]) => [ + collectionIDToNameMap.get(collectionID), + files.length, + ]), + ); + Object.entries(expectedState["collection_files_count"]).forEach( + ([collectionName, fileCount]) => { + if (fileCount !== collectionNameToFileCount.get(collectionName)) { + throw Error( + `collectionWiseFileCount check failed ❌ + for collection ${collectionName} + expected File count : ${fileCount} , got: ${collectionNameToFileCount.get( + collectionName, + )}`, + ); + } + }, + ); + console.log("collection wise file count check passed ✅"); +} + +async function thumbnailGenerationFailedFilesCheck(expectedState) { + const files = await getLocalFiles(); + const filesWithStaticThumbnail = files.filter( + (file) => file.metadata.hasStaticThumbnail, + ); + + const fileIDSet = new Set(); + const uniqueFilesWithStaticThumbnail = filesWithStaticThumbnail.filter( + (file) => { + if (fileIDSet.has(file.id)) { + return false; + } else { + fileIDSet.add(file.id); + return true; + } + }, + ); + const fileNamesWithStaticThumbnail = uniqueFilesWithStaticThumbnail.map( + (file) => file.metadata.title, + ); + + if ( + expectedState["thumbnail_generation_failure"]["count"] < + uniqueFilesWithStaticThumbnail.length + ) { + throw Error( + `thumbnailGenerationFailedFiles Count Check failed ❌ + expected: ${expectedState["thumbnail_generation_failure"]["count"]}, got: ${uniqueFilesWithStaticThumbnail.length}`, + ); + } + fileNamesWithStaticThumbnail.forEach((fileName) => { + if ( + !expectedState["thumbnail_generation_failure"]["files"].includes( + fileName, + ) + ) { + throw Error( + `thumbnailGenerationFailedFiles Check failed ❌ + expected: ${expectedState["thumbnail_generation_failure"]["files"]}, got: ${fileNamesWithStaticThumbnail}`, + ); + } + }); + console.log("thumbnail generation failure check passed ✅"); +} + +async function livePhotoClubbingCheck(expectedState) { + const files = await getLocalFiles(); + const livePhotos = files.filter( + (file) => file.metadata.fileType === FILE_TYPE.LIVE_PHOTO, + ); + + const fileIDSet = new Set(); + const uniqueLivePhotos = livePhotos.filter((file) => { + if (fileIDSet.has(file.id)) { + return false; + } else { + fileIDSet.add(file.id); + return true; + } + }); + + const livePhotoFileNames = uniqueLivePhotos.map( + (file) => file.metadata.title, + ); + + if (expectedState["live_photo"]["count"] !== livePhotoFileNames.length) { + throw Error( + `livePhotoClubbing Check failed ❌ + expected: ${expectedState["live_photo"]["count"]}, got: ${livePhotoFileNames.length}`, + ); + } + expectedState["live_photo"]["files"].forEach((fileName) => { + if (!livePhotoFileNames.includes(fileName)) { + throw Error( + `livePhotoClubbing Check failed ❌ + expected: ${expectedState["live_photo"]["files"]}, got: ${livePhotoFileNames}`, + ); + } + }); + console.log("live-photo clubbing check passed ✅"); +} + +async function exifDataParsingCheck(expectedState) { + const files = await getLocalFiles(); + Object.entries(expectedState["exif"]).map(([fileName, exifValues]) => { + const matchingFile = files.find( + (file) => file.metadata.title === fileName, + ); + if (!matchingFile) { + throw Error(`exifDataParsingCheck failed , ${fileName} missing`); + } + if ( + exifValues["creation_time"] && + exifValues["creation_time"] !== matchingFile.metadata.creationTime + ) { + throw Error(`exifDataParsingCheck failed ❌ , + for ${fileName} + expected: ${exifValues["creation_time"]} got: ${matchingFile.metadata.creationTime}`); + } + if ( + exifValues["location"] && + (Math.abs( + exifValues["location"]["latitude"] - + matchingFile.metadata.latitude, + ) > 1 || + Math.abs( + exifValues["location"]["longitude"] - + matchingFile.metadata.longitude, + ) > 1) + ) { + throw Error(`exifDataParsingCheck failed ❌ , + for ${fileName} + expected: ${JSON.stringify(exifValues["location"])} + got: [${matchingFile.metadata.latitude},${ + matchingFile.metadata.longitude + }]`); + } + }); + console.log("exif data parsing check passed ✅"); +} + +async function fileDimensionExtractionCheck(expectedState) { + const files = await getLocalFiles(); + Object.entries(expectedState["file_dimensions"]).map( + ([fileName, dimensions]) => { + const matchingFile = files.find( + (file) => file.metadata.title === fileName, + ); + if (!matchingFile) { + throw Error( + `fileDimensionExtractionCheck failed , ${fileName} missing`, + ); + } + if ( + dimensions["width"] && + dimensions["width"] !== matchingFile.pubMagicMetadata.data.w && + dimensions["height"] && + dimensions["height"] !== matchingFile.pubMagicMetadata.data.h + ) { + throw Error(`fileDimensionExtractionCheck failed ❌ , + for ${fileName} + expected: ${dimensions["width"]} x ${dimensions["height"]} got: ${matchingFile.pubMagicMetadata.data.w} x ${matchingFile.pubMagicMetadata.data.h}`); + } + }, + ); + console.log("file dimension extraction check passed ✅"); +} + +async function googleMetadataReadingCheck(expectedState) { + const files = await getLocalFiles(); + Object.entries(expectedState["google_import"]).map( + ([fileName, metadata]) => { + const matchingFile = files.find( + (file) => file.metadata.title === fileName, + ); + if (!matchingFile) { + throw Error( + `exifDataParsingCheck failed , ${fileName} missing`, + ); + } + if ( + metadata["creation_time"] && + metadata["creation_time"] !== matchingFile.metadata.creationTime + ) { + throw Error(`googleMetadataJSON reading check failed ❌ , + for ${fileName} + expected: ${metadata["creation_time"]} got: ${matchingFile.metadata.creationTime}`); + } + if ( + metadata["location"] && + (Math.abs( + metadata["location"]["latitude"] - + matchingFile.metadata.latitude, + ) > 1 || + Math.abs( + metadata["location"]["longitude"] - + matchingFile.metadata.longitude, + ) > 1) + ) { + throw Error(`googleMetadataJSON reading check failed ❌ , + for ${fileName} + expected: ${JSON.stringify( + metadata["location"], + )} + got: [${matchingFile.metadata.latitude},${ + matchingFile.metadata.longitude + }]`); + } + }, + ); + console.log("googleMetadataJSON reading check passed ✅"); +} + +function parseDateTimeFromFileNameTest() { + DATE_TIME_PARSING_TEST_FILE_NAMES.forEach( + ({ fileName, expectedDateTime }) => { + const dateTime = tryToParseDateTime(fileName); + const formattedDateTime = getFormattedDateTime(dateTime); + if (formattedDateTime !== expectedDateTime) { + throw Error( + `parseDateTimeFromFileNameTest failed ❌ , + for ${fileName} + expected: ${expectedDateTime} got: ${formattedDateTime}`, + ); + } + }, + ); + DATE_TIME_PARSING_TEST_FILE_NAMES_MUST_FAIL.forEach((fileName) => { + const dateTime = tryToParseDateTime(fileName); + if (dateTime) { + throw Error( + `parseDateTimeFromFileNameTest failed ❌ , + for ${fileName} + expected: null got: ${dateTime}`, + ); + } + }); + console.log("parseDateTimeFromFileNameTest passed ✅"); +} + +function mappingFileAndJSONFileCheck() { + FILE_NAME_TO_JSON_NAME.forEach(({ filename, jsonFilename }) => { + const jsonFileNameGeneratedKey = getMetadataJSONMapKeyForJSON( + 0, + jsonFilename, + ); + let fileNameGeneratedKey = getMetadataJSONMapKeyForFile(0, filename); + if ( + fileNameGeneratedKey !== jsonFileNameGeneratedKey && + filename.length > MAX_FILE_NAME_LENGTH_GOOGLE_EXPORT + ) { + fileNameGeneratedKey = getClippedMetadataJSONMapKeyForFile( + 0, + filename, + ); + } + + if (fileNameGeneratedKey !== jsonFileNameGeneratedKey) { + throw Error( + `mappingFileAndJSONFileCheck failed ❌ , + for ${filename} + expected: ${jsonFileNameGeneratedKey} got: ${fileNameGeneratedKey}`, + ); + } + }); + console.log("mappingFileAndJSONFileCheck passed ✅"); +} + +// format: YYYY-MM-DD HH:MM:SS +function getFormattedDateTime(date: Date) { + const year = date.getFullYear(); + const month = padZero(date.getMonth() + 1); + const day = padZero(date.getDate()); + const hour = padZero(date.getHours()); + const minute = padZero(date.getMinutes()); + const second = padZero(date.getSeconds()); + + return `${year}-${month}-${day} ${hour}:${minute}:${second}`; +} + +function padZero(number: number) { + return number < 10 ? `0${number}` : number; +} diff --git a/web/apps/photos/tests/zip-file-reading.test.ts b/web/apps/photos/tests/zip-file-reading.test.ts new file mode 100644 index 000000000..0152e5897 --- /dev/null +++ b/web/apps/photos/tests/zip-file-reading.test.ts @@ -0,0 +1,111 @@ +import ElectronAPIs from "@ente/shared/electron"; +import { getFileNameSize } from "@ente/shared/logging/web"; +import { FILE_READER_CHUNK_SIZE, PICKED_UPLOAD_TYPE } from "constants/upload"; +import isElectron from "is-electron"; +import { getElectronFileStream, getFileStream } from "services/readerService"; +import { DataStream } from "types/upload"; +import { getImportSuggestion } from "utils/upload"; + +// This was for used to verify that converting from the browser readable stream +// to the node readable stream correctly handles files that align on the 4 MB +// data boundary. This expects a zip file containing random files of various +// sizes starting from 1M to 20M. +export const testZipFileReading = async () => { + try { + if (!isElectron()) { + console.log("testZipFileReading Check is for desktop only"); + return; + } + if (!process.env.NEXT_PUBLIC_FILE_READING_TEST_ZIP_PATH) { + throw Error( + "upload test failed NEXT_PUBLIC_FILE_READING_TEST_ZIP_PATH missing", + ); + } + const files = await ElectronAPIs.getElectronFilesFromGoogleZip( + process.env.NEXT_PUBLIC_FILE_READING_TEST_ZIP_PATH, + ); + if (!files?.length) { + throw Error( + `testZipFileReading Check failed ❌ + No files selected`, + ); + } + console.log("test zip file reading check started"); + let i = 0; + for (const file of files) { + i++; + let filedata: DataStream; + if (file instanceof File) { + filedata = getFileStream(file, FILE_READER_CHUNK_SIZE); + } else { + filedata = await getElectronFileStream( + file, + FILE_READER_CHUNK_SIZE, + ); + } + const streamReader = filedata.stream.getReader(); + for (let i = 0; i < filedata.chunkCount; i++) { + const { done } = await streamReader.read(); + if (done) { + throw Error( + `testZipFileReading Check failed ❌ + ${getFileNameSize( + file, + )} less than expected chunks, expected: ${ + filedata.chunkCount + }, got ${i - 1}`, + ); + } + } + const { done } = await streamReader.read(); + + if (!done) { + throw Error( + `testZipFileReading Check failed ❌ + ${getFileNameSize( + file, + )} more than expected chunks, expected: ${ + filedata.chunkCount + }`, + ); + } + console.log(`${i}/${files.length} passed ✅`); + } + console.log("test zip file reading check passed ✅"); + } catch (e) { + console.log(e); + } +}; + +// This was used when fixing a bug around handling a zip file that has a photo +// at the root. +export const testZipWithRootFileReadingTest = async () => { + try { + if (!isElectron()) { + console.log("testZipFileReading Check is for desktop only"); + return; + } + if (!process.env.NEXT_PUBLIC_ZIP_WITH_ROOT_FILE_PATH) { + throw Error( + "upload test failed NEXT_PUBLIC_ZIP_WITH_ROOT_FILE_PATH missing", + ); + } + const files = await ElectronAPIs.getElectronFilesFromGoogleZip( + process.env.NEXT_PUBLIC_ZIP_WITH_ROOT_FILE_PATH, + ); + + const importSuggestion = getImportSuggestion( + PICKED_UPLOAD_TYPE.ZIPS, + files, + ); + if (!importSuggestion.rootFolderName) { + throw Error( + `testZipWithRootFileReadingTest Check failed ❌ + rootFolderName is missing`, + ); + } + console.log("testZipWithRootFileReadingTest passed ✅"); + } catch (e) { + console.log(e); + } +}; diff --git a/web/apps/photos/thirdparty/face-api/classes/BoundingBox.ts b/web/apps/photos/thirdparty/face-api/classes/BoundingBox.ts new file mode 100644 index 000000000..7263b4b96 --- /dev/null +++ b/web/apps/photos/thirdparty/face-api/classes/BoundingBox.ts @@ -0,0 +1,14 @@ +import { Box } from './Box'; + +export interface IBoundingBox { + left: number + top: number + right: number + bottom: number +} + +export class BoundingBox extends Box implements IBoundingBox { + constructor(left: number, top: number, right: number, bottom: number, allowNegativeDimensions: boolean = false) { + super({ left, top, right, bottom }, allowNegativeDimensions) + } +} \ No newline at end of file diff --git a/web/apps/photos/thirdparty/face-api/classes/Box.ts b/web/apps/photos/thirdparty/face-api/classes/Box.ts new file mode 100644 index 000000000..e88275401 --- /dev/null +++ b/web/apps/photos/thirdparty/face-api/classes/Box.ts @@ -0,0 +1,175 @@ +import { isDimensions, isValidNumber } from '../utils'; +import { IBoundingBox } from './BoundingBox'; +import { IDimensions } from './Dimensions'; +import { Point } from './Point'; +import { IRect } from './Rect'; + +export class Box implements IBoundingBox, IRect { + + public static isRect(rect: any): boolean { + return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber) + } + + public static assertIsValidBox(box: any, callee: string, allowNegativeDimensions: boolean = false) { + if (!Box.isRect(box)) { + throw new Error(`${callee} - invalid box: ${JSON.stringify(box)}, expected object with properties x, y, width, height`) + } + + if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) { + throw new Error(`${callee} - width (${box.width}) and height (${box.height}) must be positive numbers`) + } + } + + public x: number + public y: number + public width: number + public height: number + + constructor(_box: IBoundingBox | IRect, allowNegativeDimensions: boolean = true) { + const box = (_box || {}) as any + + const isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber) + const isRect = [box.x, box.y, box.width, box.height].every(isValidNumber) + + if (!isRect && !isBbox) { + throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(box)}`) + } + + const [x, y, width, height] = isRect + ? [box.x, box.y, box.width, box.height] + : [box.left, box.top, box.right - box.left, box.bottom - box.top] + + Box.assertIsValidBox({ x, y, width, height }, 'Box.constructor', allowNegativeDimensions) + + this.x = x + this.y = y + this.width = width + this.height = height + } + + // public get x(): number { return this._x } + // public get y(): number { return this._y } + // public get width(): number { return this._width } + // public get height(): number { return this._height } + public get left(): number { return this.x } + public get top(): number { return this.y } + public get right(): number { return this.x + this.width } + public get bottom(): number { return this.y + this.height } + public get area(): number { return this.width * this.height } + public get topLeft(): Point { return new Point(this.left, this.top) } + public get topRight(): Point { return new Point(this.right, this.top) } + public get bottomLeft(): Point { return new Point(this.left, this.bottom) } + public get bottomRight(): Point { return new Point(this.right, this.bottom) } + + public round(): Box { + const [x, y, width, height] = [this.x, this.y, this.width, this.height] + .map(val => Math.round(val)) + return new Box({ x, y, width, height }) + } + + public floor(): Box { + const [x, y, width, height] = [this.x, this.y, this.width, this.height] + .map(val => Math.floor(val)) + return new Box({ x, y, width, height }) + } + + public toSquare(): Box { + let { x, y, width, height } = this + const diff = Math.abs(width - height) + if (width < height) { + x -= (diff / 2) + width += diff + } + if (height < width) { + y -= (diff / 2) + height += diff + } + + return new Box({ x, y, width, height }) + } + + public rescale(s: IDimensions | number): Box { + const scaleX = isDimensions(s) ? (s as IDimensions).width : s as number + const scaleY = isDimensions(s) ? (s as IDimensions).height : s as number + return new Box({ + x: this.x * scaleX, + y: this.y * scaleY, + width: this.width * scaleX, + height: this.height * scaleY + }) + } + + public pad(padX: number, padY: number): Box { + let [x, y, width, height] = [ + this.x - (padX / 2), + this.y - (padY / 2), + this.width + padX, + this.height + padY + ] + return new Box({ x, y, width, height }) + } + + public clipAtImageBorders(imgWidth: number, imgHeight: number): Box { + const { x, y, right, bottom } = this + const clippedX = Math.max(x, 0) + const clippedY = Math.max(y, 0) + + const newWidth = right - clippedX + const newHeight = bottom - clippedY + const clippedWidth = Math.min(newWidth, imgWidth - clippedX) + const clippedHeight = Math.min(newHeight, imgHeight - clippedY) + + return (new Box({ x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight})).floor() + } + + public shift(sx: number, sy: number): Box { + const { width, height } = this + const x = this.x + sx + const y = this.y + sy + + return new Box({ x, y, width, height }) + } + + public padAtBorders(imageHeight: number, imageWidth: number) { + const w = this.width + 1 + const h = this.height + 1 + + let dx = 1 + let dy = 1 + let edx = w + let edy = h + + let x = this.left + let y = this.top + let ex = this.right + let ey = this.bottom + + if (ex > imageWidth) { + edx = -ex + imageWidth + w + ex = imageWidth + } + if (ey > imageHeight) { + edy = -ey + imageHeight + h + ey = imageHeight + } + if (x < 1) { + edy = 2 - x + x = 1 + } + if (y < 1) { + edy = 2 - y + y = 1 + } + + return { dy, edy, dx, edx, y, ey, x, ex, w, h } + } + + public calibrate(region: Box) { + return new Box({ + left: this.left + (region.left * this.width), + top: this.top + (region.top * this.height), + right: this.right + (region.right * this.width), + bottom: this.bottom + (region.bottom * this.height) + }).toSquare().round() + } +} \ No newline at end of file diff --git a/web/apps/photos/thirdparty/face-api/classes/Dimensions.ts b/web/apps/photos/thirdparty/face-api/classes/Dimensions.ts new file mode 100644 index 000000000..e0b61ed10 --- /dev/null +++ b/web/apps/photos/thirdparty/face-api/classes/Dimensions.ts @@ -0,0 +1,28 @@ +import { isValidNumber } from '../utils'; + +export interface IDimensions { + width: number + height: number +} + +export class Dimensions implements IDimensions { + + private _width: number + private _height: number + + constructor(width: number, height: number) { + if (!isValidNumber(width) || !isValidNumber(height)) { + throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({ width, height })}`) + } + + this._width = width + this._height = height + } + + public get width(): number { return this._width } + public get height(): number { return this._height } + + public reverse(): Dimensions { + return new Dimensions(1 / this.width, 1 / this.height) + } +} \ No newline at end of file diff --git a/web/apps/photos/thirdparty/face-api/classes/Point.ts b/web/apps/photos/thirdparty/face-api/classes/Point.ts new file mode 100644 index 000000000..3c32d5bc1 --- /dev/null +++ b/web/apps/photos/thirdparty/face-api/classes/Point.ts @@ -0,0 +1,55 @@ +export interface IPoint { + x: number + y: number +} + +export class Point implements IPoint { + public x: number + public y: number + + constructor(x: number, y: number) { + this.x = x + this.y = y + } + + // get x(): number { return this._x } + // get y(): number { return this._y } + + public add(pt: IPoint): Point { + return new Point(this.x + pt.x, this.y + pt.y) + } + + public sub(pt: IPoint): Point { + return new Point(this.x - pt.x, this.y - pt.y) + } + + public mul(pt: IPoint): Point { + return new Point(this.x * pt.x, this.y * pt.y) + } + + public div(pt: IPoint): Point { + return new Point(this.x / pt.x, this.y / pt.y) + } + + public abs(): Point { + return new Point(Math.abs(this.x), Math.abs(this.y)) + } + + public magnitude(): number { + return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2)) + } + + public floor(): Point { + return new Point(Math.floor(this.x), Math.floor(this.y)) + } + + public round(): Point { + return new Point(Math.round(this.x), Math.round(this.y)) + } + + public bound(lower: number, higher: number): Point { + const x = Math.max(lower, Math.min(higher, this.x)); + const y = Math.max(lower, Math.min(higher, this.y)); + return new Point(x, y); + } +} \ No newline at end of file diff --git a/web/apps/photos/thirdparty/face-api/classes/Rect.ts b/web/apps/photos/thirdparty/face-api/classes/Rect.ts new file mode 100644 index 000000000..550676984 --- /dev/null +++ b/web/apps/photos/thirdparty/face-api/classes/Rect.ts @@ -0,0 +1,14 @@ +import { Box } from './Box'; + +export interface IRect { + x: number + y: number + width: number + height: number +} + +export class Rect extends Box implements IRect { + constructor(x: number, y: number, width: number, height: number, allowNegativeDimensions: boolean = false) { + super({ x, y, width, height }, allowNegativeDimensions) + } +} \ No newline at end of file diff --git a/web/apps/photos/thirdparty/face-api/classes/index.ts b/web/apps/photos/thirdparty/face-api/classes/index.ts new file mode 100644 index 000000000..9bb7cccf4 --- /dev/null +++ b/web/apps/photos/thirdparty/face-api/classes/index.ts @@ -0,0 +1,5 @@ +export * from './BoundingBox' +export * from './Box' +export * from './Dimensions' +export * from './Point' +export * from './Rect' \ No newline at end of file diff --git a/web/apps/photos/thirdparty/face-api/utils/index.ts b/web/apps/photos/thirdparty/face-api/utils/index.ts new file mode 100644 index 000000000..a49a60301 --- /dev/null +++ b/web/apps/photos/thirdparty/face-api/utils/index.ts @@ -0,0 +1,63 @@ +import * as tf from '@tensorflow/tfjs-core'; + +import { Point } from '../classes'; +import { Dimensions, IDimensions } from '../classes/Dimensions'; + +export function isTensor(tensor: any, dim: number) { + return tensor instanceof tf.Tensor && tensor.shape.length === dim +} + +export function isTensor1D(tensor: any): tensor is tf.Tensor1D { + return isTensor(tensor, 1) +} + +export function isTensor2D(tensor: any): tensor is tf.Tensor2D { + return isTensor(tensor, 2) +} + +export function isTensor3D(tensor: any): tensor is tf.Tensor3D { + return isTensor(tensor, 3) +} + +export function isTensor4D(tensor: any): tensor is tf.Tensor4D { + return isTensor(tensor, 4) +} + +export function isFloat(num: number) { + return num % 1 !== 0 +} + +export function isEven(num: number) { + return num % 2 === 0 +} + +export function round(num: number, prec: number = 2) { + const f = Math.pow(10, prec) + return Math.floor(num * f) / f +} + +export function isDimensions(obj: any): boolean { + return obj && obj.width && obj.height +} + +export function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) { + const scale = inputSize / Math.max(height, width) + return new Dimensions(Math.round(width * scale), Math.round(height * scale)) +} + +export function getCenterPoint(pts: Point[]): Point { + return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0)) + .div(new Point(pts.length, pts.length)) +} + +export function range(num: number, start: number, step: number): number[] { + return Array(num).fill(0).map((_, i) => start + (i * step)) +} + +export function isValidNumber(num: any) { + return !!num && num !== Infinity && num !== -Infinity && !isNaN(num) || num === 0 +} + +export function isValidProbablitiy(num: any) { + return isValidNumber(num) && 0 <= num && num <= 1.0 +} \ No newline at end of file diff --git a/web/apps/photos/thirdparty/ffmpeg-wasm b/web/apps/photos/thirdparty/ffmpeg-wasm new file mode 160000 index 000000000..8493ad48b --- /dev/null +++ b/web/apps/photos/thirdparty/ffmpeg-wasm @@ -0,0 +1 @@ +Subproject commit 8493ad48b12f83f881a59b84b003974ef23f9e96 diff --git a/web/apps/photos/thirdparty/photoswipe b/web/apps/photos/thirdparty/photoswipe new file mode 160000 index 000000000..bf4a07250 --- /dev/null +++ b/web/apps/photos/thirdparty/photoswipe @@ -0,0 +1 @@ +Subproject commit bf4a072503df18c8d6b047e66a437534c5c05bc5 diff --git a/web/apps/photos/tsconfig.json b/web/apps/photos/tsconfig.json new file mode 100644 index 000000000..e7105c071 --- /dev/null +++ b/web/apps/photos/tsconfig.json @@ -0,0 +1,27 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./src", + "downlevelIteration": true, + "jsx": "preserve", + "jsxImportSource": "@emotion/react", + "lib": ["dom", "dom.iterable", "esnext", "webworker"], + "noImplicitAny": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "strictNullChecks": false, + "target": "es5", + "useUnknownInCatchVariables": false, + + /* TODO(MR): Add to auth */ + "moduleResolution": "bundler" + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.js", + "../../packages/shared/themes/mui-theme.d.ts" + ], + "exclude": ["node_modules", "out", ".next", "thirdparty"] +} diff --git a/web/crowdin.yml b/web/crowdin.yml new file mode 100644 index 000000000..24e35b795 --- /dev/null +++ b/web/crowdin.yml @@ -0,0 +1,6 @@ +project_id_env: CROWDIN_PROJECT_ID +api_token_env: CROWDIN_PERSONAL_TOKEN + +files: + - source: /apps/photos/public/locales/en-US/translation.json + translation: /apps/photos/public/locales/%locale%/translation.json diff --git a/web/docs/README.md b/web/docs/README.md new file mode 100644 index 000000000..4c4fa1a07 --- /dev/null +++ b/web/docs/README.md @@ -0,0 +1,9 @@ +## Notes for maintainers + +If you just want to run ente locally or develop on it, you can do + + yarn + yarn dev:photos + +The notes in this directory are for maintainers to note down more advanced or +infrequently needed details. diff --git a/web/docs/dependencies.md b/web/docs/dependencies.md new file mode 100644 index 000000000..aad328c9a --- /dev/null +++ b/web/docs/dependencies.md @@ -0,0 +1,68 @@ +# Dependencies + +## Global + +These are some global dev dependencies in the root `package.json`. These set the +baseline for how our code be in all the workspaces in the monorepo. + +* "prettier" - Formatter +* "eslint" - Linter +* "typescript" - Type checker + +They also need some support packages: + +* "@typescript-eslint/parser" - Tells ESLint how to read TypeScript syntax +* "@typescript-eslint/eslint-plugin" - Provides TypeScript rules and presets + +## Utils + +### Crypto + +We use [libsodium](https://libsodium.gitbook.io/doc/) for encryption, key +generation etc. Specifically, we use its WebAssembly and JS wrappers made using +Emscripten, maintained by the original authors of libsodium themselves - +[libsodium-wrappers](https://github.com/jedisct1/libsodium.js). + +Currently, we've pinned the version to 0.7.9 since later versions remove the +crypto_pwhash_* functionality that we use (they've not been deprecated, they've +just been moved to a different NPM package). From the (upstream) [release +notes](https://github.com/jedisct1/libsodium/releases/tag/1.0.19-RELEASE): + +> Emscripten: the crypto_pwhash_*() functions have been removed from Sumo +> builds, as they reserve a substantial amount of JavaScript memory, even when +> not used. + +This wording is a bit incorrect, they've actually been _added_ to the sumo +builds (See this [issue](https://github.com/jedisct1/libsodium.js/issues/326)). + +Updating it is not a big problem, it is just a pending chore - we want to test a +bit more exhaustively when changing the crypto layer. + +## UI + +The UI package uses "react". This is our core framework. We do use layers on top +of React, but those are contingent and can be replaced, or even removed. But the +usage of React is deep rooted. React also has a sibling "react-dom" package that +renders "React" interfaces to the DOM. + +Currently, we use MUI ("@mui/material"), which is a React component library, to +get a base set of components. MUI uses Emotion (a styled-component variant) as +its preferred CSS-in-JS library and to keep things simple, that's also what we +use to write CSS in our own JS (TS). + +Emotion itself comes in many parts, of which we need the following three: + +* "@emotion/react" - React interface to Emotion. In particular, we set this as + the package that handles the transformation of JSX into JS (via the + `jsxImportSource` property in `tsconfig.json`). + +* "@emotion/styled" - Provides the `styled` utility, a la styled-components. We + don't use it directly, instead we import it from `@mui/material`. However, MUI + docs + [mention](https://mui.com/material-ui/integrations/interoperability/#styled-components) + that + + > Keep `@emotion/styled` as a dependency of your project. Even if you never + > use it explicitly, it's a peer dependency of `@mui/material`. + +* "@emotion/server" diff --git a/web/docs/deploy.md b/web/docs/deploy.md new file mode 100644 index 000000000..2919b1785 --- /dev/null +++ b/web/docs/deploy.md @@ -0,0 +1,67 @@ +# Deploying the web apps + +The various web apps (Ente Photos, Ente Auth) are deployed on Cloudflare Pages. +They also use Cloudflare Workers for some tasks. + +This repository deploys multiple different apps (the Photos app, the Auth app). +Some of them get deployed to multiple different endpoints (e.g. the main branch +of photos app gets deployed to testing.ente.io, the while the photos-release +branch is the production deployment). + +The apps are under the app directory: + +- photos - The Ente Photos app +- auth - The Ente Auth app +- cast - The cast app, which can be thought of as an independent subset of + Photos app functionality +- ... and more + +For deploying, we've added the GitHub integration provided by Cloudflare Pages +app to this repository. This integration watches for pushes to all branches. In +all cases, it runs the same script, `scripts/deploy.sh`. + +Internally it uses the `CF_PAGES_BRANCH` environment variable to decide what +exactly to build ([CF +docs](https://developers.cloudflare.com/pages/how-to/build-commands-branches/)). + +Then, for some special branches, we have configured CNAME aliases (Cloudflare +calls them Custom Domains) to give a stable URL to some of these deployments +Here is a potentially out of date list of CNAMEs and the corresponding branch; +see the Cloudflare dashboard for the latest: + +- _testing.ente.io_: `main` +- _web.ente.io_: `photos-release` +- _auth.ente.io_: `auth-release` +- _accounts.ente.io_: `accounts-release` +- _cast.ente.io_: `cast-release` + +Thus to trigger a, say, production deployment of the photos app, we can open and +merge a PR into the `photos-release` branch. Cloudflare will then build and +deploy the code to _web.ente.io_. + +Apart from this, there are also some subdomains: + +- `albums.ente.io` is a CNAME alias to the production deployment + (`web.ente.io`). However, when the code detects that it is being served from + `albums.ente.io`, it redirects to the `/shared-albums` page (Enhancement: + serve it as a separate app with a smaller bundle size). + +- `payments.ente.io` and `family.ente.io` are currently in a separate + repositories (Enhancement: bring them in here). + +In Cloudflare Pages setting the following environment variables are defined: + +- `NODE_VERSION`: Determines which version of Node is used when we do `yarn + build:foo`. Currently this is set to `20.11.1`. The major version here should + match that of `@types/node` in our dev dependencies. + +- `SENTRY_AUTH_TOKEN`: An encrypted environment variable that is used by the + Sentry Webpack Plugin to upload sourcemaps during the build. + +## Adding a new app + +1. Add a mapping in `scripts/deploy.sh`. + +2. Add a [Custom Domain in + Cloudflare](https://developers.cloudflare.com/pages/how-to/custom-branch-aliases/) + pointing to this branch's deployment. diff --git a/web/docs/dev.md b/web/docs/dev.md new file mode 100644 index 000000000..62a578e2a --- /dev/null +++ b/web/docs/dev.md @@ -0,0 +1,42 @@ +## Monorepo + +The monorepo uses Yarn (classic) workspaces. + +To run a command for a workspace ``, invoke `yarn workspace ` from +the root folder instead the the `yarn ` you’d have done otherwise. For +example, to start a development server for the `photos` app, we can do + +```sh +yarn workspace photos next dev +``` + +There is also a convenience alias, `yarn dev:photos`. See `package.json` for the +full list of such aliases. The two common patterns are `dev:` for +running a local development server, and `build:` for creating a +production build. + +> Tip: `yarn dev` is a shorcut for `yarn dev:photos` + +Note that yarn does not automatically update `node_modules` if you switch to a +branch that has added or modified dependencies. So if you encounter unexpected +errors on switching branches, make sure that your `node_modules` is up to date +by running `yarn install` first. + +> `yarn` is a shortcut for `yarn install` + +To add a local package as a dependency, use `@*`. The "*" here +denotes any version. + +```sh +yarn workspace photos add '@/utils@*' +``` + +> Note: The yarn (classic) command above causes harmless but noisy diffs in +> `yarn.lock` when adding or removing dependencies to the workspaces. To fix +> them, run `yarn` again once to reset these unnecessary changes. + +To see what packages depend on each other locally, use + +```sh +yarn workspaces info +``` diff --git a/web/docs/new.md b/web/docs/new.md new file mode 100644 index 000000000..fcdaad4ae --- /dev/null +++ b/web/docs/new.md @@ -0,0 +1,15 @@ +## Welcome! + +If you're new to this sort of stuff or coming back to it after mobile/backend +development, here is a recommended workflow: + +1. Install VS Code. + +2. Install the Prettier and ESLint extensions. + +3. Enable the VS Code setting to format on save. + +4. Install node on your machine `brew install node`. Our package manager, `yarn` + comes with it. + +That's it. Enjoy coding! diff --git a/web/docs/webauthn-passkeys.md b/web/docs/webauthn-passkeys.md new file mode 100644 index 000000000..91fc23f30 --- /dev/null +++ b/web/docs/webauthn-passkeys.md @@ -0,0 +1,435 @@ +# Passkeys on Ente + +Passkeys is a colloquial term for a relatively new authentication standard called [WebAuthn](https://en.wikipedia.org/wiki/WebAuthn). Now rolled out to all major browsers and operating systems, it uses asymmetric cryptography to authenticate the user with a server using replay-attack resistant signatures. These processes are usually abstracted from the user through biometric prompts, such as Touch ID/Face ID/Optic ID, Fingerprint Unlock and Windows Hello. These passkeys can also be securely synced by major password managers, such as Bitwarden and 1Password, although the syncing experience can greatly vary due to some operating system restrictions. + +## Terms + +| Term | Definition | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Credential | Passkey. It is an asymmetric keypair identified by a unique ID generated by the client. | +| Authenticator | A software-based implementation or physical device capable of storing and using credentials to authenticate. | +| Relying Party | Us. We rely on the user's authenticator to verify their identity through a cryptographic signature. We prove this signature through the credential's public key that we store. | +| Ceremony | An analogy referring to the multiple steps involved in authenticating or registering a credential with a relying party. Ceremonies have a "begin" and a "finish". Information must be persisted between these two steps. | + +## Getting to the passkeys manager + +As of Feb 2024, Ente clients have a button to navigate to a WebView of Ente Accounts. Ente Accounts allows users to add and manage their registered passkeys. + +❗ Your WebView MUST invoke the operating-system's default browser, or an equivalent browser with matching API parity. Otherwise, the user will not be able to register or use registered WebAuthn credentials. + +### Accounts-Specific Session Token + +When a user clicks this button, the client sends a request for an Accounts-specific JWT session token as shown below. **The Ente Accounts API is restricted to this type of session token, so the user session token cannot be used.** This restriction is a byproduct of the enablement for automatic login. + +#### GET /users/accounts-token + +##### Headers + +| Name | Type | Value | +| ------------ | ------ | ------------------------------------------------ | +| X-Auth-Token | string | The user session token. It is encoded in base64. | + +##### Response Body (JSON) + +| Key | Type | Value | +| ------------- | ------ | ----------------------------------------------------------------- | +| accountsToken | string | The Accounts-specific JWT session token. It is encoded in base64. | + +### Automatically logging into Accounts + +Clients open a WebView with the URL `https://accounts.ente.io/accounts-handoff?token=&package=`. This page will appear like a normal loading screen to the user, but in the background, the app parses the token and package for usage in subsequent Accounts-related API calls. + +If valid, the user will be automatically redirected to the passkeys management page. Otherwise, they will be required to login with their Ente credentials. + +## Registering a WebAuthn credential + +### Requesting publicKey options (begin) + +The registration ceremony starts in the browser. When the user clicks the "Add new passkey" button, a request is sent to the server for "public key" creation options. Although named "public key" options, they actually define customizable parameters for the entire credential creation process. They're like an instructional sheet that defines exactly what we want. As of the creation of this document, the plan is to restrict user authenticators to cross-platform ones, like hardware keys. Platform authenticators, such as TPM, are not portable and are prone to loss. + +On the server side, the WebAuthn library generates this information based on data provided from a `webauthn.User` interface. As a result, we satisfy this interface by creating a type with methods returning information from the database. Information stored in the database about credentials are all pre-processed using base64 where necessary. + +```go +type PasskeyUser struct { + *ente.User + repo *Repository +} + +func (u *PasskeyUser) WebAuthnID() []byte { + b, _ := byteMarshaller.ConvertInt64ToByte(u.ID) + return b +} + +func (u *PasskeyUser) WebAuthnName() string { + return u.Email +} + +func (u *PasskeyUser) WebAuthnDisplayName() string { + return u.Name +} + +func (u *PasskeyUser) WebAuthnCredentials() []webauthn.Credential { + creds, err := u.repo.GetUserPasskeyCredentials(u.ID) + if err != nil { + return []webauthn.Credential{} + } + + return creds +} +``` + +#### GET /passkeys/registration/begin + +##### Headers + +| Name | Type | Value | +| ------------ | ------ | ------------------------------------------------ | +| X-Auth-Token | string | The user session token. It is encoded in base64. | + +##### Response Body (JSON) + +| Key | Type | Value | +| --------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| options | object | The credential creation options that will be provided to the browser. | +| sessionID | string (uuidv4) | The identifier the server uses to persist metadata about the registration ceremony, like the user ID and challenge to prevent replay attacks. | + +```json +{ + "options": { + "publicKey": { + "rp": { + "name": "Ente", + "id": "accounts.ente.io" + }, + "user": { + "name": "james@example.org", + "displayName": "", + "id": "AAWdgssasAY" + }, + "challenge": "xYVv1V08dgrsU_4k5niEkFcfIGbwPauWKPBARS6C6Dg", + "pubKeyCredParams": [ + { + "type": "public-key", + "alg": -7 + }, + { + "type": "public-key", + "alg": -35 + }, + { + "type": "public-key", + "alg": -36 + }, + { + "type": "public-key", + "alg": -257 + }, + { + "type": "public-key", + "alg": -258 + }, + { + "type": "public-key", + "alg": -259 + }, + { + "type": "public-key", + "alg": -37 + }, + { + "type": "public-key", + "alg": -38 + }, + { + "type": "public-key", + "alg": -39 + }, + { + "type": "public-key", + "alg": -8 + } + ], + "timeout": 300000, + "authenticatorSelection": { + "requireResidentKey": false, + "userVerification": "preferred" + } + } + }, + "sessionID": "0a8442d7-8580-4391-8ac3-4a75d6a7f115" +} +``` + +### Pre-processing the options before registration + +Even though the server generates these options, the browser still doesn't understand them. For interoperability, the server's WebAuthn library returns binary data in base64, like IDs and the challenge. However, the browser requires this data back in binary. + +We just have to decode the base64 fields back into `Uint8Array`. + +```ts +const options = response.options; + +options.publicKey.challenge = _sodium.from_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + options.publicKey.challenge, +); +options.publicKey.user.id = _sodium.from_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + options.publicKey.user.id, +); +``` + +### Creating the credential + +We use `navigator.credentials.create` with these options to generate the credential. At this point, the user will see a prompt to decide where to save this credential, and probably a biometric authentication gate depending on the platform. + +```ts +const newCredential = await navigator.credentials.create(options); +``` + +### Sending the public key to the server (finish) + +The browser returns the newly created credential with a bunch of binary fields, so we have to encode them into base64 for transport to the server. + +```ts +const attestationObjectB64 = _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.attestationObject), + _sodium.base64_variants.URLSAFE_NO_PADDING +); +const clientDataJSONB64 = _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.clientDataJSON), + _sodium.base64_variants.URLSAFE_NO_PADDING +``` + +Attestation object contains information about the nature of the credential, like what device it was generated on. Client data JSON contains metadata about the credential, like where it is registered to. + +After pre-processing, the client sends the public key to the server so it can verify future signatures during authentication. + +#### POST /passkeys/registration/finish + +When the server receives the new public key credential, it pre-processes the JSON objects so they can fit within the database. This includes base64 encoding `[]byte` slices and their encompassing arrays or objects. + +```go +// Convert the PublicKey to base64 +publicKeyB64 := base64.StdEncoding.EncodeToString(cred.PublicKey) + +// Convert the Transports slice to a comma-separated string +var transports []string +for _, t := range cred.Transport { + transports = append(transports, string(t)) +} +authenticatorTransports := strings.Join(transports, ",") + +// Marshal the Flags to JSON +credentialFlags, err := json.Marshal(cred.Flags) +if err != nil { + return nil, err +} + +// Marshal the Authenticator to JSON and encode AAGUID to base64 +authenticatorMap := map[string]interface{}{ + "AAGUID": base64.StdEncoding.EncodeToString(cred.Authenticator.AAGUID), + "SignCount": cred.Authenticator.SignCount, + "CloneWarning": cred.Authenticator.CloneWarning, + "Attachment": cred.Authenticator.Attachment, +} +authenticatorJSON, err := json.Marshal(authenticatorMap) +if err != nil { + return nil, err +} + +// convert cred.ID into base64 +credID := base64.StdEncoding.EncodeToString(cred.ID) +``` + +On retrieval, this process is effectively the opposite. + +#### Query Parameters + +| Key | Value | +| ------------ | ------------------------------------------------------------------------------------------------------- | +| friendlyName | The user's entered name for their credential. It helps them identify it in the dashboard in the future. | +| sessionID | The server's identifier for this registration ceremony instance, as returned from the begin step. | + +##### Headers + +| Name | Type | Value | +| ------------ | ------ | ------------------------------------------------ | +| X-Auth-Token | string | The user session token. It is encoded in base64. | + +##### Request Body (JSON) + +| Key | Type | Value | +| -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | string | Base64 encoded client generated identifier for the credential. | +| rawId | string | Base64 encoded client generated identifier for the credential that can be derived from the browser's rawId field, but can also just be set to id. | +| type | string | The type of credential. | +| response | object | Contains attestationObject and clientDataJSON fields that were encoded prior to request. | + +**Example** + +```json +{ + id: credential.id, + rawId: credential.id, + type: credential.type, + response: { + attestationObject: attestationObjectB64, + clientDataJSON: clientDataJSONB64, + }, +} +``` + +## Authenticating with a credential + +Passkeys have been integrated into the existing two-factor ceremony. When logging in via SRP or verifying an email OTT, the server checks if the user has any number of credentials setup or has 2FA TOTP enabled. If the user has setup at least one credential, they will be served a `passkeySessionID` which will initiate the authentication ceremony. + +```tsx +const { + // ... + twoFactorSessionID, + passkeySessionID, +} = await loginViaSRP(srpAttributes, kek); +setIsFirstLogin(true); +if (passkeySessionID) { + // ... +} +``` + +The client should redirect the user to Accounts with this session ID to prompt credential authentication. We use Accounts as the central WebAuthn hub because credentials are locked to an FQDN. + +```tsx +window.location.href = `${getAccountsURL()}/passkeys/flow?passkeySessionID=${passkeySessionID}&redirect=${ + window.location.origin +}/passkeys/finish`; +``` + +### Requesting publicKey options (begin) + +#### GET /users/two-factor/passkeys/begin + +##### Query Parameters + +| Key | Value | +| --------- | ------------------------------------------------------------------------- | +| sessionID | The `passkeySessionID` returned from SRP login or email OTT verification. | + +##### Response Body (JSON) + +**Example** + +```json +{ + "ceremonySessionID": "98a80fbd-c484-4f3b-a139-c43faf4b171f", + "options": { + "publicKey": { + "challenge": "dF-mmdZSBxP6Z7OhZrmQ4h-k-BkuuX6ERnW_ckYdkvc", + "timeout": 300000, + "rpId": "accounts.ente.io", + "allowCredentials": [ + { + "type": "public-key", + "id": "lGfY8iSVjdAsqGKzWv3mkAesRfo", + "transports": [""] + } + ], + "userVerification": "preferred" + } + } +} +``` + +| Key | Type | Value | +| ----------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ceremonySessionID | string | The server identifier for the authentication session. | +| options | object | publicKey options that define which WebAuthn credentials are valid. These credentials can be safely shared with the user because they do not contain any personally identifiable information. | + +### Pre-processing the options before retrieval + +The browser requires `Uint8Array` versions of the `options` challenge and credential IDs. + +```ts +publicKey.challenge = _sodium.from_base64( + publicKey.challenge, + _sodium.base64_variants.URLSAFE_NO_PADDING, +); +publicKey.allowCredentials?.forEach(function (listItem: any) { + listItem.id = _sodium.from_base64( + listItem.id, + _sodium.base64_variants.URLSAFE_NO_PADDING, + ); +}); +``` + +### Retrieving the credential + +```ts +const credential = await navigator.credentials.get({ + publicKey: options, +}); +``` + +### Pre-processing the credential metadata and signature before authentication + +Before sending the public key and signature to the server, their outputs must be encoded into Base64. + +```ts +authenticatorData: _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.authenticatorData), + _sodium.base64_variants.URLSAFE_NO_PADDING +), +clientDataJSON: _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.clientDataJSON), + _sodium.base64_variants.URLSAFE_NO_PADDING +), +signature: _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.signature), + _sodium.base64_variants.URLSAFE_NO_PADDING +), +userHandle: _sodium.to_base64( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + new Uint8Array(credential.response.userHandle), + _sodium.base64_variants.URLSAFE_NO_PADDING +), +``` + +### Sending the credential metadata and signature to the server (finish) + +#### POST /users/two-factor/passkeys/finish + +##### Query Parameters + +| Key | Value | +| ----------------- | ---------------------------------------------------------------------------------------- | +| ceremonySessionID | The `ceremonySessionID` identifier from the begin step. | +| sessionID | The `passkeySessionID` identifier from the SRP login or email OTT verification response. | + +##### Request Body (JSON) + +| Key | Type | Value | +| -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | string | Base64 encoded client generated identifier for the credential. | +| rawId | string | Base64 encoded client generated identifier for the credential that can be derived from the browser's rawId field, but can also just be set to id. | +| type | string | The type of credential. | +| response | object | Contains authenticatorData, clientDataJSON, signature and userHandle fields that were encoded prior to request. | + +##### Response Body (JSON) + +| Key | Type | Value | +| -------------- | ------ | ------------------------------------------- | +| id | int64 | The user's ID. | +| keyAttributes | object | Contains user encryption metadata. | +| encryptedToken | string | The encrypted user session token in Base64. | diff --git a/web/package.json b/web/package.json new file mode 100644 index 000000000..4e1e21647 --- /dev/null +++ b/web/package.json @@ -0,0 +1,33 @@ +{ + "name": "ente-web", + "version": "0.0.0", + "private": true, + "workspaces": [ + "apps/*", + "packages/*" + ], + "scripts": { + "build": "yarn build:photos", + "build:accounts": "yarn workspace accounts next build", + "build:auth": "yarn workspace auth next build", + "build:cast": "yarn workspace cast next build", + "build:photos": "yarn workspace photos next build", + "dev": "yarn dev:photos", + "dev:accounts": "yarn workspace accounts next dev", + "dev:albums": "yarn workspace photos next dev -p 3002", + "dev:auth": "yarn workspace auth next dev", + "dev:cast": "yarn workspace cast next dev", + "dev:photos": "yarn workspace photos next dev", + "lint": "yarn prettier --check . && yarn workspaces run eslint .", + "lint-fix": "yarn prettier --write . && yarn workspaces run eslint --fix ." + }, + "resolutions": { + "@sentry/cli": "1.75.0", + "libsodium": "0.7.9" + }, + "devDependencies": { + "eslint": "^8", + "prettier": "^3", + "typescript": "^5" + } +} diff --git a/web/packages/accounts/.eslintrc.js b/web/packages/accounts/.eslintrc.js new file mode 100644 index 000000000..556f3b639 --- /dev/null +++ b/web/packages/accounts/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + // When root is set to true, ESLint will stop looking for configuration files in parent directories. + // This is required here to ensure desktop picks the right eslint config, where this app is + // packaged as a submodule. + root: true, + extends: ["@ente/eslint-config"], + parser: "@typescript-eslint/parser", + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.json", + }, + ignorePatterns: [".eslintrc.js"], +}; diff --git a/web/packages/accounts/api/srp.ts b/web/packages/accounts/api/srp.ts new file mode 100644 index 000000000..8a737a0d6 --- /dev/null +++ b/web/packages/accounts/api/srp.ts @@ -0,0 +1,140 @@ +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; + +import { + CompleteSRPSetupRequest, + CompleteSRPSetupResponse, + CreateSRPSessionResponse, + GetSRPAttributesResponse, + SRPAttributes, + SRPVerificationResponse, + SetupSRPRequest, + SetupSRPResponse, + UpdateSRPAndKeysRequest, + UpdateSRPAndKeysResponse, +} from "@ente/accounts/types/srp"; +import { ApiError, CustomError } from "@ente/shared/error"; +import { logError } from "@ente/shared/sentry"; +import { HttpStatusCode } from "axios"; + +const ENDPOINT = getEndpoint(); + +export const getSRPAttributes = async ( + email: string, +): Promise => { + try { + const resp = await HTTPService.get(`${ENDPOINT}/users/srp/attributes`, { + email, + }); + return (resp.data as GetSRPAttributesResponse).attributes; + } catch (e) { + logError(e, "failed to get SRP attributes"); + return null; + } +}; + +export const startSRPSetup = async ( + token: string, + setupSRPRequest: SetupSRPRequest, +): Promise => { + try { + const resp = await HTTPService.post( + `${ENDPOINT}/users/srp/setup`, + setupSRPRequest, + undefined, + { + "X-Auth-Token": token, + }, + ); + + return resp.data as SetupSRPResponse; + } catch (e) { + logError(e, "failed to post SRP attributes"); + throw e; + } +}; + +export const completeSRPSetup = async ( + token: string, + completeSRPSetupRequest: CompleteSRPSetupRequest, +) => { + try { + const resp = await HTTPService.post( + `${ENDPOINT}/users/srp/complete`, + completeSRPSetupRequest, + undefined, + { + "X-Auth-Token": token, + }, + ); + return resp.data as CompleteSRPSetupResponse; + } catch (e) { + logError(e, "failed to complete SRP setup"); + throw e; + } +}; + +export const createSRPSession = async (srpUserID: string, srpA: string) => { + try { + const resp = await HTTPService.post( + `${ENDPOINT}/users/srp/create-session`, + { + srpUserID, + srpA, + }, + ); + return resp.data as CreateSRPSessionResponse; + } catch (e) { + logError(e, "createSRPSession failed"); + throw e; + } +}; + +export const verifySRPSession = async ( + sessionID: string, + srpUserID: string, + srpM1: string, +) => { + try { + const resp = await HTTPService.post( + `${ENDPOINT}/users/srp/verify-session`, + { + sessionID, + srpUserID, + srpM1, + }, + undefined, + ); + return resp.data as SRPVerificationResponse; + } catch (e) { + logError(e, "verifySRPSession failed"); + if ( + e instanceof ApiError && + e.httpStatusCode === HttpStatusCode.Unauthorized + ) { + throw Error(CustomError.INCORRECT_PASSWORD); + } else { + throw e; + } + } +}; + +export const updateSRPAndKeys = async ( + token: string, + updateSRPAndKeyRequest: UpdateSRPAndKeysRequest, +): Promise => { + try { + const resp = await HTTPService.post( + `${ENDPOINT}/users/srp/update`, + updateSRPAndKeyRequest, + null, + { + "X-Auth-Token": token, + }, + ); + return resp.data as UpdateSRPAndKeysResponse; + } catch (e) { + logError(e, "updateSRPAndKeys failed"); + throw e; + } +}; diff --git a/web/packages/accounts/api/user.ts b/web/packages/accounts/api/user.ts new file mode 100644 index 000000000..def8fa8c4 --- /dev/null +++ b/web/packages/accounts/api/user.ts @@ -0,0 +1,160 @@ +import HTTPService from "@ente/shared/network/HTTPService"; +import { getEndpoint } from "@ente/shared/network/api"; + +import { + RecoveryKey, + TwoFactorRecoveryResponse, + TwoFactorSecret, + TwoFactorVerificationResponse, + UserVerificationResponse, +} from "@ente/accounts/types/user"; +import { APPS, OTT_CLIENTS } from "@ente/shared/apps/constants"; +import { B64EncryptionResult } from "@ente/shared/crypto/types"; +import { ApiError, CustomError } from "@ente/shared/error"; +import { logError } from "@ente/shared/sentry"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { KeyAttributes } from "@ente/shared/user/types"; +import { HttpStatusCode } from "axios"; + +const ENDPOINT = getEndpoint(); + +export const sendOtt = (appName: APPS, email: string) => { + return HTTPService.post(`${ENDPOINT}/users/ott`, { + email, + client: OTT_CLIENTS.get(appName), + }); +}; + +export const verifyOtt = (email: string, ott: string, referral: string) => { + const cleanedReferral = `web:${referral?.trim() || ""}`; + return HTTPService.post(`${ENDPOINT}/users/verify-email`, { + email, + ott, + source: cleanedReferral, + }); +}; + +export const putAttributes = (token: string, keyAttributes: KeyAttributes) => + HTTPService.put( + `${ENDPOINT}/users/attributes`, + { keyAttributes }, + undefined, + { + "X-Auth-Token": token, + }, + ); + +export const _logout = async () => { + try { + const token = getToken(); + await HTTPService.post(`${ENDPOINT}/users/logout`, null, undefined, { + "X-Auth-Token": token, + }); + } catch (e) { + // ignore if token missing can be triggered during sign up. + if (e instanceof Error && e.message === CustomError.TOKEN_MISSING) { + return; + } + // ignore if unauthorized, can be triggered during on token expiry. + else if ( + e instanceof ApiError && + e.httpStatusCode === HttpStatusCode.Unauthorized + ) { + return; + } + logError(e, "/users/logout failed"); + throw e; + } +}; + +export const verifyTwoFactor = async (code: string, sessionID: string) => { + const resp = await HTTPService.post( + `${ENDPOINT}/users/two-factor/verify`, + { + code, + sessionID, + }, + null, + ); + return resp.data as UserVerificationResponse; +}; + +export const recoverTwoFactor = async (sessionID: string) => { + const resp = await HTTPService.get(`${ENDPOINT}/users/two-factor/recover`, { + sessionID, + }); + return resp.data as TwoFactorRecoveryResponse; +}; + +export const removeTwoFactor = async (sessionID: string, secret: string) => { + const resp = await HTTPService.post(`${ENDPOINT}/users/two-factor/remove`, { + sessionID, + secret, + }); + return resp.data as TwoFactorVerificationResponse; +}; + +export const changeEmail = async (email: string, ott: string) => { + await HTTPService.post( + `${ENDPOINT}/users/change-email`, + { + email, + ott, + }, + null, + { + "X-Auth-Token": getToken(), + }, + ); +}; + +export const sendOTTForEmailChange = async (email: string) => { + await HTTPService.post(`${ENDPOINT}/users/ott`, { + email, + client: "web", + purpose: "change", + }); +}; + +export const setupTwoFactor = async () => { + const resp = await HTTPService.post( + `${ENDPOINT}/users/two-factor/setup`, + null, + null, + { + "X-Auth-Token": getToken(), + }, + ); + return resp.data as TwoFactorSecret; +}; + +export const enableTwoFactor = async ( + code: string, + recoveryEncryptedTwoFactorSecret: B64EncryptionResult, +) => { + await HTTPService.post( + `${ENDPOINT}/users/two-factor/enable`, + { + code, + encryptedTwoFactorSecret: + recoveryEncryptedTwoFactorSecret.encryptedData, + twoFactorSecretDecryptionNonce: + recoveryEncryptedTwoFactorSecret.nonce, + }, + null, + { + "X-Auth-Token": getToken(), + }, + ); +}; + +export const setRecoveryKey = (token: string, recoveryKey: RecoveryKey) => + HTTPService.put(`${ENDPOINT}/users/recovery-key`, recoveryKey, null, { + "X-Auth-Token": token, + }); + +export const disableTwoFactor = async () => { + await HTTPService.post(`${ENDPOINT}/users/two-factor/disable`, null, null, { + "X-Auth-Token": getToken(), + }); +}; diff --git a/web/packages/accounts/components/ChangeEmail.tsx b/web/packages/accounts/components/ChangeEmail.tsx new file mode 100644 index 000000000..42a0d8103 --- /dev/null +++ b/web/packages/accounts/components/ChangeEmail.tsx @@ -0,0 +1,168 @@ +import { changeEmail, sendOTTForEmailChange } from "@ente/accounts/api/user"; +import { APP_HOMES } from "@ente/shared/apps/constants"; +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import LinkButton from "@ente/shared/components/LinkButton"; +import SubmitButton from "@ente/shared/components/SubmitButton"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { sleep } from "@ente/shared/utils"; +import { Alert, Box, TextField } from "@mui/material"; +import { Formik, FormikHelpers } from "formik"; +import { t } from "i18next"; +import { useRef, useState } from "react"; +import { Trans } from "react-i18next"; +import * as Yup from "yup"; + +interface formValues { + email: string; + ott?: string; +} + +function ChangeEmailForm({ appName, router }: PageProps) { + const [loading, setLoading] = useState(false); + const [ottInputVisible, setShowOttInputVisibility] = useState(false); + const ottInputRef = useRef(null); + const [email, setEmail] = useState(null); + const [showMessage, setShowMessage] = useState(false); + const [success, setSuccess] = useState(false); + + const requestOTT = async ( + { email }: formValues, + { setFieldError }: FormikHelpers, + ) => { + try { + setLoading(true); + await sendOTTForEmailChange(email); + setEmail(email); + setShowOttInputVisibility(true); + setShowMessage(true); + setTimeout(() => { + ottInputRef.current?.focus(); + }, 250); + } catch (e) { + setFieldError("email", t("EMAIl_ALREADY_OWNED")); + } + setLoading(false); + }; + + const requestEmailChange = async ( + { email, ott }: formValues, + { setFieldError }: FormikHelpers, + ) => { + try { + setLoading(true); + await changeEmail(email, ott); + setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), email }); + setLoading(false); + setSuccess(true); + await sleep(1000); + goToApp(); + } catch (e) { + setLoading(false); + setFieldError("ott", t("INCORRECT_CODE")); + } + }; + + const goToApp = () => { + router.push(APP_HOMES.get(appName)); + }; + + return ( + + initialValues={{ email: "" }} + validationSchema={Yup.object().shape({ + email: Yup.string() + .email(t("EMAIL_ERROR")) + .required(t("REQUIRED")), + ott: ottInputVisible && Yup.string().required(t("REQUIRED")), + })} + validateOnChange={false} + validateOnBlur={false} + onSubmit={!ottInputVisible ? requestOTT : requestEmailChange} + > + {({ values, errors, handleChange, handleSubmit }) => ( + <> + {showMessage && ( + setShowMessage(false)} + > + + ), + }} + values={{ email }} + /> + + )} +
+ + + {ottInputVisible && ( + + )} + + +
+ + + {ottInputVisible && ( + setShowOttInputVisibility(false)} + > + {t("CHANGE_EMAIL")}? + + )} + + {t("GO_BACK")} + + + + )} + + ); +} + +export default ChangeEmailForm; diff --git a/web/packages/accounts/components/Login.tsx b/web/packages/accounts/components/Login.tsx new file mode 100644 index 000000000..b515cac16 --- /dev/null +++ b/web/packages/accounts/components/Login.tsx @@ -0,0 +1,74 @@ +import { APPS } from "@ente/shared/apps/constants"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import LinkButton from "@ente/shared/components/LinkButton"; +import SingleInputForm, { + SingleInputFormProps, +} from "@ente/shared/components/SingleInputForm"; +import { addLocalLog } from "@ente/shared/logging"; +import { LS_KEYS, setData } from "@ente/shared/storage/localStorage"; +import { Input } from "@mui/material"; +import { t } from "i18next"; +import { useRouter } from "next/router"; +import { getSRPAttributes } from "../api/srp"; +import { sendOtt } from "../api/user"; +import { PAGES } from "../constants/pages"; + +interface LoginProps { + signUp: () => void; + appName: APPS; +} + +export default function Login(props: LoginProps) { + const router = useRouter(); + + const loginUser: SingleInputFormProps["callback"] = async ( + email, + setFieldError, + ) => { + try { + setData(LS_KEYS.USER, { email }); + const srpAttributes = await getSRPAttributes(email); + addLocalLog( + () => ` srpAttributes: ${JSON.stringify(srpAttributes)}`, + ); + if (!srpAttributes || srpAttributes.isEmailMFAEnabled) { + await sendOtt(props.appName, email); + router.push(PAGES.VERIFY); + } else { + setData(LS_KEYS.SRP_ATTRIBUTES, srpAttributes); + router.push(PAGES.CREDENTIALS); + } + } catch (e) { + if (e instanceof Error) { + setFieldError(`${t("UNKNOWN_ERROR")} (reason:${e.message})`); + } else { + setFieldError( + `${t("UNKNOWN_ERROR")} (reason:${JSON.stringify(e)})`, + ); + } + } + }; + + return ( + <> + {t("LOGIN")} + + } + /> + + + + {t("NO_ACCOUNT")} + + + + ); +} diff --git a/web/packages/accounts/components/PasswordStrength.tsx b/web/packages/accounts/components/PasswordStrength.tsx new file mode 100644 index 000000000..f30c6c85e --- /dev/null +++ b/web/packages/accounts/components/PasswordStrength.tsx @@ -0,0 +1,38 @@ +import { PasswordStrength } from "@ente/accounts/constants"; +import { estimatePasswordStrength } from "@ente/accounts/utils"; +import { FlexWrapper } from "@ente/shared/components/Container"; +import { Typography } from "@mui/material"; +import { t } from "i18next"; +import { useMemo } from "react"; + +export const PasswordStrengthHint = ({ + password, +}: { + password: string; +}): JSX.Element => { + const passwordStrength = useMemo( + () => estimatePasswordStrength(password), + [password], + ); + return ( + + ({ + color: + passwordStrength === PasswordStrength.WEAK + ? theme.colors.danger.A700 + : passwordStrength === PasswordStrength.MODERATE + ? theme.colors.warning.A500 + : theme.colors.accent.A500, + })} + textAlign={"left"} + flex={1} + > + {password + ? t("PASSPHRASE_STRENGTH", { context: passwordStrength }) + : ""} + + + ); +}; diff --git a/web/packages/accounts/components/SetPasswordForm.tsx b/web/packages/accounts/components/SetPasswordForm.tsx new file mode 100644 index 000000000..0c225dc00 --- /dev/null +++ b/web/packages/accounts/components/SetPasswordForm.tsx @@ -0,0 +1,161 @@ +import { isWeakPassword } from "@ente/accounts/utils"; +import ShowHidePassword from "@ente/shared/components/Form/ShowHidePassword"; +import SubmitButton from "@ente/shared/components/SubmitButton"; +import { Box, Input, TextField, Typography } from "@mui/material"; +import { Formik } from "formik"; +import { t } from "i18next"; +import React, { useState } from "react"; +import { Trans } from "react-i18next"; +import * as Yup from "yup"; +import { PasswordStrengthHint } from "./PasswordStrength"; + +export interface SetPasswordFormProps { + userEmail: string; + callback: ( + passphrase: string, + setFieldError: ( + field: keyof SetPasswordFormValues, + message: string, + ) => void, + ) => Promise; + buttonText: string; +} +export interface SetPasswordFormValues { + passphrase: string; + confirm: string; +} +function SetPasswordForm(props: SetPasswordFormProps) { + const [loading, setLoading] = useState(false); + const [showPassword, setShowPassword] = useState(false); + + const handleClickShowPassword = () => { + setShowPassword(!showPassword); + }; + + const handleMouseDownPassword = ( + event: React.MouseEvent, + ) => { + event.preventDefault(); + }; + + const onSubmit = async ( + values: SetPasswordFormValues, + { + setFieldError, + }: { + setFieldError: ( + field: keyof SetPasswordFormValues, + message: string, + ) => void; + }, + ) => { + setLoading(true); + try { + const { passphrase, confirm } = values; + if (passphrase === confirm) { + await props.callback(passphrase, setFieldError); + } else { + setFieldError("confirm", t("PASSPHRASE_MATCH_ERROR")); + } + } catch (e) { + setFieldError("confirm", `${t("UNKNOWN_ERROR")} ${e.message}`); + } finally { + setLoading(false); + } + }; + + return ( + + initialValues={{ passphrase: "", confirm: "" }} + validationSchema={Yup.object().shape({ + passphrase: Yup.string().required(t("REQUIRED")), + confirm: Yup.string().required(t("REQUIRED")), + })} + validateOnChange={false} + validateOnBlur={false} + onSubmit={onSubmit} + > + {({ values, errors, handleChange, handleSubmit }) => ( +
+ + {t("ENTER_ENC_PASSPHRASE")} + + + + + ), + }} + /> + + + + + + + + + + {loading && ( + + {t("KEY_GENERATION_IN_PROGRESS_MESSAGE")} + + )} + + + )} + + ); +} +export default SetPasswordForm; diff --git a/web/packages/accounts/components/SignUp.tsx b/web/packages/accounts/components/SignUp.tsx new file mode 100644 index 000000000..b2984f108 --- /dev/null +++ b/web/packages/accounts/components/SignUp.tsx @@ -0,0 +1,316 @@ +import { sendOtt } from "@ente/accounts/api/user"; +import { isWeakPassword } from "@ente/accounts/utils"; +import { generateKeyAndSRPAttributes } from "@ente/accounts/utils/srp"; +import SubmitButton from "@ente/shared/components/SubmitButton"; +import { + generateAndSaveIntermediateKeyAttributes, + saveKeyInSessionStore, +} from "@ente/shared/crypto/helpers"; +import { LS_KEYS, setData } from "@ente/shared/storage/localStorage"; +import { Formik, FormikHelpers } from "formik"; +import React, { useState } from "react"; +import * as Yup from "yup"; + +import { PasswordStrengthHint } from "@ente/accounts/components/PasswordStrength"; +import { PAGES } from "@ente/accounts/constants/pages"; +import { APPS } from "@ente/shared/apps/constants"; +import { VerticallyCentered } from "@ente/shared/components//Container"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import ShowHidePassword from "@ente/shared/components/Form/ShowHidePassword"; +import LinkButton from "@ente/shared/components/LinkButton"; +import { logError } from "@ente/shared/sentry"; +import { + setJustSignedUp, + setLocalReferralSource, +} from "@ente/shared/storage/localStorage/helpers"; +import { SESSION_KEYS } from "@ente/shared/storage/sessionStorage"; +import InfoOutlined from "@mui/icons-material/InfoOutlined"; +import { + Box, + Checkbox, + FormControlLabel, + FormGroup, + IconButton, + InputAdornment, + Link, + TextField, + Tooltip, + Typography, +} from "@mui/material"; +import { t } from "i18next"; +import { NextRouter } from "next/router"; +import { Trans } from "react-i18next"; + +interface FormValues { + email: string; + passphrase: string; + confirm: string; + referral: string; +} + +interface SignUpProps { + router: NextRouter; + login: () => void; + appName: APPS; +} + +export default function SignUp({ router, appName, login }: SignUpProps) { + const [acceptTerms, setAcceptTerms] = useState(false); + const [loading, setLoading] = useState(false); + const [showPassword, setShowPassword] = useState(false); + + const handleClickShowPassword = () => { + setShowPassword(!showPassword); + }; + + const handleMouseDownPassword = ( + event: React.MouseEvent, + ) => { + event.preventDefault(); + }; + + const registerUser = async ( + { email, passphrase, confirm, referral }: FormValues, + { setFieldError }: FormikHelpers, + ) => { + try { + if (passphrase !== confirm) { + setFieldError("confirm", t("PASSPHRASE_MATCH_ERROR")); + return; + } + setLoading(true); + try { + setData(LS_KEYS.USER, { email }); + setLocalReferralSource(referral); + await sendOtt(appName, email); + } catch (e) { + setFieldError("confirm", `${t("UNKNOWN_ERROR")} ${e.message}`); + throw e; + } + try { + const { keyAttributes, masterKey, srpSetupAttributes } = + await generateKeyAndSRPAttributes(passphrase); + + setData(LS_KEYS.ORIGINAL_KEY_ATTRIBUTES, keyAttributes); + setData(LS_KEYS.SRP_SETUP_ATTRIBUTES, srpSetupAttributes); + await generateAndSaveIntermediateKeyAttributes( + passphrase, + keyAttributes, + masterKey, + ); + + await saveKeyInSessionStore( + SESSION_KEYS.ENCRYPTION_KEY, + masterKey, + ); + setJustSignedUp(true); + router.push(PAGES.VERIFY); + } catch (e) { + setFieldError("confirm", t("PASSWORD_GENERATION_FAILED")); + throw e; + } + } catch (err) { + logError(err, "signup failed"); + } + setLoading(false); + }; + + return ( + <> + {t("SIGN_UP")} + + initialValues={{ + email: "", + passphrase: "", + confirm: "", + referral: "", + }} + validationSchema={Yup.object().shape({ + email: Yup.string() + .email(t("EMAIL_ERROR")) + .required(t("REQUIRED")), + passphrase: Yup.string().required(t("REQUIRED")), + confirm: Yup.string().required(t("REQUIRED")), + })} + validateOnChange={false} + validateOnBlur={false} + onSubmit={registerUser} + > + {({ + values, + errors, + handleChange, + handleSubmit, + }): JSX.Element => ( +
+ + + + + ), + }} + /> + + + + + + + {t("REFERRAL_CODE_HINT")} + + + + + + + + + ), + }} + fullWidth + name="referral" + type="text" + value={values.referral} + onChange={handleChange("referral")} + error={Boolean(errors.referral)} + disabled={loading} + /> + + + + setAcceptTerms(e.target.checked) + } + color="accent" + /> + } + label={ + + + ), + b: ( + + ), + }} + /> + + } + /> + + + + + {loading && ( + + {t("KEY_GENERATION_IN_PROGRESS_MESSAGE")} + + )} + +
+ )} + + + + {t("ACCOUNT_EXISTS")} + + + ); +} diff --git a/web/packages/accounts/components/two-factor/InvalidInputMessage.tsx b/web/packages/accounts/components/two-factor/InvalidInputMessage.tsx new file mode 100644 index 000000000..404d795e3 --- /dev/null +++ b/web/packages/accounts/components/two-factor/InvalidInputMessage.tsx @@ -0,0 +1,18 @@ +import { Typography, TypographyProps } from "@mui/material"; +import { FC } from "react"; + +const InvalidInputMessage: FC = (props) => { + return ( + theme.colors.danger.A700, + }} + {...props} + > + {props.children} + + ); +}; + +export default InvalidInputMessage; diff --git a/web/packages/accounts/components/two-factor/VerifyForm.tsx b/web/packages/accounts/components/two-factor/VerifyForm.tsx new file mode 100644 index 000000000..810a6c010 --- /dev/null +++ b/web/packages/accounts/components/two-factor/VerifyForm.tsx @@ -0,0 +1,109 @@ +import { Formik, FormikHelpers } from "formik"; +import { t } from "i18next"; +import { useRef, useState } from "react"; +import OtpInput from "react-otp-input"; + +import InvalidInputMessage from "@ente/accounts/components/two-factor/InvalidInputMessage"; +import { + CenteredFlex, + VerticallyCentered, +} from "@ente/shared/components/Container"; +import SubmitButton from "@ente/shared/components/SubmitButton"; +import { sleep } from "@ente/shared/utils"; +import { Box, Typography } from "@mui/material"; + +interface formValues { + otp: string; +} +interface Props { + onSubmit: VerifyTwoFactorCallback; + buttonText: string; +} + +export type VerifyTwoFactorCallback = ( + otp: string, + markSuccessful: () => Promise, +) => Promise; + +export default function VerifyTwoFactor(props: Props) { + const [waiting, setWaiting] = useState(false); + const otpInputRef = useRef(null); + const [success, setSuccess] = useState(false); + + const markSuccessful = async () => { + setWaiting(false); + setSuccess(true); + await sleep(1000); + }; + + const submitForm = async ( + { otp }: formValues, + { setFieldError, resetForm }: FormikHelpers, + ) => { + try { + setWaiting(true); + await props.onSubmit(otp, markSuccessful); + } catch (e) { + resetForm(); + for (let i = 0; i < 6; i++) { + otpInputRef.current?.focusPrevInput(); + } + setFieldError("otp", `${t("UNKNOWN_ERROR")} ${e.message}`); + } + setWaiting(false); + }; + + const onChange = + (callback: Function, triggerSubmit: Function) => (otp: string) => { + callback(otp); + if (otp.length === 6) { + triggerSubmit(otp); + } + }; + return ( + + initialValues={{ otp: "" }} + validateOnChange={false} + validateOnBlur={false} + onSubmit={submitForm} + > + {({ values, errors, handleChange, handleSubmit, submitForm }) => ( + +
+ + {t("ENTER_TWO_FACTOR_OTP")} + + + + {errors.otp && ( + + + {t("INCORRECT_CODE")} + + + )} + + + +
+ )} + + ); +} diff --git a/web/packages/accounts/components/two-factor/setup/ManualMode.tsx b/web/packages/accounts/components/two-factor/setup/ManualMode.tsx new file mode 100644 index 000000000..05d3b25a3 --- /dev/null +++ b/web/packages/accounts/components/two-factor/setup/ManualMode.tsx @@ -0,0 +1,25 @@ +import { TwoFactorSecret } from "@ente/accounts/types/user"; +import CodeBlock from "@ente/shared/components/CodeBlock"; +import { Typography } from "@mui/material"; +import { t } from "i18next"; + +import LinkButton from "@ente/shared/components/LinkButton"; + +interface Iprops { + twoFactorSecret: TwoFactorSecret; + changeToQRMode: () => void; +} +export default function SetupManualMode({ + twoFactorSecret, + changeToQRMode, +}: Iprops) { + return ( + <> + {t("TWO_FACTOR_MANUAL_CODE_INSTRUCTION")} + + + {t("SCAN_QR_CODE")} + + + ); +} diff --git a/web/packages/accounts/components/two-factor/setup/QRMode.tsx b/web/packages/accounts/components/two-factor/setup/QRMode.tsx new file mode 100644 index 000000000..adfa1dbc1 --- /dev/null +++ b/web/packages/accounts/components/two-factor/setup/QRMode.tsx @@ -0,0 +1,35 @@ +import { TwoFactorSecret } from "@ente/accounts/types/user"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { t } from "i18next"; + +import LinkButton from "@ente/shared/components/LinkButton"; +import { Typography } from "@mui/material"; +import { LoadingQRCode, QRCode } from "../styledComponents"; + +interface Iprops { + twoFactorSecret: TwoFactorSecret; + changeToManualMode: () => void; +} + +export default function SetupQRMode({ + twoFactorSecret, + changeToManualMode, +}: Iprops) { + return ( + <> + {t("TWO_FACTOR_QR_INSTRUCTION")} + {!twoFactorSecret ? ( + + + + ) : ( + + )} + + {t("ENTER_CODE_MANUALLY")} + + + ); +} diff --git a/web/packages/accounts/components/two-factor/setup/index.tsx b/web/packages/accounts/components/two-factor/setup/index.tsx new file mode 100644 index 000000000..a9388db83 --- /dev/null +++ b/web/packages/accounts/components/two-factor/setup/index.tsx @@ -0,0 +1,33 @@ +import SetupManualMode from "@ente/accounts/components/two-factor/setup/ManualMode"; +import SetupQRMode from "@ente/accounts/components/two-factor/setup/QRMode"; +import { SetupMode } from "@ente/accounts/pages/two-factor/setup"; +import { TwoFactorSecret } from "@ente/accounts/types/user"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import { useState } from "react"; + +interface Iprops { + twoFactorSecret: TwoFactorSecret; +} +export function TwoFactorSetup({ twoFactorSecret }: Iprops) { + const [setupMode, setSetupMode] = useState(SetupMode.QR_CODE); + + const changeToManualMode = () => setSetupMode(SetupMode.MANUAL_CODE); + + const changeToQRMode = () => setSetupMode(SetupMode.QR_CODE); + + return ( + + {setupMode === SetupMode.QR_CODE ? ( + + ) : ( + + )} + + ); +} diff --git a/web/packages/accounts/components/two-factor/styledComponents.ts b/web/packages/accounts/components/two-factor/styledComponents.ts new file mode 100644 index 000000000..7a9e7fe1c --- /dev/null +++ b/web/packages/accounts/components/two-factor/styledComponents.ts @@ -0,0 +1,18 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import { styled } from "@mui/material"; +export const QRCode = styled("img")( + ({ theme }) => ` + height: 200px; + width: 200px; + margin: ${theme.spacing(2)}; +`, +); + +export const LoadingQRCode = styled(VerticallyCentered)( + ({ theme }) => ` + width:200px; + aspect-ratio:1; + border: 1px solid ${theme.palette.grey.A200}; + margin: ${theme.spacing(2)}; + `, +); diff --git a/web/packages/accounts/constants/index.ts b/web/packages/accounts/constants/index.ts new file mode 100644 index 000000000..81f63d477 --- /dev/null +++ b/web/packages/accounts/constants/index.ts @@ -0,0 +1,5 @@ +export enum PasswordStrength { + WEAK = "WEAK", + MODERATE = "MODERATE", + STRONG = "STRONG", +} diff --git a/web/packages/accounts/constants/pages.ts b/web/packages/accounts/constants/pages.ts new file mode 100644 index 000000000..b7658c699 --- /dev/null +++ b/web/packages/accounts/constants/pages.ts @@ -0,0 +1,15 @@ +export enum PAGES { + ROOT = "/", + CHANGE_EMAIL = "/change-email", + CHANGE_PASSWORD = "/change-password", + CREDENTIALS = "/credentials", + GENERATE = "/generate", + LOGIN = "/login", + RECOVER = "/recover", + SIGNUP = "/signup", + TWO_FACTOR_SETUP = "/two-factor/setup", + TWO_FACTOR_VERIFY = "/two-factor/verify", + TWO_FACTOR_RECOVER = "/two-factor/recover", + VERIFY = "/verify", + SHARED_ALBUMS = "/shared-albums", +} diff --git a/web/packages/accounts/package.json b/web/packages/accounts/package.json new file mode 100644 index 000000000..b26c365db --- /dev/null +++ b/web/packages/accounts/package.json @@ -0,0 +1,11 @@ +{ + "name": "@ente/accounts", + "version": "0.0.0", + "private": true, + "dependencies": { + "@/next": "*", + "@ente/eslint-config": "*", + "@ente/shared": "*" + }, + "devDependencies": {} +} diff --git a/web/packages/accounts/pages/change-email.tsx b/web/packages/accounts/pages/change-email.tsx new file mode 100644 index 000000000..b9f54ad98 --- /dev/null +++ b/web/packages/accounts/pages/change-email.tsx @@ -0,0 +1,34 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import { t } from "i18next"; +import { useEffect } from "react"; + +import ChangeEmailForm from "@ente/accounts/components/ChangeEmail"; +import { PAGES } from "@ente/accounts/constants/pages"; +import { PageProps } from "@ente/shared/apps/types"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import { getData, LS_KEYS } from "@ente/shared/storage/localStorage"; + +function ChangeEmailPage({ router, appName, appContext }: PageProps) { + useEffect(() => { + const user = getData(LS_KEYS.USER); + if (!user?.token) { + router.push(PAGES.ROOT); + } + }, []); + + return ( + + + {t("CHANGE_EMAIL")} + + + + ); +} + +export default ChangeEmailPage; diff --git a/web/packages/accounts/pages/change-password.tsx b/web/packages/accounts/pages/change-password.tsx new file mode 100644 index 000000000..3e9860399 --- /dev/null +++ b/web/packages/accounts/pages/change-password.tsx @@ -0,0 +1,146 @@ +import { t } from "i18next"; +import { useEffect, useState } from "react"; + +import { + generateSRPClient, + generateSRPSetupAttributes, +} from "@ente/accounts/services/srp"; +import { + generateAndSaveIntermediateKeyAttributes, + generateLoginSubKey, + saveKeyInSessionStore, +} from "@ente/shared/crypto/helpers"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; + +import { startSRPSetup, updateSRPAndKeys } from "@ente/accounts/api/srp"; +import SetPasswordForm, { + SetPasswordFormProps, +} from "@ente/accounts/components/SetPasswordForm"; +import { PAGES } from "@ente/accounts/constants/pages"; +import { UpdatedKey } from "@ente/accounts/types/user"; +import { SESSION_KEYS } from "@ente/shared/storage/sessionStorage"; +import { getActualKey } from "@ente/shared/user"; +import { KEK, KeyAttributes, User } from "@ente/shared/user/types"; + +import { + convertBase64ToBuffer, + convertBufferToBase64, +} from "@ente/accounts/utils"; +import { APP_HOMES } from "@ente/shared/apps/constants"; +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import LinkButton from "@ente/shared/components/LinkButton"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; + +export default function ChangePassword({ appName, router }: PageProps) { + const [token, setToken] = useState(); + const [user, setUser] = useState(); + + useEffect(() => { + const user = getData(LS_KEYS.USER); + setUser(user); + if (!user?.token) { + InMemoryStore.set(MS_KEYS.REDIRECT_URL, PAGES.CHANGE_PASSWORD); + router.push(PAGES.ROOT); + } else { + setToken(user.token); + } + }, []); + + const onSubmit: SetPasswordFormProps["callback"] = async ( + passphrase, + setFieldError, + ) => { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const key = await getActualKey(); + const keyAttributes: KeyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); + const kekSalt = await cryptoWorker.generateSaltToDeriveKey(); + let kek: KEK; + try { + kek = await cryptoWorker.deriveSensitiveKey(passphrase, kekSalt); + } catch (e) { + setFieldError("confirm", t("PASSWORD_GENERATION_FAILED")); + return; + } + const encryptedKeyAttributes = await cryptoWorker.encryptToB64( + key, + kek.key, + ); + const updatedKey: UpdatedKey = { + kekSalt, + encryptedKey: encryptedKeyAttributes.encryptedData, + keyDecryptionNonce: encryptedKeyAttributes.nonce, + opsLimit: kek.opsLimit, + memLimit: kek.memLimit, + }; + + const loginSubKey = await generateLoginSubKey(kek.key); + + const { srpUserID, srpSalt, srpVerifier } = + await generateSRPSetupAttributes(loginSubKey); + + const srpClient = await generateSRPClient( + srpSalt, + srpUserID, + loginSubKey, + ); + + const srpA = convertBufferToBase64(srpClient.computeA()); + + const { setupID, srpB } = await startSRPSetup(token, { + srpUserID, + srpSalt, + srpVerifier, + srpA, + }); + + srpClient.setB(convertBase64ToBuffer(srpB)); + + const srpM1 = convertBufferToBase64(srpClient.computeM1()); + + await updateSRPAndKeys(token, { + setupID, + srpM1, + updatedKeyAttr: updatedKey, + }); + + const updatedKeyAttributes = Object.assign(keyAttributes, updatedKey); + await generateAndSaveIntermediateKeyAttributes( + passphrase, + updatedKeyAttributes, + key, + ); + + await saveKeyInSessionStore(SESSION_KEYS.ENCRYPTION_KEY, key); + redirectToAppHome(); + }; + + const redirectToAppHome = () => { + setData(LS_KEYS.SHOW_BACK_BUTTON, { value: true }); + router.push(APP_HOMES.get(appName)); + }; + + return ( + + + {t("CHANGE_PASSWORD")} + + {(getData(LS_KEYS.SHOW_BACK_BUTTON)?.value ?? true) && ( + + + {t("GO_BACK")} + + + )} + + + ); +} diff --git a/web/packages/accounts/pages/credentials.tsx b/web/packages/accounts/pages/credentials.tsx new file mode 100644 index 000000000..50cbc02ca --- /dev/null +++ b/web/packages/accounts/pages/credentials.tsx @@ -0,0 +1,286 @@ +import { useEffect, useState } from "react"; + +import { t } from "i18next"; + +import { + decryptAndStoreToken, + generateAndSaveIntermediateKeyAttributes, + generateLoginSubKey, + saveKeyInSessionStore, +} from "@ente/shared/crypto/helpers"; +import { + LS_KEYS, + clearData, + getData, + setData, +} from "@ente/shared/storage/localStorage"; +import { + SESSION_KEYS, + getKey, + removeKey, + setKey, +} from "@ente/shared/storage/sessionStorage"; +import { PAGES } from "../constants/pages"; +import { generateSRPSetupAttributes } from "../services/srp"; +import { logoutUser } from "../services/user"; + +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import LinkButton from "@ente/shared/components/LinkButton"; +import VerifyMasterPasswordForm, { + VerifyMasterPasswordFormProps, +} from "@ente/shared/components/VerifyMasterPasswordForm"; +import { getAccountsURL } from "@ente/shared/network/api"; +import { + isFirstLogin, + setIsFirstLogin, +} from "@ente/shared/storage/localStorage/helpers"; +import { KeyAttributes, User } from "@ente/shared/user/types"; +import isElectron from "is-electron"; +import { getSRPAttributes } from "../api/srp"; +import { configureSRP, loginViaSRP } from "../services/srp"; +import { SRPAttributes } from "../types/srp"; +// import { APPS, getAppName } from '@ente/shared/apps'; +import { APP_HOMES } from "@ente/shared/apps/constants"; +import { PageProps } from "@ente/shared/apps/types"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { B64EncryptionResult } from "@ente/shared/crypto/types"; +import ElectronAPIs from "@ente/shared/electron"; +import { CustomError } from "@ente/shared/error"; +import { addLocalLog } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; + +export default function Credentials({ + appContext, + router, + appName, +}: PageProps) { + const [srpAttributes, setSrpAttributes] = useState(); + const [keyAttributes, setKeyAttributes] = useState(); + const [user, setUser] = useState(); + + useEffect(() => { + const main = async () => { + const user: User = getData(LS_KEYS.USER); + if (!user?.email) { + router.push(PAGES.ROOT); + return; + } + setUser(user); + let key = getKey(SESSION_KEYS.ENCRYPTION_KEY); + if (!key && isElectron()) { + try { + key = await ElectronAPIs.getEncryptionKey(); + } catch (e) { + logError(e, "getEncryptionKey failed"); + } + if (key) { + await saveKeyInSessionStore( + SESSION_KEYS.ENCRYPTION_KEY, + key, + true, + ); + } + } + if (key) { + router.push(APP_HOMES.get(appName)); + return; + } + const kekEncryptedAttributes: B64EncryptionResult = getKey( + SESSION_KEYS.KEY_ENCRYPTION_KEY, + ); + const keyAttributes: KeyAttributes = getData( + LS_KEYS.KEY_ATTRIBUTES, + ); + if (kekEncryptedAttributes && keyAttributes) { + removeKey(SESSION_KEYS.KEY_ENCRYPTION_KEY); + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const kek = await cryptoWorker.decryptB64( + kekEncryptedAttributes.encryptedData, + kekEncryptedAttributes.nonce, + kekEncryptedAttributes.key, + ); + const key = await cryptoWorker.decryptB64( + keyAttributes.encryptedKey, + keyAttributes.keyDecryptionNonce, + kek, + ); + useMasterPassword(key, kek, keyAttributes); + return; + } + if (keyAttributes) { + if ( + (!user?.token && !user?.encryptedToken) || + (keyAttributes && !keyAttributes.memLimit) + ) { + clearData(); + router.push(PAGES.ROOT); + return; + } + setKeyAttributes(keyAttributes); + return; + } + + const srpAttributes: SRPAttributes = getData( + LS_KEYS.SRP_ATTRIBUTES, + ); + if (srpAttributes) { + setSrpAttributes(srpAttributes); + } else { + router.push(PAGES.ROOT); + } + }; + main(); + appContext.showNavBar(true); + }, []); + + const getKeyAttributes: VerifyMasterPasswordFormProps["getKeyAttributes"] = + async (kek: string) => { + try { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const { + keyAttributes, + encryptedToken, + token, + id, + twoFactorSessionID, + passkeySessionID, + } = await loginViaSRP(srpAttributes, kek); + setIsFirstLogin(true); + if (passkeySessionID) { + const sessionKeyAttributes = + await cryptoWorker.generateKeyAndEncryptToB64(kek); + setKey( + SESSION_KEYS.KEY_ENCRYPTION_KEY, + sessionKeyAttributes, + ); + const user = getData(LS_KEYS.USER); + setData(LS_KEYS.USER, { + ...user, + passkeySessionID, + isTwoFactorEnabled: true, + isTwoFactorPasskeysEnabled: true, + }); + InMemoryStore.set(MS_KEYS.REDIRECT_URL, PAGES.ROOT); + window.location.href = `${getAccountsURL()}/passkeys/flow?passkeySessionID=${passkeySessionID}&redirect=${ + window.location.origin + }/passkeys/finish`; + return; + } else if (twoFactorSessionID) { + const sessionKeyAttributes = + await cryptoWorker.generateKeyAndEncryptToB64(kek); + setKey( + SESSION_KEYS.KEY_ENCRYPTION_KEY, + sessionKeyAttributes, + ); + const user = getData(LS_KEYS.USER); + setData(LS_KEYS.USER, { + ...user, + twoFactorSessionID, + isTwoFactorEnabled: true, + }); + router.push(PAGES.TWO_FACTOR_VERIFY); + throw Error(CustomError.TWO_FACTOR_ENABLED); + } else { + const user = getData(LS_KEYS.USER); + setData(LS_KEYS.USER, { + ...user, + token, + encryptedToken, + id, + isTwoFactorEnabled: false, + }); + setData(LS_KEYS.KEY_ATTRIBUTES, keyAttributes); + return keyAttributes; + } + } catch (e) { + if (e.message !== CustomError.TWO_FACTOR_ENABLED) { + logError(e, "getKeyAttributes failed"); + } + throw e; + } + }; + + const useMasterPassword: VerifyMasterPasswordFormProps["callback"] = async ( + key, + kek, + keyAttributes, + passphrase, + ) => { + try { + if (isFirstLogin() && passphrase) { + await generateAndSaveIntermediateKeyAttributes( + passphrase, + keyAttributes, + key, + ); + } + await saveKeyInSessionStore(SESSION_KEYS.ENCRYPTION_KEY, key); + await decryptAndStoreToken(keyAttributes, key); + try { + let srpAttributes: SRPAttributes = getData( + LS_KEYS.SRP_ATTRIBUTES, + ); + if (!srpAttributes) { + srpAttributes = await getSRPAttributes(user.email); + if (srpAttributes) { + setData(LS_KEYS.SRP_ATTRIBUTES, srpAttributes); + } + } + addLocalLog(() => `userSRPSetupPending ${!srpAttributes}`); + if (!srpAttributes) { + const loginSubKey = await generateLoginSubKey(kek); + const srpSetupAttributes = + await generateSRPSetupAttributes(loginSubKey); + await configureSRP(srpSetupAttributes); + } + } catch (e) { + logError(e, "migrate to srp failed"); + } + const redirectURL = InMemoryStore.get(MS_KEYS.REDIRECT_URL); + InMemoryStore.delete(MS_KEYS.REDIRECT_URL); + router.push(redirectURL ?? APP_HOMES.get(appName)); + } catch (e) { + logError(e, "useMasterPassword failed"); + } + }; + + const redirectToRecoverPage = () => router.push(PAGES.RECOVER); + + if (!keyAttributes && !srpAttributes) { + return ( + + + + ); + } + + return ( + + + {t("PASSWORD")} + + + + + {t("FORGOT_PASSWORD")} + + + {t("CHANGE_EMAIL")} + + + + + ); +} diff --git a/web/packages/accounts/pages/generate.tsx b/web/packages/accounts/pages/generate.tsx new file mode 100644 index 000000000..8c4a339f9 --- /dev/null +++ b/web/packages/accounts/pages/generate.tsx @@ -0,0 +1,122 @@ +import { t } from "i18next"; +import { useEffect, useState } from "react"; + +import { putAttributes } from "@ente/accounts/api/user"; +import { configureSRP } from "@ente/accounts/services/srp"; +import { logoutUser } from "@ente/accounts/services/user"; +import { generateKeyAndSRPAttributes } from "@ente/accounts/utils/srp"; +import { + generateAndSaveIntermediateKeyAttributes, + saveKeyInSessionStore, +} from "@ente/shared/crypto/helpers"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { SESSION_KEYS, getKey } from "@ente/shared/storage/sessionStorage"; + +import SetPasswordForm from "@ente/accounts/components/SetPasswordForm"; +import { PAGES } from "@ente/accounts/constants/pages"; +import { APP_HOMES } from "@ente/shared/apps/constants"; +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormTitle from "@ente/shared/components/Form/FormPaper/Title"; +import LinkButton from "@ente/shared/components/LinkButton"; +import RecoveryKey from "@ente/shared/components/RecoveryKey"; +import { logError } from "@ente/shared/sentry"; +import { + justSignedUp, + setJustSignedUp, +} from "@ente/shared/storage/localStorage/helpers"; +import { KeyAttributes, User } from "@ente/shared/user/types"; + +export default function Generate({ router, appContext, appName }: PageProps) { + const [token, setToken] = useState(); + const [user, setUser] = useState(); + const [recoverModalView, setRecoveryModalView] = useState(false); + const [loading, setLoading] = useState(true); + useEffect(() => { + const main = async () => { + const key: string = getKey(SESSION_KEYS.ENCRYPTION_KEY); + const keyAttributes: KeyAttributes = getData( + LS_KEYS.ORIGINAL_KEY_ATTRIBUTES, + ); + const user: User = getData(LS_KEYS.USER); + setUser(user); + if (!user?.token) { + router.push(PAGES.ROOT); + } else if (key) { + if (justSignedUp()) { + setRecoveryModalView(true); + setLoading(false); + } else { + router.push(APP_HOMES.get(appName)); + } + } else if (keyAttributes?.encryptedKey) { + router.push(PAGES.CREDENTIALS); + } else { + setToken(user.token); + setLoading(false); + } + }; + main(); + appContext.showNavBar(true); + }, []); + + const onSubmit = async (passphrase, setFieldError) => { + try { + const { keyAttributes, masterKey, srpSetupAttributes } = + await generateKeyAndSRPAttributes(passphrase); + + await putAttributes(token, keyAttributes); + await configureSRP(srpSetupAttributes); + await generateAndSaveIntermediateKeyAttributes( + passphrase, + keyAttributes, + masterKey, + ); + await saveKeyInSessionStore(SESSION_KEYS.ENCRYPTION_KEY, masterKey); + setJustSignedUp(true); + setRecoveryModalView(true); + } catch (e) { + logError(e, "failed to generate password"); + setFieldError("passphrase", t("PASSWORD_GENERATION_FAILED")); + } + }; + + return ( + <> + {loading ? ( + + + + ) : recoverModalView ? ( + { + setRecoveryModalView(false); + router.push(APP_HOMES.get(appName)); + }} + somethingWentWrong={() => null} + /> + ) : ( + + + {t("SET_PASSPHRASE")} + + + + {t("GO_BACK")} + + + + + )} + + ); +} diff --git a/web/packages/accounts/pages/login.tsx b/web/packages/accounts/pages/login.tsx new file mode 100644 index 000000000..9b3ac5c1d --- /dev/null +++ b/web/packages/accounts/pages/login.tsx @@ -0,0 +1,37 @@ +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import { LS_KEYS, getData } from "@ente/shared/storage/localStorage"; +import { useEffect, useState } from "react"; +import Login from "../components/Login"; +import { PAGES } from "../constants/pages"; + +export default function LoginPage({ appContext, router, appName }: PageProps) { + const [loading, setLoading] = useState(true); + + useEffect(() => { + const user = getData(LS_KEYS.USER); + if (user?.email) { + router.push(PAGES.VERIFY); + } + setLoading(false); + appContext.showNavBar(true); + }, []); + + const register = () => { + router.push(PAGES.SIGNUP); + }; + + return loading ? ( + + + + ) : ( + + + + + + ); +} diff --git a/web/packages/accounts/pages/passkeys/finish.tsx b/web/packages/accounts/pages/passkeys/finish.tsx new file mode 100644 index 000000000..4e85e3e43 --- /dev/null +++ b/web/packages/accounts/pages/passkeys/finish.tsx @@ -0,0 +1,46 @@ +import { PAGES } from "@ente/accounts/constants/pages"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { useRouter } from "next/router"; +import { useEffect } from "react"; + +const PasskeysFinishPage = () => { + const router = useRouter(); + + const init = async () => { + // get response from query params + const searchParams = new URLSearchParams(window.location.search); + const response = searchParams.get("response"); + + if (!response) return; + + // decode response + const decodedResponse = JSON.parse(atob(response)); + + const { keyAttributes, encryptedToken, token, id } = decodedResponse; + setData(LS_KEYS.USER, { + ...getData(LS_KEYS.USER), + token, + encryptedToken, + id, + }); + setData(LS_KEYS.KEY_ATTRIBUTES, keyAttributes); + const redirectURL = InMemoryStore.get(MS_KEYS.REDIRECT_URL); + InMemoryStore.delete(MS_KEYS.REDIRECT_URL); + router.push(redirectURL ?? PAGES.ROOT); + }; + + useEffect(() => { + init(); + }, []); + + return ( + + + + ); +}; + +export default PasskeysFinishPage; diff --git a/web/packages/accounts/pages/recover.tsx b/web/packages/accounts/pages/recover.tsx new file mode 100644 index 000000000..3c4ad4146 --- /dev/null +++ b/web/packages/accounts/pages/recover.tsx @@ -0,0 +1,122 @@ +import { t } from "i18next"; +import { useEffect, useState } from "react"; + +import { sendOtt } from "@ente/accounts/api/user"; +import { PAGES } from "@ente/accounts/constants/pages"; +import { APP_HOMES } from "@ente/shared/apps/constants"; +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import LinkButton from "@ente/shared/components/LinkButton"; +import SingleInputForm, { + SingleInputFormProps, +} from "@ente/shared/components/SingleInputForm"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { + decryptAndStoreToken, + saveKeyInSessionStore, +} from "@ente/shared/crypto/helpers"; +import { logError } from "@ente/shared/sentry"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { SESSION_KEYS, getKey } from "@ente/shared/storage/sessionStorage"; +import { KeyAttributes, User } from "@ente/shared/user/types"; +const bip39 = require("bip39"); +// mobile client library only supports english. +bip39.setDefaultWordlist("english"); + +export default function Recover({ appContext, router, appName }: PageProps) { + const [keyAttributes, setKeyAttributes] = useState(); + + useEffect(() => { + const user: User = getData(LS_KEYS.USER); + const keyAttributes: KeyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); + const key = getKey(SESSION_KEYS.ENCRYPTION_KEY); + if (!user?.email) { + router.push(PAGES.ROOT); + return; + } + if (!user?.encryptedToken && !user?.token) { + sendOtt(appName, user.email); + InMemoryStore.set(MS_KEYS.REDIRECT_URL, PAGES.RECOVER); + router.push(PAGES.VERIFY); + return; + } + if (!keyAttributes) { + router.push(PAGES.GENERATE); + } else if (key) { + router.push(APP_HOMES.get(appName)); + } else { + setKeyAttributes(keyAttributes); + } + appContext.showNavBar(true); + }, []); + + const recover: SingleInputFormProps["callback"] = async ( + recoveryKey: string, + setFieldError, + ) => { + try { + recoveryKey = recoveryKey + .trim() + .split(" ") + .map((part) => part.trim()) + .filter((part) => !!part) + .join(" "); + // check if user is entering mnemonic recovery key + if (recoveryKey.indexOf(" ") > 0) { + if (recoveryKey.split(" ").length !== 24) { + throw new Error("recovery code should have 24 words"); + } + recoveryKey = bip39.mnemonicToEntropy(recoveryKey); + } + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const masterKey = await cryptoWorker.decryptB64( + keyAttributes.masterKeyEncryptedWithRecoveryKey, + keyAttributes.masterKeyDecryptionNonce, + await cryptoWorker.fromHex(recoveryKey), + ); + await saveKeyInSessionStore(SESSION_KEYS.ENCRYPTION_KEY, masterKey); + await decryptAndStoreToken(keyAttributes, masterKey); + + setData(LS_KEYS.SHOW_BACK_BUTTON, { value: false }); + router.push(PAGES.CHANGE_PASSWORD); + } catch (e) { + logError(e, "password recovery failed"); + setFieldError(t("INCORRECT_RECOVERY_KEY")); + } + }; + + const showNoRecoveryKeyMessage = () => { + appContext.setDialogBoxAttributesV2({ + title: t("SORRY"), + close: {}, + content: t("NO_RECOVERY_KEY_MESSAGE"), + }); + }; + + return ( + + + {t("RECOVER_ACCOUNT")} + + + + {t("NO_RECOVERY_KEY")} + + + {t("GO_BACK")} + + + + + ); +} diff --git a/web/packages/accounts/pages/signup.tsx b/web/packages/accounts/pages/signup.tsx new file mode 100644 index 000000000..695301c7d --- /dev/null +++ b/web/packages/accounts/pages/signup.tsx @@ -0,0 +1,37 @@ +import SignUp from "@ente/accounts/components/SignUp"; +import { PAGES } from "@ente/accounts/constants/pages"; +import { LS_KEYS, getData } from "@ente/shared//storage/localStorage"; +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import { useEffect, useState } from "react"; + +export default function SignUpPage({ router, appContext, appName }: PageProps) { + const [loading, setLoading] = useState(true); + + useEffect(() => { + const user = getData(LS_KEYS.USER); + if (user?.email) { + router.push(PAGES.VERIFY); + } + setLoading(false); + appContext.showNavBar(true); + }, []); + + const login = () => { + router.push(PAGES.LOGIN); + }; + + return ( + + {loading ? ( + + ) : ( + + + + )} + + ); +} diff --git a/web/packages/accounts/pages/two-factor/recover.tsx b/web/packages/accounts/pages/two-factor/recover.tsx new file mode 100644 index 000000000..67bd709e1 --- /dev/null +++ b/web/packages/accounts/pages/two-factor/recover.tsx @@ -0,0 +1,170 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import SingleInputForm, { + SingleInputFormProps, +} from "@ente/shared/components/SingleInputForm"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { useEffect, useState } from "react"; + +import { recoverTwoFactor, removeTwoFactor } from "@ente/accounts/api/user"; +import { PAGES } from "@ente/accounts/constants/pages"; +import { logoutUser } from "@ente/accounts/services/user"; +import { PageProps } from "@ente/shared/apps/types"; +import { DialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import LinkButton from "@ente/shared/components/LinkButton"; +import { SUPPORT_EMAIL } from "@ente/shared/constants/urls"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { B64EncryptionResult } from "@ente/shared/crypto/types"; +import { ApiError } from "@ente/shared/error"; +import { Link } from "@mui/material"; +import { HttpStatusCode } from "axios"; +import { t } from "i18next"; +import { Trans } from "react-i18next"; + +const bip39 = require("bip39"); +// mobile client library only supports english. +bip39.setDefaultWordlist("english"); + +export default function Recover({ router, appContext }: PageProps) { + const [encryptedTwoFactorSecret, setEncryptedTwoFactorSecret] = + useState(null); + const [sessionID, setSessionID] = useState(null); + const [doesHaveEncryptedRecoveryKey, setDoesHaveEncryptedRecoveryKey] = + useState(false); + + useEffect(() => { + const user = getData(LS_KEYS.USER); + if (!user || !user.email || !user.twoFactorSessionID) { + router.push(PAGES.ROOT); + } else if ( + !user.isTwoFactorEnabled && + (user.encryptedToken || user.token) + ) { + router.push(PAGES.GENERATE); + } else { + setSessionID(user.twoFactorSessionID); + } + const main = async () => { + try { + const resp = await recoverTwoFactor(user.twoFactorSessionID); + setDoesHaveEncryptedRecoveryKey(!!resp.encryptedSecret); + if (!resp.encryptedSecret) { + showContactSupportDialog({ + text: t("GO_BACK"), + action: router.back, + }); + } else { + setEncryptedTwoFactorSecret({ + encryptedData: resp.encryptedSecret, + nonce: resp.secretDecryptionNonce, + key: null, + }); + } + } catch (e) { + if ( + e instanceof ApiError && + e.httpStatusCode === HttpStatusCode.NotFound + ) { + logoutUser(); + } else { + logError(e, "two factor recovery page setup failed"); + setDoesHaveEncryptedRecoveryKey(false); + showContactSupportDialog({ + text: t("GO_BACK"), + action: router.back, + }); + } + } + }; + main(); + }, []); + + const recover: SingleInputFormProps["callback"] = async ( + recoveryKey: string, + setFieldError, + ) => { + try { + recoveryKey = recoveryKey + .trim() + .split(" ") + .map((part) => part.trim()) + .filter((part) => !!part) + .join(" "); + // check if user is entering mnemonic recovery key + if (recoveryKey.indexOf(" ") > 0) { + if (recoveryKey.split(" ").length !== 24) { + throw new Error("recovery code should have 24 words"); + } + recoveryKey = bip39.mnemonicToEntropy(recoveryKey); + } + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const twoFactorSecret = await cryptoWorker.decryptB64( + encryptedTwoFactorSecret.encryptedData, + encryptedTwoFactorSecret.nonce, + await cryptoWorker.fromHex(recoveryKey), + ); + const resp = await removeTwoFactor(sessionID, twoFactorSecret); + const { keyAttributes, encryptedToken, token, id } = resp; + setData(LS_KEYS.USER, { + ...getData(LS_KEYS.USER), + token, + encryptedToken, + id, + isTwoFactorEnabled: false, + }); + setData(LS_KEYS.KEY_ATTRIBUTES, keyAttributes); + router.push(PAGES.CREDENTIALS); + } catch (e) { + logError(e, "two factor recovery failed"); + setFieldError(t("INCORRECT_RECOVERY_KEY")); + } + }; + + const showContactSupportDialog = ( + dialogClose?: DialogBoxAttributesV2["close"], + ) => { + appContext.setDialogBoxAttributesV2({ + title: t("CONTACT_SUPPORT"), + close: dialogClose ?? {}, + content: ( + , + }} + /> + ), + }); + }; + + if (!doesHaveEncryptedRecoveryKey) { + return <>; + } + + return ( + + + {t("RECOVER_TWO_FACTOR")} + + + showContactSupportDialog()}> + {t("NO_RECOVERY_KEY")} + + + {t("GO_BACK")} + + + + + ); +} diff --git a/web/packages/accounts/pages/two-factor/setup.tsx b/web/packages/accounts/pages/two-factor/setup.tsx new file mode 100644 index 000000000..e887c21f2 --- /dev/null +++ b/web/packages/accounts/pages/two-factor/setup.tsx @@ -0,0 +1,83 @@ +import { enableTwoFactor, setupTwoFactor } from "@ente/accounts/api/user"; +import { t } from "i18next"; +import { useEffect, useState } from "react"; + +import VerifyTwoFactor, { + VerifyTwoFactorCallback, +} from "@ente/accounts/components/two-factor/VerifyForm"; +import { TwoFactorSetup } from "@ente/accounts/components/two-factor/setup"; +import { TwoFactorSecret } from "@ente/accounts/types/user"; +import { APP_HOMES } from "@ente/shared/apps/constants"; +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import LinkButton from "@ente/shared/components/LinkButton"; +import { encryptWithRecoveryKey } from "@ente/shared/crypto/helpers"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { Box, CardContent, Typography } from "@mui/material"; +import Card from "@mui/material/Card"; + +export enum SetupMode { + QR_CODE, + MANUAL_CODE, +} + +export default function SetupTwoFactor({ router, appName }: PageProps) { + const [twoFactorSecret, setTwoFactorSecret] = + useState(null); + + useEffect(() => { + if (twoFactorSecret) { + return; + } + const main = async () => { + try { + const twoFactorSecret = await setupTwoFactor(); + setTwoFactorSecret(twoFactorSecret); + } catch (e) { + logError(e, "failed to get two factor setup code"); + } + }; + main(); + }, []); + + const onSubmit: VerifyTwoFactorCallback = async ( + otp: string, + markSuccessful, + ) => { + const recoveryEncryptedTwoFactorSecret = await encryptWithRecoveryKey( + twoFactorSecret.secretCode, + ); + await enableTwoFactor(otp, recoveryEncryptedTwoFactorSecret); + await markSuccessful(); + setData(LS_KEYS.USER, { + ...getData(LS_KEYS.USER), + isTwoFactorEnabled: true, + }); + router.push(APP_HOMES.get(appName)); + }; + + return ( + + + + + + + {t("TWO_FACTOR")} + + + + + + {t("GO_BACK")} + + + + + + ); +} diff --git a/web/packages/accounts/pages/two-factor/verify.tsx b/web/packages/accounts/pages/two-factor/verify.tsx new file mode 100644 index 000000000..c10759f19 --- /dev/null +++ b/web/packages/accounts/pages/two-factor/verify.tsx @@ -0,0 +1,87 @@ +import { verifyTwoFactor } from "@ente/accounts/api/user"; +import VerifyTwoFactor, { + VerifyTwoFactorCallback, +} from "@ente/accounts/components/two-factor/VerifyForm"; +import { PAGES } from "@ente/accounts/constants/pages"; +import { logoutUser } from "@ente/accounts/services/user"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { User } from "@ente/shared/user/types"; +import { t } from "i18next"; +import { useEffect, useState } from "react"; + +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormTitle from "@ente/shared/components/Form/FormPaper/Title"; +import LinkButton from "@ente/shared/components/LinkButton"; +import { ApiError } from "@ente/shared/error"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { HttpStatusCode } from "axios"; + +export default function TwoFactorVerify({ router }: PageProps) { + const [sessionID, setSessionID] = useState(""); + + useEffect(() => { + const main = async () => { + const user: User = getData(LS_KEYS.USER); + if (!user?.email || !user.twoFactorSessionID) { + router.push(PAGES.ROOT); + } else if ( + !user.isTwoFactorEnabled && + (user.encryptedToken || user.token) + ) { + router.push(PAGES.CREDENTIALS); + } else { + setSessionID(user.twoFactorSessionID); + } + }; + main(); + }, []); + + const onSubmit: VerifyTwoFactorCallback = async (otp) => { + try { + const resp = await verifyTwoFactor(otp, sessionID); + const { keyAttributes, encryptedToken, token, id } = resp; + setData(LS_KEYS.USER, { + ...getData(LS_KEYS.USER), + token, + encryptedToken, + id, + }); + setData(LS_KEYS.KEY_ATTRIBUTES, keyAttributes); + const redirectURL = InMemoryStore.get(MS_KEYS.REDIRECT_URL); + InMemoryStore.delete(MS_KEYS.REDIRECT_URL); + router.push(redirectURL ?? PAGES.CREDENTIALS); + } catch (e) { + if ( + e instanceof ApiError && + e.httpStatusCode === HttpStatusCode.NotFound + ) { + logoutUser(); + } else { + throw e; + } + } + }; + + return ( + + + {t("TWO_FACTOR")} + + + + router.push(PAGES.TWO_FACTOR_RECOVER)} + > + {t("LOST_DEVICE")} + + + {t("CHANGE_EMAIL")} + + + + + ); +} diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx new file mode 100644 index 000000000..6f657d95a --- /dev/null +++ b/web/packages/accounts/pages/verify.tsx @@ -0,0 +1,198 @@ +import { t } from "i18next"; +import { useEffect, useState } from "react"; +import { Trans } from "react-i18next"; + +import { UserVerificationResponse } from "@ente/accounts/types/user"; +import { PageProps } from "@ente/shared/apps/types"; +import { VerticallyCentered } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import FormPaper from "@ente/shared/components/Form/FormPaper"; +import FormPaperFooter from "@ente/shared/components/Form/FormPaper/Footer"; +import FormPaperTitle from "@ente/shared/components/Form/FormPaper/Title"; +import LinkButton from "@ente/shared/components/LinkButton"; +import SingleInputForm, { + SingleInputFormProps, +} from "@ente/shared/components/SingleInputForm"; +import { ApiError } from "@ente/shared/error"; +import { getAccountsURL } from "@ente/shared/network/api"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { clearFiles } from "@ente/shared/storage/localForage/helpers"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { + getLocalReferralSource, + setIsFirstLogin, +} from "@ente/shared/storage/localStorage/helpers"; +import { clearKeys } from "@ente/shared/storage/sessionStorage"; +import { KeyAttributes, User } from "@ente/shared/user/types"; +import { Box, Typography } from "@mui/material"; +import { HttpStatusCode } from "axios"; +import { putAttributes, sendOtt, verifyOtt } from "../api/user"; +import { PAGES } from "../constants/pages"; +import { configureSRP } from "../services/srp"; +import { logoutUser } from "../services/user"; +import { SRPSetupAttributes } from "../types/srp"; + +export default function VerifyPage({ appContext, router, appName }: PageProps) { + const [email, setEmail] = useState(""); + const [resend, setResend] = useState(0); + + useEffect(() => { + const main = async () => { + const user: User = getData(LS_KEYS.USER); + const keyAttributes: KeyAttributes = getData( + LS_KEYS.KEY_ATTRIBUTES, + ); + if (!user?.email) { + router.push(PAGES.ROOT); + } else if ( + keyAttributes?.encryptedKey && + (user.token || user.encryptedToken) + ) { + router.push(PAGES.CREDENTIALS); + } else { + setEmail(user.email); + } + }; + main(); + appContext.showNavBar(true); + }, []); + + const onSubmit: SingleInputFormProps["callback"] = async ( + ott, + setFieldError, + ) => { + try { + const referralSource = getLocalReferralSource(); + const resp = await verifyOtt(email, ott, referralSource); + const { + keyAttributes, + encryptedToken, + token, + id, + twoFactorSessionID, + passkeySessionID, + } = resp.data as UserVerificationResponse; + if (passkeySessionID) { + const user = getData(LS_KEYS.USER); + setData(LS_KEYS.USER, { + ...user, + passkeySessionID, + isTwoFactorEnabled: true, + isTwoFactorPasskeysEnabled: true, + }); + setIsFirstLogin(true); + window.location.href = `${getAccountsURL()}/passkeys/flow?passkeySessionID=${passkeySessionID}&redirect=${ + window.location.origin + }/passkeys/finish`; + router.push(PAGES.CREDENTIALS); + } else if (twoFactorSessionID) { + setData(LS_KEYS.USER, { + email, + twoFactorSessionID, + isTwoFactorEnabled: true, + }); + setIsFirstLogin(true); + router.push(PAGES.TWO_FACTOR_VERIFY); + } else { + setData(LS_KEYS.USER, { + email, + token, + encryptedToken, + id, + isTwoFactorEnabled: false, + }); + if (keyAttributes) { + setData(LS_KEYS.KEY_ATTRIBUTES, keyAttributes); + setData(LS_KEYS.ORIGINAL_KEY_ATTRIBUTES, keyAttributes); + } else { + if (getData(LS_KEYS.ORIGINAL_KEY_ATTRIBUTES)) { + await putAttributes( + token, + getData(LS_KEYS.ORIGINAL_KEY_ATTRIBUTES), + ); + } + if (getData(LS_KEYS.SRP_SETUP_ATTRIBUTES)) { + const srpSetupAttributes: SRPSetupAttributes = getData( + LS_KEYS.SRP_SETUP_ATTRIBUTES, + ); + await configureSRP(srpSetupAttributes); + } + } + clearFiles(); + setIsFirstLogin(true); + const redirectURL = InMemoryStore.get(MS_KEYS.REDIRECT_URL); + InMemoryStore.delete(MS_KEYS.REDIRECT_URL); + if (keyAttributes?.encryptedKey) { + clearKeys(); + router.push(redirectURL ?? PAGES.CREDENTIALS); + } else { + router.push(redirectURL ?? PAGES.GENERATE); + } + } + } catch (e) { + if (e instanceof ApiError) { + if (e?.httpStatusCode === HttpStatusCode.Unauthorized) { + setFieldError(t("INVALID_CODE")); + } else if (e?.httpStatusCode === HttpStatusCode.Gone) { + setFieldError(t("EXPIRED_CODE")); + } + } else { + setFieldError(`${t("UNKNOWN_ERROR")} ${JSON.stringify(e)}`); + } + } + }; + + const resendEmail = async () => { + setResend(1); + await sendOtt(appName, email); + setResend(2); + setTimeout(() => setResend(0), 3000); + }; + + if (!email) { + return ( + + + + ); + } + + return ( + + + + , + }} + values={{ email }} + /> + + + {t("CHECK_INBOX")} + + + + + {resend === 0 && ( + + {t("RESEND_MAIL")} + + )} + {resend === 1 && {t("SENDING")}} + {resend === 2 && {t("SENT")}} + + {t("CHANGE_EMAIL")} + + + + + ); +} diff --git a/web/packages/accounts/services/srp.ts b/web/packages/accounts/services/srp.ts new file mode 100644 index 000000000..720080d63 --- /dev/null +++ b/web/packages/accounts/services/srp.ts @@ -0,0 +1,178 @@ +import { SRP, SrpClient } from "fast-srp-hap"; + +import { SRPAttributes, SRPSetupAttributes } from "../types/srp"; + +import { UserVerificationResponse } from "@ente/accounts/types/user"; +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { generateLoginSubKey } from "@ente/shared/crypto/helpers"; +import { addLocalLog } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import InMemoryStore, { MS_KEYS } from "@ente/shared/storage/InMemoryStore"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { v4 as uuidv4 } from "uuid"; +import { + completeSRPSetup, + createSRPSession, + startSRPSetup, + verifySRPSession, +} from "../api/srp"; +import { convertBase64ToBuffer, convertBufferToBase64 } from "../utils"; + +const SRP_PARAMS = SRP.params["4096"]; + +export const configureSRP = async ({ + srpSalt, + srpUserID, + srpVerifier, + loginSubKey, +}: SRPSetupAttributes) => { + try { + const srpConfigureInProgress = InMemoryStore.get( + MS_KEYS.SRP_CONFIGURE_IN_PROGRESS, + ); + if (srpConfigureInProgress) { + throw Error("SRP configure already in progress"); + } + InMemoryStore.set(MS_KEYS.SRP_CONFIGURE_IN_PROGRESS, true); + const srpClient = await generateSRPClient( + srpSalt, + srpUserID, + loginSubKey, + ); + + const srpA = convertBufferToBase64(srpClient.computeA()); + + addLocalLog(() => `srp a: ${srpA}`); + const token = getToken(); + const { setupID, srpB } = await startSRPSetup(token, { + srpA, + srpUserID, + srpSalt, + srpVerifier, + }); + + srpClient.setB(convertBase64ToBuffer(srpB)); + + const srpM1 = convertBufferToBase64(srpClient.computeM1()); + + const { srpM2 } = await completeSRPSetup(token, { + srpM1, + setupID, + }); + + srpClient.checkM2(convertBase64ToBuffer(srpM2)); + } catch (e) { + logError(e, "srp configure failed"); + throw e; + } finally { + InMemoryStore.set(MS_KEYS.SRP_CONFIGURE_IN_PROGRESS, false); + } +}; + +export const generateSRPSetupAttributes = async ( + loginSubKey: string, +): Promise => { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + const srpSalt = await cryptoWorker.generateSaltToDeriveKey(); + + const srpUserID = uuidv4(); + + const srpVerifierBuffer = SRP.computeVerifier( + SRP_PARAMS, + convertBase64ToBuffer(srpSalt), + Buffer.from(srpUserID), + convertBase64ToBuffer(loginSubKey), + ); + + const srpVerifier = convertBufferToBase64(srpVerifierBuffer); + + addLocalLog( + () => `SRP setup attributes generated', + ${JSON.stringify({ + srpSalt, + srpUserID, + srpVerifier, + loginSubKey, + })}`, + ); + + return { + srpUserID, + srpSalt, + srpVerifier, + loginSubKey, + }; +}; + +export const loginViaSRP = async ( + srpAttributes: SRPAttributes, + kek: string, +): Promise => { + try { + const loginSubKey = await generateLoginSubKey(kek); + const srpClient = await generateSRPClient( + srpAttributes.srpSalt, + srpAttributes.srpUserID, + loginSubKey, + ); + const srpA = srpClient.computeA(); + const { srpB, sessionID } = await createSRPSession( + srpAttributes.srpUserID, + convertBufferToBase64(srpA), + ); + srpClient.setB(convertBase64ToBuffer(srpB)); + + const m1 = srpClient.computeM1(); + addLocalLog(() => `srp m1: ${convertBufferToBase64(m1)}`); + const { srpM2, ...rest } = await verifySRPSession( + sessionID, + srpAttributes.srpUserID, + convertBufferToBase64(m1), + ); + addLocalLog(() => `srp verify session successful,srpM2: ${srpM2}`); + + srpClient.checkM2(convertBase64ToBuffer(srpM2)); + + addLocalLog(() => `srp server verify successful`); + return rest; + } catch (e) { + logError(e, "srp verify failed"); + throw e; + } +}; + +// ==================== +// HELPERS +// ==================== + +export const generateSRPClient = async ( + srpSalt: string, + srpUserID: string, + loginSubKey: string, +) => { + return new Promise((resolve, reject) => { + SRP.genKey(function (err, secret1) { + try { + if (err) { + reject(err); + } + if (!secret1) { + throw Error("secret1 gen failed"); + } + const srpClient = new SrpClient( + SRP_PARAMS, + convertBase64ToBuffer(srpSalt), + Buffer.from(srpUserID), + convertBase64ToBuffer(loginSubKey), + secret1, + false, + ); + + resolve(srpClient); + } catch (e) { + reject(e); + } + }); + }); +}; diff --git a/web/packages/accounts/services/user.ts b/web/packages/accounts/services/user.ts new file mode 100644 index 000000000..4fb56db63 --- /dev/null +++ b/web/packages/accounts/services/user.ts @@ -0,0 +1,63 @@ +import ElectronAPIs from "@ente/shared/electron"; +import { Events, eventBus } from "@ente/shared/events"; +import { logError } from "@ente/shared/sentry"; +import InMemoryStore from "@ente/shared/storage/InMemoryStore"; +import { deleteAllCache } from "@ente/shared/storage/cacheStorage/helpers"; +import { clearFiles } from "@ente/shared/storage/localForage/helpers"; +import { clearData } from "@ente/shared/storage/localStorage"; +import { clearKeys } from "@ente/shared/storage/sessionStorage"; +import isElectron from "is-electron"; +import router from "next/router"; +import { _logout } from "../api/user"; +import { PAGES } from "../constants/pages"; + +export const logoutUser = async () => { + try { + try { + await _logout(); + } catch (e) { + // ignore + } + try { + InMemoryStore.clear(); + } catch (e) { + // ignore + logError(e, "clear InMemoryStore failed"); + } + try { + clearKeys(); + } catch (e) { + logError(e, "clearKeys failed"); + } + try { + clearData(); + } catch (e) { + logError(e, "clearData failed"); + } + try { + await deleteAllCache(); + } catch (e) { + logError(e, "deleteAllCache failed"); + } + try { + await clearFiles(); + } catch (e) { + logError(e, "clearFiles failed"); + } + if (isElectron()) { + try { + ElectronAPIs.clearElectronStore(); + } catch (e) { + logError(e, "clearElectronStore failed"); + } + } + try { + eventBus.emit(Events.LOGOUT); + } catch (e) { + logError(e, "Error in logout handlers"); + } + router.push(PAGES.ROOT); + } catch (e) { + logError(e, "logoutUser failed"); + } +}; diff --git a/web/packages/accounts/tsconfig.json b/web/packages/accounts/tsconfig.json new file mode 100644 index 000000000..bf522b090 --- /dev/null +++ b/web/packages/accounts/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "downlevelIteration": true, + "jsx": "preserve", + "jsxImportSource": "@emotion/react", + "lib": ["dom", "dom.iterable", "esnext", "webworker"], + "noImplicitAny": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "strictNullChecks": false, + "target": "es5", + "useUnknownInCatchVariables": false + }, + "include": [ + "**/*.ts", + "**/*.tsx", + "**/*.js", + "../shared/themes/mui-theme.d.ts" + ] +} diff --git a/web/packages/accounts/types/srp.ts b/web/packages/accounts/types/srp.ts new file mode 100644 index 000000000..48bd193d9 --- /dev/null +++ b/web/packages/accounts/types/srp.ts @@ -0,0 +1,73 @@ +import { + UpdatedKey, + UserVerificationResponse, +} from "@ente/accounts/types/user"; + +export interface SRPAttributes { + srpUserID: string; + srpSalt: string; + memLimit: number; + opsLimit: number; + kekSalt: string; + isEmailMFAEnabled: boolean; +} + +export interface GetSRPAttributesResponse { + attributes: SRPAttributes; +} + +export interface SRPSetupAttributes { + srpSalt: string; + srpVerifier: string; + srpUserID: string; + loginSubKey: string; +} + +export interface SetupSRPRequest { + srpUserID: string; + srpSalt: string; + srpVerifier: string; + srpA: string; +} + +export interface SetupSRPResponse { + setupID: string; + srpB: string; +} + +export interface CompleteSRPSetupRequest { + setupID: string; + srpM1: string; +} + +export interface CompleteSRPSetupResponse { + setupID: string; + srpM2: string; +} + +export interface CreateSRPSessionResponse { + sessionID: string; + srpB: string; +} + +export interface SRPVerificationResponse extends UserVerificationResponse { + srpM2: string; +} + +export interface SRPSetupAttributes { + srpSalt: string; + srpVerifier: string; + srpUserID: string; + loginSubKey: string; +} + +export interface UpdateSRPAndKeysRequest { + srpM1: string; + setupID: string; + updatedKeyAttr: UpdatedKey; +} + +export interface UpdateSRPAndKeysResponse { + srpM2: string; + setupID: string; +} diff --git a/web/packages/accounts/types/user.ts b/web/packages/accounts/types/user.ts new file mode 100644 index 000000000..f758c3971 --- /dev/null +++ b/web/packages/accounts/types/user.ts @@ -0,0 +1,43 @@ +import { KeyAttributes } from "@ente/shared/user/types"; + +export interface UserVerificationResponse { + id: number; + keyAttributes?: KeyAttributes; + encryptedToken?: string; + token?: string; + twoFactorSessionID: string; + passkeySessionID: string; + srpM2?: string; +} + +export interface TwoFactorVerificationResponse { + id: number; + keyAttributes: KeyAttributes; + encryptedToken?: string; + token?: string; +} + +export interface TwoFactorSecret { + secretCode: string; + qrCode: string; +} + +export interface TwoFactorRecoveryResponse { + encryptedSecret: string; + secretDecryptionNonce: string; +} + +export interface UpdatedKey { + kekSalt: string; + encryptedKey: string; + keyDecryptionNonce: string; + memLimit: number; + opsLimit: number; +} + +export interface RecoveryKey { + masterKeyEncryptedWithRecoveryKey: string; + masterKeyDecryptionNonce: string; + recoveryKeyEncryptedWithMasterKey: string; + recoveryKeyDecryptionNonce: string; +} diff --git a/web/packages/accounts/utils/index.ts b/web/packages/accounts/utils/index.ts new file mode 100644 index 000000000..60de6611b --- /dev/null +++ b/web/packages/accounts/utils/index.ts @@ -0,0 +1,29 @@ +import { PasswordStrength } from "@ente/accounts/constants"; +import zxcvbn from "zxcvbn"; + +export const convertBufferToBase64 = (buffer: Buffer) => { + return buffer.toString("base64"); +}; + +export const convertBase64ToBuffer = (base64: string) => { + return Buffer.from(base64, "base64"); +}; + +export function estimatePasswordStrength(password: string): PasswordStrength { + if (!password) { + return PasswordStrength.WEAK; + } + + const zxcvbnResult = zxcvbn(password); + if (zxcvbnResult.score < 2) { + return PasswordStrength.WEAK; + } else if (zxcvbnResult.score < 3) { + return PasswordStrength.MODERATE; + } else { + return PasswordStrength.STRONG; + } +} + +export const isWeakPassword = (password: string) => { + return estimatePasswordStrength(password) === PasswordStrength.WEAK; +}; diff --git a/web/packages/accounts/utils/srp.ts b/web/packages/accounts/utils/srp.ts new file mode 100644 index 000000000..7aaceaa2c --- /dev/null +++ b/web/packages/accounts/utils/srp.ts @@ -0,0 +1,63 @@ +import ComlinkCryptoWorker from "@ente/shared/crypto"; +import { generateLoginSubKey } from "@ente/shared/crypto/helpers"; +import { KeyAttributes } from "@ente/shared/user/types"; +import { generateSRPSetupAttributes } from "../services/srp"; +import { SRPSetupAttributes } from "../types/srp"; + +export async function generateKeyAndSRPAttributes(passphrase: string): Promise<{ + keyAttributes: KeyAttributes; + masterKey: string; + srpSetupAttributes: SRPSetupAttributes; +}> { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const masterKey = await cryptoWorker.generateEncryptionKey(); + const recoveryKey = await cryptoWorker.generateEncryptionKey(); + const kekSalt = await cryptoWorker.generateSaltToDeriveKey(); + const kek = await cryptoWorker.deriveSensitiveKey(passphrase, kekSalt); + + const masterKeyEncryptedWithKek = await cryptoWorker.encryptToB64( + masterKey, + kek.key, + ); + const masterKeyEncryptedWithRecoveryKey = await cryptoWorker.encryptToB64( + masterKey, + recoveryKey, + ); + const recoveryKeyEncryptedWithMasterKey = await cryptoWorker.encryptToB64( + recoveryKey, + masterKey, + ); + + const keyPair = await cryptoWorker.generateKeyPair(); + const encryptedKeyPairAttributes = await cryptoWorker.encryptToB64( + keyPair.privateKey, + masterKey, + ); + + const loginSubKey = await generateLoginSubKey(kek.key); + + const srpSetupAttributes = await generateSRPSetupAttributes(loginSubKey); + + const keyAttributes: KeyAttributes = { + kekSalt, + encryptedKey: masterKeyEncryptedWithKek.encryptedData, + keyDecryptionNonce: masterKeyEncryptedWithKek.nonce, + publicKey: keyPair.publicKey, + encryptedSecretKey: encryptedKeyPairAttributes.encryptedData, + secretKeyDecryptionNonce: encryptedKeyPairAttributes.nonce, + opsLimit: kek.opsLimit, + memLimit: kek.memLimit, + masterKeyEncryptedWithRecoveryKey: + masterKeyEncryptedWithRecoveryKey.encryptedData, + masterKeyDecryptionNonce: masterKeyEncryptedWithRecoveryKey.nonce, + recoveryKeyEncryptedWithMasterKey: + recoveryKeyEncryptedWithMasterKey.encryptedData, + recoveryKeyDecryptionNonce: recoveryKeyEncryptedWithMasterKey.nonce, + }; + + return { + keyAttributes, + masterKey, + srpSetupAttributes, + }; +} diff --git a/web/packages/build-config/.eslintrc.js b/web/packages/build-config/.eslintrc.js new file mode 100644 index 000000000..ef82ed718 --- /dev/null +++ b/web/packages/build-config/.eslintrc.js @@ -0,0 +1,6 @@ +/* eslint-env node */ +module.exports = { + extends: ["eslint:recommended"], + ignorePatterns: [".eslintrc.js"], + root: true, +}; diff --git a/web/packages/build-config/README.md b/web/packages/build-config/README.md new file mode 100644 index 000000000..8e62b1b3d --- /dev/null +++ b/web/packages/build-config/README.md @@ -0,0 +1,22 @@ +## @/build-config + +Build time configuration files. This can be thought of as a `devDependency` that +exports various config files that our packages use at build time. + +### Packaging + +This is _not_ a TypeScript package, nor is it linted. It is not meant to be +transpiled, it just exports static files that can be included verbatim. + +### Debugging + +Too see what tsc is seeing (say when it is trying to type-check `@/utils`), use +`yarn workspace @/utils tsc --showConfig`. + +Similarly, to verify what ESLint is trying to do, use `yarn workspace @/utils +eslint --debug .` + +If the issue is in VSCode, open the output window of the corresponding plugin, +it might be telling us what's going wrong there. In particular, when changing +the settings here, you might need to "Developer: Reload Window" in VSCode to get +it to pick up the changes. diff --git a/web/packages/build-config/eslintrc-typescript-react.js b/web/packages/build-config/eslintrc-typescript-react.js new file mode 100644 index 000000000..faec25874 --- /dev/null +++ b/web/packages/build-config/eslintrc-typescript-react.js @@ -0,0 +1,24 @@ +/* eslint-env node */ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:react-hooks/recommended", + "plugin:@typescript-eslint/strict-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", + ], + plugins: ["@typescript-eslint", "react-namespace-import"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, + root: true, + ignorePatterns: [".eslintrc.js"], + rules: { + // The recommended way to import React is: + // + // import * as React from "react"; + // + // This rule enforces that. + "react-namespace-import/no-namespace-import": "error", + }, +}; diff --git a/web/packages/build-config/eslintrc-typescript.js b/web/packages/build-config/eslintrc-typescript.js new file mode 100644 index 000000000..6b3a3c457 --- /dev/null +++ b/web/packages/build-config/eslintrc-typescript.js @@ -0,0 +1,15 @@ +/* eslint-env node */ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/strict-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", + ], + plugins: ["@typescript-eslint"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, + root: true, + ignorePatterns: [".eslintrc.js"], +}; diff --git a/web/packages/build-config/package.json b/web/packages/build-config/package.json new file mode 100644 index 000000000..d7271be98 --- /dev/null +++ b/web/packages/build-config/package.json @@ -0,0 +1,13 @@ +{ + "name": "@/build-config", + "version": "0.0.0", + "private": true, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^7", + "@typescript-eslint/parser": "^7", + "eslint-plugin-react-hooks": "^4.6", + "eslint-plugin-react-namespace-import": "^1.0", + "prettier-plugin-organize-imports": "^3.2", + "prettier-plugin-packagejson": "^2.4" + } +} diff --git a/web/packages/build-config/tsconfig.transpile.json b/web/packages/build-config/tsconfig.transpile.json new file mode 100644 index 000000000..c9725e8e4 --- /dev/null +++ b/web/packages/build-config/tsconfig.transpile.json @@ -0,0 +1,75 @@ +{ + /* TSConfig for a TypeScript project that'll get transpiled by Next.js */ + + /* TSConfig docs: https://aka.ms/tsconfig.json */ + "compilerOptions": { + /* We use TypeScript (tsc) as a type checker, not as a build tool */ + "noEmit": true, + + /* + * Tell TypeScript which all things it can assume that our target + * runtime will have. + * + * In our case, we tell it that the code will run in a modern browser, + * and will have access to a latest JS (esnext) and the DOM (dom). Our + * transpiler (Next.js) will ensure that these things hold. + * + * Unlike the other individual library components (say how "esnext" + * implies "esnext.*"), "dom.iterable" (the ability to iterate over DOM + * elements) is not a subset of "dom" and needs to be listed out + * explicitly. + * + * Note that we don't need to specify the `target` compilerOption, since + * tsc isn't actually generating (emitting) the JavaScript. + */ + "lib": ["esnext", "dom", "dom.iterable"], + + /* + * The module system to assume the generated JavaScript will use. + * + * Since we're using a bundler, we should set this to "esnext" + * https://www.typescriptlang.org/docs/handbook/modules/guides/choosing-compiler-options.html + */ + "module": "esnext", + + /* + * Tell TypeScript how to lookup the file for a given import + * + * From the TypeScript docs: + * + * > 'bundler' is for use with bundlers. Like node16 and nodenext, this + * mode supports package.json `imports` and `exports`, but unlinke the + * Node.js resolution modes, bundler never requires file extensions on + * relative paths in imports. + * + * > bundler does not support resolution of `require` calls. + */ + "moduleResolution": "bundler", + + /* Allow use of `.tsx` files, but don't tranform them */ + "jsx": "preserve", + + /* Ask TypeScript to warn us if we use TypeScript features that cannot + be used by single-file transpilers */ + "isolatedModules": true, + /* Enable various workarounds to play better with CJS libraries */ + "esModuleInterop": true, + + /* Speed things up by not type checking `node_modules` */ + "skipLibCheck": true, + /* Require the `type` modifier when importing types */ + "verbatimModuleSyntax": true, + /* Enable importing .json files */ + "resolveJsonModule": true, + + "strict": true, + /* Stricter than strict */ + "noImplicitReturns": true, + "noUnusedParameters": true, + "noUnusedLocals": true, + "noFallthroughCasesInSwitch": true, + /* e.g. makes array indexing returns undefined */ + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true + } +} diff --git a/web/packages/eslint-config/.eslintrc.js b/web/packages/eslint-config/.eslintrc.js new file mode 100644 index 000000000..fa1fde4ac --- /dev/null +++ b/web/packages/eslint-config/.eslintrc.js @@ -0,0 +1,9 @@ +module.exports = { + extends: ["@ente/eslint-config"], + parser: "@typescript-eslint/parser", + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.json", + }, + ignorePatterns: [".eslintrc.js"], +}; diff --git a/web/packages/eslint-config/README.md b/web/packages/eslint-config/README.md new file mode 100644 index 000000000..5f28c59c4 --- /dev/null +++ b/web/packages/eslint-config/README.md @@ -0,0 +1 @@ +Deprecated in favor of [@/build-config](../build-config/README.md). diff --git a/web/packages/eslint-config/index.js b/web/packages/eslint-config/index.js new file mode 100644 index 000000000..84af2062d --- /dev/null +++ b/web/packages/eslint-config/index.js @@ -0,0 +1,68 @@ +module.exports = { + extends: [ + "next/core-web-vitals", + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "prettier", + ], + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.json", + }, + plugins: ["@typescript-eslint"], + rules: { + indent: "off", + "class-methods-use-this": "off", + "react/prop-types": "off", + "react/display-name": "off", + "react/no-unescaped-entities": "off", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": ["error"], + "require-jsdoc": "off", + "valid-jsdoc": "off", + "max-len": "off", + "new-cap": "off", + "no-invalid-this": "off", + eqeqeq: "error", + "object-curly-spacing": ["error", "always"], + "space-before-function-paren": "off", + "operator-linebreak": [ + "error", + "after", + { overrides: { "?": "before", ":": "before" } }, + ], + "import/no-anonymous-default-export": [ + "error", + { + allowNew: true, + }, + ], + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-floating-promises": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/require-await": "off", + "@typescript-eslint/restrict-plus-operands": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-misused-promises": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unnecessary-type-assertion": "off", + "react-hooks/rules-of-hooks": "off", + "react-hooks/exhaustive-deps": "off", + "@next/next/no-img-element": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "jsx-a11y/alt-text": "off", + // Temporarily turn these off to allow existing code. + // TODO (MR): Remove me (and those above). + "@typescript-eslint/no-unsafe-enum-comparison": "off", + "@typescript-eslint/no-base-to-string": "off", + }, +}; diff --git a/web/packages/eslint-config/package.json b/web/packages/eslint-config/package.json new file mode 100644 index 000000000..a886b015e --- /dev/null +++ b/web/packages/eslint-config/package.json @@ -0,0 +1,17 @@ +{ + "name": "@ente/eslint-config", + "version": "1.0.0", + "main": "index.js", + "dependencies": {}, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^7", + "@typescript-eslint/parser": "^7", + "eslint": "^8", + "eslint-config-next": "latest", + "eslint-config-prettier": "latest", + "eslint-plugin-react": "latest" + }, + "standard": { + "parser": "babel-eslint" + } +} diff --git a/web/packages/eslint-config/tsconfig.json b/web/packages/eslint-config/tsconfig.json new file mode 100644 index 000000000..02ec15ac4 --- /dev/null +++ b/web/packages/eslint-config/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.base.json" +} diff --git a/web/packages/next/.eslintrc.js b/web/packages/next/.eslintrc.js new file mode 100644 index 000000000..4bc0524ff --- /dev/null +++ b/web/packages/next/.eslintrc.js @@ -0,0 +1,8 @@ +module.exports = { + extends: ["@/build-config/eslintrc-typescript-react"], + parserOptions: { + tsconfigRootDir: __dirname, + }, + // TODO (MR): Figure out a way to not have to ignored the next config .js + ignorePatterns: [".eslintrc.js", "next.config.base.js"], +}; diff --git a/web/packages/next/README.md b/web/packages/next/README.md new file mode 100644 index 000000000..1602f873f --- /dev/null +++ b/web/packages/next/README.md @@ -0,0 +1,8 @@ +## @/next + +Like [@/ui](../ui/README.md), but for things that require Next. + +### Packaging + +This (internal) package exports a React TypeScript library. We rely on the +importing project to transpile and bundle it. diff --git a/web/packages/next/hello.ts b/web/packages/next/hello.ts new file mode 100644 index 000000000..6e26a0ea8 --- /dev/null +++ b/web/packages/next/hello.ts @@ -0,0 +1,4 @@ +/** Howdy! */ +export const sayNamaste = () => { + console.log("Namaste, world"); +}; diff --git a/web/packages/next/next.config.base.js b/web/packages/next/next.config.base.js new file mode 100644 index 000000000..5439c9443 --- /dev/null +++ b/web/packages/next/next.config.base.js @@ -0,0 +1,86 @@ +// @ts-check + +/** + * @file Configure the Next.js build + * + * This file gets used by the Next.js build phase, and is not included in the + * browser build. It will not be parsed by Webpack, Babel or TypeScript, so + * don't use features that will not be available in our target node version. + * + * https://nextjs.org/docs/pages/api-reference/next-config-js + */ + +const { withSentryConfig } = require("@sentry/nextjs"); +const cp = require("child_process"); + +const gitSHA = cp + .execSync("git rev-parse --short HEAD", { + cwd: __dirname, + encoding: "utf8", + }) + .trimEnd(); + +/** + * The base Next.js config. Before exporting this, we wrap this in + * {@link withSentryConfig}. + * + * @type {import("next").NextConfig} + */ +const nextConfig = { + /* generate a static export when we run `next build` */ + output: "export", + compiler: { + emotion: true, + }, + transpilePackages: [ + "@/next", + "@/ui", + "@/utils", + "@mui/material", + "@mui/system", + "@mui/icons-material", + ], + + // Add environment variables to the JavaScript bundle. They will be + // available as `process.env.VAR_NAME` to our code. + env: { + GIT_SHA: gitSHA, + }, + + // https://dev.to/marcinwosinek/how-to-add-resolve-fallback-to-webpack-5-in-nextjs-10-i6j + webpack: (config, { isServer }) => { + if (!isServer) { + config.resolve.fallback.fs = false; + } + return config; + }, + + // Build time Sentry configuration + // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ + sentry: { + widenClientFileUpload: true, + disableServerWebpackPlugin: true, + }, +}; + +const sentryWebpackPluginOptions = { + // The same release value needs to be used both: + // 1. here to create a new release on Sentry and upload sourcemaps to it, + // 2. and when initializing Sentry in the browser (`Sentry.init`). + release: gitSHA, +}; + +// withSentryConfig extends the default Next.js usage of webpack to: +// +// 1. Initialize the SDK on client page load (See `sentry.client.config.ts`) +// +// 2. Upload sourcemaps, using the settings defined in `sentry.properties`. +// +// Sourcemaps are only uploaded to Sentry if SENTRY_AUTH_TOKEN is defined. Note +// that sourcemaps are always generated in the static export; the Sentry Webpack +// plugin behavies as if the `productionBrowserSourceMaps` Next.js configuration +// setting is `true`. +// +// Irritatingly, Sentry insists that we create empty sentry.server.config.ts and +// sentry.edge.config.ts files, even though we are not using those parts. +module.exports = withSentryConfig(nextConfig, sentryWebpackPluginOptions); diff --git a/web/packages/next/package.json b/web/packages/next/package.json new file mode 100644 index 000000000..03f2c17b5 --- /dev/null +++ b/web/packages/next/package.json @@ -0,0 +1,13 @@ +{ + "name": "@/next", + "version": "0.0.0", + "private": true, + "dependencies": { + "@/ui": "*", + "next": "^14.1" + }, + "devDependencies": { + "@/build-config": "*", + "@types/node": "^20" + } +} diff --git a/web/packages/next/tsconfig.json b/web/packages/next/tsconfig.json new file mode 100644 index 000000000..f5c124842 --- /dev/null +++ b/web/packages/next/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@/build-config/tsconfig.transpile.json", + /* Typecheck all files with the given extensions (here or in subfolders) */ + "include": ["**/*.ts", "**/*.tsx"] +} diff --git a/web/packages/shared/.eslintrc.js b/web/packages/shared/.eslintrc.js new file mode 100644 index 000000000..556f3b639 --- /dev/null +++ b/web/packages/shared/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + // When root is set to true, ESLint will stop looking for configuration files in parent directories. + // This is required here to ensure desktop picks the right eslint config, where this app is + // packaged as a submodule. + root: true, + extends: ["@ente/eslint-config"], + parser: "@typescript-eslint/parser", + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.json", + }, + ignorePatterns: [".eslintrc.js"], +}; diff --git a/web/packages/shared/README.md b/web/packages/shared/README.md new file mode 100644 index 000000000..eaa7babe3 --- /dev/null +++ b/web/packages/shared/README.md @@ -0,0 +1,3 @@ +Deprecated in favor of [@/utils](../utils/README.md) and +[@/ui](../ui/README.md). Don't add new code here - we'll slowly be migrating +existing code from here to those two packages. diff --git a/web/packages/shared/apps/constants.ts b/web/packages/shared/apps/constants.ts new file mode 100644 index 000000000..d35a5e8c4 --- /dev/null +++ b/web/packages/shared/apps/constants.ts @@ -0,0 +1,34 @@ +import { ACCOUNTS_PAGES, AUTH_PAGES, PHOTOS_PAGES } from "../constants/pages"; + +export enum APPS { + PHOTOS = "PHOTOS", + AUTH = "AUTH", + ALBUMS = "ALBUMS", + ACCOUNTS = "ACCOUNTS", +} + +export const CLIENT_PACKAGE_NAMES = new Map([ + [APPS.ALBUMS, "io.ente.albums.web"], + [APPS.PHOTOS, "io.ente.photos.web"], + [APPS.AUTH, "io.ente.auth.web"], + [APPS.ACCOUNTS, "io.ente.accounts.web"], +]); + +export const APP_TITLES = new Map([ + [APPS.ALBUMS, "Ente Albums"], + [APPS.PHOTOS, "Ente Photos"], + [APPS.AUTH, "Ente Auth"], + [APPS.ACCOUNTS, "Ente Accounts"], +]); + +export const APP_HOMES = new Map([ + [APPS.ALBUMS, "/"], + [APPS.PHOTOS, PHOTOS_PAGES.GALLERY], + [APPS.AUTH, AUTH_PAGES.AUTH], + [APPS.ACCOUNTS, ACCOUNTS_PAGES.PASSKEYS], +]); + +export const OTT_CLIENTS = new Map([ + [APPS.PHOTOS, "web"], + [APPS.AUTH, "totp"], +]); diff --git a/web/packages/shared/apps/types.ts b/web/packages/shared/apps/types.ts new file mode 100644 index 000000000..da5451311 --- /dev/null +++ b/web/packages/shared/apps/types.ts @@ -0,0 +1,19 @@ +import { EmotionCache } from "@emotion/react"; +import { SetDialogBoxAttributesV2 } from "@ente/shared/components/DialogBoxV2/types"; +import { AppProps } from "next/app"; +import { NextRouter } from "next/router"; +import { APPS } from "./constants"; + +export interface EnteAppProps extends AppProps { + emotionCache?: EmotionCache; +} + +export interface PageProps { + appContext: { + showNavBar: (show: boolean) => void; + isMobile: boolean; + setDialogBoxAttributesV2: SetDialogBoxAttributesV2; + }; + router: NextRouter; + appName: APPS; +} diff --git a/web/packages/shared/components/CaptionedText.tsx b/web/packages/shared/components/CaptionedText.tsx new file mode 100644 index 000000000..64d6c344d --- /dev/null +++ b/web/packages/shared/components/CaptionedText.tsx @@ -0,0 +1,44 @@ +import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; +import { ButtonProps, Typography } from "@mui/material"; + +interface Iprops { + mainText: string; + subText?: string; + subIcon?: React.ReactNode; + color?: ButtonProps["color"]; +} + +const getSubTextColor = (color: ButtonProps["color"]) => { + switch (color) { + case "critical": + return "critical.main"; + default: + return "text.faint"; + } +}; + +export const CaptionedText = (props: Iprops) => { + return ( + + {props.mainText} + + {"•"} + + {props.subText ? ( + + {props.subText} + + ) : ( + + {props.subIcon} + + )} + + ); +}; diff --git a/web/packages/shared/components/CodeBlock/CopyButton.tsx b/web/packages/shared/components/CodeBlock/CopyButton.tsx new file mode 100644 index 000000000..3130b6b57 --- /dev/null +++ b/web/packages/shared/components/CodeBlock/CopyButton.tsx @@ -0,0 +1,44 @@ +import ContentCopyIcon from "@mui/icons-material/ContentCopy"; +import DoneIcon from "@mui/icons-material/Done"; +import { + IconButton, + IconButtonProps, + SvgIconProps, + Tooltip, +} from "@mui/material"; +import { t } from "i18next"; +import { useState } from "react"; + +export default function CopyButton({ + code, + color, + size, +}: { + code: string; + color?: IconButtonProps["color"]; + size?: SvgIconProps["fontSize"]; +}) { + const [copied, setCopied] = useState(false); + + const copyToClipboardHelper = (text: string) => () => { + navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 1000); + }; + return ( + + + {copied ? ( + + ) : ( + + )} + + + ); +} diff --git a/web/packages/shared/components/CodeBlock/index.tsx b/web/packages/shared/components/CodeBlock/index.tsx new file mode 100644 index 000000000..bce79de15 --- /dev/null +++ b/web/packages/shared/components/CodeBlock/index.tsx @@ -0,0 +1,37 @@ +import { FreeFlowText } from "@ente/shared/components/Container"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; +import { BoxProps } from "@mui/material"; +import React from "react"; +import CopyButton from "./CopyButton"; +import { CodeWrapper, CopyButtonWrapper, Wrapper } from "./styledComponents"; + +type Iprops = React.PropsWithChildren<{ + code: string; + wordBreak?: "normal" | "break-all" | "keep-all" | "break-word"; +}>; + +export default function CodeBlock({ + code, + wordBreak, + ...props +}: BoxProps<"div", Iprops>) { + if (!code) { + return ( + + + + ); + } + return ( + + + + {code} + + + + + + + ); +} diff --git a/web/packages/shared/components/CodeBlock/styledComponents.tsx b/web/packages/shared/components/CodeBlock/styledComponents.tsx new file mode 100644 index 000000000..48923c21d --- /dev/null +++ b/web/packages/shared/components/CodeBlock/styledComponents.tsx @@ -0,0 +1,19 @@ +import { CenteredFlex } from "@ente/shared/components/Container"; +import { Box, styled } from "@mui/material"; +export const Wrapper = styled(CenteredFlex)` + position: relative; + background: ${({ theme }) => theme.colors.accent.A700}; + border-radius: ${({ theme }) => theme.shape.borderRadius}px; + min-height: 80px; +`; +export const CopyButtonWrapper = styled(Box)` + position: absolute; + top: 0px; + right: 0px; + margin-top: ${({ theme }) => theme.spacing(1)}; +`; + +export const CodeWrapper = styled("div")` + padding: 16px 36px 16px 16px; + border-radius: ${({ theme }) => theme.shape.borderRadius}px; +`; diff --git a/web/packages/shared/components/Collections/CollectionShare/publicShare/switch.tsx b/web/packages/shared/components/Collections/CollectionShare/publicShare/switch.tsx new file mode 100644 index 000000000..bb738a9e9 --- /dev/null +++ b/web/packages/shared/components/Collections/CollectionShare/publicShare/switch.tsx @@ -0,0 +1,61 @@ +import { Switch, SwitchProps, styled } from "@mui/material"; +const PublicShareSwitch = styled((props: SwitchProps) => ( + +))(({ theme }) => ({ + width: 40, + height: 24, + padding: 0, + "& .MuiSwitch-switchBase": { + padding: 0, + margin: 2, + transitionDuration: "300ms", + "&.Mui-checked": { + transform: "translateX(16px)", + color: "#fff", + "& + .MuiSwitch-track": { + backgroundColor: + theme.palette.mode === "dark" ? "#2ECA45" : "#65C466", + opacity: 1, + border: 0, + }, + "&.Mui-disabled + .MuiSwitch-track": { + opacity: 0.5, + }, + }, + "&.Mui-focusVisible .MuiSwitch-thumb": { + color: "#33cf4d", + border: "6px solid #fff", + }, + "&.Mui-disabled .MuiSwitch-thumb": { + color: + theme.palette.mode === "light" + ? theme.palette.grey[100] + : theme.palette.grey[600], + }, + "&.Mui-disabled + .MuiSwitch-track": { + opacity: theme.palette.mode === "light" ? 0.7 : 0.3, + }, + }, + "& .MuiSwitch-thumb": { + boxSizing: "border-box", + width: 20, + height: 20, + }, + "& .MuiSwitch-track": { + borderRadius: 22 / 2, + backgroundColor: + theme.palette.mode === "light" + ? "#E9E9EA" + : theme.colors.fill.muted, + opacity: 1, + transition: theme.transitions.create(["background-color"], { + duration: 500, + }), + }, +})); + +export default PublicShareSwitch; diff --git a/web/packages/shared/components/Container.tsx b/web/packages/shared/components/Container.tsx new file mode 100644 index 000000000..517e058b5 --- /dev/null +++ b/web/packages/shared/components/Container.tsx @@ -0,0 +1,75 @@ +import { Box, IconButton, styled } from "@mui/material"; + +export const VerticallyCentered = styled(Box)` + flex: 1; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + text-align: center; + overflow: auto; +`; + +export const Row = styled("div")` + min-height: 32px; + display: flex; + align-items: center; + margin-bottom: ${({ theme }) => theme.spacing(2)}; + flex: 1; +`; + +export const Value = styled("div")<{ width?: string }>` + display: flex; + justify-content: flex-start; + align-items: center; + width: ${(props) => props.width ?? "30%"}; +`; + +export const FlexWrapper = styled(Box)` + display: flex; + width: 100%; + align-items: center; +`; + +export const FreeFlowText = styled("div")` + word-break: break-word; + min-width: 30%; + text-align: left; +`; + +export const SpaceBetweenFlex = styled(FlexWrapper)` + justify-content: space-between; +`; + +export const CenteredFlex = styled(FlexWrapper)` + justify-content: center; +`; + +export const FluidContainer = styled(FlexWrapper)` + flex: 1; +`; + +export const Overlay = styled(Box)` + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; +`; + +export const IconButtonWithBG = styled(IconButton)(({ theme }) => ({ + backgroundColor: theme.colors.fill.faint, +})); + +export const HorizontalFlex = styled(Box)({ + display: "flex", +}); + +export const VerticalFlex = styled(HorizontalFlex)({ + flexDirection: "column", +}); + +export const VerticallyCenteredFlex = styled(HorizontalFlex)({ + alignItems: "center", + display: "flex", +}); diff --git a/web/packages/shared/components/DialogBox/DialogIcon.tsx b/web/packages/shared/components/DialogBox/DialogIcon.tsx new file mode 100644 index 000000000..006b7cfeb --- /dev/null +++ b/web/packages/shared/components/DialogBox/DialogIcon.tsx @@ -0,0 +1,19 @@ +import { Box } from "@mui/material"; +import React from "react"; + +export default function DialogIcon({ icon }: { icon: React.ReactNode }) { + return ( + + {icon} + + ); +} diff --git a/web/packages/shared/components/DialogBox/TitleWithCloseButton.tsx b/web/packages/shared/components/DialogBox/TitleWithCloseButton.tsx new file mode 100644 index 000000000..6a3bee18d --- /dev/null +++ b/web/packages/shared/components/DialogBox/TitleWithCloseButton.tsx @@ -0,0 +1,54 @@ +import { SpaceBetweenFlex } from "@ente/shared/components/Container"; +import CloseIcon from "@mui/icons-material/Close"; +import { + DialogProps, + DialogTitle, + IconButton, + Typography, +} from "@mui/material"; + +const DialogTitleWithCloseButton = (props) => { + const { children, onClose, ...other } = props; + + return ( + + + + {children} + + {onClose && ( + + + + )} + + + ); +}; + +export default DialogTitleWithCloseButton; + +export const dialogCloseHandler = + ({ + staticBackdrop, + nonClosable, + onClose, + }: { + staticBackdrop?: boolean; + nonClosable?: boolean; + onClose: () => void; + }): DialogProps["onClose"] => + (_, reason) => { + if (nonClosable) { + // no-op + } else if (staticBackdrop && reason === "backdropClick") { + // no-op + } else { + onClose(); + } + }; diff --git a/web/packages/shared/components/DialogBox/base.tsx b/web/packages/shared/components/DialogBox/base.tsx new file mode 100644 index 000000000..86495da5e --- /dev/null +++ b/web/packages/shared/components/DialogBox/base.tsx @@ -0,0 +1,40 @@ +import { Dialog, styled } from "@mui/material"; + +const DialogBoxBase = styled(Dialog)(({ theme }) => ({ + "& .MuiDialog-paper": { + padding: theme.spacing(1, 1.5), + maxWidth: "346px", + }, + + "& .DialogIcon": { + padding: theme.spacing(2), + paddingBottom: theme.spacing(1), + }, + + "& .MuiDialogTitle-root": { + padding: theme.spacing(2), + paddingBottom: theme.spacing(1), + }, + "& .MuiDialogContent-root": { + padding: theme.spacing(2), + }, + + ".DialogIcon + .MuiDialogTitle-root": { + paddingTop: 0, + }, + + ".MuiDialogTitle-root + .MuiDialogContent-root": { + paddingTop: 0, + }, + ".MuiDialogTitle-root + .MuiDialogActions-root": { + paddingTop: theme.spacing(3), + }, + "& .MuiDialogActions-root": { + flexWrap: "wrap-reverse", + }, + "& .MuiButton-root": { + margin: `${theme.spacing(0.5, 0)} !important`, + }, +})); + +export default DialogBoxBase; diff --git a/web/packages/shared/components/DialogBox/index.tsx b/web/packages/shared/components/DialogBox/index.tsx new file mode 100644 index 000000000..133c2233c --- /dev/null +++ b/web/packages/shared/components/DialogBox/index.tsx @@ -0,0 +1,121 @@ +import { + Breakpoint, + Button, + DialogActions, + DialogContent, + DialogProps, + Typography, +} from "@mui/material"; +import { t } from "i18next"; +import React from "react"; +import DialogIcon from "./DialogIcon"; +import DialogTitleWithCloseButton, { + dialogCloseHandler, +} from "./TitleWithCloseButton"; +import DialogBoxBase from "./base"; +import { DialogBoxAttributes } from "./types"; + +type IProps = React.PropsWithChildren< + Omit & { + onClose: () => void; + attributes: DialogBoxAttributes; + size?: Breakpoint; + titleCloseButton?: boolean; + } +>; + +export default function DialogBox({ + attributes, + children, + open, + size, + onClose, + titleCloseButton, + ...props +}: IProps) { + if (!attributes) { + return <>; + } + + const handleClose = dialogCloseHandler({ + staticBackdrop: attributes.staticBackdrop, + nonClosable: attributes.nonClosable, + onClose: onClose, + }); + + return ( + + {attributes.icon && } + {attributes.title && ( + + {attributes.title} + + )} + {(children || attributes?.content) && ( + + {children || ( + + {attributes.content} + + )} + + )} + {(attributes.close || attributes.proceed) && ( + + <> + {attributes.close && ( + + )} + {attributes.proceed && ( + + )} + {attributes.secondary && ( + + )} + + + )} + + ); +} diff --git a/web/packages/shared/components/DialogBox/types.ts b/web/packages/shared/components/DialogBox/types.ts new file mode 100644 index 000000000..6d076fd5a --- /dev/null +++ b/web/packages/shared/components/DialogBox/types.ts @@ -0,0 +1,30 @@ +import { ButtonProps } from "@mui/material"; + +export interface DialogBoxAttributes { + icon?: React.ReactNode; + title?: string; + staticBackdrop?: boolean; + nonClosable?: boolean; + content?: any; + close?: { + text?: string; + variant?: ButtonProps["color"]; + action?: () => void; + }; + proceed?: { + text: string; + action: () => void; + variant?: ButtonProps["color"]; + disabled?: boolean; + }; + secondary?: { + text: string; + action: () => void; + variant: ButtonProps["color"]; + disabled?: boolean; + }; +} + +export type SetDialogBoxAttributes = React.Dispatch< + React.SetStateAction +>; diff --git a/web/packages/shared/components/DialogBoxV2/index.tsx b/web/packages/shared/components/DialogBoxV2/index.tsx new file mode 100644 index 000000000..ced595c0e --- /dev/null +++ b/web/packages/shared/components/DialogBoxV2/index.tsx @@ -0,0 +1,141 @@ +import { dialogCloseHandler } from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import EnteButton from "@ente/shared/components/EnteButton"; +import { + Box, + Button, + Dialog, + DialogProps, + Stack, + Typography, +} from "@mui/material"; +import { t } from "i18next"; +import React, { useState } from "react"; +import { DialogBoxAttributesV2 } from "./types"; + +type IProps = React.PropsWithChildren< + Omit & { + onClose: () => void; + attributes: DialogBoxAttributesV2; + } +>; + +export default function DialogBoxV2({ + attributes, + children, + open, + onClose, + ...props +}: IProps) { + const [loading, setLoading] = useState(false); + if (!attributes) { + return <>; + } + + const handleClose = dialogCloseHandler({ + staticBackdrop: attributes.staticBackdrop, + nonClosable: attributes.nonClosable, + onClose: onClose, + }); + + const { PaperProps, ...rest } = props; + + return ( + + + + {attributes.icon && ( + svg": { + fontSize: "32px", + }, + }} + > + {attributes.icon} + + )} + {attributes.title && ( + + {attributes.title} + + )} + {children || + (attributes?.content && ( + + {attributes.content} + + ))} + + {(attributes.proceed || + attributes.close || + attributes.buttons?.length) && ( + + {attributes.proceed && ( + { + await attributes.proceed.action(setLoading); + + onClose(); + }} + disabled={attributes.proceed.disabled} + > + {attributes.proceed.text} + + )} + {attributes.close && ( + + )} + {attributes.buttons && + attributes.buttons.map((b) => ( + + ))} + + )} + + + ); +} diff --git a/web/packages/shared/components/DialogBoxV2/types.ts b/web/packages/shared/components/DialogBoxV2/types.ts new file mode 100644 index 000000000..939b7e58c --- /dev/null +++ b/web/packages/shared/components/DialogBoxV2/types.ts @@ -0,0 +1,37 @@ +import { ButtonProps } from "@mui/material"; + +export interface DialogBoxAttributesV2 { + icon?: React.ReactNode; + title?: string; + staticBackdrop?: boolean; + nonClosable?: boolean; + content?: any; + close?: { + text?: string; + variant?: ButtonProps["color"]; + action?: () => void; + }; + proceed?: { + text: string; + action: (setLoading?: (value: boolean) => void) => void | Promise; + variant?: ButtonProps["color"]; + disabled?: boolean; + }; + secondary?: { + text: string; + action: () => void; + variant?: ButtonProps["color"]; + disabled?: boolean; + }; + buttons?: { + text: string; + action: () => void; + variant: ButtonProps["color"]; + disabled?: boolean; + }[]; + buttonDirection?: "row" | "column"; +} + +export type SetDialogBoxAttributesV2 = React.Dispatch< + React.SetStateAction +>; diff --git a/web/packages/shared/components/Directory/changeOption.tsx b/web/packages/shared/components/Directory/changeOption.tsx new file mode 100644 index 000000000..f846e9ba9 --- /dev/null +++ b/web/packages/shared/components/Directory/changeOption.tsx @@ -0,0 +1,28 @@ +import OverflowMenu from "@ente/shared/components/OverflowMenu/menu"; +import { OverflowMenuOption } from "@ente/shared/components/OverflowMenu/option"; +import FolderIcon from "@mui/icons-material/Folder"; +import MoreHoriz from "@mui/icons-material/MoreHoriz"; +import { t } from "i18next"; + +export default function ChangeDirectoryOption({ + changeExportDirectory: changeDirectory, +}) { + return ( + } + > + } + > + {t("CHANGE_FOLDER")} + + + ); +} diff --git a/web/packages/shared/components/Directory/index.tsx b/web/packages/shared/components/Directory/index.tsx new file mode 100644 index 000000000..a87202771 --- /dev/null +++ b/web/packages/shared/components/Directory/index.tsx @@ -0,0 +1,34 @@ +import LinkButton from "@ente/shared/components/LinkButton"; +import ElectronAPIs from "@ente/shared/electron"; +import { logError } from "@ente/shared/sentry"; +import { Tooltip } from "@mui/material"; +import { styled } from "@mui/material/styles"; + +const DirectoryPathContainer = styled(LinkButton)( + ({ width }) => ` + width: ${width}px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + /* Beginning of string */ + direction: rtl; + text-align: left; +`, +); + +export const DirectoryPath = ({ width, path }) => { + const handleClick = async () => { + try { + await ElectronAPIs.openDirectory(path); + } catch (e) { + logError(e, "openDirectory failed"); + } + }; + return ( + + + {path} + + + ); +}; diff --git a/web/packages/shared/components/EnteButton.tsx b/web/packages/shared/components/EnteButton.tsx new file mode 100644 index 000000000..a77c9202b --- /dev/null +++ b/web/packages/shared/components/EnteButton.tsx @@ -0,0 +1,48 @@ +import Done from "@mui/icons-material/Done"; +import { + Button, + ButtonProps, + CircularProgress, + PaletteColor, +} from "@mui/material"; + +interface Iprops extends ButtonProps { + loading?: boolean; + success?: boolean; +} + +export default function EnteButton({ + children, + loading, + success, + disabled, + sx, + ...props +}: Iprops) { + return ( + + ); +} diff --git a/web/packages/shared/components/EnteDrawer.tsx b/web/packages/shared/components/EnteDrawer.tsx new file mode 100644 index 000000000..e6fc35bb1 --- /dev/null +++ b/web/packages/shared/components/EnteDrawer.tsx @@ -0,0 +1,10 @@ +import { Drawer, styled } from "@mui/material"; + +export const EnteDrawer = styled(Drawer)(({ theme }) => ({ + "& .MuiPaper-root": { + maxWidth: "375px", + width: "100%", + scrollbarWidth: "thin", + padding: theme.spacing(1), + }, +})); diff --git a/web/packages/shared/components/EnteLogo.tsx b/web/packages/shared/components/EnteLogo.tsx new file mode 100644 index 000000000..a22be3f5e --- /dev/null +++ b/web/packages/shared/components/EnteLogo.tsx @@ -0,0 +1,12 @@ +import { styled } from "@mui/material"; + +const LogoImage = styled("img")` + margin: 3px 0; + pointer-events: none; +`; + +export function EnteLogo(props) { + return ( + + ); +} diff --git a/web/packages/shared/components/EnteSpinner.tsx b/web/packages/shared/components/EnteSpinner.tsx new file mode 100644 index 000000000..8a5d0a289 --- /dev/null +++ b/web/packages/shared/components/EnteSpinner.tsx @@ -0,0 +1,7 @@ +import CircularProgress, { + CircularProgressProps, +} from "@mui/material/CircularProgress"; + +export default function EnteSpinner(props: CircularProgressProps) { + return ; +} diff --git a/web/packages/shared/components/Form/FormPaper/Footer.tsx b/web/packages/shared/components/Form/FormPaper/Footer.tsx new file mode 100644 index 000000000..99ca08ddb --- /dev/null +++ b/web/packages/shared/components/Form/FormPaper/Footer.tsx @@ -0,0 +1,23 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import { BoxProps, Divider } from "@mui/material"; +import { FC } from "react"; + +const FormPaperFooter: FC = ({ sx, style, ...props }) => { + return ( + <> + + + {props.children} + + + ); +}; + +export default FormPaperFooter; diff --git a/web/packages/shared/components/Form/FormPaper/Title.tsx b/web/packages/shared/components/Form/FormPaper/Title.tsx new file mode 100644 index 000000000..c9aaf0875 --- /dev/null +++ b/web/packages/shared/components/Form/FormPaper/Title.tsx @@ -0,0 +1,12 @@ +import { Typography, TypographyProps } from "@mui/material"; +import { FC } from "react"; + +const FormPaperTitle: FC = ({ sx, ...props }) => { + return ( + + {props.children} + + ); +}; + +export default FormPaperTitle; diff --git a/web/packages/shared/components/Form/FormPaper/index.tsx b/web/packages/shared/components/Form/FormPaper/index.tsx new file mode 100644 index 000000000..5f1eb2d78 --- /dev/null +++ b/web/packages/shared/components/Form/FormPaper/index.tsx @@ -0,0 +1,9 @@ +import { Paper, styled } from "@mui/material"; + +const FormPaper = styled(Paper)(({ theme }) => ({ + padding: theme.spacing(4, 2), + maxWidth: "360px", + width: "100%", + textAlign: "left", +})); +export default FormPaper; diff --git a/web/packages/shared/components/Form/ShowHidePassword.tsx b/web/packages/shared/components/Form/ShowHidePassword.tsx new file mode 100644 index 000000000..0f3a7d3b5 --- /dev/null +++ b/web/packages/shared/components/Form/ShowHidePassword.tsx @@ -0,0 +1,32 @@ +import VisibilityIcon from "@mui/icons-material/Visibility"; +import VisibilityOffIcon from "@mui/icons-material/VisibilityOff"; +import { IconButton, InputAdornment } from "@mui/material"; +import React from "react"; + +interface Iprops { + showPassword: boolean; + handleClickShowPassword: () => void; + handleMouseDownPassword: ( + event: React.MouseEvent, + ) => void; +} +const ShowHidePassword = ({ + showPassword, + handleClickShowPassword, + handleMouseDownPassword, +}: Iprops) => ( + + + {showPassword ? : } + + +); + +export default ShowHidePassword; diff --git a/web/packages/shared/components/Info/InfoItem.tsx b/web/packages/shared/components/Info/InfoItem.tsx new file mode 100644 index 000000000..3cc9f5d35 --- /dev/null +++ b/web/packages/shared/components/Info/InfoItem.tsx @@ -0,0 +1,61 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import Edit from "@mui/icons-material/Edit"; +import { Box, IconButton, Typography } from "@mui/material"; +import { SmallLoadingSpinner } from "../styledComponents/SmallLoadingSpinner"; + +interface Iprops { + icon: JSX.Element; + title?: string; + caption?: string | JSX.Element; + openEditor?: any; + loading?: boolean; + hideEditOption?: any; + customEndButton?: any; + children?: any; +} + +export default function InfoItem({ + icon, + title, + caption, + openEditor, + loading, + hideEditOption, + customEndButton, + children, +}: Iprops): JSX.Element { + return ( + + + + {icon} + + + {children ? ( + children + ) : ( + <> + + {title} + + + {caption} + + + )} + + + {customEndButton + ? customEndButton + : !hideEditOption && ( + + {!loading ? : } + + )} + + ); +} diff --git a/web/packages/shared/components/LinkButton.tsx b/web/packages/shared/components/LinkButton.tsx new file mode 100644 index 000000000..79578ddb7 --- /dev/null +++ b/web/packages/shared/components/LinkButton.tsx @@ -0,0 +1,37 @@ +import { ButtonProps, Link, LinkProps } from "@mui/material"; +import React, { FC } from "react"; + +export type LinkButtonProps = React.PropsWithChildren<{ + onClick: () => void; + variant?: string; + style?: React.CSSProperties; +}>; + +const LinkButton: FC> = ({ + children, + sx, + color, + ...props +}) => { + return ( + + {children} + + ); +}; + +export default LinkButton; diff --git a/web/packages/shared/components/Menu/EnteMenuItem.tsx b/web/packages/shared/components/Menu/EnteMenuItem.tsx new file mode 100644 index 000000000..a3b6cb7b8 --- /dev/null +++ b/web/packages/shared/components/Menu/EnteMenuItem.tsx @@ -0,0 +1,128 @@ +import { + SpaceBetweenFlex, + VerticallyCenteredFlex, +} from "@ente/shared/components/Container"; +import { + Box, + ButtonProps, + MenuItem, + Typography, + TypographyProps, +} from "@mui/material"; +import React from "react"; +import { CaptionedText } from "../CaptionedText"; +import PublicShareSwitch from "../Collections/CollectionShare/publicShare/switch"; +import ChangeDirectoryOption from "../Directory/changeOption"; + +interface Iprops { + onClick: () => void; + color?: ButtonProps["color"]; + variant?: + | "primary" + | "captioned" + | "toggle" + | "secondary" + | "mini" + | "path"; + fontWeight?: TypographyProps["fontWeight"]; + startIcon?: React.ReactNode; + endIcon?: React.ReactNode; + label?: string; + subText?: string; + subIcon?: React.ReactNode; + checked?: boolean; + labelComponent?: React.ReactNode; + disabled?: boolean; +} +export function EnteMenuItem({ + onClick, + color = "primary", + startIcon, + endIcon, + label, + subText, + subIcon, + checked, + variant = "primary", + fontWeight = "bold", + labelComponent, + disabled = false, +}: Iprops) { + const handleButtonClick = () => { + if (variant === "path" || variant === "toggle") { + return; + } + onClick(); + }; + + const handleIconClick = () => { + if (variant !== "path" && variant !== "toggle") { + return; + } + onClick(); + }; + + return ( + + variant !== "captioned" && theme.palette[color].main, + ...(variant !== "secondary" && + variant !== "mini" && { + backgroundColor: (theme) => theme.colors.fill.faint, + }), + "&:hover": { + backgroundColor: (theme) => theme.colors.fill.faintPressed, + }, + "& .MuiSvgIcon-root": { + fontSize: "20px", + }, + p: 0, + borderRadius: "4px", + }} + > + + + {startIcon && startIcon} + + {labelComponent ? ( + labelComponent + ) : variant === "captioned" ? ( + + ) : variant === "mini" ? ( + + {label} + + ) : ( + + {label} + + )} + + + + {endIcon && endIcon} + {variant === "toggle" && ( + + )} + {variant === "path" && ( + + )} + + + + ); +} diff --git a/web/packages/shared/components/Menu/MenuItemDivider.tsx b/web/packages/shared/components/Menu/MenuItemDivider.tsx new file mode 100644 index 000000000..da3b309a2 --- /dev/null +++ b/web/packages/shared/components/Menu/MenuItemDivider.tsx @@ -0,0 +1,16 @@ +import { Divider } from "@mui/material"; +interface Iprops { + hasIcon?: boolean; +} +export default function MenuItemDivider({ hasIcon = false }: Iprops) { + return ( + + ); +} diff --git a/web/packages/shared/components/Menu/MenuItemGroup.tsx b/web/packages/shared/components/Menu/MenuItemGroup.tsx new file mode 100644 index 000000000..0b80262b5 --- /dev/null +++ b/web/packages/shared/components/Menu/MenuItemGroup.tsx @@ -0,0 +1,20 @@ +import { styled } from "@mui/material"; + +export const MenuItemGroup = styled("div")( + ({ theme }) => ` + & > .MuiMenuItem-root{ + border-radius: 8px; + background-color: transparent; + } + & > .MuiMenuItem-root:not(:last-of-type) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + & > .MuiMenuItem-root:not(:first-of-type) { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + background-color: ${theme.colors.fill.faint}; + border-radius: 8px; +`, +); diff --git a/web/packages/shared/components/Menu/MenuSectionTitle.tsx b/web/packages/shared/components/Menu/MenuSectionTitle.tsx new file mode 100644 index 000000000..5c07b8d92 --- /dev/null +++ b/web/packages/shared/components/Menu/MenuSectionTitle.tsx @@ -0,0 +1,28 @@ +import { VerticallyCenteredFlex } from "@ente/shared/components/Container"; +import { Typography } from "@mui/material"; + +interface Iprops { + title: string; + icon?: JSX.Element; +} + +export default function MenuSectionTitle({ title, icon }: Iprops) { + return ( + svg": { + fontSize: "17px", + color: (theme) => theme.colors.stroke.muted, + }, + }} + > + {icon && icon} + + {title} + + + ); +} diff --git a/web/packages/shared/components/MessageContainer.tsx b/web/packages/shared/components/MessageContainer.tsx new file mode 100644 index 000000000..8bb413e79 --- /dev/null +++ b/web/packages/shared/components/MessageContainer.tsx @@ -0,0 +1,8 @@ +import { styled } from "@mui/material"; +export const MessageContainer = styled("div")` + background-color: #111; + padding: 0; + font-size: 14px; + text-align: center; + line-height: 32px; +`; diff --git a/web/packages/shared/components/Navbar/EnteLinkLogo.tsx b/web/packages/shared/components/Navbar/EnteLinkLogo.tsx new file mode 100644 index 000000000..726b8d57d --- /dev/null +++ b/web/packages/shared/components/Navbar/EnteLinkLogo.tsx @@ -0,0 +1,23 @@ +import { ENTE_WEBSITE_LINK } from "@ente/shared/constants/urls"; +import { Box } from "@mui/material"; +import Link from "next/link"; +import Ente from "../../components/icons/ente"; + +export function EnteLinkLogo() { + return ( + + ({ + ":hover": { + cursor: "pointer", + svg: { + fill: theme.colors.text.faint, + }, + }, + })} + > + + + + ); +} diff --git a/web/packages/shared/components/Navbar/SelectionBar.tsx b/web/packages/shared/components/Navbar/SelectionBar.tsx new file mode 100644 index 000000000..6473e1f60 --- /dev/null +++ b/web/packages/shared/components/Navbar/SelectionBar.tsx @@ -0,0 +1,6 @@ +import { styled } from "@mui/material"; +import NavbarBase from "./base"; +export const SelectionBar = styled(NavbarBase)` + position: fixed; + z-index: 12; +`; diff --git a/web/packages/shared/components/Navbar/SidebarToggler.tsx b/web/packages/shared/components/Navbar/SidebarToggler.tsx new file mode 100644 index 000000000..84355d549 --- /dev/null +++ b/web/packages/shared/components/Navbar/SidebarToggler.tsx @@ -0,0 +1,13 @@ +import MenuIcon from "@mui/icons-material/Menu"; +import IconButton from "@mui/material/IconButton"; + +interface Iprops { + openSidebar: () => void; +} +export default function SidebarToggler({ openSidebar }: Iprops) { + return ( + + + + ); +} diff --git a/web/packages/shared/components/Navbar/app.tsx b/web/packages/shared/components/Navbar/app.tsx new file mode 100644 index 000000000..2169560f7 --- /dev/null +++ b/web/packages/shared/components/Navbar/app.tsx @@ -0,0 +1,13 @@ +import { CenteredFlex } from "../../components/Container"; +import { EnteLogo } from "../EnteLogo"; +import NavbarBase from "./base"; + +export default function AppNavbar({ isMobile }) { + return ( + + + + + + ); +} diff --git a/web/packages/shared/components/Navbar/base.tsx b/web/packages/shared/components/Navbar/base.tsx new file mode 100644 index 000000000..101506cfd --- /dev/null +++ b/web/packages/shared/components/Navbar/base.tsx @@ -0,0 +1,18 @@ +import { styled } from "@mui/material"; +import { FlexWrapper } from "../../components/Container"; +const NavbarBase = styled(FlexWrapper)<{ isMobile: boolean }>` + min-height: 64px; + position: sticky; + top: 0; + left: 0; + z-index: 10; + border-bottom: 1px solid ${({ theme }) => theme.palette.divider}; + background-color: ${({ theme }) => theme.colors.background.base}; + margin-bottom: 16px; + padding: 0 24px; + @media (max-width: 720px) { + padding: 0 4px; + } +`; + +export default NavbarBase; diff --git a/web/packages/shared/components/OverflowMenu/context.tsx b/web/packages/shared/components/OverflowMenu/context.tsx new file mode 100644 index 000000000..5d09cd5a0 --- /dev/null +++ b/web/packages/shared/components/OverflowMenu/context.tsx @@ -0,0 +1,5 @@ +import { createContext } from "react"; + +export const OverflowMenuContext = createContext({ + close: () => null, +}); diff --git a/web/packages/shared/components/OverflowMenu/menu.tsx b/web/packages/shared/components/OverflowMenu/menu.tsx new file mode 100644 index 000000000..ea0880eb1 --- /dev/null +++ b/web/packages/shared/components/OverflowMenu/menu.tsx @@ -0,0 +1,70 @@ +import { IconButton, PaperProps, styled } from "@mui/material"; +import Menu from "@mui/material/Menu"; +import React, { useState } from "react"; +import { OverflowMenuContext } from "./context"; + +export interface Iprops { + triggerButtonIcon: React.ReactNode; + triggerButtonProps?: any; + children?: React.ReactNode; + ariaControls: string; + menuPaperProps?: Partial; +} + +export const StyledMenu = styled(Menu)` + & .MuiPaper-root { + margin: 16px auto; + box-shadow: + 0px 0px 6px rgba(0, 0, 0, 0.16), + 0px 3px 6px rgba(0, 0, 0, 0.12); + } + & .MuiList-root { + padding: 0; + border: none; + } +`; + +export default function OverflowMenu({ + children, + ariaControls, + triggerButtonIcon, + triggerButtonProps, + menuPaperProps, +}: Iprops) { + const [sortByEl, setSortByEl] = useState(null); + const handleClose = () => setSortByEl(null); + return ( + + setSortByEl(event.currentTarget)} + aria-controls={sortByEl ? ariaControls : undefined} + aria-haspopup="true" + aria-expanded={sortByEl ? "true" : undefined} + {...triggerButtonProps} + > + {triggerButtonIcon} + + + {children} + + + ); +} diff --git a/web/packages/shared/components/OverflowMenu/option.tsx b/web/packages/shared/components/OverflowMenu/option.tsx new file mode 100644 index 000000000..eafb59d13 --- /dev/null +++ b/web/packages/shared/components/OverflowMenu/option.tsx @@ -0,0 +1,67 @@ +import { FluidContainer } from "@ente/shared/components/Container"; +import { Box, ButtonProps, MenuItem, Typography } from "@mui/material"; +import React, { useContext } from "react"; +import { OverflowMenuContext } from "./context"; + +interface Iprops { + onClick: () => void; + color?: ButtonProps["color"]; + startIcon?: React.ReactNode; + endIcon?: React.ReactNode; + keepOpenAfterClick?: boolean; + children?: any; +} +export function OverflowMenuOption({ + onClick, + color = "primary", + startIcon, + endIcon, + keepOpenAfterClick, + children, +}: Iprops) { + const menuContext = useContext(OverflowMenuContext); + + const handleClick = () => { + onClick(); + if (!keepOpenAfterClick) { + menuContext.close(); + } + }; + return ( + theme.palette[color].main, + padding: 1.5, + "& .MuiSvgIcon-root": { + fontSize: "20px", + }, + }} + > + + {startIcon && ( + + {startIcon} + + )} + {children} + + {endIcon && ( + + {endIcon} + + )} + + ); +} diff --git a/web/packages/shared/components/RecoveryKey/index.tsx b/web/packages/shared/components/RecoveryKey/index.tsx new file mode 100644 index 000000000..be34a95f4 --- /dev/null +++ b/web/packages/shared/components/RecoveryKey/index.tsx @@ -0,0 +1,84 @@ +import { PageProps } from "@ente/shared/apps/types"; +import CodeBlock from "@ente/shared/components/CodeBlock"; +import DialogTitleWithCloseButton from "@ente/shared/components/DialogBox/TitleWithCloseButton"; +import { getRecoveryKey } from "@ente/shared/crypto/helpers"; +import { downloadAsFile } from "@ente/shared/utils"; +import { + Button, + Dialog, + DialogActions, + DialogContent, + Typography, +} from "@mui/material"; +import * as bip39 from "bip39"; +import { t } from "i18next"; +import { useEffect, useState } from "react"; +import { DashedBorderWrapper } from "./styledComponents"; + +// mobile client library only supports english. +bip39.setDefaultWordlist("english"); + +const RECOVERY_KEY_FILE_NAME = "ente-recovery-key.txt"; + +interface Props { + appContext: PageProps["appContext"]; + show: boolean; + onHide: () => void; + somethingWentWrong: any; +} + +function RecoveryKey({ somethingWentWrong, appContext, ...props }: Props) { + const [recoveryKey, setRecoveryKey] = useState(null); + + useEffect(() => { + if (!props.show) { + return; + } + const main = async () => { + try { + const recoveryKey = await getRecoveryKey(); + setRecoveryKey(bip39.entropyToMnemonic(recoveryKey)); + } catch (e) { + somethingWentWrong(); + props.onHide(); + } + }; + main(); + }, [props.show]); + + function onSaveClick() { + downloadAsFile(RECOVERY_KEY_FILE_NAME, recoveryKey); + props.onHide(); + } + + return ( + + + {t("RECOVERY_KEY")} + + + {t("RECOVERY_KEY_DESCRIPTION")} + + + + {t("KEY_NOT_STORED_DISCLAIMER")} + + + + + + + + + ); +} +export default RecoveryKey; diff --git a/web/packages/shared/components/RecoveryKey/styledComponents.tsx b/web/packages/shared/components/RecoveryKey/styledComponents.tsx new file mode 100644 index 000000000..944001ebe --- /dev/null +++ b/web/packages/shared/components/RecoveryKey/styledComponents.tsx @@ -0,0 +1,6 @@ +import { Box, styled } from "@mui/material"; + +export const DashedBorderWrapper = styled(Box)(({ theme }) => ({ + border: `1px dashed ${theme.palette.grey.A400}`, + borderRadius: theme.spacing(1), +})); diff --git a/web/packages/shared/components/SingleInputForm.tsx b/web/packages/shared/components/SingleInputForm.tsx new file mode 100644 index 000000000..3422eebdb --- /dev/null +++ b/web/packages/shared/components/SingleInputForm.tsx @@ -0,0 +1,181 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import ShowHidePassword from "@ente/shared/components/Form/ShowHidePassword"; +import { Button, FormHelperText } from "@mui/material"; +import TextField from "@mui/material/TextField"; +import { Formik, FormikHelpers, FormikState } from "formik"; +import { t } from "i18next"; +import React, { useMemo, useState } from "react"; +import * as Yup from "yup"; +import SubmitButton from "./SubmitButton"; + +interface formValues { + inputValue: string; +} +export interface SingleInputFormProps { + callback: ( + inputValue: string, + setFieldError: (errorMessage: string) => void, + resetForm: (nextState?: Partial>) => void, + ) => Promise; + fieldType: "text" | "email" | "password"; + placeholder: string; + buttonText: string; + submitButtonProps?: any; + initialValue?: string; + secondaryButtonAction?: () => void; + disableAutoFocus?: boolean; + hiddenPreInput?: any; + caption?: any; + hiddenPostInput?: any; + autoComplete?: string; + blockButton?: boolean; + hiddenLabel?: boolean; + disableAutoComplete?: boolean; +} + +export default function SingleInputForm(props: SingleInputFormProps) { + const { submitButtonProps } = props; + const { sx: buttonSx, ...restSubmitButtonProps } = submitButtonProps ?? {}; + + const [loading, SetLoading] = useState(false); + const [showPassword, setShowPassword] = useState(false); + + const submitForm = async ( + values: formValues, + { setFieldError, resetForm }: FormikHelpers, + ) => { + SetLoading(true); + await props.callback( + values.inputValue, + (message) => setFieldError("inputValue", message), + resetForm, + ); + SetLoading(false); + }; + + const handleClickShowPassword = () => { + setShowPassword(!showPassword); + }; + + const handleMouseDownPassword = ( + event: React.MouseEvent, + ) => { + event.preventDefault(); + }; + + const validationSchema = useMemo(() => { + switch (props.fieldType) { + case "text": + return Yup.object().shape({ + inputValue: Yup.string().required(t("REQUIRED")), + }); + case "password": + return Yup.object().shape({ + inputValue: Yup.string().required(t("REQUIRED")), + }); + case "email": + return Yup.object().shape({ + inputValue: Yup.string() + .email(t("EMAIL_ERROR")) + .required(t("REQUIRED")), + }); + } + }, [props.fieldType]); + + return ( + + initialValues={{ inputValue: props.initialValue ?? "" }} + onSubmit={submitForm} + validationSchema={validationSchema} + validateOnChange={false} + validateOnBlur={false} + > + {({ values, errors, handleChange, handleSubmit }) => ( +
+ {props.hiddenPreInput} + + ), + }} + /> + + {props.caption} + + {props.hiddenPostInput} + + {props.secondaryButtonAction && ( + + )} + + + + )} + + ); +} diff --git a/web/packages/shared/components/SubmitButton.tsx b/web/packages/shared/components/SubmitButton.tsx new file mode 100644 index 000000000..8d87645bc --- /dev/null +++ b/web/packages/shared/components/SubmitButton.tsx @@ -0,0 +1,53 @@ +import Done from "@mui/icons-material/Done"; +import { Button, ButtonProps, CircularProgress } from "@mui/material"; +import { FC } from "react"; + +export interface SubmitButtonProps { + loading: boolean; + buttonText: string; + + disabled?: boolean; + success?: boolean; +} +const SubmitButton: FC> = ({ + loading, + buttonText, + disabled, + success, + sx, + ...props +}) => { + return ( + + ); +}; + +export default SubmitButton; diff --git a/web/packages/shared/components/ThemeSwitcher.tsx b/web/packages/shared/components/ThemeSwitcher.tsx new file mode 100644 index 000000000..121d2e233 --- /dev/null +++ b/web/packages/shared/components/ThemeSwitcher.tsx @@ -0,0 +1,31 @@ +import { THEME_COLOR } from "@ente/shared/themes/constants"; +import DarkModeIcon from "@mui/icons-material/DarkMode"; +import LightModeIcon from "@mui/icons-material/LightMode"; +import { ToggleButton, ToggleButtonGroup } from "@mui/material"; +interface Iprops { + themeColor: THEME_COLOR; + setThemeColor: (theme: THEME_COLOR) => void; +} +export default function ThemeSwitcher({ themeColor, setThemeColor }: Iprops) { + const handleChange = (event, themeColor: THEME_COLOR) => { + if (themeColor !== null) { + setThemeColor(themeColor); + } + }; + + return ( + + + + + + + + + ); +} diff --git a/web/packages/shared/components/Titlebar.tsx b/web/packages/shared/components/Titlebar.tsx new file mode 100644 index 000000000..ed9089f4c --- /dev/null +++ b/web/packages/shared/components/Titlebar.tsx @@ -0,0 +1,59 @@ +import { FlexWrapper } from "@ente/shared/components/Container"; +import ArrowBack from "@mui/icons-material/ArrowBack"; +import Close from "@mui/icons-material/Close"; +import { Box, IconButton, Typography } from "@mui/material"; + +interface Iprops { + title: string; + caption?: string; + onClose: () => void; + backIsClose?: boolean; + onRootClose?: () => void; + actionButton?: JSX.Element; +} + +export default function Titlebar({ + title, + caption, + onClose, + backIsClose, + actionButton, + onRootClose, +}: Iprops): JSX.Element { + return ( + <> + + + {backIsClose ? : } + + + {actionButton && actionButton} + {!backIsClose && ( + + + + )} + + + + + {title} + + + {caption} + + + + ); +} diff --git a/web/packages/shared/components/VerifyMasterPasswordForm.tsx b/web/packages/shared/components/VerifyMasterPasswordForm.tsx new file mode 100644 index 000000000..5865d949f --- /dev/null +++ b/web/packages/shared/components/VerifyMasterPasswordForm.tsx @@ -0,0 +1,123 @@ +import { logError } from "@ente/shared/sentry"; +import SingleInputForm, { + SingleInputFormProps, +} from "../components/SingleInputForm"; + +import { CustomError } from "../error"; + +import { SRPAttributes } from "@ente/accounts/types/srp"; +import { ButtonProps, Input } from "@mui/material"; +import { t } from "i18next"; +import ComlinkCryptoWorker from "../crypto"; +import { KeyAttributes, User } from "../user/types"; + +export interface VerifyMasterPasswordFormProps { + user: User; + keyAttributes: KeyAttributes; + callback: ( + key: string, + kek: string, + keyAttributes: KeyAttributes, + passphrase?: string, + ) => void; + buttonText: string; + submitButtonProps?: ButtonProps; + getKeyAttributes?: (kek: string) => Promise; + srpAttributes?: SRPAttributes; +} + +export default function VerifyMasterPasswordForm({ + user, + keyAttributes, + srpAttributes, + callback, + buttonText, + submitButtonProps, + getKeyAttributes, +}: VerifyMasterPasswordFormProps) { + const verifyPassphrase: SingleInputFormProps["callback"] = async ( + passphrase, + setFieldError, + ) => { + try { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + let kek: string; + try { + if (srpAttributes) { + kek = await cryptoWorker.deriveKey( + passphrase, + srpAttributes.kekSalt, + srpAttributes.opsLimit, + srpAttributes.memLimit, + ); + } else { + kek = await cryptoWorker.deriveKey( + passphrase, + keyAttributes.kekSalt, + keyAttributes.opsLimit, + keyAttributes.memLimit, + ); + } + } catch (e) { + logError(e, "failed to derive key"); + throw Error(CustomError.WEAK_DEVICE); + } + if (!keyAttributes && typeof getKeyAttributes === "function") { + keyAttributes = await getKeyAttributes(kek); + } + if (!keyAttributes) { + throw Error("couldn't get key attributes"); + } + try { + const key = await cryptoWorker.decryptB64( + keyAttributes.encryptedKey, + keyAttributes.keyDecryptionNonce, + kek, + ); + callback(key, kek, keyAttributes, passphrase); + } catch (e) { + logError(e, "user entered a wrong password"); + throw Error(CustomError.INCORRECT_PASSWORD); + } + } catch (e) { + if (e instanceof Error) { + if (e.message === CustomError.TWO_FACTOR_ENABLED) { + // two factor enabled, user has been redirected to two factor page + return; + } + logError(e, "failed to verify passphrase"); + switch (e.message) { + case CustomError.WEAK_DEVICE: + setFieldError(t("WEAK_DEVICE")); + break; + case CustomError.INCORRECT_PASSWORD: + setFieldError(t("INCORRECT_PASSPHRASE")); + break; + default: + setFieldError(`${t("UNKNOWN_ERROR")} ${e.message}`); + } + } + } + }; + + return ( + + } + autoComplete={"current-password"} + fieldType="password" + /> + ); +} diff --git a/web/packages/shared/components/icons/ente.tsx b/web/packages/shared/components/icons/ente.tsx new file mode 100644 index 000000000..f2feedbb4 --- /dev/null +++ b/web/packages/shared/components/icons/ente.tsx @@ -0,0 +1,13 @@ +export default function Ente() { + return ( + + + + ); +} diff --git a/web/packages/shared/components/styledComponents/SmallLoadingSpinner.tsx b/web/packages/shared/components/styledComponents/SmallLoadingSpinner.tsx new file mode 100644 index 000000000..2314d3974 --- /dev/null +++ b/web/packages/shared/components/styledComponents/SmallLoadingSpinner.tsx @@ -0,0 +1,10 @@ +import EnteSpinner from "@ente/shared/components/EnteSpinner"; + +export const SmallLoadingSpinner = () => ( + +); diff --git a/web/packages/shared/constants/pages.tsx b/web/packages/shared/constants/pages.tsx new file mode 100644 index 000000000..c2e01d794 --- /dev/null +++ b/web/packages/shared/constants/pages.tsx @@ -0,0 +1,50 @@ +export enum PHOTOS_PAGES { + CHANGE_EMAIL = "/change-email", + CHANGE_PASSWORD = "/change-password", + CREDENTIALS = "/credentials", + GALLERY = "/gallery", + GENERATE = "/generate", + LOGIN = "/login", + RECOVER = "/recover", + SIGNUP = "/signup", + TWO_FACTOR_SETUP = "/two-factor/setup", + TWO_FACTOR_VERIFY = "/two-factor/verify", + TWO_FACTOR_RECOVER = "/two-factor/recover", + VERIFY = "/verify", + ROOT = "/", + SHARED_ALBUMS = "/shared-albums", + // ML_DEBUG = '/ml-debug', + DEDUPLICATE = "/deduplicate", +} + +export enum AUTH_PAGES { + CHANGE_EMAIL = "/change-email", + CHANGE_PASSWORD = "/change-password", + CREDENTIALS = "/credentials", + GALLERY = "/gallery", + GENERATE = "/generate", + LOGIN = "/login", + RECOVER = "/recover", + SIGNUP = "/signup", + TWO_FACTOR_SETUP = "/two-factor/setup", + TWO_FACTOR_VERIFY = "/two-factor/verify", + TWO_FACTOR_RECOVER = "/two-factor/recover", + VERIFY = "/verify", + ROOT = "/", + AUTH = "/auth", +} + +export enum ACCOUNTS_PAGES { + CREDENTIALS = "/credentials", + LOGIN = "/login", + RECOVER = "/recover", + SIGNUP = "/signup", + TWO_FACTOR_SETUP = "/two-factor/setup", + TWO_FACTOR_VERIFY = "/two-factor/verify", + TWO_FACTOR_RECOVER = "/two-factor/recover", + VERIFY = "/verify", + ROOT = "/", + PASSKEYS = "/passkeys", + ACCOUNT_HANDOFF = "/account-handoff", + GENERATE = "/generate", +} diff --git a/web/packages/shared/constants/urls.ts b/web/packages/shared/constants/urls.ts new file mode 100644 index 000000000..7c771836d --- /dev/null +++ b/web/packages/shared/constants/urls.ts @@ -0,0 +1,21 @@ +export const ENTE_WEBSITE_LINK = "https://ente.io"; + +export const ML_BLOG_LINK = "https://ente.io/blog/desktop-ml-beta"; + +export const FACE_SEARCH_PRIVACY_POLICY_LINK = + "https://ente.io/privacy#8-biometric-information-privacy-policy"; + +export const SUPPORT_EMAIL = "support@ente.io"; + +export const APP_DOWNLOAD_URL = "https://ente.io/download/desktop"; + +export const FEEDBACK_EMAIL = "feedback@ente.io"; + +export const DELETE_ACCOUNT_EMAIL = "account-deletion@ente.io"; + +export const WEB_ROADMAP_URL = "https://github.com/ente-io/photos-web/issues"; + +export const DESKTOP_ROADMAP_URL = + "https://github.com/ente-io/photos-desktop/issues"; + +export const CITIES_URL = "https://static.ente.io/world_cities.json"; diff --git a/web/packages/shared/crypto/constants.ts b/web/packages/shared/crypto/constants.ts new file mode 100644 index 000000000..9226ed874 --- /dev/null +++ b/web/packages/shared/crypto/constants.ts @@ -0,0 +1 @@ +export const ENCRYPTION_CHUNK_SIZE = 4 * 1024 * 1024; diff --git a/web/packages/shared/crypto/helpers.ts b/web/packages/shared/crypto/helpers.ts new file mode 100644 index 000000000..a29dc465f --- /dev/null +++ b/web/packages/shared/crypto/helpers.ts @@ -0,0 +1,186 @@ +import { setRecoveryKey } from "@ente/accounts/api/user"; +import { logError } from "@ente/shared/sentry"; +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { getToken } from "@ente/shared/storage/localStorage/helpers"; +import { SESSION_KEYS, setKey } from "@ente/shared/storage/sessionStorage"; +import { getActualKey } from "@ente/shared/user"; +import { KeyAttributes } from "@ente/shared/user/types"; +import isElectron from "is-electron"; +import ComlinkCryptoWorker from "."; +import ElectronAPIs from "../electron"; +import { addLogLine } from "../logging"; + +const LOGIN_SUB_KEY_LENGTH = 32; +const LOGIN_SUB_KEY_ID = 1; +const LOGIN_SUB_KEY_CONTEXT = "loginctx"; +const LOGIN_SUB_KEY_BYTE_LENGTH = 16; + +export async function decryptAndStoreToken( + keyAttributes: KeyAttributes, + masterKey: string, +) { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const user = getData(LS_KEYS.USER); + let decryptedToken = null; + const { encryptedToken } = user; + if (encryptedToken && encryptedToken.length > 0) { + const secretKey = await cryptoWorker.decryptB64( + keyAttributes.encryptedSecretKey, + keyAttributes.secretKeyDecryptionNonce, + masterKey, + ); + const urlUnsafeB64DecryptedToken = await cryptoWorker.boxSealOpen( + encryptedToken, + keyAttributes.publicKey, + secretKey, + ); + const decryptedTokenBytes = await cryptoWorker.fromB64( + urlUnsafeB64DecryptedToken, + ); + decryptedToken = await cryptoWorker.toURLSafeB64(decryptedTokenBytes); + setData(LS_KEYS.USER, { + ...user, + token: decryptedToken, + encryptedToken: null, + }); + } +} + +// We encrypt the masterKey, with an intermediate key derived from the +// passphrase (with Interactive mem and ops limits) to avoid saving it to local +// storage in plain text. This means that on the web user will always have to +// enter their passphrase to access their masterKey. +export async function generateAndSaveIntermediateKeyAttributes( + passphrase: string, + existingKeyAttributes: KeyAttributes, + key: string, +): Promise { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const intermediateKekSalt = await cryptoWorker.generateSaltToDeriveKey(); + const intermediateKek = await cryptoWorker.deriveInteractiveKey( + passphrase, + intermediateKekSalt, + ); + const encryptedKeyAttributes = await cryptoWorker.encryptToB64( + key, + intermediateKek.key, + ); + + const intermediateKeyAttributes = Object.assign(existingKeyAttributes, { + kekSalt: intermediateKekSalt, + encryptedKey: encryptedKeyAttributes.encryptedData, + keyDecryptionNonce: encryptedKeyAttributes.nonce, + opsLimit: intermediateKek.opsLimit, + memLimit: intermediateKek.memLimit, + }); + setData(LS_KEYS.KEY_ATTRIBUTES, intermediateKeyAttributes); + return intermediateKeyAttributes; +} + +export const generateLoginSubKey = async (kek: string) => { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const kekSubKeyString = await cryptoWorker.generateSubKey( + kek, + LOGIN_SUB_KEY_LENGTH, + LOGIN_SUB_KEY_ID, + LOGIN_SUB_KEY_CONTEXT, + ); + const kekSubKey = await cryptoWorker.fromB64(kekSubKeyString); + + // use first 16 bytes of generated kekSubKey as loginSubKey + const loginSubKey = await cryptoWorker.toB64( + kekSubKey.slice(0, LOGIN_SUB_KEY_BYTE_LENGTH), + ); + + return loginSubKey; +}; + +export const saveKeyInSessionStore = async ( + keyType: SESSION_KEYS, + key: string, + fromDesktop?: boolean, +) => { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const sessionKeyAttributes = + await cryptoWorker.generateKeyAndEncryptToB64(key); + setKey(keyType, sessionKeyAttributes); + addLogLine("fromDesktop", fromDesktop); + if ( + isElectron() && + !fromDesktop && + keyType === SESSION_KEYS.ENCRYPTION_KEY + ) { + ElectronAPIs.setEncryptionKey(key); + } +}; + +export async function encryptWithRecoveryKey(key: string) { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + const hexRecoveryKey = await getRecoveryKey(); + const recoveryKey = await cryptoWorker.fromHex(hexRecoveryKey); + const encryptedKey = await cryptoWorker.encryptToB64(key, recoveryKey); + return encryptedKey; +} + +export const getRecoveryKey = async () => { + let recoveryKey: string = null; + try { + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + const keyAttributes: KeyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); + const { + recoveryKeyEncryptedWithMasterKey, + recoveryKeyDecryptionNonce, + } = keyAttributes; + const masterKey = await getActualKey(); + if (recoveryKeyEncryptedWithMasterKey) { + recoveryKey = await cryptoWorker.decryptB64( + recoveryKeyEncryptedWithMasterKey, + recoveryKeyDecryptionNonce, + masterKey, + ); + } else { + recoveryKey = await createNewRecoveryKey(); + } + recoveryKey = await cryptoWorker.toHex(recoveryKey); + return recoveryKey; + } catch (e) { + console.log(e); + logError(e, "getRecoveryKey failed"); + throw e; + } +}; + +// Used only for legacy users for whom we did not generate recovery keys during +// sign up +async function createNewRecoveryKey() { + const masterKey = await getActualKey(); + const existingAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); + + const cryptoWorker = await ComlinkCryptoWorker.getInstance(); + + const recoveryKey = await cryptoWorker.generateEncryptionKey(); + const encryptedMasterKey = await cryptoWorker.encryptToB64( + masterKey, + recoveryKey, + ); + const encryptedRecoveryKey = await cryptoWorker.encryptToB64( + recoveryKey, + masterKey, + ); + const recoveryKeyAttributes = { + masterKeyEncryptedWithRecoveryKey: encryptedMasterKey.encryptedData, + masterKeyDecryptionNonce: encryptedMasterKey.nonce, + recoveryKeyEncryptedWithMasterKey: encryptedRecoveryKey.encryptedData, + recoveryKeyDecryptionNonce: encryptedRecoveryKey.nonce, + }; + await setRecoveryKey(getToken(), recoveryKeyAttributes); + + const updatedKeyAttributes = Object.assign( + existingAttributes, + recoveryKeyAttributes, + ); + setData(LS_KEYS.KEY_ATTRIBUTES, updatedKeyAttributes); + + return recoveryKey; +} diff --git a/web/packages/shared/crypto/index.ts b/web/packages/shared/crypto/index.ts new file mode 100644 index 000000000..838e781e9 --- /dev/null +++ b/web/packages/shared/crypto/index.ts @@ -0,0 +1,27 @@ +import { Remote } from "comlink"; +import { ComlinkWorker } from "../worker/comlinkWorker"; +import { DedicatedCryptoWorker } from "./internal/crypto.worker"; + +class ComlinkCryptoWorker { + private comlinkWorkerInstance: + | Promise> + | undefined; + + async getInstance() { + if (!this.comlinkWorkerInstance) { + const comlinkWorker = getDedicatedCryptoWorker(); + this.comlinkWorkerInstance = comlinkWorker.remote; + } + return this.comlinkWorkerInstance; + } +} + +export const getDedicatedCryptoWorker = () => { + const cryptoComlinkWorker = new ComlinkWorker( + "ente-crypto-worker", + new Worker(new URL("internal/crypto.worker.ts", import.meta.url)), + ); + return cryptoComlinkWorker; +}; + +export default new ComlinkCryptoWorker(); diff --git a/web/packages/shared/crypto/internal/crypto.worker.ts b/web/packages/shared/crypto/internal/crypto.worker.ts new file mode 100644 index 000000000..ac1d52a0d --- /dev/null +++ b/web/packages/shared/crypto/internal/crypto.worker.ts @@ -0,0 +1,215 @@ +import * as libsodium from "@ente/shared/crypto/internal/libsodium"; +import * as Comlink from "comlink"; +import { StateAddress } from "libsodium-wrappers"; + +const textDecoder = new TextDecoder(); +const textEncoder = new TextEncoder(); +export class DedicatedCryptoWorker { + async decryptMetadata( + encryptedMetadata: string, + header: string, + key: string, + ) { + const encodedMetadata = await libsodium.decryptChaChaOneShot( + await libsodium.fromB64(encryptedMetadata), + await libsodium.fromB64(header), + key, + ); + return JSON.parse(textDecoder.decode(encodedMetadata)); + } + + async decryptThumbnail( + fileData: Uint8Array, + header: Uint8Array, + key: string, + ) { + return libsodium.decryptChaChaOneShot(fileData, header, key); + } + + async decryptEmbedding( + encryptedEmbedding: string, + header: string, + key: string, + ) { + const encodedEmbedding = await libsodium.decryptChaChaOneShot( + await libsodium.fromB64(encryptedEmbedding), + await libsodium.fromB64(header), + key, + ); + return Float32Array.from( + JSON.parse(textDecoder.decode(encodedEmbedding)), + ); + } + + async decryptFile(fileData: Uint8Array, header: Uint8Array, key: string) { + return libsodium.decryptChaCha(fileData, header, key); + } + + async encryptMetadata(metadata: Object, key: string) { + const encodedMetadata = textEncoder.encode(JSON.stringify(metadata)); + + const { file: encryptedMetadata } = + await libsodium.encryptChaChaOneShot(encodedMetadata, key); + const { encryptedData, ...other } = encryptedMetadata; + return { + file: { + encryptedData: await libsodium.toB64(encryptedData), + ...other, + }, + key, + }; + } + + async encryptThumbnail(fileData: Uint8Array, key: string) { + return libsodium.encryptChaChaOneShot(fileData, key); + } + + async encryptEmbedding(embedding: Float32Array, key: string) { + const encodedEmbedding = textEncoder.encode( + JSON.stringify(Array.from(embedding)), + ); + const { file: encryptEmbedding } = await libsodium.encryptChaChaOneShot( + encodedEmbedding, + key, + ); + const { encryptedData, ...other } = encryptEmbedding; + return { + file: { + encryptedData: await libsodium.toB64(encryptedData), + ...other, + }, + key, + }; + } + + async encryptFile(fileData: Uint8Array) { + return libsodium.encryptChaCha(fileData); + } + + async encryptFileChunk( + data: Uint8Array, + pushState: StateAddress, + isFinalChunk: boolean, + ) { + return libsodium.encryptFileChunk(data, pushState, isFinalChunk); + } + + async initChunkEncryption() { + return libsodium.initChunkEncryption(); + } + + async initChunkDecryption(header: Uint8Array, key: Uint8Array) { + return libsodium.initChunkDecryption(header, key); + } + + async decryptFileChunk(fileData: Uint8Array, pullState: StateAddress) { + return libsodium.decryptFileChunk(fileData, pullState); + } + + async initChunkHashing() { + return libsodium.initChunkHashing(); + } + + async hashFileChunk(hashState: StateAddress, chunk: Uint8Array) { + return libsodium.hashFileChunk(hashState, chunk); + } + + async completeChunkHashing(hashState: StateAddress) { + return libsodium.completeChunkHashing(hashState); + } + + async deriveKey( + passphrase: string, + salt: string, + opsLimit: number, + memLimit: number, + ) { + return libsodium.deriveKey(passphrase, salt, opsLimit, memLimit); + } + + async deriveSensitiveKey(passphrase: string, salt: string) { + return libsodium.deriveSensitiveKey(passphrase, salt); + } + + async deriveInteractiveKey(passphrase: string, salt: string) { + return libsodium.deriveInteractiveKey(passphrase, salt); + } + + async decryptB64(data: string, nonce: string, key: string) { + return libsodium.decryptB64(data, nonce, key); + } + + async decryptToUTF8(data: string, nonce: string, key: string) { + return libsodium.decryptToUTF8(data, nonce, key); + } + + async encryptToB64(data: string, key: string) { + return libsodium.encryptToB64(data, key); + } + + async generateKeyAndEncryptToB64(data: string) { + return libsodium.generateKeyAndEncryptToB64(data); + } + + async encryptUTF8(data: string, key: string) { + return libsodium.encryptUTF8(data, key); + } + + async generateEncryptionKey() { + return libsodium.generateEncryptionKey(); + } + + async generateSaltToDeriveKey() { + return libsodium.generateSaltToDeriveKey(); + } + + async generateKeyPair() { + return libsodium.generateKeyPair(); + } + + async boxSealOpen(input: string, publicKey: string, secretKey: string) { + return libsodium.boxSealOpen(input, publicKey, secretKey); + } + + async boxSeal(input: string, publicKey: string) { + return libsodium.boxSeal(input, publicKey); + } + + async generateSubKey( + key: string, + subKeyLength: number, + subKeyID: number, + context: string, + ) { + return libsodium.generateSubKey(key, subKeyLength, subKeyID, context); + } + + async fromUTF8(string: string) { + return libsodium.fromUTF8(string); + } + async toUTF8(data: string) { + return libsodium.toUTF8(data); + } + + async toB64(data: Uint8Array) { + return libsodium.toB64(data); + } + + async toURLSafeB64(data: Uint8Array) { + return libsodium.toURLSafeB64(data); + } + + async fromB64(string: string) { + return libsodium.fromB64(string); + } + + async toHex(string: string) { + return libsodium.toHex(string); + } + + async fromHex(string: string) { + return libsodium.fromHex(string); + } +} + +Comlink.expose(DedicatedCryptoWorker, self); diff --git a/web/packages/shared/crypto/internal/libsodium.ts b/web/packages/shared/crypto/internal/libsodium.ts new file mode 100644 index 000000000..8940bcb60 --- /dev/null +++ b/web/packages/shared/crypto/internal/libsodium.ts @@ -0,0 +1,422 @@ +import { CustomError } from "@ente/shared/error"; +import sodium, { StateAddress } from "libsodium-wrappers"; +import { ENCRYPTION_CHUNK_SIZE } from "../constants"; +import { B64EncryptionResult } from "../types"; + +export async function decryptChaChaOneShot( + data: Uint8Array, + header: Uint8Array, + key: string, +) { + await sodium.ready; + const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( + header, + await fromB64(key), + ); + const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( + pullState, + data, + null, + ); + return pullResult.message; +} + +export async function decryptChaCha( + data: Uint8Array, + header: Uint8Array, + key: string, +) { + await sodium.ready; + const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( + header, + await fromB64(key), + ); + const decryptionChunkSize = + ENCRYPTION_CHUNK_SIZE + + sodium.crypto_secretstream_xchacha20poly1305_ABYTES; + let bytesRead = 0; + const decryptedData = []; + let tag = sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE; + while (tag !== sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL) { + let chunkSize = decryptionChunkSize; + if (bytesRead + chunkSize > data.length) { + chunkSize = data.length - bytesRead; + } + const buffer = data.slice(bytesRead, bytesRead + chunkSize); + const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( + pullState, + buffer, + ); + if (!pullResult.message) { + throw new Error(CustomError.PROCESSING_FAILED); + } + for (let index = 0; index < pullResult.message.length; index++) { + decryptedData.push(pullResult.message[index]); + } + tag = pullResult.tag; + bytesRead += chunkSize; + } + return Uint8Array.from(decryptedData); +} + +export async function initChunkDecryption(header: Uint8Array, key: Uint8Array) { + await sodium.ready; + const pullState = sodium.crypto_secretstream_xchacha20poly1305_init_pull( + header, + key, + ); + const decryptionChunkSize = + ENCRYPTION_CHUNK_SIZE + + sodium.crypto_secretstream_xchacha20poly1305_ABYTES; + const tag = sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE; + return { pullState, decryptionChunkSize, tag }; +} + +export async function decryptFileChunk( + data: Uint8Array, + pullState: StateAddress, +) { + await sodium.ready; + const pullResult = sodium.crypto_secretstream_xchacha20poly1305_pull( + pullState, + data, + ); + if (!pullResult.message) { + throw new Error(CustomError.PROCESSING_FAILED); + } + const newTag = pullResult.tag; + return { decryptedData: pullResult.message, newTag }; +} + +export async function encryptChaChaOneShot(data: Uint8Array, key: string) { + await sodium.ready; + + const uintkey: Uint8Array = await fromB64(key); + const initPushResult = + sodium.crypto_secretstream_xchacha20poly1305_init_push(uintkey); + const [pushState, header] = [initPushResult.state, initPushResult.header]; + + const pushResult = sodium.crypto_secretstream_xchacha20poly1305_push( + pushState, + data, + null, + sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL, + ); + return { + key: await toB64(uintkey), + file: { + encryptedData: pushResult, + decryptionHeader: await toB64(header), + }, + }; +} + +export async function encryptChaCha(data: Uint8Array) { + await sodium.ready; + + const uintkey: Uint8Array = + sodium.crypto_secretstream_xchacha20poly1305_keygen(); + + const initPushResult = + sodium.crypto_secretstream_xchacha20poly1305_init_push(uintkey); + const [pushState, header] = [initPushResult.state, initPushResult.header]; + let bytesRead = 0; + let tag = sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE; + + const encryptedData = []; + + while (tag !== sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL) { + let chunkSize = ENCRYPTION_CHUNK_SIZE; + if (bytesRead + chunkSize >= data.length) { + chunkSize = data.length - bytesRead; + tag = sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL; + } + + const buffer = data.slice(bytesRead, bytesRead + chunkSize); + bytesRead += chunkSize; + const pushResult = sodium.crypto_secretstream_xchacha20poly1305_push( + pushState, + buffer, + null, + tag, + ); + for (let index = 0; index < pushResult.length; index++) { + encryptedData.push(pushResult[index]); + } + } + return { + key: await toB64(uintkey), + file: { + encryptedData: new Uint8Array(encryptedData), + decryptionHeader: await toB64(header), + }, + }; +} + +export async function initChunkEncryption() { + await sodium.ready; + const key = sodium.crypto_secretstream_xchacha20poly1305_keygen(); + const initPushResult = + sodium.crypto_secretstream_xchacha20poly1305_init_push(key); + const [pushState, header] = [initPushResult.state, initPushResult.header]; + return { + key: await toB64(key), + decryptionHeader: await toB64(header), + pushState, + }; +} + +export async function encryptFileChunk( + data: Uint8Array, + pushState: sodium.StateAddress, + isFinalChunk: boolean, +) { + await sodium.ready; + const tag = isFinalChunk + ? sodium.crypto_secretstream_xchacha20poly1305_TAG_FINAL + : sodium.crypto_secretstream_xchacha20poly1305_TAG_MESSAGE; + const pushResult = sodium.crypto_secretstream_xchacha20poly1305_push( + pushState, + data, + null, + tag, + ); + + return pushResult; +} +export async function encryptToB64(data: string, key: string) { + await sodium.ready; + const encrypted = await encrypt(await fromB64(data), await fromB64(key)); + + return { + encryptedData: await toB64(encrypted.encryptedData), + key: await toB64(encrypted.key), + nonce: await toB64(encrypted.nonce), + } as B64EncryptionResult; +} + +export async function generateKeyAndEncryptToB64(data: string) { + await sodium.ready; + const key = sodium.crypto_secretbox_keygen(); + return await encryptToB64(data, await toB64(key)); +} + +export async function encryptUTF8(data: string, key: string) { + const b64Data = await toB64(await fromUTF8(data)); + return await encryptToB64(b64Data, key); +} + +export async function decryptB64(data: string, nonce: string, key: string) { + await sodium.ready; + const decrypted = await decrypt( + await fromB64(data), + await fromB64(nonce), + await fromB64(key), + ); + + return await toB64(decrypted); +} + +export async function decryptToUTF8(data: string, nonce: string, key: string) { + await sodium.ready; + const decrypted = await decrypt( + await fromB64(data), + await fromB64(nonce), + await fromB64(key), + ); + + return sodium.to_string(decrypted); +} + +async function encrypt(data: Uint8Array, key: Uint8Array) { + await sodium.ready; + const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES); + const encryptedData = sodium.crypto_secretbox_easy(data, nonce, key); + return { + encryptedData, + key, + nonce, + }; +} + +async function decrypt(data: Uint8Array, nonce: Uint8Array, key: Uint8Array) { + await sodium.ready; + return sodium.crypto_secretbox_open_easy(data, nonce, key); +} + +export async function initChunkHashing() { + await sodium.ready; + const hashState = sodium.crypto_generichash_init( + null, + sodium.crypto_generichash_BYTES_MAX, + ); + return hashState; +} + +export async function hashFileChunk( + hashState: sodium.StateAddress, + chunk: Uint8Array, +) { + await sodium.ready; + sodium.crypto_generichash_update(hashState, chunk); +} + +export async function completeChunkHashing(hashState: sodium.StateAddress) { + await sodium.ready; + const hash = sodium.crypto_generichash_final( + hashState, + sodium.crypto_generichash_BYTES_MAX, + ); + const hashString = toB64(hash); + return hashString; +} + +export async function deriveKey( + passphrase: string, + salt: string, + opsLimit: number, + memLimit: number, +) { + await sodium.ready; + return await toB64( + sodium.crypto_pwhash( + sodium.crypto_secretbox_KEYBYTES, + await fromUTF8(passphrase), + await fromB64(salt), + opsLimit, + memLimit, + sodium.crypto_pwhash_ALG_ARGON2ID13, + ), + ); +} + +export async function deriveSensitiveKey(passphrase: string, salt: string) { + await sodium.ready; + const minMemLimit = sodium.crypto_pwhash_MEMLIMIT_MIN; + let opsLimit = sodium.crypto_pwhash_OPSLIMIT_SENSITIVE; + let memLimit = sodium.crypto_pwhash_MEMLIMIT_SENSITIVE; + while (memLimit > minMemLimit) { + try { + const key = await deriveKey(passphrase, salt, opsLimit, memLimit); + return { + key, + opsLimit, + memLimit, + }; + } catch (e) { + opsLimit *= 2; + memLimit /= 2; + } + } +} + +export async function deriveInteractiveKey(passphrase: string, salt: string) { + await sodium.ready; + const key = await toB64( + sodium.crypto_pwhash( + sodium.crypto_secretbox_KEYBYTES, + await fromUTF8(passphrase), + await fromB64(salt), + sodium.crypto_pwhash_OPSLIMIT_INTERACTIVE, + sodium.crypto_pwhash_MEMLIMIT_INTERACTIVE, + sodium.crypto_pwhash_ALG_ARGON2ID13, + ), + ); + return { + key, + opsLimit: sodium.crypto_pwhash_OPSLIMIT_INTERACTIVE, + memLimit: sodium.crypto_pwhash_MEMLIMIT_INTERACTIVE, + }; +} + +export async function generateEncryptionKey() { + await sodium.ready; + return await toB64(sodium.crypto_kdf_keygen()); +} + +export async function generateSaltToDeriveKey() { + await sodium.ready; + return await toB64(sodium.randombytes_buf(sodium.crypto_pwhash_SALTBYTES)); +} + +export async function generateKeyPair() { + await sodium.ready; + const keyPair: sodium.KeyPair = sodium.crypto_box_keypair(); + return { + privateKey: await toB64(keyPair.privateKey), + publicKey: await toB64(keyPair.publicKey), + }; +} + +export async function boxSealOpen( + input: string, + publicKey: string, + secretKey: string, +) { + await sodium.ready; + return await toB64( + sodium.crypto_box_seal_open( + await fromB64(input), + await fromB64(publicKey), + await fromB64(secretKey), + ), + ); +} + +export async function boxSeal(input: string, publicKey: string) { + await sodium.ready; + return await toB64( + sodium.crypto_box_seal(await fromB64(input), await fromB64(publicKey)), + ); +} + +export async function generateSubKey( + key: string, + subKeyLength: number, + subKeyID: number, + context: string, +) { + await sodium.ready; + return await toB64( + sodium.crypto_kdf_derive_from_key( + subKeyLength, + subKeyID, + context, + await fromB64(key), + ), + ); +} + +export async function fromB64(input: string) { + await sodium.ready; + return sodium.from_base64(input, sodium.base64_variants.ORIGINAL); +} + +export async function toB64(input: Uint8Array) { + await sodium.ready; + return sodium.to_base64(input, sodium.base64_variants.ORIGINAL); +} + +export async function toURLSafeB64(input: Uint8Array) { + await sodium.ready; + return sodium.to_base64(input, sodium.base64_variants.URLSAFE); +} + +export async function fromUTF8(input: string) { + await sodium.ready; + return sodium.from_string(input); +} + +export async function toUTF8(input: string) { + await sodium.ready; + return sodium.to_string(await fromB64(input)); +} +export async function toHex(input: string) { + await sodium.ready; + return sodium.to_hex(await fromB64(input)); +} + +export async function fromHex(input: string) { + await sodium.ready; + return await toB64(sodium.from_hex(input)); +} diff --git a/web/packages/shared/crypto/types.ts b/web/packages/shared/crypto/types.ts new file mode 100644 index 000000000..2eeea7027 --- /dev/null +++ b/web/packages/shared/crypto/types.ts @@ -0,0 +1,19 @@ +import { DataStream } from "@ente/shared/upload/types"; + +export interface LocalFileAttributes< + T extends string | Uint8Array | DataStream, +> { + encryptedData: T; + decryptionHeader: string; +} + +export interface EncryptionResult { + file: LocalFileAttributes; + key: string; +} + +export interface B64EncryptionResult { + encryptedData: string; + key: string; + nonce: string; +} diff --git a/web/packages/shared/electron/index.ts b/web/packages/shared/electron/index.ts new file mode 100644 index 000000000..38e38e3a4 --- /dev/null +++ b/web/packages/shared/electron/index.ts @@ -0,0 +1,5 @@ +import { ElectronAPIsType } from "./types"; + +const ElectronAPIs: ElectronAPIsType = globalThis["ElectronAPIs"]; + +export default ElectronAPIs; diff --git a/web/packages/shared/electron/service.ts b/web/packages/shared/electron/service.ts new file mode 100644 index 000000000..2f00b42f4 --- /dev/null +++ b/web/packages/shared/electron/service.ts @@ -0,0 +1,92 @@ +import { runningInWorker } from "@ente/shared/platform"; +import { LimitedCache } from "@ente/shared/storage/cacheStorage/types"; +import * as Comlink from "comlink"; +import { wrap } from "comlink"; +import { ElectronAPIsType } from "./types"; +import { + ProxiedWorkerLimitedCache, + WorkerSafeElectronClient, +} from "./worker/client"; +import { deserializeToResponse, serializeResponse } from "./worker/utils/proxy"; + +export interface LimitedElectronAPIs + extends Pick< + ElectronAPIsType, + | "openDiskCache" + | "deleteDiskCache" + | "getSentryUserID" + | "convertToJPEG" + | "logToDisk" + > {} + +class WorkerSafeElectronServiceImpl implements LimitedElectronAPIs { + proxiedElectron: + | Comlink.Remote + | WorkerSafeElectronClient; + ready: Promise; + + constructor() { + this.ready = this.init(); + } + private async init() { + if (runningInWorker()) { + const workerSafeElectronClient = + wrap(self); + + this.proxiedElectron = await new workerSafeElectronClient(); + } else { + this.proxiedElectron = new WorkerSafeElectronClient(); + } + } + async openDiskCache(cacheName: string, cacheLimitInBytes?: number) { + await this.ready; + const cache = await this.proxiedElectron.openDiskCache( + cacheName, + cacheLimitInBytes, + ); + return { + match: transformMatch(cache.match.bind(cache)), + put: transformPut(cache.put.bind(cache)), + delete: cache.delete.bind(cache), + }; + } + + async deleteDiskCache(cacheName: string) { + await this.ready; + return await this.proxiedElectron.deleteDiskCache(cacheName); + } + + async getSentryUserID() { + await this.ready; + return this.proxiedElectron.getSentryUserID(); + } + async convertToJPEG( + inputFileData: Uint8Array, + filename: string, + ): Promise { + await this.ready; + return this.proxiedElectron.convertToJPEG(inputFileData, filename); + } + async logToDisk(message: string) { + await this.ready; + return this.proxiedElectron.logToDisk(message); + } +} + +export const WorkerSafeElectronService = new WorkerSafeElectronServiceImpl(); + +function transformMatch( + fn: ProxiedWorkerLimitedCache["match"], +): LimitedCache["match"] { + return async (key: string, options) => { + return deserializeToResponse(await fn(key, options)); + }; +} + +function transformPut( + fn: ProxiedWorkerLimitedCache["put"], +): LimitedCache["put"] { + return async (key: string, data: Response) => { + fn(key, await serializeResponse(data)); + }; +} diff --git a/web/packages/shared/electron/types.ts b/web/packages/shared/electron/types.ts new file mode 100644 index 000000000..df5829ab0 --- /dev/null +++ b/web/packages/shared/electron/types.ts @@ -0,0 +1,113 @@ +import { LimitedCache } from "@ente/shared/storage/cacheStorage/types"; +import { ElectronFile } from "@ente/shared/upload/types"; +import { WatchMapping } from "@ente/shared/watchFolder/types"; + +export interface AppUpdateInfo { + autoUpdatable: boolean; + version: string; +} + +export enum Model { + GGML_CLIP = "ggml-clip", + ONNX_CLIP = "onnx-clip", +} + +export interface ElectronAPIsType { + exists: (path: string) => boolean; + checkExistsAndCreateDir: (dirPath: string) => Promise; + saveStreamToDisk: ( + path: string, + fileStream: ReadableStream, + ) => Promise; + saveFileToDisk: (path: string, file: any) => Promise; + selectDirectory: () => Promise; + sendNotification: (content: string) => void; + readTextFile: (path: string) => Promise; + showUploadFilesDialog: () => Promise; + showUploadDirsDialog: () => Promise; + getPendingUploads: () => Promise<{ + files: ElectronFile[]; + collectionName: string; + type: string; + }>; + setToUploadFiles: (type: string, filePaths: string[]) => void; + showUploadZipDialog: () => Promise<{ + zipPaths: string[]; + files: ElectronFile[]; + }>; + getElectronFilesFromGoogleZip: ( + filePath: string, + ) => Promise; + setToUploadCollection: (collectionName: string) => void; + getDirFiles: (dirPath: string) => Promise; + getWatchMappings: () => WatchMapping[]; + updateWatchMappingSyncedFiles: ( + folderPath: string, + files: WatchMapping["syncedFiles"], + ) => void; + updateWatchMappingIgnoredFiles: ( + folderPath: string, + files: WatchMapping["ignoredFiles"], + ) => void; + addWatchMapping: ( + collectionName: string, + folderPath: string, + uploadStrategy: number, + ) => Promise; + removeWatchMapping: (folderPath: string) => Promise; + registerWatcherFunctions: ( + addFile: (file: ElectronFile) => Promise, + removeFile: (path: string) => Promise, + removeFolder: (folderPath: string) => Promise, + ) => void; + isFolder: (dirPath: string) => Promise; + clearElectronStore: () => void; + setEncryptionKey: (encryptionKey: string) => Promise; + getEncryptionKey: () => Promise; + openDiskCache: ( + cacheName: string, + cacheLimitInBytes?: number, + ) => Promise; + deleteDiskCache: (cacheName: string) => Promise; + logToDisk: (msg: string) => void; + convertToJPEG: ( + fileData: Uint8Array, + filename: string, + ) => Promise; + openLogDirectory: () => void; + registerUpdateEventListener: ( + showUpdateDialog: (updateInfo: AppUpdateInfo) => void, + ) => void; + updateAndRestart: () => void; + skipAppUpdate: (version: string) => void; + getSentryUserID: () => Promise; + getAppVersion: () => Promise; + runFFmpegCmd: ( + cmd: string[], + inputFile: File | ElectronFile, + outputFileName: string, + dontTimeout?: boolean, + ) => Promise; + muteUpdateNotification: (version: string) => void; + generateImageThumbnail: ( + inputFile: File | ElectronFile, + maxDimension: number, + maxSize: number, + ) => Promise; + logRendererProcessMemoryUsage: (message: string) => Promise; + registerForegroundEventListener: (onForeground: () => void) => void; + openDirectory: (dirPath: string) => Promise; + moveFile: (oldPath: string, newPath: string) => Promise; + deleteFolder: (path: string) => Promise; + deleteFile: (path: string) => void; + rename: (oldPath: string, newPath: string) => Promise; + updateOptOutOfCrashReports: (optOut: boolean) => Promise; + computeImageEmbedding: ( + model: Model, + imageData: Uint8Array, + ) => Promise; + computeTextEmbedding: (model: Model, text: string) => Promise; + getPlatform: () => Promise<"mac" | "windows" | "linux">; + setCustomCacheDirectory: (directory: string) => Promise; + getCacheDirectory: () => Promise; +} diff --git a/web/packages/shared/electron/worker/client.ts b/web/packages/shared/electron/worker/client.ts new file mode 100644 index 000000000..12b34a4e7 --- /dev/null +++ b/web/packages/shared/electron/worker/client.ts @@ -0,0 +1,74 @@ +import ElectronAPIs from "@ente/shared/electron"; +import { LimitedCache } from "@ente/shared/storage/cacheStorage/types"; +import * as Comlink from "comlink"; +import { deserializeToResponse, serializeResponse } from "./utils/proxy"; + +export interface ProxiedLimitedElectronAPIs { + openDiskCache: ( + cacheName: string, + cacheLimitInBytes?: number, + ) => Promise; + deleteDiskCache: (cacheName: string) => Promise; + getSentryUserID: () => Promise; + convertToJPEG: ( + inputFileData: Uint8Array, + filename: string, + ) => Promise; + logToDisk: (message: string) => void; +} +export interface ProxiedWorkerLimitedCache { + match: ( + key: string, + options?: { sizeInBytes?: number }, + ) => Promise; + put: (key: string, data: ArrayBuffer) => Promise; + delete: (key: string) => Promise; +} + +export class WorkerSafeElectronClient implements ProxiedLimitedElectronAPIs { + async openDiskCache(cacheName: string, cacheLimitInBytes?: number) { + const cache = await ElectronAPIs.openDiskCache( + cacheName, + cacheLimitInBytes, + ); + return Comlink.proxy({ + match: Comlink.proxy(transformMatch(cache.match.bind(cache))), + put: Comlink.proxy(transformPut(cache.put.bind(cache))), + delete: Comlink.proxy(cache.delete.bind(cache)), + }); + } + + async deleteDiskCache(cacheName: string) { + return await ElectronAPIs.deleteDiskCache(cacheName); + } + + async getSentryUserID() { + return await ElectronAPIs.getSentryUserID(); + } + + async convertToJPEG( + inputFileData: Uint8Array, + filename: string, + ): Promise { + return await ElectronAPIs.convertToJPEG(inputFileData, filename); + } + logToDisk(message: string) { + return ElectronAPIs.logToDisk(message); + } +} + +function transformMatch( + fn: LimitedCache["match"], +): ProxiedWorkerLimitedCache["match"] { + return async (key: string, options: { sizeInBytes?: number }) => { + return serializeResponse(await fn(key, options)); + }; +} + +function transformPut( + fn: LimitedCache["put"], +): ProxiedWorkerLimitedCache["put"] { + return async (key: string, data: ArrayBuffer) => { + fn(key, deserializeToResponse(data)); + }; +} diff --git a/web/packages/shared/electron/worker/utils/proxy.ts b/web/packages/shared/electron/worker/utils/proxy.ts new file mode 100644 index 000000000..d756cf1ec --- /dev/null +++ b/web/packages/shared/electron/worker/utils/proxy.ts @@ -0,0 +1,11 @@ +export function serializeResponse(response: Response) { + if (response) { + return response.arrayBuffer(); + } +} + +export function deserializeToResponse(arrayBuffer: ArrayBuffer) { + if (arrayBuffer) { + return new Response(arrayBuffer); + } +} diff --git a/web/packages/shared/electron/worker/utils/transferHandler.ts b/web/packages/shared/electron/worker/utils/transferHandler.ts new file mode 100644 index 000000000..77a7e61a9 --- /dev/null +++ b/web/packages/shared/electron/worker/utils/transferHandler.ts @@ -0,0 +1,11 @@ +import * as Comlink from "comlink"; + +// didn't work kept for reference, so that can try to make it work later in future hopefully +export function setupResponseObjectTransferHandler() { + const transferHandler: Comlink.TransferHandler = { + canHandle: (obj): obj is Response => obj instanceof Response, + serialize: (response: Response) => [response.arrayBuffer() as any, []], + deserialize: (arrayBuffer: ArrayBuffer) => new Response(arrayBuffer), + }; + return Comlink.transferHandlers.set("RESPONSE", transferHandler); +} diff --git a/web/packages/shared/error/index.ts b/web/packages/shared/error/index.ts new file mode 100644 index 000000000..0463c9610 --- /dev/null +++ b/web/packages/shared/error/index.ts @@ -0,0 +1,173 @@ +import { HttpStatusCode } from "axios"; + +export interface ApiErrorResponse { + code: string; + message: string; +} + +export class ApiError extends Error { + httpStatusCode: number; + errCode: string; + + constructor(message: string, errCode: string, httpStatus: number) { + super(message); + this.name = "ApiError"; + this.errCode = errCode; + this.httpStatusCode = httpStatus; + } +} + +export function isApiErrorResponse(object: any): object is ApiErrorResponse { + return object && "code" in object && "message" in object; +} + +export const CustomError = { + THUMBNAIL_GENERATION_FAILED: "thumbnail generation failed", + VIDEO_PLAYBACK_FAILED: "video playback failed", + ETAG_MISSING: "no header/etag present in response body", + KEY_MISSING: "encrypted key missing from localStorage", + FAILED_TO_LOAD_WEB_WORKER: "failed to load web worker", + CHUNK_MORE_THAN_EXPECTED: "chunks more than expected", + CHUNK_LESS_THAN_EXPECTED: "chunks less than expected", + UNSUPPORTED_FILE_FORMAT: "unsupported file format", + FILE_TOO_LARGE: "file too large", + SUBSCRIPTION_EXPIRED: "subscription expired", + STORAGE_QUOTA_EXCEEDED: "storage quota exceeded", + SESSION_EXPIRED: "session expired", + INVALID_MIME_TYPE: (type: string) => `invalid mime type -${type}`, + SIGNUP_FAILED: "signup failed", + FAV_COLLECTION_MISSING: "favorite collection missing", + INVALID_COLLECTION_OPERATION: "invalid collection operation", + TO_MOVE_FILES_FROM_MULTIPLE_COLLECTIONS: + "to move files from multiple collections", + WAIT_TIME_EXCEEDED: "operation wait time exceeded", + REQUEST_CANCELLED: "request canceled", + REQUEST_FAILED: "request failed", + TOKEN_EXPIRED: "token expired", + TOKEN_MISSING: "token missing", + TOO_MANY_REQUESTS: "too many requests", + BAD_REQUEST: "bad request", + SUBSCRIPTION_NEEDED: "subscription not present", + NOT_FOUND: "not found ", + NO_METADATA: "no metadata", + TOO_LARGE_LIVE_PHOTO_ASSETS: "too large live photo assets", + NOT_A_DATE: "not a date", + NOT_A_LOCATION: "not a location", + FILE_ID_NOT_FOUND: "file with id not found", + WEAK_DEVICE: "password decryption failed on the device", + INCORRECT_PASSWORD: "incorrect password", + UPLOAD_CANCELLED: "upload cancelled", + REQUEST_TIMEOUT: "request taking too long", + HIDDEN_COLLECTION_SYNC_FILE_ATTEMPTED: + "hidden collection sync file attempted", + UNKNOWN_ERROR: "Something went wrong, please try again", + TYPE_DETECTION_FAILED: (fileFormat: string) => + `type detection failed ${fileFormat}`, + WINDOWS_NATIVE_IMAGE_PROCESSING_NOT_SUPPORTED: + "Windows native image processing is not supported", + NETWORK_ERROR: "Network Error", + NOT_FILE_OWNER: "not file owner", + UPDATE_EXPORTED_RECORD_FAILED: "update file exported record failed", + EXPORT_STOPPED: "export stopped", + NO_EXPORT_FOLDER_SELECTED: "no export folder selected", + EXPORT_FOLDER_DOES_NOT_EXIST: "export folder does not exist", + NO_INTERNET_CONNECTION: "no internet connection", + AUTH_KEY_NOT_FOUND: "auth key not found", + EXIF_DATA_NOT_FOUND: "exif data not found", + SELECT_FOLDER_ABORTED: "select folder aborted", + NON_MEDIA_FILE: "non media file", + NOT_AVAILABLE_ON_WEB: "not available on web", + UNSUPPORTED_RAW_FORMAT: "unsupported raw format", + NON_PREVIEWABLE_FILE: "non previewable file", + PROCESSING_FAILED: "processing failed", + EXPORT_RECORD_JSON_PARSING_FAILED: "export record json parsing failed", + TWO_FACTOR_ENABLED: "two factor enabled", + PASSKEYS_TWO_FACTOR_ENABLED: "passkeys two factor enabled", + CLIENT_ERROR: "client error", + ServerError: "server error", + FILE_NOT_FOUND: "file not found", + UNSUPPORTED_PLATFORM: "Unsupported platform", + MODEL_DOWNLOAD_PENDING: + "Model download pending, skipping clip search request", + DOWNLOAD_MANAGER_NOT_READY: "Download manager not initialized", + UPDATE_URL_FILE_ID_MISMATCH: "update url file id mismatch", + URL_ALREADY_SET: "url already set", + FILE_CONVERSION_FAILED: "file conversion failed", +}; + +export function handleUploadError(error: any): Error { + const parsedError = parseUploadErrorCodes(error); + + // breaking errors + switch (parsedError.message) { + case CustomError.SUBSCRIPTION_EXPIRED: + case CustomError.STORAGE_QUOTA_EXCEEDED: + case CustomError.SESSION_EXPIRED: + case CustomError.UPLOAD_CANCELLED: + throw parsedError; + } + return parsedError; +} + +export function errorWithContext(originalError: Error, context: string) { + const errorWithContext = new Error(context); + errorWithContext.stack = + errorWithContext.stack?.split("\n").slice(2, 4).join("\n") + + "\n" + + originalError.stack; + return errorWithContext; +} + +export function parseUploadErrorCodes(error: any) { + let parsedMessage = null; + if (error instanceof ApiError) { + switch (error.httpStatusCode) { + case HttpStatusCode.PaymentRequired: + parsedMessage = CustomError.SUBSCRIPTION_EXPIRED; + break; + case HttpStatusCode.UpgradeRequired: + parsedMessage = CustomError.STORAGE_QUOTA_EXCEEDED; + break; + case HttpStatusCode.Unauthorized: + parsedMessage = CustomError.SESSION_EXPIRED; + break; + case HttpStatusCode.PayloadTooLarge: + parsedMessage = CustomError.FILE_TOO_LARGE; + break; + default: + parsedMessage = `${CustomError.UNKNOWN_ERROR} statusCode:${error.httpStatusCode}`; + } + } else { + parsedMessage = error.message; + } + return new Error(parsedMessage); +} + +export const parseSharingErrorCodes = (error: any) => { + let parsedMessage = null; + if (error instanceof ApiError) { + switch (error.httpStatusCode) { + case HttpStatusCode.BadRequest: + parsedMessage = CustomError.BAD_REQUEST; + break; + case HttpStatusCode.PaymentRequired: + parsedMessage = CustomError.SUBSCRIPTION_NEEDED; + break; + case HttpStatusCode.NotFound: + parsedMessage = CustomError.NOT_FOUND; + break; + case HttpStatusCode.Unauthorized: + case HttpStatusCode.Gone: + parsedMessage = CustomError.TOKEN_EXPIRED; + break; + case HttpStatusCode.TooManyRequests: + parsedMessage = CustomError.TOO_MANY_REQUESTS; + break; + default: + parsedMessage = `${CustomError.UNKNOWN_ERROR} statusCode:${error.httpStatusCode}`; + } + } else { + parsedMessage = error.message; + } + return new Error(parsedMessage); +}; diff --git a/web/packages/shared/events/index.ts b/web/packages/shared/events/index.ts new file mode 100644 index 000000000..32306fc64 --- /dev/null +++ b/web/packages/shared/events/index.ts @@ -0,0 +1,12 @@ +import { EventEmitter } from "eventemitter3"; + +// When registering event handlers, +// handle errors to avoid unhandled rejection or propagation to emit call + +export enum Events { + LOGOUT = "logout", + FILE_UPLOADED = "fileUploaded", + LOCAL_FILES_UPDATED = "localFilesUpdated", +} + +export const eventBus = new EventEmitter(); diff --git a/web/packages/shared/hooks/useCastReceiver.tsx b/web/packages/shared/hooks/useCastReceiver.tsx new file mode 100644 index 000000000..176b96882 --- /dev/null +++ b/web/packages/shared/hooks/useCastReceiver.tsx @@ -0,0 +1,44 @@ +declare const cast: any; + +import { useEffect, useState } from "react"; + +type Receiver = { + cast: typeof cast; +}; + +const load = (() => { + let promise: Promise | null = null; + + return () => { + if (promise === null) { + promise = new Promise((resolve) => { + const script = document.createElement("script"); + script.src = + "https://www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"; + + script.addEventListener("load", () => { + resolve({ + cast, + }); + }); + + document.body.appendChild(script); + }); + } + return promise; + }; +})(); + +export const useCastReceiver = () => { + const [receiver, setReceiver] = useState({ + cast: null, + }); + + useEffect(() => { + load().then((receiver) => { + setReceiver(receiver); + }); + }); + + return receiver; +}; diff --git a/web/packages/shared/hooks/useCastSender.tsx b/web/packages/shared/hooks/useCastSender.tsx new file mode 100644 index 000000000..0f3c6a316 --- /dev/null +++ b/web/packages/shared/hooks/useCastSender.tsx @@ -0,0 +1,62 @@ +declare const chrome: any; +declare const cast: any; + +declare global { + interface Window { + __onGCastApiAvailable: (isAvailable: boolean) => void; + } +} + +import { useEffect, useState } from "react"; + +type Sender = { + chrome: typeof chrome; + cast: typeof cast; +}; + +export const loadSender = (() => { + let promise: Promise | null = null; + + return () => { + if (promise === null) { + promise = new Promise((resolve) => { + const script = document.createElement("script"); + script.src = + "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"; + window.__onGCastApiAvailable = (isAvailable) => { + if (isAvailable) { + cast.framework.CastContext.getInstance().setOptions({ + receiverApplicationId: "F5BCEC64", + autoJoinPolicy: + chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED, + }); + + resolve({ + chrome, + cast, + }); + } + }; + document.body.appendChild(script); + }); + } + return promise; + }; +})(); + +export const useCastSender = () => { + const [sender, setSender] = useState( + { + chrome: null, + cast: null, + }, + ); + + useEffect(() => { + loadSender().then((sender) => { + setSender(sender); + }); + }, []); + + return sender; +}; diff --git a/web/packages/shared/hooks/useComponentScroll.tsx b/web/packages/shared/hooks/useComponentScroll.tsx new file mode 100644 index 000000000..9cdf26455 --- /dev/null +++ b/web/packages/shared/hooks/useComponentScroll.tsx @@ -0,0 +1,66 @@ +import { useEffect, useRef, useState } from "react"; + +export enum SCROLL_DIRECTION { + LEFT = -1, + RIGHT = +1, +} + +export default function useComponentScroll({ + dependencies, +}: { + dependencies: any[]; +}) { + const componentRef = useRef(null); + + const [scrollObj, setScrollObj] = useState<{ + scrollLeft?: number; + scrollWidth?: number; + clientWidth?: number; + }>({}); + + const updateScrollObj = () => { + if (!componentRef.current) { + return; + } + const { scrollLeft, scrollWidth, clientWidth } = componentRef.current; + setScrollObj({ scrollLeft, scrollWidth, clientWidth }); + }; + + useEffect(() => { + if (!componentRef.current) { + return; + } + // Add event listener + componentRef.current?.addEventListener("scroll", updateScrollObj); + + // Call handler right away so state gets updated with initial window size + updateScrollObj(); + // Remove event listener on cleanup + return () => + componentRef.current?.removeEventListener( + "resize", + updateScrollObj, + ); + }, [componentRef.current]); + + useEffect(() => { + updateScrollObj(); + }, [...dependencies]); + + const scrollComponent = (direction: SCROLL_DIRECTION) => () => { + componentRef.current.scrollBy(250 * direction, 0); + }; + + const hasScrollBar = scrollObj.scrollWidth > scrollObj.clientWidth; + const onFarLeft = scrollObj.scrollLeft === 0; + const onFarRight = + scrollObj.scrollLeft + scrollObj.clientWidth === scrollObj.scrollWidth; + + return { + hasScrollBar, + onFarLeft, + onFarRight, + scrollComponent, + componentRef, + }; +} diff --git a/web/packages/shared/hooks/useEffectSingleThreaded.tsx b/web/packages/shared/hooks/useEffectSingleThreaded.tsx new file mode 100644 index 000000000..d6db9c1e2 --- /dev/null +++ b/web/packages/shared/hooks/useEffectSingleThreaded.tsx @@ -0,0 +1,33 @@ +import { useEffect, useRef } from "react"; +import { isPromise } from "../utils"; + +// useEffectSingleThreaded is a useEffect that will only run one at a time, and will +// caches the latest deps of requests that come in while it is running, and will +// run that after the current run is complete. +export default function useEffectSingleThreaded( + fn: (deps) => void | Promise, + deps: any[], +): void { + const updateInProgress = useRef(false); + const nextRequestDepsRef = useRef(null); + useEffect(() => { + const main = async (deps) => { + if (updateInProgress.current) { + nextRequestDepsRef.current = deps; + return; + } + updateInProgress.current = true; + const result = fn(deps); + if (isPromise(result)) { + await result; + } + updateInProgress.current = false; + if (nextRequestDepsRef.current) { + const deps = nextRequestDepsRef.current; + nextRequestDepsRef.current = null; + setTimeout(() => main(deps), 0); + } + }; + main(deps); + }, deps); +} diff --git a/web/packages/shared/hooks/useFileInput.tsx b/web/packages/shared/hooks/useFileInput.tsx new file mode 100644 index 000000000..b357d918e --- /dev/null +++ b/web/packages/shared/hooks/useFileInput.tsx @@ -0,0 +1,69 @@ +import { useCallback, useRef, useState } from "react"; + +export interface FileWithPath extends File { + readonly path?: string; +} + +export default function useFileInput({ directory }: { directory?: boolean }) { + const [selectedFiles, setSelectedFiles] = useState([]); + const inputRef = useRef(); + + const openSelectorDialog = useCallback(() => { + if (inputRef.current) { + inputRef.current.value = null; + inputRef.current.click(); + } + }, []); + + const handleChange: React.ChangeEventHandler = async ( + event, + ) => { + if (!!event.target && !!event.target.files) { + const files = [...event.target.files].map((file) => + toFileWithPath(file), + ); + setSelectedFiles(files); + } + }; + + const getInputProps = useCallback( + () => ({ + type: "file", + multiple: true, + style: { display: "none" }, + ...(directory ? { directory: "", webkitdirectory: "" } : {}), + ref: inputRef, + onChange: handleChange, + }), + [], + ); + + return { + getInputProps, + open: openSelectorDialog, + selectedFiles: selectedFiles, + }; +} + +// https://github.com/react-dropzone/file-selector/blob/master/src/file.ts#L88 +export function toFileWithPath(file: File, path?: string): FileWithPath { + if (typeof (file as any).path !== "string") { + // on electron, path is already set to the absolute path + const { webkitRelativePath } = file; + Object.defineProperty(file, "path", { + value: + typeof path === "string" + ? path + : typeof webkitRelativePath === "string" && // If is set, + // the File will have a {webkitRelativePath} property + // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory + webkitRelativePath.length > 0 + ? webkitRelativePath + : file.name, + writable: false, + configurable: false, + enumerable: true, + }); + } + return file; +} diff --git a/web/packages/shared/hooks/useLocalState.tsx b/web/packages/shared/hooks/useLocalState.tsx new file mode 100644 index 000000000..1424fec7f --- /dev/null +++ b/web/packages/shared/hooks/useLocalState.tsx @@ -0,0 +1,24 @@ +import { LS_KEYS, getData, setData } from "@ente/shared/storage/localStorage"; +import { Dispatch, SetStateAction, useEffect, useState } from "react"; + +export function useLocalState( + key: LS_KEYS, + initialValue?: T, +): [T, Dispatch>] { + const [value, setValue] = useState(initialValue); + + useEffect(() => { + const { value } = getData(key) ?? {}; + if (typeof value !== "undefined") { + setValue(value); + } + }, []); + + useEffect(() => { + if (typeof value !== "undefined") { + setData(key, { value }); + } + }, [value]); + + return [value, setValue]; +} diff --git a/web/packages/shared/hooks/useLongPress.ts b/web/packages/shared/hooks/useLongPress.ts new file mode 100644 index 000000000..a42b72f92 --- /dev/null +++ b/web/packages/shared/hooks/useLongPress.ts @@ -0,0 +1,27 @@ +// https://stackoverflow.com/a/54749871/2760968 +import { useEffect, useState } from "react"; + +export default function useLongPress(callback: () => void, ms = 300) { + const [startLongPress, setStartLongPress] = useState(false); + + useEffect(() => { + let timerId: NodeJS.Timeout; + if (startLongPress) { + timerId = setTimeout(callback, ms); + } else { + clearTimeout(timerId); + } + + return () => { + clearTimeout(timerId); + }; + }, [callback, ms, startLongPress]); + + return { + onMouseDown: () => setStartLongPress(true), + onMouseUp: () => setStartLongPress(false), + onMouseLeave: () => setStartLongPress(false), + onTouchStart: () => setStartLongPress(true), + onTouchEnd: () => setStartLongPress(false), + }; +} diff --git a/web/packages/shared/hooks/useMemoSingleThreaded.tsx b/web/packages/shared/hooks/useMemoSingleThreaded.tsx new file mode 100644 index 000000000..ada7d5481 --- /dev/null +++ b/web/packages/shared/hooks/useMemoSingleThreaded.tsx @@ -0,0 +1,38 @@ +import { useEffect, useRef, useState } from "react"; + +export default function useMemoSingleThreaded( + fn: () => T | Promise, + deps: any[], +): T { + const [result, setResult] = useState(null); + const updateInProgress = useRef(false); + const updateRequired = useRef(false); + useEffect(() => { + const main = async () => { + if (updateInProgress.current) { + updateRequired.current = true; + return; + } + updateInProgress.current = true; + const result = fn(); + if (isPromise(result)) { + const resultValue = await result; + setResult(resultValue); + } else { + setResult(result); + } + updateInProgress.current = false; + if (updateRequired.current) { + updateRequired.current = false; + setTimeout(main, 0); + } + }; + main(); + }, deps); + + return result; +} + +function isPromise(obj: T | Promise): obj is Promise { + return obj && typeof (obj as any).then === "function"; +} diff --git a/web/packages/shared/hooks/useWindowSize.tsx b/web/packages/shared/hooks/useWindowSize.tsx new file mode 100644 index 000000000..c86a3e1f1 --- /dev/null +++ b/web/packages/shared/hooks/useWindowSize.tsx @@ -0,0 +1,37 @@ +// https://usehooks.com/useWindowSize/ +import { useEffect, useState } from "react"; + +// Hook +export default function useWindowSize() { + // Initialize state with undefined width/height so server and client renders match + // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/ + const [windowSize, setWindowSize] = useState<{ + width: number; + height: number; + }>({ + width: undefined, + height: undefined, + }); + + useEffect(() => { + // Handler to call on window resize + function handleResize() { + // Set window width/height to state + setWindowSize({ + width: window.innerWidth, + height: window.innerHeight, + }); + } + + // Add event listener + window.addEventListener("resize", handleResize); + + // Call handler right away so state gets updated with initial window size + handleResize(); + + // Remove event listener on cleanup + return () => window.removeEventListener("resize", handleResize); + }, []); // Empty array ensures that effect is only run on mount + + return windowSize; +} diff --git a/web/packages/shared/logging/index.ts b/web/packages/shared/logging/index.ts new file mode 100644 index 000000000..c7c793dbf --- /dev/null +++ b/web/packages/shared/logging/index.ts @@ -0,0 +1,39 @@ +import { isDevBuild } from "@/utils/env"; +import { logError } from "@ente/shared/sentry"; +import isElectron from "is-electron"; +import { WorkerSafeElectronService } from "../electron/service"; +import { formatLog, logWeb } from "./web"; + +export const MAX_LOG_SIZE = 5 * 1024 * 1024; // 5MB +export const MAX_LOG_LINES = 1000; + +export function addLogLine( + log: string | number | boolean, + ...optionalParams: (string | number | boolean)[] +) { + try { + const completeLog = [log, ...optionalParams].join(" "); + if (isDevBuild) { + console.log(completeLog); + } + if (isElectron()) { + WorkerSafeElectronService.logToDisk(completeLog); + } else { + logWeb(completeLog); + } + } catch (e) { + logError(e, "failed to addLogLine", undefined, true); + // ignore + } +} + +export const addLocalLog = (getLog: () => string) => { + if (isDevBuild) { + console.log( + formatLog({ + logLine: getLog(), + timestamp: Date.now(), + }), + ); + } +}; diff --git a/web/packages/shared/logging/web.ts b/web/packages/shared/logging/web.ts new file mode 100644 index 000000000..e0c36dc89 --- /dev/null +++ b/web/packages/shared/logging/web.ts @@ -0,0 +1,106 @@ +import { isDevBuild } from "@/utils/env"; +import { logError } from "@ente/shared/sentry"; +import { + getData, + LS_KEYS, + removeData, + setData, +} from "@ente/shared/storage/localStorage"; +import { addLogLine } from "."; +import { getSentryUserID } from "../sentry/utils"; +import { formatDateTimeShort } from "../time/format"; +import { ElectronFile } from "../upload/types"; +import type { User } from "../user/types"; +import { convertBytesToHumanReadable } from "../utils/size"; + +export const MAX_LOG_SIZE = 5 * 1024 * 1024; // 5MB +export const MAX_LOG_LINES = 1000; + +export interface Log { + timestamp: number; + logLine: string; +} + +export function logWeb(logLine: string) { + try { + const log: Log = { logLine, timestamp: Date.now() }; + const logs = getLogs(); + if (logs.length > MAX_LOG_LINES) { + logs.slice(logs.length - MAX_LOG_LINES); + } + logs.push(log); + setLogs(logs); + } catch (e) { + if (e.name === "QuotaExceededError") { + deleteLogs(); + logWeb("logs cleared"); + } + } +} + +export function getDebugLogs() { + return combineLogLines(getLogs()); +} + +export function getFileNameSize(file: File | ElectronFile) { + return `${file.name}_${convertBytesToHumanReadable(file.size)}`; +} + +export const clearLogsIfLocalStorageLimitExceeded = () => { + try { + const logs = getDebugLogs(); + const logSize = getStringSize(logs); + if (logSize > MAX_LOG_SIZE) { + deleteLogs(); + logWeb("Logs cleared due to size limit exceeded"); + } else { + try { + logWeb(`app started`); + } catch (e) { + deleteLogs(); + } + } + logWeb(`logs size: ${convertBytesToHumanReadable(logSize)}`); + } catch (e) { + logError( + e, + "failed to clearLogsIfLocalStorageLimitExceeded", + undefined, + true, + ); + } +}; + +export const logStartupMessage = async (appId: string) => { + // TODO (MR): Remove the need to lowercase it, change the enum itself. + const appIdL = appId.toLowerCase(); + const userID = (getData(LS_KEYS.USER) as User)?.id; + const sentryID = await getSentryUserID(); + const buildId = isDevBuild ? "dev" : `git ${process.env.GIT_SHA}`; + + addLogLine(`ente-${appIdL}-web ${buildId} uid ${userID} sid ${sentryID}`); +}; + +function getLogs(): Log[] { + return getData(LS_KEYS.LOGS)?.logs ?? []; +} + +function setLogs(logs: Log[]) { + setData(LS_KEYS.LOGS, { logs }); +} + +function deleteLogs() { + removeData(LS_KEYS.LOGS); +} + +function getStringSize(str: string) { + return new Blob([str]).size; +} + +export function formatLog(log: Log) { + return `[${formatDateTimeShort(log.timestamp)}] ${log.logLine}`; +} + +function combineLogLines(logs: Log[]) { + return logs.map(formatLog).join("\n"); +} diff --git a/web/packages/shared/network/HTTPService.ts b/web/packages/shared/network/HTTPService.ts new file mode 100644 index 000000000..ce60537ee --- /dev/null +++ b/web/packages/shared/network/HTTPService.ts @@ -0,0 +1,264 @@ +import { addLogLine } from "@ente/shared/logging"; +import { logError } from "@ente/shared/sentry"; +import axios, { AxiosRequestConfig, AxiosResponse } from "axios"; + +import { ApiError, CustomError, isApiErrorResponse } from "../error"; + +interface IHTTPHeaders { + [headerKey: string]: any; +} + +interface IQueryPrams { + [paramName: string]: any; +} + +/** + * Service to manage all HTTP calls. + */ +class HTTPService { + constructor() { + axios.interceptors.response.use( + (response) => Promise.resolve(response), + (error) => { + const config = error.config as AxiosRequestConfig; + if (error.response) { + const response = error.response as AxiosResponse; + let apiError: ApiError; + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + if (isApiErrorResponse(response.data)) { + const responseData = response.data; + logError(error, "HTTP Service Error", { + url: config.url, + method: config.method, + xRequestId: response.headers["x-request-id"], + httpStatus: response.status, + errMessage: responseData.message, + errCode: responseData.code, + }); + apiError = new ApiError( + responseData.message, + responseData.code, + response.status, + ); + } else { + if (response.status >= 400 && response.status < 500) { + apiError = new ApiError( + CustomError.CLIENT_ERROR, + "", + response.status, + ); + } else { + apiError = new ApiError( + CustomError.ServerError, + "", + response.status, + ); + } + } + logError(apiError, "HTTP Service Error", { + url: config.url, + method: config.method, + cfRay: response.headers["cf-ray"], + xRequestId: response.headers["x-request-id"], + httpStatus: response.status, + }); + throw apiError; + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + // http.ClientRequest in node.js + addLogLine( + "request failed- no response", + `url: ${config.url}`, + `method: ${config.method}`, + ); + return Promise.reject(error); + } else { + // Something happened in setting up the request that triggered an Error + addLogLine( + "request failed- axios error", + `url: ${config.url}`, + `method: ${config.method}`, + ); + return Promise.reject(error); + } + }, + ); + } + + /** + * header object to be append to all api calls. + */ + private headers: IHTTPHeaders = { + "content-type": "application/json", + }; + + /** + * Sets the headers to the given object. + */ + public setHeaders(headers: IHTTPHeaders) { + this.headers = { + ...this.headers, + ...headers, + }; + } + + /** + * Adds a header to list of headers. + */ + public appendHeader(key: string, value: string) { + this.headers = { + ...this.headers, + [key]: value, + }; + } + + /** + * Removes the given header. + */ + public removeHeader(key: string) { + this.headers[key] = undefined; + } + + /** + * Returns axios interceptors. + */ + // eslint-disable-next-line class-methods-use-this + public getInterceptors() { + return axios.interceptors; + } + + /** + * Generic HTTP request. + * This is done so that developer can use any functionality + * provided by axios. Here, only the set headers are spread + * over what was sent in config. + */ + public async request(config: AxiosRequestConfig, customConfig?: any) { + // eslint-disable-next-line no-param-reassign + config.headers = { + ...this.headers, + ...config.headers, + }; + if (customConfig?.cancel) { + config.cancelToken = new axios.CancelToken( + (c) => (customConfig.cancel.exec = c), + ); + } + return await axios({ ...config, ...customConfig }); + } + + /** + * Get request. + */ + public get( + url: string, + params?: IQueryPrams, + headers?: IHTTPHeaders, + customConfig?: any, + ) { + return this.request( + { + headers, + method: "GET", + params, + url, + }, + customConfig, + ); + } + + /** + * Post request + */ + public post( + url: string, + data?: any, + params?: IQueryPrams, + headers?: IHTTPHeaders, + customConfig?: any, + ) { + return this.request( + { + data, + headers, + method: "POST", + params, + url, + }, + customConfig, + ); + } + + /** + * Patch request + */ + public patch( + url: string, + data?: any, + params?: IQueryPrams, + headers?: IHTTPHeaders, + customConfig?: any, + ) { + return this.request( + { + data, + headers, + method: "PATCH", + params, + url, + }, + customConfig, + ); + } + + /** + * Put request + */ + public put( + url: string, + data: any, + params?: IQueryPrams, + headers?: IHTTPHeaders, + customConfig?: any, + ) { + return this.request( + { + data, + headers, + method: "PUT", + params, + url, + }, + customConfig, + ); + } + + /** + * Delete request + */ + public delete( + url: string, + data: any, + params?: IQueryPrams, + headers?: IHTTPHeaders, + customConfig?: any, + ) { + return this.request( + { + data, + headers, + method: "DELETE", + params, + url, + }, + customConfig, + ); + } +} + +// Creates a Singleton Service. +// This will help me maintain common headers / functionality +// at a central place. +export default new HTTPService(); diff --git a/web/packages/shared/network/api.ts b/web/packages/shared/network/api.ts new file mode 100644 index 000000000..6417157dd --- /dev/null +++ b/web/packages/shared/network/api.ts @@ -0,0 +1,99 @@ +export const getEndpoint = () => { + const endpoint = process.env.NEXT_PUBLIC_ENTE_ENDPOINT; + if (endpoint) { + return endpoint; + } + return "https://api.ente.io"; +}; + +export const getFileURL = (id: number) => { + const endpoint = process.env.NEXT_PUBLIC_ENTE_ENDPOINT; + if (endpoint) { + return `${endpoint}/files/download/${id}`; + } + return `https://files.ente.io/?fileID=${id}`; +}; + +export const getPublicCollectionFileURL = (id: number) => { + const endpoint = process.env.NEXT_PUBLIC_ENTE_ENDPOINT; + if (endpoint) { + return `${endpoint}/public-collection/files/download/${id}`; + } + return `https://public-albums.ente.io/download/?fileID=${id}`; +}; + +export const getCastFileURL = (id: number) => { + const endpoint = process.env.NEXT_PUBLIC_ENTE_ENDPOINT; + if (endpoint) { + return `${endpoint}/cast/files/download/${id}`; + } + return `https://cast-albums.ente.io/download/?fileID=${id}`; +}; + +export const getCastThumbnailURL = (id: number) => { + const endpoint = process.env.NEXT_PUBLIC_ENTE_ENDPOINT; + if (endpoint) { + return `${endpoint}/cast/files/preview/${id}`; + } + return `https://cast-albums.ente.io/preview/?fileID=${id}`; +}; + +export const getThumbnailURL = (id: number) => { + const endpoint = process.env.NEXT_PUBLIC_ENTE_ENDPOINT; + if (endpoint) { + return `${endpoint}/files/preview/${id}`; + } + return `https://thumbnails.ente.io/?fileID=${id}`; +}; + +export const getPublicCollectionThumbnailURL = (id: number) => { + const endpoint = process.env.NEXT_PUBLIC_ENTE_ENDPOINT; + if (endpoint) { + return `${endpoint}/public-collection/files/preview/${id}`; + } + return `https://public-albums.ente.io/preview/?fileID=${id}`; +}; + +export const getUploadEndpoint = () => { + const endpoint = process.env.NEXT_PUBLIC_ENTE_ENDPOINT; + if (endpoint) { + return endpoint; + } + return `https://uploader.ente.io`; +}; + +export const getAccountsURL = () => { + const accountsURL = process.env.NEXT_PUBLIC_ENTE_ACCOUNTS_ENDPOINT; + if (accountsURL) { + return accountsURL; + } + return `https://accounts.ente.io`; +}; + +export const getPaymentsURL = () => { + const paymentsURL = process.env.NEXT_PUBLIC_ENTE_PAYMENT_ENDPOINT; + if (paymentsURL) { + return paymentsURL; + } + return `https://payments.ente.io`; +}; + +export const getAlbumsURL = () => { + const albumsURL = process.env.NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT; + if (albumsURL) { + return albumsURL; + } + return `https://albums.ente.io`; +}; + +/** + * Return the URL for the family dashboard which can be used to create or manage + * family plans. + */ +export const getFamilyPortalURL = () => { + const familyURL = process.env.NEXT_PUBLIC_ENTE_FAMILY_PORTAL_ENDPOINT; + if (familyURL) { + return familyURL; + } + return `https://family.ente.io`; +}; diff --git a/web/packages/shared/network/cast.ts b/web/packages/shared/network/cast.ts new file mode 100644 index 000000000..82ba61af2 --- /dev/null +++ b/web/packages/shared/network/cast.ts @@ -0,0 +1,89 @@ +import { ApiError } from "../error"; +import { logError } from "../sentry"; +import { getToken } from "../storage/localStorage/helpers"; +import HTTPService from "./HTTPService"; +import { getEndpoint } from "./api"; + +class CastGateway { + constructor() {} + + public async getCastData(code: string): Promise { + let resp; + try { + resp = await HTTPService.get( + `${getEndpoint()}/cast/cast-data/${code}`, + ); + } catch (e) { + logError(e, "failed to getCastData"); + throw e; + } + return resp.data.encCastData; + } + + public async revokeAllTokens() { + try { + const token = getToken(); + await HTTPService.delete( + getEndpoint() + "/cast/revoke-all-tokens/", + undefined, + undefined, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + logError(e, "removeAllTokens failed"); + // swallow error + } + } + + public async getPublicKey(code: string): Promise { + let resp; + try { + const token = getToken(); + resp = await HTTPService.get( + `${getEndpoint()}/cast/device-info/${code}`, + undefined, + { + "X-Auth-Token": token, + }, + ); + } catch (e) { + if (e instanceof ApiError && e.httpStatusCode === 404) { + return ""; + } + logError(e, "failed to getPublicKey"); + throw e; + } + return resp.data.publicKey; + } + + public async registerDevice(code: string, publicKey: string) { + await HTTPService.post(getEndpoint() + "/cast/device-info/", { + deviceCode: `${code}`, + publicKey: publicKey, + }); + } + + public async publishCastPayload( + code: string, + castPayload: string, + collectionID: number, + castToken: string, + ) { + const token = getToken(); + await HTTPService.post( + getEndpoint() + "/cast/cast-data/", + { + deviceCode: `${code}`, + encPayload: castPayload, + collectionID: collectionID, + castToken: castToken, + }, + undefined, + { "X-Auth-Token": token }, + ); + } +} + +export default new CastGateway(); diff --git a/web/packages/shared/next/pages/404.tsx b/web/packages/shared/next/pages/404.tsx new file mode 100644 index 000000000..7cc4a6ff0 --- /dev/null +++ b/web/packages/shared/next/pages/404.tsx @@ -0,0 +1,19 @@ +import { VerticallyCentered } from "@ente/shared/components/Container"; +import { t } from "i18next"; +import { useEffect, useState } from "react"; + +import { PageProps } from "@ente/shared/apps/types"; +import EnteSpinner from "@ente/shared/components/EnteSpinner"; + +export default function NotFound({ appContext }: PageProps) { + const [loading, setLoading] = useState(true); + useEffect(() => { + appContext.showNavBar(true); + setLoading(false); + }, []); + return ( + + {loading ? : t("NOT_FOUND")} + + ); +} diff --git a/web/packages/shared/next/pages/_document.tsx b/web/packages/shared/next/pages/_document.tsx new file mode 100644 index 000000000..1bae45068 --- /dev/null +++ b/web/packages/shared/next/pages/_document.tsx @@ -0,0 +1,103 @@ +import Document, { + DocumentContext, + DocumentProps, + Head, + Html, + Main, + NextScript, +} from "next/document"; +import React from "react"; + +import createEmotionServer from "@emotion/server/create-instance"; +import { EnteAppProps } from "@ente/shared/apps/types"; +import createEmotionCache from "@ente/shared/themes/createEmotionCache"; +import { AppType } from "next/app"; + +export interface EnteDocumentProps extends DocumentProps { + emotionStyleTags: JSX.Element[]; +} + +export default function EnteDocument({ emotionStyleTags }: EnteDocumentProps) { + return ( + + + + + + + {emotionStyleTags} + + +
+ + + + ); +} + +// `getInitialProps` belongs to `_document` (instead of `_app`), +// it's compatible with static-site generation (SSG). +EnteDocument.getInitialProps = async (ctx: DocumentContext) => { + // Resolution order + // + // On the server: + // 1. app.getInitialProps + // 2. page.getInitialProps + // 3. document.getInitialProps + // 4. app.render + // 5. page.render + // 6. document.render + // + // On the server with error: + // 1. document.getInitialProps + // 2. app.render + // 3. page.render + // 4. document.render + // + // On the client + // 1. app.getInitialProps + // 2. page.getInitialProps + // 3. app.render + // 4. page.render + + const originalRenderPage = ctx.renderPage; + + // You can consider sharing the same Emotion cache between all the SSR requests to speed up performance. + // However, be aware that it can have global side effects. + const cache = createEmotionCache(); + // eslint-disable-next-line @typescript-eslint/unbound-method + const { extractCriticalToChunks } = createEmotionServer(cache); + + ctx.renderPage = () => + originalRenderPage({ + enhanceApp: ( + App: React.ComponentType< + React.ComponentProps & EnteAppProps + >, + ) => + function EnhanceApp(props) { + return ; + }, + }); + + const initialProps = await Document.getInitialProps(ctx); + // This is important. It prevents Emotion to render invalid HTML. + // See https://github.com/mui/material-ui/issues/26561#issuecomment-855286153 + const emotionStyles = extractCriticalToChunks(initialProps.html); + const emotionStyleTags = emotionStyles.styles.map((style) => ( +